CPU访问内存时要给出内存单元的地址(内存地址),每个内存单元都有一个唯一的地址,称之为物理地址。
首先给出一个公式:
物理地址=段地址x16+偏移地址
物理地址指的是cpu访问内存数据的内存地址,段地址指的是8086cpu的16位的地址总线,偏移地址也指的是16位的地址总线。
什么是段地址?
首先我们知道8086cpu有20位的地址总线,而8086机是16位机,也即字长是16位,16位机描述了:
- 运算器一次最多处理16位的数据
- 寄存器的最大宽度为16位
- 寄存器和运算器之间的通路位16位
那么8086CPU是如何给出20位的物理地址呢?
首先对于16位机来说20位的地址总线多出了4条线,那么是否可以从这里下手呢?通过位运算,可以知道16位机比与20条地址总线的20位机来说少了四位,那么可以通过乘以16的方法,扩展为与20位机同等的大小,那么这时候的段地址可以作为基址地址,而另外的16位地址值可以作为偏移地址。
"段地址X16+偏移地址=物理地址"的本质含义是CPU在访问内存时用一个基础地址和一个相对于基础地址的偏移地址相加,给出内存单元的内存地址。
在内存栈结构中就是采用的这个思想。