. : : 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