leiqianghua 发表于 2013-7-7 21:04:12

关于进位有符号数运算问题

两个数相减,00000001-00000010就是1-2,这样的两个数在计算机里做运算,,计算机是不知道我会把这两个数是当成有符号还是无符号的吧??那进行运算的时候会去CF借位来运算吗??这真正运算的结果是否是11111111??11111111这个如果是用补码表示的话就是表示-1,,那跟有去CF借位来算结果不是一样的吗???

monk-half 发表于 2013-7-8 13:13:14

楼主的问题略显混乱。一下是我的一点见解:
1、寄存器在加减的时候应该不会像CF借位,因为从来都是运算结果影响标志寄存器,而不是标志寄存器参与运算。
2、楼主应当考虑的是SF(Sign Flag)符号标志位,正的话为0
   CF(Carry Flag)是进位标志位,用以查看两者相加的时候是否进位
3、CPU在运算的时候将减法当成加上负数,正负数换算成补码的形式。正数形式不变 负数反码加一(甲鱼老师有一个专门讲补码的,建议看一下。http://blog.fishc.com/442.html)。

Dardy 发表于 2013-7-8 17:00:26

楼上说的没错。
00000001-00000010寄存器中结果是补码 11111111,CF,SF被置为1
sub 影响CF,但CF不会参与运算。
sbb带借位的减法,CF参与运算。
页: [1]
查看完整版本: 关于进位有符号数运算问题