鱼C论坛

 找回密码
 立即注册
查看: 4155|回复: 19

关于标志寄存器的疑问和检测点11.2的疑问!急急急急..........急急急....

[复制链接]
发表于 2012-7-12 13:28:19 | 显示全部楼层 |阅读模式
5鱼币
写出下面的指令执行后,ZF,PF,SF,CF,OF等标志位的值
                        CF  OF   SF   ZF  PF
sub al,al             0    0     0    1    1
mov al,10h        0    0     0    1    1                                    
add al,90h         0    0     1    0    1
mov al,80h        0    0     1    0    1
add al,80h         1    1     0    1    1
mov al,0fch       1    1     0    1    1
add al,05h         1    0     0    0    0
mov al,7dh        1    0     0    0    0
add al,0bh         0    1     1    0    1

在做的过程中每次都纠结,是该用有符号算还是无符号算,又是怎么判断该用有符号算还是用无符号算,有时用无符号算结果就对
有时用无符号算又不对,我还真是纠结,特别是OF溢出标志,都不知道该用有符号算还是用无符号算,真是纠结。老师说OF都是
有符号算法的,CF是用无符号算的,那么在同一条指令里,不就是要用两种符号运算了吗?我还是真弄不清楚哇!!!
希望各位哥哥姐姐,能帮我解下疑问,先谢谢。。。。。。。谢谢!

最佳答案

查看完整内容

mov al,80h add al,80h 相加100H ,是3位16进制数,要装进al里面去,但是al里面只能装2位16进制数,所以就溢出了 mov al,0fch add al,05h 相加是1H,而不是101h,是十进制的1,因为0fch放进al就是十进制的-4,-4+5=1,所以没有溢出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-12 13:28:20 | 显示全部楼层
mov al,80h     
add al,80h
相加100H ,是3位16进制数,要装进al里面去,但是al里面只能装2位16进制数,所以就溢出了
mov al,0fch   
add al,05h
相加是1H,而不是101h,是十进制的1,因为0fch放进al就是十进制的-4,-4+5=1,所以没有溢出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-12 13:50:50 From FishC Mobile | 显示全部楼层
cf表示的是无符号进位/借位
of表示的是有符号的溢出。。

怎么算的结果都一样,都会影响标志位。
而你把它当成是有符号或者无符号要看你的应用了。。

譬如,mov al,80h
add al,80h

运算后,既会改变cf位,也会改变of位。
而它属于什么运算,决定在于你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-12 13:55:44 | 显示全部楼层

大哥,可以帮我解释下每一条指令的溢出OF吗?                          谢谢哈!...........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-12 14:02:12 | 显示全部楼层
1、用win7自带的计算器,切换到程序员模式。
2、看看题目中用到的寄存器是8位的还是16位的比如本题中用到的都是8位寄存器,也就是al里面只能装1个字节。
3、然后点选下面“字节”前面的圆圈,再点选计算器中的“16进制”前面的圆圈,然后输入题目里的立即数比如0fch,再切换到十进制,这时就被转换成了-4,该知道该用有符号还是无符号了吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-12 14:08:03 | 显示全部楼层
极品飞车 发表于 2012-7-12 14:02
1、用win7自带的计算器,切换到程序员模式。
2、看看题目中用到的寄存器是8位的还是16位的比如本题中用到的 ...

没有啊,还是现实252啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-12 14:09:00 | 显示全部楼层
315775569 发表于 2012-7-12 13:55
大哥,可以帮我解释下每一条指令的溢出OF吗?                          谢谢哈!...........

mov al,10h                        
add al,90h
有符号相加是A0H, 转十进制160,不是溢出了吗?怎么结果是???????

mov al,80h     
add al,80h
相加100H ,十进制256,不也是溢出了吗? 是不是有进位了就一定是溢出了呢??????
mov al,0fch   
add al,05h
相加是101H,十进制257,不也是溢出了吗?  怎么答案是没有溢出呢???????????
就是溢出的含义我很是搞不明白呢?纠结了好几天呢,就是还不懂得。不是说是有符号无符号都是自己决定的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-12 14:09:52 | 显示全部楼层
极品飞车 发表于 2012-7-12 14:02
1、用win7自带的计算器,切换到程序员模式。
2、看看题目中用到的寄存器是8位的还是16位的比如本题中用到的 ...

mov al,10h                        
add al,90h
有符号相加是A0H, 转十进制160,不是溢出了吗?怎么结果是???????

mov al,80h     
add al,80h
相加100H ,十进制256,不也是溢出了吗? 是不是有进位了就一定是溢出了呢??????
mov al,0fch   
add al,05h
相加是101H,十进制257,不也是溢出了吗?  怎么答案是没有溢出呢???????????
就是溢出的含义我很是搞不明白呢?纠结了好几天呢,就是还不懂得。不是说是有符号无符号都是自己决定的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-12 14:36:05 | 显示全部楼层
mov al,10h                        
add al,90h
结果是A0h,是2位16进制数,没有溢出啊,
看有没有溢出主要看用到的寄存器,里面能放几位16进制数,al里面能放2位16进制数,ax里面能放4位16进制数,所以如果结果是3位16进制数,却要放到al里面去,就叫溢出。ok?跟10进制是几位不是对应关系。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-12 14:42:08 | 显示全部楼层
同样一个16进制数,比如A0h,它的10进制意义要看放在哪里,比如把A0h放进al,它的10进制意思是-96
但是,如果放进ax里面,它的10进制意思就是160,但是溢出不是看10进制的意义。而是看二进制的位数有没有变多,多来装不下,所以跟容器有关,也就是寄存器的容量有关。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-12 14:43:11 | 显示全部楼层
极品飞车 发表于 2012-7-12 14:36
mov al,10h                        
add al,90h
结果是A0h,是2位16进制数,没有溢出啊,

mov al,80h     
add al,80h
相加100H ,十进制256,不也是溢出了吗? 是不是有进位了就一定是溢出了呢??????
mov al,0fch   
add al,05h
相加是101H,十进制257,不也是溢出了吗?  怎么答案是没有溢出呢???????????
这是三位的怎么答案是没有溢出呢,我不明白大哥的意思哦
就是溢出的含义我很是搞不明白呢?纠结了好几天呢,就是还不懂得。不是说是有符号无符号都是自己决定的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-12 14:59:21 | 显示全部楼层
注意要放进数值的这个寄存器的位数,决定了数值进去后的10进制意义。因为电脑是用二进制的补码来表示数值的,不管是正数还是负数,在电脑里面都是用补码来表示的,那么它的十进制意义就要看它放在什么寄存器里面,寄存器的位数大于这个数本身的位数,这个数前面的位都变成0了,就是正数,如果寄存器小,刚好最高位是1,就表示它是负数。也就是,只要最高位是1,就表示它是负数,因为你把这个二进制数值当成一个整数,而没有当成其他东西,比如地址值等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-12 15:01:07 | 显示全部楼层
极品飞车 发表于 2012-7-12 14:51
mov al,80h     
add al,80h
相加100H ,是3位16进制数,要装进al里面去,但是al里面只能装2位16进制数 ...

0fch是负数,额。。我区分不了它怎么会是负数呢!呵呵.........为什么不是正数啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-12 15:22:27 | 显示全部楼层
0fch放进al里面的补码是11111100,最高位是1,所以是负数-4
0fch放进ax里面 补码是0000000011111100,最高位是0,所以是这正数252
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-13 14:50:01 | 显示全部楼层
本帖最后由 XXXXXXX 于 2012-7-13 14:51 编辑

我也遇到这个检测点了,上面看了很多遍,但还是没看懂,求详细过程,尤其是最后一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-13 19:42:28 | 显示全部楼层
XXXXXXX 发表于 2012-7-13 14:50
我也遇到这个检测点了,上面看了很多遍,但还是没看懂,求详细过程,尤其是最后一个

mov al,0fch      
add al,05h
求CF的值,不管是有符号还是无符号,鱼老师说过CF都是无符号运算,所以求CF的值都是用无符号来运算
0FCH 加 05H 等于101H 所以进位
求OF的值 --0FCH 转二进制是11111100B,是负数,那么这个就是补码形式,所以要转变,那么0FCH=-4
--05H转二进制是00000101B ,是正数。是原码,所以-4+5=1,所以没有超过范围,所以没有溢出,求SF,ZF,PF,都是用无符号运算

mov al,7dh        
add al,0bh
7DH 的最高位是0,那么就是正数, 0BH最高位也是0,也是正数,所以是正数加法,得出的结果是88H
没有进位, 88H转十进制是136,所以溢出,二进制是10001000B,AL是8位寄存器,最高位是1,所以是负数,ZF不为0 所以是0,有两个1是偶数,所以PF是1.
我也是昨天经过上面的老哥才懂得的,我也是新手,呵呵,互动互动!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-14 13:51:08 | 显示全部楼层
315775569 发表于 2012-7-13 19:42
mov al,0fch      
add al,05h
求CF的值,不管是有符号还是无符号,鱼老师说过CF都是无符号运算,所以 ...

谢谢,总算差不多弄明白了,互动 互勉
在判断OF时,前一个的结果是101H,重新考虑相加的两个数0fch和05h,可如果像后面那个一样直接把结果(101h)转化为十进制来看就会发现溢出。
这是说在结果出现进位后,就不能直接用结果来判断OF了吗(因为我无法知道这个有进位的结果(101h)究竟是正还是负),所以就只能把加数化成带符号十进制再相加来判断是否溢出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-11 21:26:15 | 显示全部楼层
学习学习再学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-13 14:25:11 | 显示全部楼层
我来学习一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-22 00:47:41 | 显示全部楼层
极品飞车 发表于 2012-7-12 14:02
1、用win7自带的计算器,切换到程序员模式。
2、看看题目中用到的寄存器是8位的还是16位的比如本题中用到的 ...

我就不明白为什么要这样才会显示正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 00:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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