這一節,我們主要來討論定址方式,這一點十分重要。
我們上一節有稍微提了一下,記憶體位址引用的通用格式:
位址或偏移(%基址暫存器, %索引暫存器, 比例因子 )
結果位址 = 位址或偏移 + %基址暫存器 + 比例因子 + %索引暫存器
位址或偏移和比例因子必須是常數,剩下的那兩個必須是暫存器,在預設的情況下,都用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 通式分解 位址或偏移 基位址暫存器,索引暫存器,比例因子...