ХАНДЫФАР

Целочисленное вычитание с заимствованием


______SBB AL, imm8 - Вычитание с заимствованием imm8 из AL.

______SBB AX, imm16 - Вычитание с заимствованием imm16 из AX.

______SBB reg/mem8, imm8 - Вычитание с заимствованием imm8 из reg/mem8.

______SBB reg/mem16, imm16 - Вычитание с заимствованием imm16 из reg/mem16.

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

______SBB reg/mem8, reg8 - Вычитание с заимствованием reg8 из reg/mem8.

______SBB reg/mem16, reg16 - Вычитание с заимствованием reg16 из reg/mem16.

______SBB reg8, reg/mem8 - Вычитание с заимствованием reg/mem8 из reg8.

______SBB reg16, reg/mem16 - Вычитание с заимствованием reg/mem16 из reg16.


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


Инструкция sbb не проводит различия между знаковыми и беззнаковыми операндами. Вместо этого процессор оценивает результат для обоих типов данных и устанавливает флаги OF и CF для указания заимствования в знаковом или беззнаковом результате соответственно. Флаг SF указывает на знак знакового результата.


Инструкция sbb обычно выполняется как часть многобайтового или многословного вычитания, в котором за инструкцией sub следует инструкция sbb.


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


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


В следующем примере мы выполним 32-битное вычитание. 65536 - 1 = 65535.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public _______; Начало сегмента кода
  5. ____assume cs:code
  6. ____main proc _____________; Начало процедуры main
  7. ________mov_____dx, 1______; Копируем значение 0000 0000 0000 0001 в регистр dx
  8. ________mov_____ax, 0______; Копируем значение 0000 0000 0000 0000 в регистр ax
  9. ________mov_____bx, 0______; Копируем значение 0000 0000 0000 0000 в регистр bx
  10. ________mov_____cx, 1______; Копируем значение 0000 0000 0000 0001 в регистр cx
  11. ________sub_____ax, cx_____; Из регистра ax вычитаем значение в cx
  12. ________sbb_____dx, bx_____; Из регистра dx вычитаем с заимствованием 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