ХАНДЫФАР

Вычитание


_______________SUB AL, imm8 - Вычитание imm8 из AL.

_______________SUB AX, imm16 - Вычитание imm16 из AX.

_______________SUB reg/mem8, imm8 - Вычитание imm8 из reg/mem8.

_______________SUB reg/mem16, imm16 - Вычитание imm16 из reg/mem16.

_______________SUB reg/mem16, imm8 - Вычитание знаково-расширенного imm8 из reg/mem16.

_______________SUB reg/mem8, reg8 - Вычитание reg8 из reg/mem8.

_______________SUB reg/mem16, reg16 - Вычитание reg16 из reg/mem16.

_______________SUB reg8, reg/mem8 - Вычитание reg/mem8 из reg8.

_______________SUB reg16, reg/mem16 - Вычитание reg/mem16 из reg16.


Вычитает второй операнд (исходный операнд) из первого операнда (операнд назначения) и сохраняет результат в целевом операнде. Целевым операндом может быть регистр или ячейка памяти; исходным операндом может быть непосредственное значение, регистр или ячейка памяти. (Однако два операнда памяти не могут быть использованы в одной инструкции.) Когда в качестве операнда используется непосредственное значение, оно расширяется по знаку до длины формата целевого операнда.


Инструкция sub выполняет целочисленное вычитание. Она вычисляет результат как для целочисленных операндов со знаком, так и для операндов без знака и устанавливает флаги OF и CF, указывающие на переполнение в результате со знаком или без знака соответственно. Флаг SF указывает на знак знакового результата.


Эта инструкция может использоваться с префиксом lock, чтобы разрешить выполнение инструкции атомарно.


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


Предположим, что регистр al содержит 1810 (001216), регистр bl содержит 410 (000416). После выполнения sub al, bl регистр al будет содержать 1410 (000E16), а флаг AF будет установлен в 1.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public _______; Начало сегмента кода
  5. ____assume cs:code
  6. ____main proc _____________; Начало процедуры main
  7. ________mov_____al, 18_____; Копируем значение 18 в регистр al
  8. ________mov_____bl, 4______; Копируем значение 4 в регистр bl
  9. ________sub_____al, bl_____; Из регистра al вычитаем значение регистра bl
  10. ________mov_____ax, 4C00h__; Копируем значение функции завершения процесса в ah а значение в al
  11. ________int_____21h _______; Вызываем прерывание DOS
  12. ____main endp _____________; Конец процедуры main
  13. code ends _________________; Конец сегмента кода
  14. end main __________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda