主题:物理地址=16*段地址+偏移地址????
liushifeng
[专家分:20] 发布于 2005-09-13 12:19:00
物理地址=16*段地址+偏移地址????
请问假如:
ds =2000
si =2000
结果怎么会是20000+2000=22000h
这是怎么回事与16的关系是怎么样啊!!!
高手指教!!
回复列表 (共13个回复)
板凳
liushifeng [专家分:20] 发布于 2005-09-13 12:42:00
16d什么意思啊
怎么会=10能不能说清楚点啊谢谢
3 楼
shanbeiminge [专家分:60] 发布于 2005-09-13 15:16:00
为什么物理地址=16d*段地址+偏移地址?
因为物理地址是20位,而段寄存器是16位,普通寄存器(例如放偏移地址)也是16位
由硬件原因施行错位相加,段地址左移一位相当于扩大16倍(一位16进制数四位二进制数)
4 楼
liyanbingabc [专家分:10] 发布于 2005-09-13 20:40:00
段地址比偏移地址左移四位再相加
回去看看清华大学出版的那本书,这是原例题,书上有详细的解释
5 楼
kaikaikai007 [专家分:650] 发布于 2005-09-14 16:06:00
16是十进制的,要转化为十进制的10h,进制一样才能运算嘛1
6 楼
xiaohaokof [专家分:1760] 发布于 2005-09-14 16:30:00
这个嘛,只是你没有看明白书而已了,
因为书在介绍寄存器的时候,都对每个寄存器加以了说明,
而且书上第二章就有这样子的题目,
加去再看一下子书吧,要学好基础啊,!!
[em13]
7 楼
maxhoo8003 [专家分:0] 发布于 2005-09-15 08:11:00
16d 表示的是十进制 所以10H(表示16进制)2000H*10H 用乘法 记得是 16进制结果 就是 20000H啊
8 楼
小星子 [专家分:0] 发布于 2006-03-11 21:36:00
物理地址是20的.16位数转为二十位必须向前进四位也就是十六进制向前进一位
如SI是偏移地址
物理地址:段地址乘以10H加上偏移地址
9 楼
carefreescan [专家分:90] 发布于 2006-03-16 09:55:00
因为在386以下的机型只有20位总线。
寄存器最大16位,如何将16位的内容变成20位
这里牵涉到一个分段的概念,存储器里的每个段的首地址都是NNNN0
所以只要得到16位NNNN的段基地址+段内偏移就可以得到物理地址
当然NNNN+NNNN是不会得到NNNNN的
所以就有了段基地址位移的概念
前提条件是每个分段后的段基地址是NNNN0前提下
算是一个对硬件不足的支持吧
10 楼
C语言爱好者 [专家分:19410] 发布于 2006-03-16 10:09:00
80286的地址总线有24位,8086/8088才是20位地址总线。
分段的目的并不是为了在16位寄存器里表示20位的地址,而是为了具有对程序/进程进行动态重定位的能力。而段值乘以16这种转换是由于8086/8088/80268是16位CPU,必须乘以16才能表示20位的段基址,这也是实模式下16字节段边界的由来。
我来回复