Assembly 更高级的间接寻址

2018-10-29 14:34 更新
不要惊讶,间接寻址经常与数组一起使用。最普遍的间接内存引用格式为:


[ base reg(基址寄存器) + factor(系数) *index reg(变址寄存器) +constant(常量) ]


其中:


基址寄存器 可以是EAX,EBX,ECX,EDX,EBP,ESP,ESI或EDI寄存器。


系数 可以是1,2,4或8。(如果是1,系数是可以省略的。)


变址寄存器 可以是EAX,EBX,ECX,EDX,EBP,ESI或EDI寄存器。(注意ESP并不可以。)

常量 为一个32位的常量。这个常量可以是一个变量(或变量表达式)。


例子:

这有一个使用数组并将它传递给函数的例子。它使用array1c.c程序(下面列出的)作为驱动程序,而不是driver.c程序。


实例1

实例2

实例3

实例4


再看一下LEA指令

LEA指令不仅仅可以用来计算地址,也可以用作其它目的。一个相当普遍的目的是快速计算。考虑下面的代码:

lea     ebx, [4*eax + eax]

这条代码有效地将5 £ EAX的值储存到EBX中。相比于使用MUL指令,使用LEA既简单又快捷。但是,你必须认识到在方括号里的表达式必须是一个合法的间接地址。因此,例如,这个指令就不可以用来快速乘6。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号