曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7768|回复: 0
打印 上一主题 下一主题

[8086] 标志位--CF,OF,SF

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-4-1 01:43:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、标志位

一些运算、比较类指令会影响到相应的标志位,如CF、OF、SF。
如上图,我自己定义加法运算为顺时针,减法运算为逆时针。
加减法运算分为两种,一种是有符号数运算;另一种是无符号数运算。
无符号数运算会影响进位或借位标志 CF。
而标志位 OF 和 SF 则会在带符号运算中受到影响。
其实,系统在进行一个运算指令时,是同时在进行两种运算的,这两种运算的结果通过相关的标志位反应出来。
带符号位运算实质
         符号数的范围是(-128 ~ 0 < 80H ~ 0> )(0 ~ 127 < 0 ~ 7FH> )。
exp1
 mov ah, 22h
 mov bh, 0a0h
 sub ah, bh
按无符号数运算来看 22 < a0h ,所以要产生借位,此时 CF = 1,结果为 82H;
按有符号运算来看,结果仍然是82H,82H为负数。一个正数减去一个负数,实际就是加法运算,按上图,应该顺时针旋转。但是82H越过正数的最大边界7FH(127),所以产生了溢出,故OF = 1。因为 SF 只和运算结果想联系,82H为负数,结果 SF = 1。
假如仅从 SF 和 OF 来看,SF = 1,则说明运算结果为负数。但此时 OF 也为1,表明发生了溢出。溢出的说法是,本来应该是正数的,一旦发生了溢出,就会变成负数;反之,本来要是负数的结果,发生了溢出,结果就变成了正数。

exp2
mov ah,0a0h
mov bh,0cbh
cmp ah,bh
分析:
cmp 的本质是进行减法运算。
按照无符号运算,a0h 小于 cbh ,所以要产生借位,CF = 1。运算在ah中的结果为:D5。
 -53  的补码为 0CBH 。-96 的补码为 a0h。a0h - 0cbh 就相当于 -96 - (-53)= -96 + 53= -43,而 -43 的补码为 D5 。从图上看,就是从 A0的位置,顺时针旋转 53 个单位,然后停留在 D5H 处,这里并没有超越边界0 ,所以没有产生溢出,故 OF = 0;结果仍然为负数,所以 SF = 1。

仅从 OF 和 SF 观察,SF = 1,知道结果为负数;OF = 0,结果没有溢出,所以实际结果的负数和逻辑结果上的负数一致,结果正确。若是溢出了,那么实际结果和逻辑结果的正负性就是相反的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-20 15:15 , Processed in 0.091088 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表