ХАНДЫФАР
Сложение с переносом
_________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 должен быть равен нулю.