yvc220 发表于 2017-4-26 17:52:43

求问关于段地址和偏移地址的问题!

经过一下午查论坛以及查其他网站的资料,我了解了由于当时总线是20位,但是段地址和偏移地址都是16位是因为受到了当时寄存器大小只有16位的限制。

但是有些地方一直都无法理解:

1.
偏移量是16位,那表示的范围从0000h~ffffh;段地址是16位,那表示的范围也是0000h~ffffh。
如果一个段地址是0000h,偏移地址是0010h,那么根据段地址*16+偏移地址,得到物理地址是0000h+0010h=0010h;
如果另一个段地址是0001h,偏移地址是0000h,那么得到的物理地址是0010h+0000h=0010h。
那这两个值的是同一个寄存器吗?

2.
段地址是怎么决定的?偏移量默认都是0000h~ffffh这个范围吗?

3.
我理解了段地址*16相当于二进制的左移4位,但是为什么要这样做?物理地址=段地址*16+偏移地址这个公式是如何得来的?

希望朋友们说说自己的看法,拯救一下陷入苦思冥想的小白同学 T T

人造人 发表于 2017-4-26 18:37:10

1.
偏移量是16位,那表示的范围从0000h~ffffh;段地址是16位,那表示的范围也是0000h~ffffh。
如果一个段地址是0000h,偏移地址是0010h,那么根据段地址*16+偏移地址,得到物理地址是0000h+0010h=0010h;
如果另一个段地址是0001h,偏移地址是0000h,那么得到的物理地址是0010h+0000h=0010h。
那这两个值的是同一个寄存器吗?



应该说得到的是同一个物理地址

人造人 发表于 2017-4-26 18:38:27

2.
段地址是怎么决定的?偏移量默认都是0000h~ffffh这个范围吗?


段地址 你可以随意
偏移地址范围 是0000h~ffffh范围

人造人 发表于 2017-4-26 18:45:55

物理地址=段地址*16+偏移地址

十进制 16 等于 十六进制 10h

物理地址=段地址*10h+偏移地址

10h 等于 二进制 10000

也就是 段地址左移4位 + 偏移地址

yvc220 发表于 2017-4-29 20:15:34

人造人 发表于 2017-4-26 18:37
1.
偏移量是16位,那表示的范围从0000h~ffffh;段地址是16位,那表示的范围也是0000h~ffffh。
如果一个段 ...

谢谢回答!
请问同一个不同的段地址+偏移地址能够表示同一个物理地址的话,那在实际用到的时候不会出错吗?

yvc220 发表于 2017-4-29 20:15:43

人造人 发表于 2017-4-26 18:38
2.
段地址是怎么决定的?偏移量默认都是0000h~ffffh这个范围吗?



谢谢回答!

yvc220 发表于 2017-4-29 20:17:02

人造人 发表于 2017-4-26 18:45
物理地址=段地址*16+偏移地址

十进制 16 等于 十六进制 10h


谢谢回答!

我能理解16进制和10进制相互转换后,段地址*10h=段地址左移4位。
但是为什么要进行这一步操作再加上偏移地址呢?

人造人 发表于 2017-4-29 20:48:33

yvc220 发表于 2017-4-29 20:17
谢谢回答!

我能理解16进制和10进制相互转换后,段地址*10h=段地址左移4位。


为了生成20位的物理地址

人造人 发表于 2017-4-29 20:49:18

yvc220 发表于 2017-4-29 20:15
谢谢回答!
请问同一个不同的段地址+偏移地址能够表示同一个物理地址的话,那在实际用到的时候不会出错 ...

一般不会
页: [1]
查看完整版本: 求问关于段地址和偏移地址的问题!