主题:有关段内直接寻址的一个例题,请解释一下
vahjcorvza
[专家分:0] 发布于 2006-05-09 18:00:00
书上是这么描述的:“。。。偏移量为2的补码。假设disp=D8H,指令是放在代码段2196H相继2个地址单元内,因此转移地址的有效地址为:EA=2198H+FFD8H=2170H
在计算EA时,一个字节偏移量D8H必须符号扩展为16位(因为D8H最高符号位为1,所以扩展后的高位字节全为1[即FF] ),才能与IP相加。”
我不明白的地方是:
“因为D8H最高符号位为1,所以扩展后的高位字节全为1[即FF]”
为什么扩展后的高位字节都为1而不是0呢?
回复列表 (共5个回复)
沙发
C语言爱好者 [专家分:19410] 发布于 2006-05-09 18:53:00
相对地址不同于绝对地址,它是有符号整数,而绝对地址是无符号整数。一个有符号整数进行符号扩展时必须连同符号位一起扩展,否则,如果一个负数(最高位为1)用0扩展,那么结果就会变成正数,连数值都变了,就不是符号扩展了。
板凳
vahjcorvza [专家分:0] 发布于 2006-05-09 19:04:00
我的意思是:
D8H转成二进制是11011000,首位符号位是1,扩展成16位,为什么不扩展成1000000011011000,而是1111111111011000?
最高位符号位是1是不能变的,这个我明白,但是后面扩展的7位为什么不扩成0,而是都要扩成1?
3 楼
llehotnwod [专家分:330] 发布于 2006-05-09 19:33:00
取反+1
4 楼
vahjcorvza [专家分:0] 发布于 2006-05-09 19:43:00
楼上的,不是吧,你举个例子?
5 楼
一颗星 [专家分:230] 发布于 2006-05-17 20:05:00
符号扩展是只 扩展的要与最高位相同
如:10000010------扩展16位为11111111 10000010
00010001--------------为00000000 00010001
我来回复