Иллюстрированный самоучитель по Tirbo Pascal



              

Система команд - часть 4


Команды условных переходов способны передавать управление на метку, расположенную в пределах ближайших плюс-минус 128 байт от самой команды. Если нужно передать управление на метку, расположенную дальше в том же сегменте, или на метку в другом сегменте, сразу за командой условной передачи располагают безусловную команду JMP или CAL, например:

стр ах,0 {Проверяем АХ} 

jne@NotZero {AX=0 ?} 

jmp IsZero {Да - переходим на дальнюю метку}

....... {Нет - продолжаем работу}

.......

В таблице термин «выше/ниже» используется применительно к сравнению беззнаковых операндов, а «больше/меньше» - знаковых.

Поскольку условные переходы реализуют ветвление программы на основе проверки флагов, обычно непосредственно перед ними располагаются команды, изменяющие эти флаги, чаще всего - команда сравнения СМР. Ниже показаны комбинации СМР - условный_переход для различных соотношений приемника и источника (первого и второго операнда) команды СМР:

Например:

сmр ах,5 {АХ>5 ?} 

ja @AboveS {Да, больше - переходим} 

стр bх,- 3 {ВХ<=-3 ?} 

jle @LessM3 {Да, меньше или равен}

Команды LOOP/LOOPE/LOOPNE служат для организации циклов. Все они используют содержимое регистра СХ как счетчик числа повторений. Команда LOOP уменьшает СХ на единицу и передает управление на метку начала цикла, если содержимое этого регистра отлично от нуля. Команды LOOPE/LOOPNE также уменьшают счетчик СХ, но передают управление в начало цикла при совместном условии установки (или сброса) флага ZF и неравенства нулю счетчика СХ.

Вот как, например, можно отыскать нулевой байт в массиве АОВ:

var

АОВ: array [1..1000] of Byte;

.......

asm

mov ex, It)00 {Инициируем счетчик СХ} 

lea bx,AOB {Помещаем адрес АОВ в ВХ} 

dec bx {Готовим цикл} 

{Здесь начало цикла проверки}

@@Test: inc bx {Адрес очередного байта}

cmp BYTE PTR [bx],0 {Проверяем байт} 

loopne ©Test {Замыкаем цикл} 

jnz ©NotZero {Если не найден нулевой байт}

....... {Нашли нулевой байт}

end;




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