Linux彙編教程04 定址方式

2022-01-12 07:00:31 字數 1100 閱讀 2608

這一節,我們主要來討論定址方式,這一點十分重要。

我們上一節有稍微提了一下,記憶體位址引用的通用格式:

位址或偏移(%基址暫存器, %索引暫存器, 比例因子 )

結果位址 = 位址或偏移 + %基址暫存器 + 比例因子 + %索引暫存器

位址或偏移和比例因子必須是常數,剩下的那兩個必須是暫存器,在預設的情況下,都用0來代替。

立即定址方式

直接將值載入到目地位置中

movl $221, %eax

直接定址方式

通過使用位址或偏移來實現

movl address, %eaxp>

索引定址方式

通過位址或偏移以及%索引暫存器部分實現。你可以將任何通用暫存器用作索引暫存器。

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

間接定址方式

以暫存器中的值作為位址,獲得這個位址裡的值。

movl (%eax), %ebx

基址定址方式

和間接定址類似,但多了乙個常量和暫存器中的位址相加,

movl 4(%eax), %ebx

暫存器定址方式

就是資料的移入移出

這些方式大家要理解他們的特點,了解原理,到時候講到堆疊之類的方便多了。

我們之前有講過,32位暫存器都以e開頭開頭,%eax是我們的擴充套件暫存器,這種命名實現對以前的相容,

以前使用%ax的16位暫存器,當然32位暫存器也可以使用%ax,%ax是%eax最低有效字(數值的後半部分),

同理%ax還可以封出一位元組的%ah和%al。%ah是%ax中最高有效半字,%al是最低有效半字

彙編 定址方式

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

彙編 定址方式

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

組合語言定址方式(Linux

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