Команды безусловного перехода
Делятся на команды прямого перехода и команды косвенного перехода, на команды короткие и длинные. Команды прямого перехода требуют, чтобы в команде перехода стояла метка, определенная в данном модуле.
Команды косвенного перехода в качестве операнда принимают адрес с адресом перехода.
В командах короткого перехода для задания смещения, соответствующего метке, используется один байт, в противном случае -четыре.
Общий вид команд безусловного перехода:
JMP [SHORT] операнд
Примеры использования команд перехода:
ideal
p586
model flat
extrn ExitProcess:proc
dataseg
pm1 dd m4, m5, m6
codeseg
begin:
; Короткий переход. Команда занимает 2 байта
jmp short m1
m1:
; Обычный переход. Команда занимает 5 байтов
jmp m2
m2:
m3:
; Использование косвенного перехода.
; Переход на метку m4, m5, m6 или m7 в зависимости от содержимого
; регистра EAX
mov eax, 1; goto m4
jmp [pm1+eax*4]
m4: mov ebx, 4
jmp short m7
m5: mov ebx, 5
jmp short m7
m6: mov ebx, 6
jmp short m7
m7:
call ExitProcess
end begin
Заметим, что в случае ссылки назад, когда метка находится выше, чем команда перехода, слово short
можно не писать, тип перехода определит компилятор.