. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
标志寄存器
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
有符号数和无符号数的疑问
[待解决]
回复[
4
次 ] 点击[
519
次 ]
iammingbo
[帖 主]
[ 发表时间:2009-12-28 22:14 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2008-08-21 18:36
书中写到:
mov al,10000001B
add al,1
可以将add指令进行的运算当作无符号数的运算,也可以将add指令进行的运算当作有符号数的运算。
问题:
到底是当作有符号还是无符号数。
我认为:执行了上面两条指令后,SF标志值肯定是一定的。所以有无符号运算也是定好的。问题就是,我怎么知道进行的是有符号运算还是无符号运算。
请指点,谢谢。
scuzg
[第
1
楼]
[ 回复时间:2009-12-29 00:44 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
CPU处理一个二进制数时,其实也无法知道这个数是有符号还是无符号数;由于引入了补码,使得加减计算的指令对有符号数和无符号数的处理是一样的,所以加减运算时CPU将运算结果作为有符号数和无符号数对符号位的影响都“罗列”出来了,供编程者根据需要使用;乘除运算有符号数和无符号数所用的指令是不同的。
那么如何判断一个数究竟是有符号数还是无符号数呢?如果程序(本质上是编程者)把最高位用作符号位,这就是有符号数;如果把最高位作为有效数位,那就是无符号数了。
iammingbo
[第
2
楼]
[ 回复时间:2009-12-29 19:17 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:0
注册日期:2008-08-21 18:36
谢谢scuzg的回答。
我想我明白了。
书上也写了:cpu在执行add等指令时,是必然要影响到SF标志位的值的。至于我们需不需要这种影响,那就看我们如何看待指令所进行的运算了。
也就是说,到底是有符号数还是无符号数,是有我们来决定的。
yiyn
[第
3
楼]
[ 回复时间:2009-12-29 20:04 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:9
信誉值:0
注册日期:2009-10-18 04:41
呵呵,有符号数就是说他多出了一个符号位,那么必然会影响到到他的数据位
无符号位就是把那个符号位让给数据位了,
其实这也要看你数据存的地方了,如果是al,那么如果是有符号数 al 一共是8位少了一个符号位,他的数据位就只有7位了,所以他的范围一目了然,当然没学过二进制的是不太明白的,还有补码.
如果是ax那么他就有16位了,如果是有符号数你应当知道数据的范围了吧
ldlihuanfa
[第
4
楼]
[ 回复时间:2010-01-25 19:36 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53
这个sf为正还是为负实际上就是计算机运算后给符号位定一个值,是1还是0,我明白了,在附注的补码中就是说,当最高位为1就代表负数,那么就是当计算后数第一个数为1时,sf也就是1了
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved