Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 携带旗帜问题!_Assembly_Assemblyinfo - Fatal编程技术网

Assembly 携带旗帜问题!

Assembly 携带旗帜问题!,assembly,assemblyinfo,Assembly,Assemblyinfo,假设AX=FFFE和BX=1234 现在如果我们写cmpax,bx (bx将从ax中减去,相应的鞭毛将更新) 现在,ax和bx中数字的二进制表示形式为 AX = 1111 1111 1111 1110 BX= 0001 0010 0011 0100 因为bx将从ax中减去,所以我们必须对bx求反(结果=ax+(-bx)) 所以被否定的bx(bx的2的补码)由给出。 BX= 1110 1101 1100 1

假设AX=FFFE和BX=1234
现在如果我们写
cmpax,bx

(bx将从ax中减去,相应的鞭毛将更新) 现在,ax和bx中数字的二进制表示形式为

    AX =    1111    1111    1111    1110
   BX=     0001    0010    0011    0100

因为bx将从ax中减去,所以我们必须对bx求反(结果=ax+(-bx)) 所以被否定的bx(bx的2的补码)由给出。

BX=    1110    1101    1100    1100
现在我们将ax和bx相加(因为减法是通过计算机中的加法实现的)


现在您可以看到结果是17位,现在第17位应该进入进位flage,但是当我检查它时,进位标志是0,这是CF=0为什么?在执行减法时,将进位标志视为借用位。它被初始化为1,因此操作是
a−B−C
,即
a+not(b)+C
而不是您所描述的
a+not(b)+1
。换言之,进位在减法中是反向的,因此它可以用来进行多精度减法。

在这里找到一个链接:

如我所料。只有在需要“借用”时才设置进位标志。在执行减法运算时,在执行“减法运算”之前设置进位标志,新的进位标志会告诉您是否必须借用。您的示例省略了在第17位中为预设进位标志添加1,这将导致结果中没有进位

    AX=   1111    1111    1111    1110
   BX=   1110    1101    1100    1100
    ------------------------------------
      1  1110    1101    1100    1010