80x86寻址方式
1、 首先需要理解知道的概念
80x86有20根地址总线。
80x86访问内存时需要用到 段寄存器(如ES、CS、SS、DS、FS) 和偏移地址IP
2、物理地址的表述
物理地址就是内存单元的编号,一堆二进制码,如果从数字电路的角度讲 就是一堆导线的线与
描述一: 物理地址 = 基础地址 + 偏移地址
描述二: 物理地址 = 段地址 * 16 + 偏移地址
所以: 基础地址 = 段地址 * 16
所以: 基础地址 必然能被16整除
(1)为什么要如此描述物理地址
答:CPU有20根地址总线 ,如果直接访问 势必需要 一下你能存储 20位(0/1)的寄存器 。但是 我们的80x86CPU只有 16位的寄存器
如此看来矛盾产生了.
矛盾:
16位的寄存器(xxxx xxxx xxxx xxxx )如何 存储 20位(xxxx xxxx xxxx xxxx xxxx)的数据
矛盾的解决:
加法:两个16位寄存器 存储的数 通过 一个加法 使得他们变成为20位
加的方式: 我的理解是更像是 错位相加(错位是指 错开 而不是 错误 )
寻求基地址:
假如将A这个寄存器存储的数左移四位,从而变为20位(xxxx xxxx xxxx xxxx 0000) 注意观
察错位后的数刚好为16的整数倍, 所以就导致我们在寻求这个 错位后的值x 的时候 必然能
被16整除,数学上如何保证呢? 简单x = y * 16,就相当于 基础地址 = 段地址 * 16 。
这地方就是巧用了数学进制运算的规律,只有这样才找到这样的一个数(xxxx xxxx xxxx xxxx 0000)。
偏移地址:
寻求到基地址后我们得到了有一个20位的数据,现在需要在该地址基础上找要访问的单元,离基地址的这段
距离这个数又得从 一个16位寄存器中取出,所以他能装的最大值 0FFFFH(1111 1111 1111 1111)。
当我们定这个范围的 偏移地址 后地址加法器就会将 20位的基地址和 16位的偏移地址高位补0得到20位 加
在一起 得到最终的物理地址,或者说内存编号。
3、物理地址的计算方法
a、 物理地址 = 基础地址 + 偏移地址
基础地址 需要自己计算是不是能被16整除
b、 物理地址 = 段地址 * 16 + 偏移地址
基础地址 肯定能被16整除
4、比喻理解(此理解参考网上)
a、 物理地址 迟子的每个刻度
基地址 厘米刻度 * 厘米段内的毫米数
段地址 厘米刻度
偏移地址 厘米的毫米刻度
b、《王爽—汇编语言》 第30页比喻
浙公网安备 33010602011771号