关于汇编的有无符号数问题
初学了一点知识,知道有1:符号数的范围是-128~127,而无符号数的范围是0~2552:而汇编中只认识有符号数,即超过127的数(>127)会转化为有符号数中的负数,但...
初学了一点知识,知道有
1:符号数的范围是-128~127,而无符号数的范围是0~255
2:而汇编中只认识有符号数,即超过127的数(>127)会转化为有符号数中的负数,但是小于(<-128)的数怎么表示呢?他是有符号数么?一直搞不清楚,在线等,谢谢 展开
1:符号数的范围是-128~127,而无符号数的范围是0~255
2:而汇编中只认识有符号数,即超过127的数(>127)会转化为有符号数中的负数,但是小于(<-128)的数怎么表示呢?他是有符号数么?一直搞不清楚,在线等,谢谢 展开
2个回答
展开全部
-128=1111 1111
127=0111 1111
超过127 127+2=1000 0001=-1
其实汇编和你1.中说的一样。。小于-128的数字不能拿2字节的寄存器存放了。
他就相当于 这个2字节的寄存器。能存放-128~255的数据。
你当他是有符号数时就是-128~127.无符号0~255
超过这个界限,就会溢出、
还有补码的问题。计算机如果要存放一个负数。那么会存放他的补码、
所以你遇到一个二进制的数字,没有上下文联系,是没有办法判断是否为有符号数和无符号数、。
如果还有不懂可以追问,在线等回复。、
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
乱了。。。。。我把自己搞乱了。。。
展开全部
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),
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,虽然知道这样做和无符号数计算结果一样,没什么意义,但是想探究一下
谢谢了~!
追答
结果发生溢出,指示结果不正确,需要编程者改变算法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询