永发信息网

汇编语言如何区分有无符号

答案:1  悬赏:80  手机版
解决时间 2021-11-15 20:42
  • 提问者网友:喧嚣尘世
  • 2021-11-15 11:57
汇编语言如何区分有无符号
最佳答案
  • 五星知识达人网友:过活
  • 2021-11-15 13:12
首先你要知道对于计算机来说10000001B只是一串二进制数,

汇编中编程也是一样
这串二进制数是什么含义就要看你是怎么看待的,你可以把它看做是有符号数,也可以看做是无符号数
所以不存在如何区分的问题,如果你把它看做有符号的,最高位就是符号位,这不仅是C语言中是这样,而是计算机中对有符号数的处理就是这样

至于你说的计算器什么的,我不知道你用的是什么计算器,windows自带的计算器是把二进制数看成有符号数的,估计是你数据的尺寸没设置对

至于你的问题三,什么作为无符号有符号进位是什么意思?add指令不会去管你的是无符号数还是有符号数,在它看来只是一串二进制数,它只管将两个操作数按位相加,你用它进行无符号加或有符号加都没有问题,至于原因,你看看有符号数的表示方法就知道了
所以,关键的问题不是如何区分,而是你如何看待追问mov al,80h
add al,80h
mov al,7dh
add al,0bh
这几句是如何算的?求详细点解释追答cpu执行add指令时是同时看做无符号和有符号运算的
详细点说的话
前两句:al=80h+80h=100h al只能保存8个位,高位舍去,结果为0
如看做无符号的话真实结果100h超出了8字节,产生进位,进位标志CF位置1
如看做有符号的话结果应是-128+(-128)=-256超出一个字节能表示的有符号数的范围(-128~+127),于是发生溢出,溢出标志OF位置1
后两句:al=7dh+0bh=88h al能保存,结果为88h
看做无符号:真实结果88h未超出8字节,不产生进位,进位标志CF位置0
看做有符号:结果应是125+11=136超出一个字节能表示的有符号数的范围,产生溢出,OF位置1

从你的提问看,你对标志位的含义还没有完全弄明白追问照你这样说的话
mov al,7dh
add al,0bh
有符号和无符号都是136D了追答为什么会这么想?
88h=10001000
看做无符号当然是136d,
看做有符号数的话,最高位就是符号位,这里为1说明就是负数
由其余位判断出数值是1111000h=120d,所以看做有符号数的话就是-120d
这些我相信你都是知道的
你是用计算器得出的结果让你疑惑还是怎么的?

正常来说这样的地方没什么好纠结的
说说计算器吧
你说计算器一会按无符号进位一会按有符号进位什么的要表达什么我不懂,我想说的是,计算器做你那个数值运算时不会管你的是无符号的还是有符号的,对它还说没有区别,因为前面我说过,不管你当做有无符号的哪种结果都是一样的,为什么这么巧会一样?因为设计有符号数的表示时发现用补码表示就有这样的优势,不然无符号数和有符号数的运算就要分开设计
知道了这点就好说了,虽然计算器运算时不会考虑符号,但得出结果后都是默认看做有符号数的(因为计算时很多时候都是要涉及负数,不这样的话就很不方便)
于是就出现了这样的情况:当你设置为字节运算时,结果就是10001000b,最高位即符号位为1,于是其值为-120d,当你设置为字节以上比如字时,结果就是0000 0000 1000 1000,最高位为0
其值就是136
感觉你还是会有疑问,如果是的话直接说让你有这些疑问的原因吧,是标志寄存器的标志还是用计算器时出现的情况
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯