汇编语言(二)寻址方式
程序员文章站
2024-02-02 15:53:04
...
8086指令体系总共有7种寻址方式,详细如下:
立即数寻址
mov ax, 3069H
直接将值为3069H的立即数放到ax中。
寄存器寻址
mov AL, BH
将BH寄存器的值放入AL中。
寄存器间接寻址
使用BX寄存器进行间接寻址,BP,BI,DI寄存器也行。
mov ax, [bx]
将bx保存的值当做偏移地址,这里假设为2000H,再到DS:2000H号单元中取出值放到ax中。
tips:注意在通用寄存器组中只有bx能够进行间接寻址,AX、CX、DX不行。
寄存器相对寻址
操作数的有效地址为基址寄存器(BP,SP)和变址寄存器(DI,SI)的内容和指令中指定的偏移量之和。
mov ax, count[SI]
mov ax, [count + SI]
这里的count是一个偏移量,可以是一个常数或者一个变量。
内存寻址
直接寻址
mov ax,[2000H]
将DS:2000H号单元的内容放入ax中,如果要指定别的段的话要使用段跨越前缀。例如
mov ax, ES:[2000H]
要写上ES才能指定该段的有效地址为2000H号单元。
同时该寻址方式的操作数地址也可以由变量给出:
value db 10
mov ah, value
mov ax, word ptr value # 将value强制转化为字类型
在汇编语言中,变量名即意味着对应单元的偏移地址,因此直接使用变量名的方式也能进行内存寻址。
基址变址寻址
操作数的有效值是一个基址寄存器和一个变址寄存器的内容之和,例如
mov ax, [BX][DI]
mov ax, [BX + DI]
其可能的组合为
DS:[BX|BP][DI|SI]
相对基址变址寻址
操作数的有效地址为一个基址寄存器,一个变址寄存器和一个偏移量之和构成
mov ax, count[bx][si]
mov ax,[count + bx + si]
注意源对象的位数大小要和目标对象的位数大小相等。
寻址方式汇总如下
寻址方式 | 指令格式 |
---|---|
立即数寻址 | mov ax, 1000H |
寄存器寻址 | mov ax, bx |
寄存器间接寻址 | mov ax, [bx] |
寄存器相对寻址 | mov ax, count[bx] |
直接寻址 | mov ax, [2000H] |
基址变址寻址 | mov ax, [bx + di] |
相对基址变址寻址 | mov ax, count[bx + di] |
段寄存器的使用规定
访问方式 | 默认寄存器 | 可跨越 | 偏移地址 |
---|---|---|---|
取指令 | cs | 无 | ip |
堆栈操作 | ss | 无 | sp |
一般数据访问 | ds | cs,es,ss | 有效地址EA |
BP作为基址寻址 | ss | cs,ds,es | BP |
串操作的源操作数 | ds | cs,es,ss | SI |
串操作的目的操作数 | ES | 无 | DI |
上一篇: 十大技巧 让你的搜狗输入法十全十美
下一篇: 汇编语言程序,求100个数中的最大数