8086寻址方式
16位的8086cpu中运算器一次最多可以处理16位的数据,寄存器的最大宽度为16位,寄存器和运算器之间的通路为16位。也就是说在8086内部,能够一次性处理,传输,暂存的数据信息最大长度是16位。
由于8086有20位的地址总线,可以传送20位地址,寻址能力能达到1M。而8086又是16位的结构,内部能够一次性处理,传输,暂存的数据信息最大长度是16位,寻址能力仅能达到64K。所以在8086采用在内部将两个16位的地址合成一个20位的物理地址的方式进行寻址。
当8086要读写内存时:
- cpu相关部件提供两个16位的地址,一个叫段地址,一个叫偏移地址
- 内部总线将两个地址送入一个叫地址加法器的部件中
- 地址加法器通过段地址*16+偏移地址的算法将两个16位地址合成为一个20位的物理地址
- 地址加法器通过内部总线将20位物理地址送入io控制电路
- io控制电路将20位物理地址送上地址总线
- 20位的物理地址被地址总线送到寄存器
比如8086要访问123C8的内存单元,则加法计算(16位)的工作为:1230*16+00C8 = 12300+00C8 = 123C8。当然通过该算法生成123C8的段寄存器和偏移寄存器不是唯一的。
8086汇编的相关笔记来自 小码哥 MJ iOS底层视频 以及 王爽《汇编语言(第三版)》