AT&T彙編心得之間接定址和LEA指令

NO IMAGE

AT&T彙編心得(1)
定址方式:
0x4(%esp)的操作是把暫存器esp中的值取出,然後加上4,得到的值作為地址,間接定址得到需要的資料
例如:
pushl -0x4(%ecx)
該指令的含義是取出暫存器ecx的值,減去4,將得到的值作為地址,在記憶體找到該地址對應的值,將其壓入棧中。
這是執行後的結果:
ecx            0xbff01450
esp            0xbff0143c    0xbff0143c
ebp            0xbff01498    0xbff01498

(gdb) x/x $esp
0xbff0143c:    0x0804840a    
(gdb) x/x 0xbff0144c
0xbff0144c:    0x0804840a
其中,記憶體0xbff0144c即為%ecx-4後得到的值

指令LEA的作用和80×86彙編有些類似,即地址傳遞,下面舉例說明:
LEA 0x4(%esp), %ecx
該指令的作用是,取出esp暫存器裡的值,加上4,不再繼續定址,而是將得到值直接傳遞給ecx;如果是其他指令,則還需進行間接定址,再傳值。