Их различия определяются дальностью перехода и способом задания целевого адреса.
Можно выделить три варианта внутрисегментного использования команды jmp:
1) прямой короткий;
2) прямой;
3) косвенный.
Процедуры
В языке ассемблера есть несколько средств, решающих проблему дублирования участков программного кода. К ним относятся:
1) механизм процедур;
2) макроассемблер;
3) механизм прерываний.
Процедура, часто называемая также
В простейшем случае программа может состоять из одной процедуры. Другими словами, процедуру можно определить как правильным образом оформленную совокупность команд, которая, будучи однократно описана, при необходимости может быть вызвана в любом месте программы.
Для описания последовательности команд в виде процедуры в языке ассемблера используются две директивы: PROC и ENDP.
Синтаксис описания процедуры таков (рис. 36).
Из рисунка 36 видно, что в заголовке процедуры (директиве PROC) обязательным является только задание имени процедуры. Среди большого количества операндов директивы PROC следует особо выделить [расстояние]. Этот атрибут может принимать значения near или far и характеризует возможность обращения к процедуре из другого сегмента кода. По умолчанию атрибут [расстояние] принимает значение near.
Процедура может размещаться в любом месте программы, но так, чтобы на нее случайным образом не попало управление. Если процедуру просто вставить в общий поток команд, то микропроцессор будет воспринимать команды процедуры как часть этого потока и, соответственно, будет осуществлять выполнение команд процедуры.
Микропроцессор имеет 18 команд условного перехода. Эти команды позволяют проверить:
1) отношение между операндами со знаком («больше – меньше»);
2) отношение между операндами без знака («выше – ниже»);
3) состояния арифметических флагов ZF, SF, CF, OF, PF (но не AF).
Команды условного перехода имеют одинаковый синтаксис:
jcc метка_перехода
Как видно, мнемокод всех команд начинается с «j» – от слова
Что касается операнда
Для того чтобы принять решение о том, куда будет передано управление командой условного перехода, предварительно должно быть сформировано условие, на основании которого и будет приниматься решение о передаче управления.
Источниками такого условия могут быть:
1) любая команда, изменяющая состояние арифметических флагов;
2) команда сравнения стр, сравнивающая значения двух операндов;
3) состояние регистра есх/сх.
Команда сравнения cmp
Команда сравнения стр имеет интересный принцип работы. Он абсолютно такой же, как и у команды вычитания – sub операнде, операнд_2.
Команда стр так же, как и команда sub, выполняет вычитание операндов и устанавливает флаги. Единственное, чего она не делает – это запись результата вычитания на место первого операнда.
Синтаксис команды стр – стр операнд_1, операнд_2 (compare) – сравнивает два операнда и по результатам сравнения устанавливает флаги.
Флаги, устанавливаемые командой стр, можно анализировать специальными командами условного перехода. Прежде чем мы их рассмотрим, уделим немного внимания мнемонике этих команд условного перехода (табл. 16). Понимание обозначений при формировании названия команд условного перехода (элемент в названии команды jcc, обозначенный нами ее) облегчит их запоминание и дальнейшее практическое использование.