arm 指令的定址方式:1.
立即定址
立即定址也叫立即數定址,這是一種特殊的定址方式,運算元本身就在指令中給出,只要取出指令也就取到了運算元。這個運算元被稱為立即數,對應的定址方式也就叫做立即定址。例如以下
指令:add r0,r0,#1 ;r0←r0+1
add r0,r0,#0x3f ;r0←r0+0x3f
在以上兩條指令中,第二個源運算元即為立即數,要求以「#」為字首,對於以十六進製制表示的立即數,還要求在「#」後加上「0x」或「&」。
2.暫存器定址
暫存器定址就是利用暫存器中的數值作為運算元,這種定址方式是各類微處理器經常採用的一種方式,也是一種執行效率較高的定址方式。以下指令:
add r0,r1,r2 ;r0←r1+r2
該指令的執行效果是將暫存器r1和r2的內容相加,其結果存放在暫存器r0中。
3.暫存器間接定址
add r0,r1,[r2] ;r0←r1+[ r2]
ldr r0,[ r1] ;r0←[ r1]
str r0,[ r1] ;[ r1] ←r0
在第一條指令中,以暫存器r2 的值作為運算元的位址,在儲存器中取得乙個運算元後與 r1 相加,結果存入暫存器 r0 中。第二條指令將以 r1 的值為位址的儲存器中的資料傳送到 r0 中。第三條指令將 r0 的值傳送到以 r1 的值為位址的儲存器中。
4.基址變址定址
基址變址定址就是將暫存器(該暫存器一般稱作基址暫存器)的內容與指令中給出的位址偏移量相加,從而得到乙個運算元的有效位址。變址定址方式常用於訪問某基位址附近的位址單元。採用變址定址方式的指令常見有以下幾種形式,如下所示:
ldr r0,[r1,#4] ;r0←[ r1+4]
ldr r0,[r1,#4]!;r0←[ r1+4] 、r1←r1+4
ldr r0,[r1] ,#4 ;r0←[ r1] 、r1←r1+4
ldr r0,[r1,r2] ;r0←[ r1+r2]
在第一條指令中,將暫存器r1 的內容加上 4 形成運算元的有效位址,從而取得運算元存入暫存器 r0 中。
在第二條指令中,將暫存器r1 的內容加上 4 形成運算元的有效位址,從而取得運算元存入暫存器 r0 中,然後,r1 的內容自增 4 個位元組。
在第三條指令中,以暫存器r1 的內容作為運算元的有效位址,從而取得運算元存入暫存器 r0中,然後,r1 的內容自增 4 個位元組。
在第四條指令中,將暫存器r1 的內容加上暫存器 r2 的內容形成運算元的有效位址,從而取得運算元存入暫存器 r0 中。
5.多暫存器定址
採用多暫存器定址方式,一條指令可以完成多個暫存器值的傳送。這種定址方式可以用一條指令完成傳送最多 16 個通用暫存器的值。以下指令:
ldmia r0,
;r1←[ r0]
;r2←[ r0+4]
;r3←[ r0+8]
;r4←[ r0+12]
該指令的字尾 ia 表示在每次執行完載入/儲存操作後,r0 按字長度增加,因此,指令可將連續儲存單元的值傳送到 r1~r4。
6.相對定址
與基址變址定址方式相類似,相對定址以程式計數器 pc 的當前值為基位址,指令中的位址標號作為偏移量,將兩者相加之後得到運算元的有效位址。以下程式段完成子程式的呼叫和返回,跳轉指令 bl 採用了相對定址方式:
bl next ;跳轉到子程式 next 處執行
next
mov pc,lr ;從子程式返回
7.堆疊定址
堆疊是一種資料結構,按先進後出(first in last out,filo)的方式工作,使用乙個稱作堆疊指標的專用暫存器指示當前的操作位置,堆疊指標總是指向棧頂。當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊(full stack),而當堆疊指標指向下乙個將要放入資料的空位置時,稱為空堆疊(empty stack)。同時,根據堆疊的生成方式,又可以分為遞增堆疊(ascending stack)和遞減堆疊(decendingstack),當堆疊由低位址向高位址生成時,稱為遞增堆疊,當堆疊由高位址向低位址生成時,稱為遞減堆疊。這樣就有四種型別的堆疊工作方式,arm 微處理器支援這四種型別的堆疊工作方式,
即:
15 ARM彙編自學筆記指令系統之移位指令(操作)
移位指令 操作 arm微處理器內嵌的桶型移位器 barrel shi f t er 支援資料的各種移位操作,移位操作在arm指令集中不作為單獨的指令使用,它只能作為指令格式中是乙個字段,在組合語言中表示為指令中的選項。例如,資料處理指令的第二個運算元為暫存器時,就可以加入移位操作選項對它進行各種移位...
06 ARM彙編自學筆記指令系統之分類與格式
三指令系統 arm 微處理器的指令的分類與格式 arm微處理器的指令集是載入 儲存型的,也即指令集僅能處理暫存器中的資料,而且處理結果都要放回暫存器中,而對系統儲存器的訪問則需要通過專門的載入 儲存指令來完成。arm微處理器的指令集可以分為跳轉指令 資料處理指令 程式狀態暫存器 psr 處理指令 載...
17 ARM彙編自學筆記指令系統之異常產生指令
異常產生指令 arm 微處理器所支援的異常指令有如下兩條 swi 軟體中斷指令 bkpt 斷點中斷指令 1 swi 指令 swi 指令的格式為 swi 24位的立即數 swi 指令用於產生軟體中斷,以便使用者程式能呼叫作業系統的系統例程。作業系統在 swi 的異常處理程式中提供相應的系統服務,指令中...