Программирование на Ассемблере
Этот набор условий кодируется
битами 0-4 регистра статуса. Рассмотрим для примера бит 2 регистра SR: этот
бит является флагом нулевого результата (устанавливается, если результат
предыдущей команды - 0). Команда CMP устанавливает флаг Z, если ее операнды
равны между собой (в действительности CMP производит вычитание первого
операнда из второго и выставляет флаги условий в соответствии с
результатом).
Таким образом, если в нашем примере D1 содержит число 2, то после команды
CMP флаг Z будет установлен, и можно выполнить соответствующее ветвление: ... CMP #2,D1 ;сравнение D1 с числом 2
BNE UNEQUAL ;ветвление, если не равно (флаг Z сброшен)
MOVE #0,D2 ;иначе выполнить D2=0
UNEQUAL: ... BNE (Branch if Not Equal) - это команда ветвления по неравенству (нулю).
Это означает, что если в результате выполнения предыдущей команды (CMP)
флаг Z оказывается сброшен (=0), то происходит передача управления
(ветвление) по адресу, указанному в операнде команды. Существует и в
некотором смысле обратная команда - BEQ (Branch if EQual - ветвление по
равенству), которая выполняет ветвление в случае Z=1. Приведем список кодов условий, по которому можно легко построить любую
команду ветвления формата Bcc (cc - код конкретного условия): cc Условие Биты
--------------------------------------------------------------------------
T всегда верно, аналог BRA
F всегда неверно, ветвления не происходит
HI выше C\' * Z\'
LS ниже или равно C + Z
CC,HS флаг C = 0 (выше или равно) C\'
CS,LO флаг C = 1 (ниже) C
NE не равно Z\'
EQ равно Z
VC флаг переполнения (V) = 0 V\'
VS флаг переполнения (V) = 1 V
PL флаг знака (N) = 0 (плюс) N\'
MI флаг знака (N) = 1 (минус) N
GE больше или равно N*V + N\'*V\'
LT меньше N*V\' + N\'*V
GT больше N*V*Z\' + N\'*V\'*Z\'
LE меньше или равно Z + N*V\' + N\'*V * = логическое И, + = логическое ИЛИ, \' = логическое НЕ Приведем несколько примеров на применение условных ветвлений: CMP #2,D1
BLS SMALLER_EQUAL Здесь по команде BLS выполняется ветвление, если содержимое D1 ниже или
равно двум, то есть D1 = 0, 1 или 2: команды BHI, BLS, BHS, BLO служат для
сравнения беззнаковых чисел (будем говорить, что число N1 ниже числа N2,
если N1 меньше N2 в беззнаковом представлении, то есть без учета
специального смысла старшего бита).
|