МЕХАНИЗМ ВЫПОЛНЕНИЯ


МАШИННЫЙ ФОРМАТ

МЕХАНИЗМ ВЫПОЛНЕНИЯ

CALL ИмяПРоц

Особенности компиляции переходов вперед по коду

МАШИННЫЙ ФОРМАТ

МЕХАНИЗМ ВЫПОЛНЕНИЯ

JMP метка

Команда безусловного перехода JMP

КОМАНДЫ БЕЗУСЛОВНОЙ ПЕРЕДАЧИ УПРАВЛЕНИЯ

q команда безусловного перехода JMP;

q вызовапроцедуры CALL и возврата
из процедуры RET;

q вызова программных прерываний INT
и возврата из программных прерываний
IRET.

 

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 номер_прерывания