关于汇编的有无符号数问题

初学了一点知识,知道有1:符号数的范围是-128~127,而无符号数的范围是0~2552:而汇编中只认识有符号数,即超过127的数(>127)会转化为有符号数中的负数,但... 初学了一点知识,知道有
1:符号数的范围是-128~127,而无符号数的范围是0~255
2:而汇编中只认识有符号数,即超过127的数(>127)会转化为有符号数中的负数,但是小于(<-128)的数怎么表示呢?他是有符号数么?一直搞不清楚,在线等,谢谢
展开
 我来答
cao199338
2012-08-21 · TA获得超过737个赞
知道小有建树答主
回答量:497
采纳率:100%
帮助的人:499万
展开全部
-128=1111 1111
127=0111 1111
超过127 127+2=1000 0001=-1

其实汇编和你1.中说的一样。。小于-128的数字不能拿2字节的寄存器存放了。
他就相当于 这个2字节的寄存器。能存放-128~255的数据。
你当他是有符号数时就是-128~127.无符号0~255
超过这个界限,就会溢出、
还有补码的问题。计算机如果要存放一个负数。那么会存放他的补码、
所以你遇到一个二进制的数字,没有上下文联系,是没有办法判断是否为有符号数和无符号数、。
如果还有不懂可以追问,在线等回复。、
追问
恩,谢谢了,还有个问题,就是OF标志位和CF进位标志位
1:进位标志位只能是无符号数运算么?那么有符号数运算(-128)+(-128),这个是会溢出,但是如果看为无符号数的话就是128了,128+128是进位了,也就是说无符号运算会存在进位(相加),但是有符号运算就不能算为进位么?它也是和128+128对立的啊,也是进位了啊,为什么就是溢出了?
2:进位标志位与溢出标志位的关系
谢谢了,很懵懂
追答

先纠正一下。-128=1000 0000

                      127=0111 1111

 

  乱了。。。。。我把自己搞乱了。。。

一下仅供参考。貌似有问题。。我再研究下。。

 

如果结果超过127就OF=1,超过255 CF=1

-128~127      OF=0  CF=0

127~255       OF=1  CF=0

255~....         OF=1  CF=1

然后 如果你有一个数据大于FF也就是127

具体你要用OF 还是CF 

就看你把它当做有符号数还是无符号数。。

这是128     OF=1  CF=0   127=7FH

256   OF=0  CF=1      255=FFH 

257 

 

你说的80H+80H    (-128)+(-128) 128=1000 0000=80H

OF=1    CF=1

  乱了。。。。。我把自己搞乱了。。。

三娘901117
2012-08-21 · TA获得超过239个赞
知道小有建树答主
回答量:332
采纳率:0%
帮助的人:298万
展开全部
1、这跟你所要表示的数位数有关。
2、al,是八位寄存器,只能表示2的8次方个数值,即256个数值(0~255)。
3、ax,是16位寄存器,可以表示2的16次方个数值,即65536个数值(0~65535)。
eax是32位寄存器,可以表示2的32次方个数值,
rax是64位寄存器,可以表示2的64次方个数值,
4、为了表示正数、零、负数,负数个数是寄存器所能表示的数值的一半(如:256/2=128),
正数个数是寄存器所能表示的数值的一半减一。
rax是64位寄存器,负数个数=2的64次方个(-1 ~ -2的64次-1)。
5、寄存器表示负数时,其最高位为1。
6、这种表示方法计算机硬件易于实现。
7、假如al=0,al-1后al寄存器变成0FFH(即负1),
更多追问追答
追问
还有个问题想问下你,对于下面的汇编指令:
mov al,98d
add al,99d
把这两个数当成无符号数当然就是98和99
但是当成有符号数为什么不是+98和+99呢,因为有符号数的表示范围是-128~127,虽然知道这样做和无符号数计算结果一样,没什么意义,但是想探究一下
谢谢了~!
追答
结果发生溢出,指示结果不正确,需要编程者改变算法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式