我可以这么理解寻址方式吗?
我可以这么理解寻址方式吗?8086CPU寻址方式
直接寻址idata是立即数
寄存器间接寻址
寄存器间接寻址
寄存器间接寻址
寄存器间接寻址
寄存器相对寻址(bx是相对立即数idata的偏移地址)
bx是偏移地址,段地址默认ds,si是相对bx的偏移地址
bx是偏移地址,段地址默认ds,si是相对立即数idata的偏移地址
一般的寄存器间接寻址,方括号内是偏移,默认段地址在 ds 寄存器,只有涉及到 bp 寄存器的间接寻址(方括号内的表达式中有 bp 寄存器)比较特殊,其段地址在 ss 寄存器中。 本帖最后由 竹逸 于 2022-5-28 10:41 编辑
jackz007 发表于 2022-5-27 19:27
一般的寄存器间接寻址,方括号内是偏移,默认段地址在 ds 寄存器,只有涉及到 bp 寄存器的间接寻址(方 ...
关于地址(比如段地址、基址、偏移地址、物理地址)我是这样理解的
物理地址:是唯一的内存地址
内存中每一个存储单元都是以线性排列的,为了方便区分谁是谁,我们用记标号的方式来定位每一个存储单元,第一个存储单元从0开始标号,以此类推,这些标号就是每一个存储单元在当前位置的地址值,存储单元都是实实在在存在的,所以把为这些存储单元分配的地址值称为物理地址
8086 CPU内部是16位的,也就是说各个总线的宽度均为16位,可是它与外部器件的地址总线宽度是20位,那么8086CPU是如何实现用内部16位的地址总线去寻址外部20位的物理地址呢?
CPU的设计师就想出了一个折中的办法,用两个16位的地址来合成一个20位的物理地址,其中一个16位的地址就称为段地址,另一个16位的地址就称为偏移地址,段地址和偏移地址都是16位的,用十六进制表示则是4位,他们通过地址加法器把4位的段地址左移一位来组成一个5位的基础地址,相当于原来的4位数*10H后变成了5位数,然后和偏移地址相加合成物理地址
段地址*10H + 偏移地址 = 物理地址
基础地址也是物理地址,是段首地址(一个段中连续内存单元的起始地址)
偏移地址是相对于基址的偏移量
段地址 基址 偏移地址 物理地址
0000 00000 0~F 00000~0000F
0001 00010 0~F 00010~0001F
0002 00020 0~F 00020~0002F
……
FFFF FFFF0 0~F FFFF0~FFFFF
可以看出段地址每增1,则基础地址增10H,也就说明上下段的间隔是16个存储单元,而这16个存储单元是通过偏移地址来索引的,基础地址负责定位每个段首地址,通过 段地址*10H+偏移地址 的方式就可以完美索引到外部20位(00000~FFFFF)物理地址 当然内存地址并没有被分段,这里的分段是由于内部总线位数的不足而引出的概念,偏移地址的索引范围也不是只有0~f,最大值应该是ffff,这是只是便于理解就将索引范围定为只有16个字节
页:
[1]