举例来说,当我使用ADC
时:
AL = 01 and BL = 02, and CF = 1
当我执行以下操作时:
ADC AL,BL
AL
会是3
还是4
?(包括CF
加法或不包括?)
举例来说,当我使用ADC
时:
AL = 01 and BL = 02, and CF = 1
当我执行以下操作时:
ADC AL,BL
AL
会是3
还是4
?(包括CF
加法或不包括?)
关于8086
的ADC
指令有几件事情:
Syntax: adc dest, src
dest: memory or register
src: memory, register, or immediate
Action: dest = dest + src + CF
显然,操作指令表明进位标志 (CF
) 将被包括在加法中,因此结果将是 4
而不是 3
。
清除进位位 带进位相加0x4 + 0xD = 0x1,设置进位位 带进位相加0x3 + 0xC = 0x0,设置进位位 带进位相加0x2 + 0xB = 0xE,清除进位位 带进位相加0x1 + 0xA = 0xB,清除进位位
结果是0xBE01,进位位清除。
我们也可以使用单个位或3位加法器来实现,只要是二进制就很简单。
所有有用的处理器必须有一种方法来添加进位位,以便您可以扩展ALU。有时会有单独的加法和ADC,有些ADC是额外的步骤,或者最痛苦的是没有进位加法,并在其下使用立即加法进行分支。
这也是为什么移位或旋转通过进位位进行旋转的原因,因此您可以执行比寄存器/内存位置宽的位移。
与十进制相比,二进制乘法非常简单,但我不会详细说明。
是的,您可以并且应该编写程序来尝试此操作。而且仍然可以,我可能会故意引导您走向错误的道路。
AL
将会是4。 ADC
意味着“带进位加法”,因此进位被计算在内。由于这个加法没有进位,所以 CF
被设置为0。
1FF
在AX中,并且CF再次为0。 - Alex Martelli