如何为16位二进制加法

时间:2016-04-08 05:57:57

标签: assembly binary addition alu carryflag

我知道当执行8位二进制加法时,如果有从第3位到第4位的进位,则辅助标志设置为1;但是增加2个16位数呢?我在网上看不到任何明确的答案。

我正在研究intel 8086微处理器......

例如,当我添加这两个数字时,0x30a2和0xf1ac

<00> 0011 0000 1010 0010 + 1111 0001 1010 1100

CF=1
ZF=0
PF=1
SF=0
OF=1
AF=? 

我不确定在哪里查看

3 个答案:

答案 0 :(得分:4)

来自James W. Coffron的“编程8086/8088”:

  

AF 辅助进位标志。如果设置了此标志,则表示存在进位   低半字节到高半字节或从高半字节借用   到了低谷。高或低半字节是指a的低位字节   16位值。

在我的日子里,我们会写一小段代码来观察处理器的行为。您可以通过添加或减去两个16位数字来检查它,然后是pushfpop ax来检查状态标记。

修改

(获取标志的另一种方法是使用LAHF加载带有标志的AH的5位,AF加到第4位。)

所以AF表示从第3位到第4位的执行,无论操作数的大小如何。

请注意,没有依赖AF的分支指令。 DAA指令在内部使用它在ADD指令后立即进行小数调整,通常使用AL

答案 1 :(得分:2)

在8086上,当第3位到第4位有一个进位或从第4位到第3位借位时,adjust flag (bit 4)被设置为BCD operation support

8086上的

BCD operations仅为8位,BCD调整操作仅在AL寄存器上运行。

对于16位操作,我希望它的行为与8位操作相同。

进位标志(位0)基于操作是8位还是16位。如果它是16位,那么如果结果> gt,它将携带。 65535.如果它是8位,那么如果结果> gt,它将携带。 255。

答案 2 :(得分:0)

进位标志的“posititon”取决于运算符指令,它始终是最高位

e.g。 add ax,bx:由于操作数是16位,进位将代表第16位加法的进位 即使你添加了ax(值为3)和9(这些值将被视为0000000000000011和0000000000000101)