Linux下彙編學習 3定址方式

2021-06-02 08:59:45 字數 965 閱讀 7280

同intel彙編定址方式都是一樣的,只是語法上有點區別。通用的定址格式如下:

final address = address_or_offset + %base_or_offset + multiplier * %index
其中address_or_offset、multiplier都是常量,另外兩個必須是暫存器,還有其中一些欄位是可以省略的,省略掉的字段相當於用0代替。

1. 直接定址

這種定址方式相當於只使用了address_or_offset欄位,定址格式如下:

movl address, %eax
例如:

movl 0x0100, %eax
intel語法是:

mov eax, [0100]

2. 變址定址

這裡只用到了address_or_offset和%index兩個字段,index可以是所有的通用暫存器,也同樣可以包含multiplier欄位,例如1, 2, 4,還是來看實際的例子吧(maximum.s):

movl $0, %edi

movl data_items(,%edi,4), %eax

data_items在高階語言中可以叫做陣列吧,這裡相當於把陣列中的第乙個元素拷貝到eax暫存器中。因為data_items定義為long型別,如果edi值為1呢,那麼movl data_items(,%edi,4), %eax這句話相當於把陣列中的第二個元素拷貝到

暫存器eax中,所以這種定址方式適用於遍歷陣列。

3. 間接定址

movl (%eax), %ebx
同intel語法為:

mov eax, [esi]

4. 基址定址

類似於間接定址,例如:

movl 4(%eax), %ebx
intel語法為:

mov eax, [ebp-8]

彙編 定址方式

定址方式 1立即定址方式 運算元包含在指令中,作為指令的一部分,跟在操作碼後存放在 段。這種運算元稱為立即數,可以是16位,也可以是8位。前者按照高高低低原則存放。例子 mov ax,1234h 2暫存器定址方式 運算元在cpu內部的暫存器中,指令中指定暫存器號。對於16位運算元,暫存器可以是ax,...

彙編 定址方式

定址方式 1立即定址方式 運算元包含在指令中,作為指令的一部分,跟在操作碼後存放在 段。這種運算元稱為立即數,可以是16位,也可以是8位。前者按照高高低低原則存放。例子 mov ax,1234h 2暫存器定址方式 運算元在cpu內部的暫存器中,指令中指定暫存器號。對於16位運算元,暫存器可以是ax,...

組合語言定址方式(Linux

位址或偏移 基位址暫存器,索引暫存器,比例因子 計算結果 位址或偏移 基位址或偏移量暫存器 比例因子 索引暫存器 其中所有欄位都是可選的。具體如何省略的,會在後面說明。注意,藍色代表使用,綠色代表保被省略的部分。movl 0x1234,eax 通式分解 位址或偏移 基位址暫存器,索引暫存器,比例因子...