Assembly 更高級的間接尋址

2018-10-29 14:34 更新
不要驚訝,間接尋址經(jīng)常與數(shù)組一起使用。最普遍的間接內(nèi)存引用格式為:


[ base reg(基址寄存器) + factor(系數(shù)) *index reg(變址寄存器) +constant(常量) ]


其中:


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


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


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

常量 為一個32位的常量。這個常量可以是一個變量(或變量表達式)。


例子:

這有一個使用數(shù)組并將它傳遞給函數(shù)的例子。它使用array1c.c程序(下面列出的)作為驅動程序,而不是driver.c程序。


實例1

實例2

實例3

實例4


再看一下LEA指令

LEA指令不僅僅可以用來計算地址,也可以用作其它目的。一個相當普遍的目的是快速計算??紤]下面的代碼:

lea     ebx, [4*eax + eax]

這條代碼有效地將5 £ EAX的值儲存到EBX中。相比于使用MUL指令,使用LEA既簡單又快捷。但是,你必須認識到在方括號里的表達式必須是一個合法的間接地址。因此,例如,這個指令就不可以用來快速乘6。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號