Допустим, есть некий х86, не защищенный режим. Память разбита на сегменты, CS, DS и т.д. Нам нужно сделать программное прерывание INT. Для этого, мы должно записать адрес PC в стек и перейти. Вопрос - куда запишется адрес? В какой сегмент? Надеюсь понятно объяснил.
И вообще, как в х86 процессор понимает, в какой сегмент прыгать? Там же они явно не указываются, а в ВМ котрую мы пилим приходится указывать. Поясните пожалуйста.
Bizunow
Стэк в SS сегменте, а в таблица прерываний - это таблица пар сегмент:смещение.
Bizunow
> ВМ котрую мы пилим
Мы?
Нет, объяснили непонятно. Програмно прерывание вызывается через двухбайтовый опкод команды INT номер_прерывания. CS:IP указан в векторе прерывания - IDT. Таблица IDT в реальном режиме начинается с нулевых адресов и содержит данные вида: CS:IP; CS:IP; CS:IP;...;CS:IP. По сути по номеру в опкоде прерывании определяется номер в этом массиве. Кроме CS:IP меняется частично ещё как минимум регистр флагов.
laMer007
> Нет, объяснили непонятно
:(
laMer007
> Програмно прерывание вызывается через двухбайтовый опкод команды INT
> номер_прерывания. CS:IP указан в векторе прерывания - IDT. Таблица IDT в
> реальном режиме начинается с нулевых адресов и содержит данные вида: CS:IP;
> CS:IP; CS:IP;...;CS:IP. По сути по номеру в опкоде прерывании определяется
> номер в этом массиве. Кроме CS:IP меняется частично ещё как минимум регистр
> флагов.
Да, это я знаю. Я чуть-чуть про другое - вот дернул я INT. Нам же нужно сделать переход? Нужно. И в другой сегмент, в большинстве случаев. В момент вызова прерывания, куда будет записан адрес возврата? Понятно что в стек, но в какой сегмент? Как процессор понимает, в какой сегмент писать адрес возврата и тем более, потом брать?
Bizunow
> Понятно что в стек, но в какой сегмент?
Очевидно адрес возврата будет записан где-то около SS:SP и не только он.
Bizunow
> Понятно что в стек, но в какой сегмент? Как процессор понимает, в какой сегмент
> писать адрес возврата и тем более, потом брать?
Пипец, это азы. Стек это регистровая пара SS:SP. Если внутри прерывания код захочет перенастроить SS:SP на свой стек он может это сделать, но перед возвратом обязан вернуть как было.
Доктор, иногда возникает такая ситуация, что на моей руке как бы надет носок. И он мешает. Что принято делать в таких случаях?
TarasB
> Что принято делать в таких случаях?
Снять как бы надетый носок и возможно надеть что-нибудь не мешающее. Это наиболее правильный с точки зрения пациента способ. Затем когда вы получите его доверие - разобраться в причинах болезни и попытаться устранить их или уменьшить их влияние и эскалацию.
laMer007
Но я не уверен, правильно ли просто снимать носок. Я хочу услышать мнения разных специалистов, можно ли просто так снимать с руки носок.
=A=L=X=
> Пипец, это азы.
Скорость обучения у всех разная. Более того разная специализация. Я не думаю что стоит делать из этого трагедию. Ведь можно просто помочь, без попытки возвыситься в своих глазах. Или вам так не интересно помогать? (:
TarasB
> я не уверен, правильно ли просто снимать носок.
Это решит за вас доктор, предварительно если понадобиться проведёт консилиум. Доктор вам позволяет писать программы анализа и обработки результатов компьютерной томографии, вы позвольте ему делать свою работу.
laMer007
> Ведь можно просто помочь, без попытки возвыситься в своих глазах.
Просто ТС уже не в первый раз задаёт вопросы в стиле, который я пытаюсь пародировать.
laMer007
Я не понимаю просто как понимая все то что он выше выказывает что понимает, пописывая уже который год свою вм, ассемблер и т.п. как можно не знать про регистр SS.
TarasB
> в стиле, который я пытаюсь пародировать.
Я понимаю. Подыграл.
=A=L=X=
> пописывая уже который год свою вм, ассемблер
Ну у него видимо была своя личная вм со своей системой команд, поэтому знать чужую архитектуру он не обязан. Ну и давайте будем благосклонны к тем кто никогда не сдаётся, следуя за своей мечтой.
Интересно, а зачем это всё в 2014?
sb3d
> в 2014?
ну, это не везде надо. Но например на этом сайте процент пользователей 600-мгц селерона гораздо выше, чем в среднем по интернету.
Тема в архиве.