assembly 当段寄存器为4时,系统存储16个段地址?

uujelgoq  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(157)

在真实的模式内存寻址中,有16个大小为64KB的段,并且有4个段寄存器,那么系统在哪里存储这16个地址呢?

0. 00000
 1. 10000
 2. 20000
 3. 30000
      :
      :
14. E0000
15. F0000

例如,如果我的系统分别使用CS、DS、ES和SS中的前4个段起始地址,那么剩余的12个地址将存储在哪里?

ogsagwnx

ogsagwnx1#

不需要将它们存储在任何地方。当你使用段地址时,你可以将它加载到你选择/需要的段寄存器中(顺便说一句,段地址不一定要在64 K的边界上,只要是16的倍数即可)。
例如,假设我想将物理地址为0x 12345的某个值加载到al中,那么我会先执行mov ds, 0x1234,然后执行mov al, [0x5](注意,该指令隐含地使用ds:,但是您也可以手动地指定它)-或者mov ds, 0x1000; mov al, [0x2345],或者任何其他组合,只要其总和达到我想要的值(物理地址=段 * 16 +偏移量)。我通常会以这样一种方式组织我的内存:我经常一起需要的东西可以通过同一个段访问,也就是说,在64 K以内,这样我就不必一直切换段。

相关问题