. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  总结出来的标志位的判断方法  [待解决] 回复[ 14次 ]   点击[ 1105次 ]  
sleepinglion
[帖 主]   [ 发表时间:2010-08-06 11:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22
下面是我总结出来的标志位的判断方法。我也不知道对不对,是否实用。但至少目前为止还没错过,所以先写出来,希望高手能够指点一下。我也希望能够有更简便的判断方法,希望知道的人能够告诉我一下,谢谢。 
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的时候,将运算所得的结果化为二进制,然后判断这些标志位。
masmaster
[第1楼]   [ 回复时间:2010-08-06 16:39 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
学习~~
jjch224
[第2楼]   [ 回复时间:2010-08-13 11:15 ]   [引用]   [回复]   [ top ] 
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48
zf pf sf cf of这几个状态字很有意识,可以归结为:是否为零,1的个数是否为偶数,结果是否为负,无符号数是否进位或借位,有符号数是否溢出。传送类指令不影响psw,如add,dec,mul等指令是影响psw的。课本里面有实际结果,理论结果的说法,实际结果指的是指令执行后的结果(或者说debug产生的结果),理论结果就是在忽略了reg的取值范围影响后得到的结果。
sleepinglion
[第3楼]   [ 回复时间:2010-08-13 19:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22
回复:[第2楼]
------------------
谢谢,受教了。
jiych
[第4楼]   [ 回复时间:2010-10-11 20:34 ]   [引用]   [回复]   [ top ] 
荣誉值:15
信誉值:0
注册日期:2010-06-02 22:04
无符号数范围应该是[0,255]吧?
jiych
[第5楼]   [ 回复时间:2010-10-11 20:35 ]   [引用]   [回复]   [ top ] 
荣誉值:15
信誉值:0
注册日期:2010-06-02 22:04
而且,涉及补码到十进制转换,感觉还是比较麻烦。
752052871
[第6楼]   [ 回复时间:2010-10-25 20:15 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-10-16 19:16
我觉得这是个低级的做法(无贬义),但是对我这种还是菜鸟的人来做,却十分实用。。谢谢楼主了
masmaster
[第7楼]   [ 回复时间:2010-10-25 21:03 ]   [引用]   [回复]   [ top ] 
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19
学习楼主勇于钻研的精神!
kouji1990
[第8楼]   [ 回复时间:2010-11-05 21:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-05 21:42
我觉得这是个低级的做法(无贬义),但是对我这种还是菜鸟的人来做,却十分实用。。谢谢楼主了
------------------
回复:我觉得一点也不低级,而今只是给机器看的,10进制更适合我们的思维,便于我们的理解,其实,我也有和楼主一样的想法
idhyt
[第9楼]   [ 回复时间:2012-02-29 15:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58
这样算非常棒!
parse
[第10楼]   [ 回复时间:2012-04-02 08:12 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-02-08 19:38
人脑永远胜过电脑。
yahwei
[第11楼]   [ 回复时间:2012-04-27 21:36 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2012-02-13 18:24
我觉得应该要适应二进制的运算,没必要转化成十进制。
zanghufei
[第12楼]   [ 回复时间:2012-10-14 01:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2012-08-28 15:01
学习了
aurora0123
[第13楼]   [ 回复时间:2016-01-26 16:29 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2016-01-18 11:54
不管黑猫白猫,逮到老鼠就是好猫
michaellee21
[第14楼]   [ 回复时间:2017-04-11 19:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2017-03-09 22:45
不错,就是无符号数,8位的,不是00000000-11111111,即0-255吗?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved