КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Механизм выполнения
МАШИННЫЙ ФОРМАТ МЕХАНИЗМ ВЫПОЛНЕНИЯ CALL ИмяПРоц Особенности компиляции переходов вперед по коду МАШИННЫЙ ФОРМАТ МЕХАНИЗМ ВЫПОЛНЕНИЯ JMP метка Команда безусловного перехода JMP КОМАНДЫ БЕЗУСЛОВНОЙ ПЕРЕДАЧИ УПРАВЛЕНИЯ q команда безусловного перехода JMP; q вызовапроцедуры CALL и возврата q вызова программных прерываний INT
1. АдресПерехода = IP + дистанция; 2. IP = АдресПерехода; { Замена IP} Следующей будет команда со смещением АдресПерехода в сегменте кода.
; короткий переход; 2 байта EB <БАЙТ> … ; обычный переход; 3 байта E8 <СЛОВО> … ; межсегментный переход; 5 байт EA <ДВОЙНОЕ_СЛОВО>
... 0005 EB 05 90 jmp @21 0008 @3: 0008 B4 4C mov ah, 4ch 000A CD 21 int 21h 000C @21: 000C 0400*(00) db 1024 dup(0) 040C E9 FBF9 jmp @3 ... Вот переход вперед. Но метка @21 еще не встречалась. Я не знаю, будет ли команда длиной 2 или 3 байта. Занимаю 3 байта. Предполагаю следующую команду на точке А вот и метка @21. Сколько байт от нее до? Всего 4, это < 127, значит переход будет ближним, EB 04 Оставшийся лишний байт забиваем кодом 90h (команда NOP) и корректируем дистанцию: 04 + 1 = 05. ОКОНЧАТЕЛЬНО: EB 05 90, это две команды - JMP на 05 байт вперед и NOP.
КОМАНДА ВЫЗОВА ПРОЦЕДУРЫ CALL 1. Скопировать в стек IP 2. АдресПроцедуры = IP + дистанция; 3. IP = АдресПроцедуры; { Замена IP} Следующей будет выполняться первая команда вызываемой процедуры ; обычный вызов; 3 байта код <СЛОВО> … Знаковое слово – это ДИСТАНЦИЯ ПЕРЕХОДА.
; межсегментный вызов; 5 байт код <ДВОЙНОЕ_СЛОВО> Двойноеое слово – это CS:IP входа в процедуру.
КОМАНДА ВОЗВРАТА ИЗ ПРОЦЕДУРЫ RET Заменить текущее IP словом, взятым с «вершины» стека; Следующей будет выполняться команда вызывающей программы, ЗАПИСАННАЯ СРАЗУ ПОСЛЕ команды CALL. На ПСЕВДОКОДЕ: 1. IP:= (SS: SP)^; { Присвоить IP значение, которое находится по адресу SS: SP} 2. SP:= SP + 2; { «очистить» ячейку стека}
ОБЩАЯ СХЕМА ОБРАБОТКИ ПРЕРЫВАНИЯ Передача управления на обработчик делается по АБСОЛЮТНОМУ адресу!
Команда вызова программного прерывания INT INT номер_прерывания
Дата добавления: 2014-01-07; Просмотров: 339; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |