汇编网首页登录博客注册
sleepinglion的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
文章收藏
友情链接

[2010-08-06 11:13] 总结出来的标志位的判断方法

下面是我总结出来的标志位的判断方法。我也不知道对不对,是否实用。但至少目前为止还没错过,所以先写出来,希望高手能够指点一下。我也希望能够有更简便的判断方法,希望知道的人能够告诉我一下,谢谢。
1.OF位的判断
  溢出,只是对有符号数运算而言。因此,我们在讨论溢出(或者说在判断OF的值)的时候,应将对象看为有符号数,其最高位为符号位。
  对于8位数而言,由于其最高位为符号位,故它所能表示的十进制数范围为[-128,127]。
  现在,要判断是否溢出,就将对象全部转化为十进制数,然后再进行运算(加减乘除)。看运算后所得的结果是否在[-128,127]之间,如果不在,就发生了溢出,OF=1。

  (1)对于已经是十进制的书,直接运算后看是否在[-128,127]之间即可。
eg.
  mov al,98
  add al,99
98+99=197>127 溢出 OF=1
(注:此时上面的98和99是看做有符号数的。也可看为无符号数,但那是在判断CF的时候用到的:在判断CF的时候,十进制范围为[-256,255],98+99=197<255 无进位 CF=0)

  (2)对于不是十进制数的,先转化为十进制,然后按(1)所介绍的方法再计算判断即可。
eg.
  mov al,0f0h
  add al,88h
0f0h=-16D,88h=-120D,-16+(-120)=-136<-128 溢出 OF=1

  mov al,80h
  add al,80h
80h=-128D,-128+(-128)=-256<-128 溢出 OF=1

  mov al,0fch
  add al,05h
0fch=-4D,05h=5D,-4+5=1<127 不溢出 OF=0

  mov al,7dh
  add al,0bh
7dh=125D,0bh=11D,125+11=136>127 溢出 OF=1

2.CF位的判断
  CF是对无符号数运算而言的。因此我们在讨论CF的值的时候,应将对象看为无符号数。
  对于8位数而言,它所能表示的十进制数范围为[-256,255]。
  现在,要判断是否进位或借位,就将对象全部转化为十进制数,然后再进行运算(加减乘除)。看运算后所得的结果是否在[-256,255]之间,如果不在,就发生了进位或借位,CF=1。
  (1)对于已经是十进制的书,直接运算后看是否在[-256,255]之间即可。
  (2)对于不是十进制数的,先转化为十进制,然后按(1)所介绍的方法再计算判断即可。
eg.
  mov al,0f0h
  add al,88h
0f0h=240D,88h=136D,240+136=376>255 进位 CF=1

  mov al,80h
  add al,80h
80h=128D,128+128=256>255 进位 CF=1

  mov al,0fch
  add al,05h
0fch=252D,05h=5D,252+5=257>255 进位 CF=1

  mov al,7dh
  add al,0bh
7dh=125D,0bh=11D,125+11=136<255 无进位 CF=0

3.其它标志位的判断
  其它标志位可以在判断OF的时候,将运算所得的结果化为二进制,然后判断这些标志位。
评论次数(0)  |  浏览次数(575)  |  类型(默认类型) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码