定址方式是指處理器根據指令中給出的位址資訊來尋找實體地址的方式,目前arm指令系統支援以下幾種定址方式:
也稱為立即數定址,這種定址方式指令中就已經給出了運算元。也就是在執行指令的過程中,處理器取得指令的同時也取得了運算元,因此稱為立即數定址。例如:
add r0, #1 ;r0+1->r0
add r0, r0, #0x3f ;r0+0x3f->r0
在上面兩條指令中,源運算元就是立即數,要求以「#」開始,對於十六進製制的立即數,要求在「#」後面加「0x」或「&」。
即將暫存器中的數值作為運算元,是各類微處理器常用的定址方式,也是效率較高的定址方式。例如:
add r0, r1, r2 ;r1+r2->r0
該指令的執行效果是將r1和r2的值相加,將結果存入r0
add r0, r1, [r2] ;r1+[r2]->r0
ldr r0, [r1] ;[r1]->r0
第一條指令,以暫存器r2的值作為運算元的位址,在暫存器中取得乙個運算元後與r1相加,將結果存入暫存器r0。第二條指令,將暫存器中以r1為位址的值賦給r0。
ldr r0, [r1, #4] ;[r1+4]->r0
第一條指令,將暫存器r1的值加上4作為運算元的有效位址,取得運算元後存入r0中。
ldr r0, [r1, #4]! ;[r1+4]->r0、r1+4->r1
第二條指令,將暫存器r1的值加上4作為運算元的有效位址,取得運算元後存入r0中,然後暫存器r1的值加上4個位元組。
ldr r0, [r1], #4 ;[r1]->r0、r1+4->r1
第三條指令,將暫存器r1的值作為運算元的有效位址,取得運算元後存入r0中,然後暫存器r1的值加上4個位元組。
ldr r0, [r1, r2] ;[r1+r2]->r0
第四條指令,將暫存器r1和r2的值相加作為運算元的有效位址,取得運算元後存入r0中。
使用多暫存器定址,一條指令可以完成多個暫存器值的傳送,一條指令最多可以傳送16個通用暫存器的值。例如:
ldmia r0, ;[r0]->r1,[r0+4]->r2,[r0+8]->r3,[r0+12]->r4
該指令字尾ia表示每次執行完讀取/儲存操作後,r0按字長增加,因此,指令可以將連續儲存單元的值傳送到r1~r4。
與基址變址定址類似,相對定址以程式計數器pc的當前值作為基位址,指令中的位址標號作為偏移量,將兩者相加後得到運算元的有效位址。以下程式完成子程式的呼叫和返回,跳轉指令bl採用了相對定址方式:
bl next ;跳轉到子程式next處執行指令
......
next
......
mv pc, lr ;從子程式返回
堆疊是一種資料結構,按先進後出的方式工作,使用乙個稱為堆疊指標的專用暫存器指示當前的操作,堆疊指標總是指向堆疊頂端。當堆疊指標指向最後壓入的資料時,稱為滿堆疊;當堆疊指標指向下乙個將要壓入的位置時,稱為空堆疊。
根據堆疊的生成方式,可分為遞增堆疊和遞減堆疊。當堆疊由低位址向高位址生成時,稱為遞增堆疊,反之稱為遞減堆疊。排列組合後可得到4中型別的堆疊工作方式,arm微處理器支援全部4種型別的堆疊工作方式。具體如下:
ARM定址方式
arm定址方式定義 處理器根據指令中給出的資訊來找到所需運算元的方式 立即數定址 運算元本身就在指令中給出,只需要取出指令就得到了運算元的方式。運算元稱為立即數 add r0,r0,0x3f r0 r0 3f 第二個數就是運算元,需要用 來作為字首 暫存器定址 運算元存在暫存器中,利用暫存器中的數值...
ARM定址方式
定址方式就是指處理器根據指令中的資訊來找到指令所需的運算元的方式。arm標準彙編中使用分號注釋,gnu彙編使用 注釋 1.立即數定址 是一種特殊的定址方式,運算元就在指令中給出,只要取出指令也就取出了運算元,這個運算元也稱為立即數。add r0,r0,0x3f r0 r0 0x3f在上面這條指令中,...
ARM定址方式
所謂定址方式就是處理器根據指令中給出的位址資訊來尋找實體地址的方式。arm處理器的定址方式 目前arm處理器支援9種定址方式,分別是立即數定址 暫存器定址 暫存器偏移定址 暫存器間接定址 基址變址定址 多暫存器定址 相對定址 堆疊定址和塊拷貝定址。1.立即數定址 也叫立即定址,是一種特殊的定址方式,...