|
Команда сравнения CMP сравнивает два
числа, вычитая одно из
другого.Она не записывает результат, но флаги состояния
устанавливает в соответствии с
результатом.Эта команда изменяет
только флаги.В программе
команда сравнения используется так же,
как и команда вычитания; однако команды
сравнения с заемом не
существует.
Сравнение с повышенной точностью требует
чуть больше усилий,
чем сравнение байтов или слов. Фактически
в этих случаях много
проще использовать команду вычитания
вместо команды сравнения. На
Фиг. 4.11 показано сравнение пары
32=битовых чисел в памяти с
использованием регистра AX в качестве
области временного хранения.
Это сравнение определяет, какое из чисел
больше. Программа в
результате своего выполнения устанавливает
коды условия. Флаг
переноса определяет, какое из чисел
больше: если флаг равен 1,
число VALUE больше.
Вторая программа на Фиг. 4.11 проверяет
два 32=битовых числа на
равенство. Программа сохраняет младший
результат, а затем
комбинирует его со старшим, и таким
образом выясняет
эквивалентность результата нулю. Команда
OR описана в следующем
разделе, а здесь существенно то, что она
комбинирует два значения
так, что окончательное значение равно 0
тогда и только тогда, когда
оба исходных значения равны 0. Результат
этой подпрограммы
сравнения - значение флага нуля; если он
равен 1, числа равны.
Microsoft (R) Macro Assembler Version 5.001/1/80 04:00:59
Фиг. 4.11 Сравнение чисел заданных с повышенной точностьюPage
1-1
PAGE,132
TITLEФиг. 4.11 Сравнение чисел заданных с повышенной точностью
0000CODESEGMENT
ASSUMECS:CODE,DS:CODE
0000????????VALUE1DD?;
Область данных размером 32 разряда
0004????????VALUE2DD?
0008FIG4_11 PROCNEAR
;-----Сравниваются по неравенству два 32-разрядных числа
0008COMPARE_UNEQUAL:
0008A1 0000 RMOVAX, WORD PTR
VALUE1
000B2B 06 0004 R SUBAX, WORD PTR
VALUE2; Вычитание младшей части
000FA1 0002 RMOVAX, WORD PTR
VALUE1+2
00121B 06 0006 R SBBAX, WORD PTR
VALUE2+2; Вычитание старшей части
0016C3RET
; Возврат с установленными флагами
;-----Сравниваются по равенству два 32-разрядных числа
0017COMPARE_EQUAL:
0017A1 0000 RMOVAX, WORD PTR
VALUE1
001A2B 06 0004 R SUBAX, WORD PTR
VALUE2; Вычитание младшей части
001E8B D8MOVBX, AX; В BX младшая часть результата
0020A1 0002 RMOVAX, WORD PTR
VALUE1+2
00231B 06 0006 R SBBAX, WORD PTR
VALUE2+2; Вычитание старшей части
00270B C3ORAX, BX; Объединение результатов
0029C3RET
; Флаг Z показывает равенство
002AFIG4_11 ENDP
002ACODEENDS
END
Фиг. 4.11 Сравнение с повышенной
точностью
|