Программирование на Ассемблере


         

Команды условного перехода


Общий вид команды:

[Метка]         Код     метка

Косвенный условный переход не используется. При трансляции команды вместо метки записывается разность между адресом метки и адресом очередной после команды условного перехода команды. Если эта разность помещается в один байт (-128.. 127) команда называется короткой (short). Для команд с ссылкой назад компилятор определяет тип команды сам. Для ссылок назад тип задается программистом, если не задан, принимается обычным. Если программист задал короткий переход, а он невозможен, компилятор выводит сообщение:  RELATIVE JUMP OUT OF RANGE 

Команды перехода делятся на переходы по флагам, переходы для знаковых и беззнаковых данных.

Таблица 6.1 Команды условного перехода

Переходы по флагам

Переходы для знаковых данных

Переходы для беззнаковых данных

Прямой

Обратный

Прямой

Обратный

Прямой

Обратный

Jc

jnc

Jl (<)

Jnl (>=)

Jb(<)

Jnb(>=)

Jp

jnp

Jle (<=)

Jnle(>)

Jbe(<=)

Jnbe(>)

Jz

jnz

Je (==)

Jne(!=)

Je(==)

Jne(!=)

Js

jns

Jg (>)

Jng (<=)

Ja (>)

Jna(<=)

Jo

jno

Jge(>=)

Jnge (<)

jae(>=)

jnae(<)

Примеры использования команд.

1.       Составить программу для вычисления максимального из двух заданных чисел длиной 32 бита (числа со знаком).

Ideal

P586

Model  flat

Extrn ExitProcess:proc

Dataseg

X          dd        6

Y          dd        7

Z          dd        ?

Codeseg

Begin: mov      eax, [X]

Cmp    eax, [Y]

Jge       short m1

Mov     eax, [Y]

M1:

Mov     [Z], eax

End      begin

2.       Составить программу для вычисления минимального для двух 64 беззнаковых чисел.

X          dd        0fefefefeh, 0ffffffffh

Y          dd        0ffffffffffh, 0ffffffffh

Z          dd        ?,?

;Пусть сначала заданы младшая, а затем старшая цифра.

Mov     eax, [X+4]

Cmp    eax, [Y+4]

Ja        mx

Jb        my



Содержание  Назад  Вперед