8086汇编学习笔记6-寻址方式

来源:互联网 发布:淘宝导航栏分割线代码 编辑:程序博客网 时间:2024/05/19 03:44

寻址,寻的什么址,当然是内存,寻址方式有多种,就像我回四川一样,可以坐飞机,然后坐火车,也可以直接坐火车,当然还可以坐汽车,不过我到没有试过。

1. 操作数据的地址,有四个寄存器bx,si,di和bp可以用来对内存单元的寻址

(1)直接寻址ds:[idata]

(2)寄存器间接寻址,[bx]、[si]、[di]、[bp]

(3)寄存器相对寻址[bx+idata]、[si+idata]、[di+idata]、[bp+idata]

(4)基址变址寻址[bx+si]、[bx+di]、[bp+si]、[bp+di]

(5)相对基址变址寻址[bx+si+idata]、[bx+di+idata]、[bp+si+idata]、[bp+di+idata]

注意:使用bp代替bx使用时,bp与bx不同之处在于,如果没有显示各给出段地址,则段地址默认在ss中

2. 操作数据的长度

(1) 通过寄存器隐式的指明数据操作的长度

(2) 通过byte ptr或word ptr显示指明数据操作的长度


//2015.08.05 add
再来说说寻址方式吧,结合实际的例子。
1. 直接寻址
其中idata表示一个立即数,例如:

mov ax, [0]
将段地址为ds,偏移地址为0,长度为2字节的内存单元数据送入到寄存器ax中,再例如:
mov al, [0]
将段地址为ds,偏移地址为0,长度为1字节的内存单元数据送入到寄存器al中,可见操作内存单元的长度和具体的操作对象相关,比如寄存器。

2. 寄存器间接寻址
上面是直接寻址,也叫做立即数寻址,而寄存器间接寻址的地址偏移不在是一个立即数了,而是在一个寄存器中,但并不是所有的寄存器都能够用作寻址的,只有bx、si、di、bp这四个寄存器。例如:
mov ax, [bx]
将段地址为ds,偏移地址为bx,长度为2字节的内存单元数据送入到寄存器ax中。

3. 寄存器相对寻址
寄存器相对寻址就是将前两种寻址方式结合在了一起,例如:
mov ax, [bx+200]
将段地址为ds,偏移地址为bx+200,长度为2字节的内存单元数据送入到寄存器ax中。上面那条指令也可以写成下面这些格式:
mov ax, [200+bx]mov ax, 200[bx]mov ax, [bx].200

4. 基址变址寻址
例如:
mov ax, [bx+si]
将段地址为ds,偏移地址为bx+si,长度为2字节的内存单元数据送入到寄存器ax中。该指令也可以写成如下格式:
mov ax, [bx][si]

5. 相对基址变址寻址
例如:
mov ax, [bx+si+200]
将段地址为ds,偏移地址为bx+si+200,长度为2字节的内存单元数据送入到寄存器ax中。该指令也可以写成下面这些格式:
mov ax, [bx+200+si]mov ax, [200+bx+si]mov ax, 200[bx][si]mov ax, [bx].200[si]mov ax, [bx][si].200

总结出来就是:[idata]、[bx]、[bx+idata]、[bx+si]、[bx+si+idata],而bp寄存器可以替代bx寄存器,只是bp默认段地址在ss中。

原创粉丝点击