AT&T: immed32(basepointer, indexpointer, indexscale)
Intel: [basepointer + indexpointer × indexscale + imm32)
如果操作系統工作於保護模式下,用的是32位線性地址,所以在計算地址時不用考慮segment:offset的問題。上式中的地址應爲:imm32 + basepointer + indexpointer × indexscale
EX:
-
直接尋址
AT&T: foo Intel: [foo]
foo是一個全局變量。注意加上$是表示地址引用,不加是表示值引用。對於局部變量,可以通過堆棧指針引用。 -
寄存器間接尋址
AT&T: (%eax) Intel: [eax] -
變址尋址
AT&T: _variable(%eax) Intel: [eax + _variable]
AT&T: _array( ,%eax, 4) Intel: [eax × 4 + _array]
AT&T: _array(%ebx, %eax,8) Intel: [ebx + eax × 8 + _array]