汇编语言进位与借位的问题.2-3是否会产生借位?从常理上看好像产生了借位,标志寄存器中CF应该置位,但在计算机中,减法都会转换成补码的加法,以8位2进制数为例,2的补码是00000010,-3的补码是11111101,两个相加,结果是11111111,不会产生进位.到底2-3有没有借位?CF的值是0还是1,
2019-05-23
汇编语言进位与借位的问题.
2-3是否会产生借位?从常理上看好像产生了借位,标志寄存器中CF应该置位,但在计算机中,减法都会转换成补码的加法,以8位2进制数为例,2的补码是00000010,-3的补码是11111101,两个相加,结果是11111111,不会产生进位.到底2-3有没有借位?CF的值是0还是1,
优质解答
你这里混淆了两个概念,无符号数和有符号数.
如果你希望得到2-3=-1,那么你应该认为2和-3都是有符号数,既然是有符号数,是否产生借位要看OF标志位,即溢出标志位;
如果你认为2和-3的补码对应的无符号数253都是无符号数,那么它们之和为255,没有产生进位.
所以,当你判断有符号数的时候,不应该看CF来判断是否有借位.
不管怎样,机器中的运算是00000010+11111101,结果为11111111,CF为0,OF为1.
你这里混淆了两个概念,无符号数和有符号数.
如果你希望得到2-3=-1,那么你应该认为2和-3都是有符号数,既然是有符号数,是否产生借位要看OF标志位,即溢出标志位;
如果你认为2和-3的补码对应的无符号数253都是无符号数,那么它们之和为255,没有产生进位.
所以,当你判断有符号数的时候,不应该看CF来判断是否有借位.
不管怎样,机器中的运算是00000010+11111101,结果为11111111,CF为0,OF为1.