. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
标志寄存器
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
汇编语言第225页,cmp ah,bh(有符号)比较的问题
[已解决]
回复[
3
次 ] 点击[
327
次 ]
a82225269
[帖 主]
[ 发表时间:2011-04-13 00:34 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2011-02-27 03:22
如果sf=1,而of=1:
...
...
简单分析一下,就可以看出,如果因为溢出导致了实际结果为负,那么逻辑上真正的结果必然为正。
...
...
请问怎样推敲出sf=1,of=1必然有真实结果为正??和怎样推敲出如果sf=0,of=1那真实结果肯定为负??
chengdudefengche
[第
1
楼]
[ 回复时间:2011-05-22 18:15 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2011-05-11 17:26
首先这里的分析是针对 有符号的运算而言的
这个问题书上已经讲了,顺便吧补码看了就清楚了
betterpursuel
[第
2
楼]
[ 回复时间:2011-05-28 09:22 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:8
信誉值:0
注册日期:2010-11-07 17:01
首先,这些分析是针对有符号数的;
其次,只有两个正数相加才能产生正溢出,只有两个负数相加才能产生负的溢出,一个正数和一个负数相加不会产生溢出,其他情况不予与考虑,因为计算机中用补码表示一个数,那么某数x,x-(+5)与 x+(-5)的计算结果肯定相同的,所以只考虑以上三种情况即可;
最后,详细说明一下这两种情况“只有两个正数相加才能产生正溢出,只有两个负数相加才能产生负的溢出”;
第一,说明一下“只有两个正数相加才能产生正溢出”;
以8位的数为例子,最高位为符号位;通过一些具体的例子或是思考,很容易得到这个结论:如果两个正数相加不溢出,那么所得结果的符号位为正;如果两个正数相加溢出,那么所得结果的符号位一定为负,其实逻辑上的结果的符号位应该为正;换句话就是“如果因为溢出导致了实际结果为负,那么逻辑上真正的结果必然为正”;
举一个例子(书上217页):
Mov al,98 ; 98 = 62H = 0110 0010B (原码)
Add al,99 ; 99 = 63H = 0110 0011B (原码)
逻辑上的结果为:98+99=197 (这个是正确的结果)
实际的结果为: 98+99=-59 (这个是错误的结果)
0110 0010B (原码)
+ 0110 0011B (原码)
-----------------------------------------------
1100 0101 (符号位本应该为0,但是溢出导致符号为1,这个数逻辑上应该表示的是无符号是197,但是实际上进行的是有符号运算,当作有符号数它就是-59的补码)
比较一下:
197的原码是:0 1100 0101B -59的原码是: 1011 1011B
197的反码是:0 1100 0101B -59的反码是: 1100 0100B
197的补码是:0 1100 0101B -59的补码是: 1100 0101B
即是:无符号数197的补码 与 有符号数-59的补码是相同的。
并且有这样的关系存在: 197 = -59 + 256
第二,说明一下“只有两个负数相加才能产生负的溢出”;
以8位的数为例子,最高位为符号位;通过一些具体的例子或是思考,很容易得到这个结论:如果两个负数相加不溢出,那么所得结果的符号位为负;如果两个负数相加溢出时,那么所得结果的符号位是一定为正吗?换句话就是“如果因为溢出导致了实际结果为正,那么逻辑上真正的结果必然为负”这句话对吗?
举例子说明:
-126 的原码:1111 1110B 反码:1000 0001B 补码:1000 0010B
-1 的原码:1000 0001B 反码:1111 1110B 补码:1111 1111B
-2 的原码:1000 0010B 反码:1111 1101B 补码:1111 1110B
-3 的原码:1000 0011B 反码:1111 1100B 补码:1111 1101B
(-126) + (-1) = -127 没有溢出 即是:
-126的补码: 1000 0010B
-1的补码 :+ 1111 1111B
------------------------------------------
-127的补码: 1 1000 0001B (符号位为1,为负)
(-126)+(-2) = -128没有溢出 即是:
-126的补码: 1000 0010B
-2的补码 :+ 1111 1110B
------------------------------------------
-128的补码: 1 1000 0000B (符号位为1,为负)
(-126)+(-3) = -129 这时产生溢出 即是:
-126的补码: 1000 0010B
-3的补码 :+ 1111 1101B
------------------------------------------
-129的补码: 1 0111 1111B ((符号位本应该为1,但是溢出导致符号为0)
1 0111 1111B逻辑上是-129的补码,但是实际上是0111 1111B因为最高位为0,所以是正数,所以0111 1111B的原码、反码、补码都是相同的,这个数127;
即是:无符号数197的补码 与 有符号数-59的补码是相同的。
并且有这样的关系存在: 127 = (-129) + 256 或是 (-129) = 127 -256
a82225269
[第
3
楼]
[ 回复时间:2011-07-20 21:15 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2011-02-27 03:22
此贴由 贴主 于 [ 2011-07-20 21:15 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved