ХАНДЫФАР

Инструкция CMP


Сравнение


CMP AL, imm8 - Сравнить imm8 с AL.

CMP AX, imm16 - Сравнить imm16 с AX.

CMP reg/mem8, imm8 - Сравнить imm8 с reg/mem8.

CMP reg/mem16, imm16 - Сравнить imm16 с reg/mem16.

CMP reg/mem16, imm8 - Сравнить imm8 с reg/mem16.

CMP reg/mem8, reg8 - Сравнить reg8 с reg/mem8.

CMP reg/mem16, reg16 - Сравнить reg16 с reg/mem16.

CMP reg8, reg/mem8 - Сравнить reg/mem8 с reg8.

CMP reg16, reg/mem16 - Сравнить reg/mem16 с reg16.


Сравнивает первый исходный операнд со вторым исходным операндом и устанавливает флаги состояния в регистре FLAGS в соответствии с результатами. Сравнение выполняется путём вычитания второго операнда из первого операнда, а затем установки флагов состояния таким же образом, как и в инструкции sub. Когда в качестве операнда используется непосредственное значение, оно расширяется по знаку до длины первого операнда.


Коды условий, используемые инструкциями Jcc, основаны на результатах выполнения инструкции cmp.


Флаги CF, OF, SF, ZF, AF и PF устанавливаются в соответствии с результатом.


Рассмотрим случай, когда регистр al содержит (AA16), регистр bl содержит (AA16). После выполнения инструкции cmp al, bl регистр al по-прежнему будет содержать (AA16), регистр bl по-прежнему будет содержать (AA16), но флаги будут изменены. Рассмотрим второй случай, когда регистр ax содержит (DDFF16), регистр bx содержит (DBFF16). После выполнения инструкции cmp ax, bx регистр ax по-прежнему будет содержать (DDFF16), регистр bx по-прежнему будет содержать (DBFF16), но флаги будут изменены.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public
  5. ____assume cs:code
  6. ____main proc
  7. ________mov_____al, 0AAh
  8. ________mov_____bl, 0AAh
  9. ________cmp_____al, bl
  10. ________mov_____ax, 0DDFFh
  11. ________mov_____bx, 0DBFFh
  12. ________cmp_____ax, bx
  13. ________mov_____ax, 4C00h
  14. ________int_____21h
  15. ____main endp
  16. code ends
  17. end main

Инструкция CMP


Сравнение


__________________________CMP AL, imm8 - Сравнить imm8 с AL.

__________________________CMP AX, imm16 - Сравнить imm16 с AX.

__________________________CMP reg/mem8, imm8 - Сравнить imm8 с reg/mem8.

__________________________CMP reg/mem16, imm16 - Сравнить imm16 с reg/mem16.

__________________________CMP reg/mem16, imm8 - Сравнить imm8 с reg/mem16.

__________________________CMP reg/mem8, reg8 - Сравнить reg8 с reg/mem8.

__________________________CMP reg/mem16, reg16 - Сравнить reg16 с reg/mem16.

__________________________CMP reg8, reg/mem8 - Сравнить reg/mem8 с reg8.

__________________________CMP reg16, reg/mem16 - Сравнить reg/mem16 с reg16.


Сравнивает первый исходный операнд со вторым исходным операндом и устанавливает флаги состояния в регистре FLAGS в соответствии с результатами. Сравнение выполняется путём вычитания второго операнда из первого операнда, а затем установки флагов состояния таким же образом, как и в инструкции sub. Когда в качестве операнда используется непосредственное значение, оно расширяется по знаку до длины первого операнда.


Коды условий, используемые инструкциями Jcc, основаны на результатах выполнения инструкции cmp.


Флаги CF, OF, SF, ZF, AF и PF устанавливаются в соответствии с результатом.


Рассмотрим случай, когда регистр al содержит (AA16), регистр bl содержит (AA16). После выполнения инструкции cmp al, bl регистр al по-прежнему будет содержать (AA16), регистр bl по-прежнему будет содержать (AA16), но флаги будут изменены. Рассмотрим второй случай, когда регистр ax содержит (DDFF16), регистр bx содержит (DBFF16). После выполнения инструкции cmp ax, bx регистр ax по-прежнему будет содержать (DDFF16), регистр bx по-прежнему будет содержать (DBFF16), но флаги будут изменены.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public ________; Начало сегмента кода
  5. ____assume cs:code
  6. ____main proc ______________; Начало процедуры main
  7. ________mov_____al, 0AAh____; Копируем значение 17010 в регистр al
  8. ________mov_____bl, 0AAh____; Копируем значение 17010 в регистр bl
  9. ________cmp_____al, bl______; Сравниваем al с bl
  10. ________mov_____ax, 0DDFFh__; Копируем значение 5683110 в регистр ax
  11. ________mov_____bx, 0DBFFh__; Копируем значение 5631910 в регистр bx
  12. ________cmp_____ax, bx______; Сравниваем ax с bx
  13. ________mov_____ax, 4C00h___; Копируем значение функции завершения процесса в ah а значение в al
  14. ________int_____21h ________; Вызываем прерывание DOS
  15. ____main endp ______________; Конец процедуры main
  16. code ends __________________; Конец сегмента кода
  17. end main ___________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda