回 帖 发 新 帖 刷新版面

主题:有关段内直接寻址的一个例题,请解释一下

书上是这么描述的:“。。。偏移量为2的补码。假设disp=D8H,指令是放在代码段2196H相继2个地址单元内,因此转移地址的有效地址为:EA=2198H+FFD8H=2170H 
在计算EA时,一个字节偏移量D8H必须符号扩展为16位(因为D8H最高符号位为1,所以扩展后的高位字节全为1[即FF] ),才能与IP相加。” 

我不明白的地方是: 
“因为D8H最高符号位为1,所以扩展后的高位字节全为1[即FF]”
为什么扩展后的高位字节都为1而不是0呢?

回复列表 (共5个回复)

沙发

相对地址不同于绝对地址,它是有符号整数,而绝对地址是无符号整数。一个有符号整数进行符号扩展时必须连同符号位一起扩展,否则,如果一个负数(最高位为1)用0扩展,那么结果就会变成正数,连数值都变了,就不是符号扩展了。

板凳

我的意思是:
D8H转成二进制是11011000,首位符号位是1,扩展成16位,为什么不扩展成1000000011011000,而是1111111111011000?

最高位符号位是1是不能变的,这个我明白,但是后面扩展的7位为什么不扩成0,而是都要扩成1?

3 楼

取反+1

4 楼

楼上的,不是吧,你举个例子?

5 楼

符号扩展是只  扩展的要与最高位相同
如:10000010------扩展16位为11111111 10000010
    00010001--------------为00000000 00010001

我来回复

您尚未登录,请登录后再回复。点此登录或注册