На главную Назад
Добро пожаловать, уважаемый посетитель!

Команда сравнения 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 Сравнение с повышенной точностью


 

Mail.ru