一、逻辑地址和物理地址
物理地址可以理解成是某个存储单元的真正的地址,然而地址总线有20位,寄存器们只有16位,无法完全访问到呀。所以就想到一个办法,搞出一个逻辑地址,之后编程都使用逻辑地址。
写法为 aaaa:bbbb
前者为段地址,后者为偏移地址。
物理地址=段地址左移一位+偏移地址。
16进制左移一位相当于2进制左移4位,于是就是16+4=20位了。
(但是据说逻辑地址不唯一,这个地方现在还不太理解,而且这样的话如何避免呢?以后补。)
二、偏移地址和段地址
其实就是把内存人为地分成了好几个段。每个段都有一堆存储单元。
偏移地址就是在这个段的基础上,具体的存储单元位置。
就比如一栋楼有好几个单元(段地址),一个人具体住在几层几号房间(偏移地址)。这样找一户人家就比把所有住户都排好队一个一个找容易多了。
(现在想到的问题是,一个段有多少存储单元?有没有一堆操作数跨越两个段的可能性?如何避免?以后补)
段地址存储在段寄存器中。4个段寄存器:CS DS SS ES
偏移地址则可以用很多方式来表示,接下来会在寻址方式里介绍。
三、寻址方式
什么是寻址方式?就是我需要把某个值交给某个寄存器(可以不只是通用寄存器吗)。有的值直接给出来,有的值具体是多少不知道但是储存在别的地方。所以汇编语言中就有不同的表示方式表示值的位置。然后CPU根据不同的表示方式去找那个值。就是所谓的“寻址”。【但是为什么要寻“址”呢,叫寻“值”方式才会更方便更容易理解吧→_→
(书上用了“操作数”这个词,不知道当初又是怎么翻译的,原因是啥,反正挺误导人啊,这到底是什么还不太清楚。以后补)
寻址方式主要分为三种:
立即寻址;寄存器寻址;存储器寻址
立即寻址
值直接给出来了。所以就直接把这个值交给寄存器就好了。
e.g. MOV AX,1234H
电脑很聪明的所以如果立即数是8位比如12H,而寄存器是16位,会自动把8位看成16位存成0012H。但是立即数位数比寄存器多就不行了,因为它一定哪个也不想放弃吧【笑】
寄存器寻址
直译就好。值储存在另外一个寄存器了。所以就把值直接丢过去就好了。
E.G. MOV AX,BX
不用访问存储器,因为寄存器在CPU里,存储器是一个跟cpu平行的一个硬件部分,在cpu外面。所以这方法执行速度很快。
另外可以在一个寄存器内部传递
e.g. MOV AH,AL
存储器寻址
这个有点麻烦了就。指令明明需要在cpu内执行,然后需要的值在存储器里。这又要引入一些新的名词。
我们的偏移地址(有效地址)=基址+变址+位移量
基址寄存器只有BX BP;变址寄存器只有SI DI
位移量也可以为负值!
要找的值在存储器里,具体在哪明显是个物理地址,然而cpu没法直接通过物理地址找到目标,只能通过逻辑地址找了。
段地址都在段寄存器里,但是偏移地址又有不同的给出方法。
如果偏移地址直接给出,我们称为
直接寻址
MOV AX,[1234H] ;之所以用[]我想就是为了和立即寻址做区分。
注意此情况段地址默认储存在DS中。
----------------------------------------------------------
如果偏移地址存储在另外一个寄存器里,称为
寄存器间接寻址
MOV AX,[BX]
注: 如果后面的这个寄存器是BP,那么默认的段寄存器是SS;否则仍是DS
----------------------------------------------------------
如果偏移地址一部分储存在寄存器里(基址或变址),另一部分直接表示(位移量),称为
寄存器相对寻址
可以这样理解,一个人知道某人具体住几单元(基址或变址),然后另一人则知道此人具体住哪间房,两人所知道的合起来就可以确定某人的具体地址了。位移量可以取负,所以想象成这栋楼地上地下都能住人吧。
MOV AX,[BX+1000H]==MOV AX,[BX]1000H
注: 如果后面的这个寄存器是BP,那么默认的段寄存器是SS;否则仍是DS
----------------------------------------------------------
如果偏移地址储存在两个寄存器里,就是基址和变址的和了。称为
基址变址寻址
MOV AX,[BX][SI];or MOV AX,[BX+SI]
注: 如果后面的这个寄存器是BP,那么默认的段寄存器是SS;否则仍是DS
----------------------------------------------------------
相对基址变址寻址
除了基址、变址,又加上位移量,构成我们的偏移地址。
MOV AX,[BX+SI+1000H]== MOV AX,1000H[BX][SI]
以上是8086的几种寻址方式,386以上就是在不同的位置乘上比例因子(1、2、4、8)
还没弄明白的记得之后补呀!!!!!
困死明天还有早课_(:зゝ∠)_
2015/11/20 凌晨2:09