谈到怎么判断cf进位借位,大家应该都熟悉,有朋友想问怎么判断cf进位借位是否正确,这到底是怎么一回事呢?让我们一起来看看吧。
无符号数运算的溢出,被称为:进位。有符号数运算的溢出,才叫做:溢出。
后者,OF对于有符号操作的负数结果不产生置位。如1-2=-1,结果并没有溢出,但是高位产生了借位,因此CF=如果为有符号数,127 +2 = 129 ,那么第8位=1,那么就产生了溢出,OF=这些还是有些区别的。
每当无符号数的运算出现了溢出,就会有 CF=1,翻译过来就是:进位。每当有符号数溢出了,则 OF=1,称为 OVER,翻译过来就是:溢出。按照 Intel 的论调,就是说:所谓的“溢出”,是特指“有符号数的运算”。
十六进制数的加减法的进/借位规则为:借一当十六,逢十六进一。
cmp al, 0bch 这条指令执行前,al = 0afh, 指令做减法 0afh - 0bch ,前面数小,后面的数大,需要借位。CF=1 表示这一次的减法运算是有向前的借位的。
只能分别计算高位字和低位字的相减,低位字直接相减就行,可是如果不够减,就会产生借位(CF=1),这个借位本来就应该是向高位字来借的,也就是说高位字被借走了一个1,于是高位字相减时就需要这个SBB指令了。
SUBB A,Rn的意思是(A)-(C)-(Rn)-(A)(C是进位位,为‘0’或‘1’,取决于上一条指令的结果),当(C)-(Rn)大于(A)时有借位,置C为‘1’,进位就是你理解的那样。
加法指令:ADD、ADC、INC、XADD,除了INC不影响CF标志位外,都影响条件标志位。减法指令:SUB、SBB、DEC、NEG、CMP、CMPXCHG、CMPXCHG8B,前六种除了DEC不影响CF标志外都影响标志位。
减法全部转为加法计算,用补码计算 进位取反。用8位机举例,1-2=1+256-2-256=1+254-256 254就是-2的补码,1+254=255没有进位,硬件进位器为0,然后进位器取反,相当于减去256,所以cf为1。
如果减法运算过程中发生了借位,则CF = 0;否则CF = 1。在本例中,减数B小于被减数A,因此会发生借位,所以CF = 0。因此,经过以上计算,标志位CF为0,SF为1,OF为0。
带符号数6BH(被减数)和0C7H(减数)进行减法运算后,标志位 CF,SF,OF 分别为多少?CF,SF,OF,都是 80x86 CPU 中标志位。在 CPU 中做计算, 并不区分“带符号、不带符号”。CPU 都是按照普通的二进制进行。
版权声明:本网站作品与素材版权均归作者所有,如内容侵权与违规请发邮件联系,我们将在三个工作日内予以改正,请发送到landui8899#163.com(#换成@)。
本文链接:https://hz6z.com/p/130539.html