linux-0x09-再谈16位实模式下的内存访问

所谓cpu实模式就是cpu real-mode,cpu要寻的地址就是实际的物理地址。在16位模式下,寄存器用的是16bit,但是地址总线是20根,也就是地址空间是1<<20(Byte)=1Mb。

现在CPU要用16位寄存器读到20位地址,显然是不行的。怎么办呢?那就用两个寄存器进行组合,因此就出现了基址和偏移进行组合。

16bit能定位的地址上限是1<<16(Byte)=64Kb,20根地址线能表达的空间上限是1<<20(Byte)=1Mb,就用一个寄存器每16bit所表达的空间划分成一个段,在每个段内部用另一个寄存器来表达具体的段内偏移。

形式就是CS:offset,表达的地址就是CS<<4+offset

CPU访问内存有三个途径

  • 访问代码的CS:IP
  • 访问数据的DS:offset
  • 访问栈的SS:SP

关于栈访问模式,SS是栈段寄存器,SP是栈基址寄存器,SS:SP=SS<<4+SP就计算出了栈顶地址,之后的压栈和出栈就以这个地址为基址了


linux-0x09-再谈16位实模式下的内存访问
https://bannirui.github.io/2025/05/11/Linux/linux-0x09-再谈16位实模式下的内存访问/
作者
dingrui
发布于
2025年5月11日
许可协议