|
主题 : : 总结出来的标志位的判断方法 [待解决] |
回复[ 14次 ]
点击[ 1141次 ] | |
|
|
|
|
[帖 主]
[ 发表时间: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的时候,将运算所得的结果化为二进制,然后判断这些标志位。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-08-06 16:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第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的取值范围影响后得到的结果。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-08-13 19:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-13 23:22 |
回复:[第2楼]
------------------
谢谢,受教了。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-10-11 20:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:15
信誉值:0
注册日期:2010-06-02 22:04 |
|
|
|
|
|
[第5楼]
[ 回复时间:2010-10-11 20:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:15
信誉值:0
注册日期:2010-06-02 22:04 |
|
|
|
|
|
[第6楼]
[ 回复时间:2010-10-25 20:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-16 19:16 |
我觉得这是个低级的做法(无贬义),但是对我这种还是菜鸟的人来做,却十分实用。。谢谢楼主了 | | |
|
|
|
|
[第7楼]
[ 回复时间:2010-10-25 21:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第8楼]
[ 回复时间:2010-11-05 21:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-11-05 21:42 |
我觉得这是个低级的做法(无贬义),但是对我这种还是菜鸟的人来做,却十分实用。。谢谢楼主了
------------------
回复:我觉得一点也不低级,而今只是给机器看的,10进制更适合我们的思维,便于我们的理解,其实,我也有和楼主一样的想法 | | |
|
|
|
|
[第9楼]
[ 回复时间:2012-02-29 15:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-05 18:58 |
|
|
|
|
|
[第10楼]
[ 回复时间:2012-04-02 08:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-02-08 19:38 |
|
|
|
|
|
[第11楼]
[ 回复时间:2012-04-27 21:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2012-02-13 18:24 |
我觉得应该要适应二进制的运算,没必要转化成十进制。 | | |
|
|
|
|
[第12楼]
[ 回复时间:2012-10-14 01:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2012-08-28 15:01 |
|
|
|
|
|
[第13楼]
[ 回复时间:2016-01-26 16:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2016-01-18 11:54 |
|
|
|
|
|
[第14楼]
[ 回复时间:2017-04-11 19:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2017-03-09 22:45 |
不错,就是无符号数,8位的,不是00000000-11111111,即0-255吗? | | |