ХАНДЫФАР

Сложение с переносом


_________ADC AL, imm8 - Добавление с переносом imm8 в AL.

_________ADC AX, imm16 - Добавление с переносом imm16 в AX.

_________ADC reg/mem8, imm8 - Добавление с переносом imm8 в reg/mem8.

_________ADC reg/mem16, imm16 - Добавление с переносом imm16 в reg/mem16.

_________ADC reg/mem16, imm8 - Добавление с переносом знаково-расширенного imm8в reg/mem16.

_________ADC reg/mem8, reg8 - Добавление с переносом байтовый регистр в reg/mem8.

_________ADC reg/mem16, reg16 - Добавление с переносом reg16 в reg/mem16.

_________ADC reg8, reg/mem8 - Добавление с переносом reg/mem8 в байтовый регистр.

_________ADC reg16, reg/mem16 - Добавление с переносом reg/mem16 в reg16.


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


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


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


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


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


Предположим, что регистр ax содержит FFFF16, число 65,535 в десятичном формате, максимальное число для 16 битного регистра. Регистр bx содержит 310. После выполнения add ax, bx регистр ax будет содержать 210. Затем выполняется adc cx, 0 которая выполняет сложение и если в результате предыдущего сложения ax и bx был перенос, то прибавляет его к регистру cx. Результатом данной операции является пара регистров cx:ax которая в сумме содержит 32-х разрядное число 0001:000216, число 65,538 в десятичном формате. Перед выполнением adc cx, 0 регистр cx должен быть равен нулю.


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public ________; Начало сегмента кода
  5. ____assume cs:code
  6. ____main proc ______________; Начало процедуры main
  7. ________mov_____ax, 0FFFFh__; Копируем значение 1111 1111 1111 1111 в регистр ax
  8. ________mov_____bx, 3_______; Копируем значение 0000 0000 0000 0011 в регистр bx
  9. ________add_____ax, bx______; Выполняем сложение ax с bx
  10. ________adc_____cx, 0_______; Выполняем сложение с переносом регистра cx с 0
  11. ________mov_____ax, 4C00h___; Копируем значение функции завершения процесса в ah а значение в al
  12. ________int_____21h ________; Вызываем прерывание DOS
  13. ____main endp ______________; Конец процедуры main
  14. code ends __________________; Конец сегмента кода
  15. end main ___________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda