心血来潮的复习了下汇编的寻址方式!

来源:互联网 发布:gamma scalping 知乎 编辑:程序博客网 时间:2024/04/28 08:14

1.8086/8088寻址方式

立即寻址

立即数可以是8位,或者16位,采用高高低低存取的原则。

例:mov ax,1234h

这种寻址方式用于对存储单元或寄存器赋初值的情况

寄存器寻址

由于不需要访问存取器,这种寻址方式速度比较快

例:mov ax, bx

直接寻址

直接寻址通常用于处理单个存储器变量的情况,可以使用段超越前缀改变不用的段

例:mov ax,[1234h]

使用段超越前缀的话

Mov es:[1234h], bl

寄存器间接寻址

有效地址放于si,di,bx,bp四个寄存器当中,一般在不指定段前缀时,使用si,di,bx默认使用ds段寄存器,如果使用bp寄存器保存地址,则默认使用ss段寄存器

例:mov ax, [si]

使用段超越前缀

例:Mov dl,es:[bx]

当使用bp保存地址引用的则是ss段寄存器

例:mov [bp], cx

寄存器相对寻址

操作数的有效地址为一个基址寄存器(bx, bp)或者一个变址寄存器(si, di)加上一个8位或者16位的偏移量之和

例:mov ax, [di+ 1234h]

基址加变址寻址方式

操作数的有效地址由基址寄存器内容加变址寄存器的内容组成

例:mov ax, [bx+ si]

相对基址加变址寻址方式

操作数的有效地址由基址寄存器内容加变址寄存器内容加8位或者16位的偏移量构成

例:mov ax, [bx+ si + 1234h]

注意问题

基址寄存器可以混用但是不能用两个基址寄存器合用

例:mov ax, [bx+ bp]

这个是错误的

80386寻址方式

80386模式下除了可以兼容之前8086寻址方式外,还提供了更为灵活的32位寄存器的寻址方式:

80386的内存地址可以由3部分构成:一个32基址寄存器,一个可以乘以比例因子1,2,4,8的变址寄存器和一个8位或者32位的常数偏移量这3个部分可以任意省略去其中两部分

例:mov bh, [ebx+ esi * 8 + 8]

而所有的832位通用寄存器都可以当做基址寄存器,而除了esp外的另外7个通用寄存器都可当做变址寄存器使用

原创粉丝点击