回 帖 发 新 帖 刷新版面

主题:物理地址=16*段地址+偏移地址????

物理地址=16*段地址+偏移地址????
   请问假如:
   ds =2000
   si =2000
   结果怎么会是20000+2000=22000h
   这是怎么回事与16的关系是怎么样啊!!!
   高手指教!!

回复列表 (共13个回复)

沙发

16d=10h.

板凳

16d什么意思啊
怎么会=10能不能说清楚点啊谢谢

3 楼


为什么物理地址=16d*段地址+偏移地址?
因为物理地址是20位,而段寄存器是16位,普通寄存器(例如放偏移地址)也是16位
由硬件原因施行错位相加,段地址左移一位相当于扩大16倍(一位16进制数四位二进制数)

4 楼

段地址比偏移地址左移四位再相加
回去看看清华大学出版的那本书,这是原例题,书上有详细的解释

5 楼

16是十进制的,要转化为十进制的10h,进制一样才能运算嘛1

6 楼

这个嘛,只是你没有看明白书而已了,
因为书在介绍寄存器的时候,都对每个寄存器加以了说明,
而且书上第二章就有这样子的题目,
加去再看一下子书吧,要学好基础啊,!!
[em13]

7 楼

16d 表示的是十进制 所以10H(表示16进制)2000H*10H 用乘法 记得是 16进制结果 就是  20000H啊

8 楼


物理地址是20的.16位数转为二十位必须向前进四位也就是十六进制向前进一位
如SI是偏移地址
物理地址:段地址乘以10H加上偏移地址

9 楼

因为在386以下的机型只有20位总线。
寄存器最大16位,如何将16位的内容变成20位
这里牵涉到一个分段的概念,存储器里的每个段的首地址都是NNNN0
所以只要得到16位NNNN的段基地址+段内偏移就可以得到物理地址
当然NNNN+NNNN是不会得到NNNNN的
所以就有了段基地址位移的概念
前提条件是每个分段后的段基地址是NNNN0前提下
算是一个对硬件不足的支持吧

10 楼

80286的地址总线有24位,8086/8088才是20位地址总线。

分段的目的并不是为了在16位寄存器里表示20位的地址,而是为了具有对程序/进程进行动态重定位的能力。而段值乘以16这种转换是由于8086/8088/80268是16位CPU,必须乘以16才能表示20位的段基址,这也是实模式下16字节段边界的由来。

我来回复

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