ARM7處理器有兩個指令集:32位的ARM指令集,16位的Thumb指令集。
1>ARM指令集:效率高,代碼密度高
2>Thumb指令集:具有較高的代碼密度。
注:
1.所有的ARM指令集都是有條件執(zhí)行的,而Thumb指令集僅有一條指令具備條件執(zhí)行功能。
2.ARM程序和Thumb程序可相互調(diào)用,相互之間的狀態(tài)切換開銷幾乎為零。
二.ARM處理器尋址方式
尋址方式是指根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式。ARM7處理器總共有9中基本的尋址方式。
1.寄存器尋址
1>操作數(shù)的值存放在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。
2>MOVR1,R2
將R2寄存器中的值存放到R1寄存器中
3.寄存器移位尋址
1>操作數(shù)2先進(jìn)行移位操作,然后再與第一個操作數(shù)進(jìn)行操作。
2>MOVR0,R1,LSL #3
將R1的值左移三位,然后將結(jié)果放入R0中。等價于R0=R1*23
4.寄存器間接尋址
1>指令中的地址碼給出的是一個通用寄存器的編號,指令所需的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針。
2>LDRR1,[R2]
將R2指向的存儲單元中的數(shù)據(jù)讀出保存在R1中。
5.基址尋址
1>基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址。
2>基址尋址用于訪問基址附件的存儲單元,常用于查表和數(shù)組操作。
3>LDRR2,[R3,#0X0C]
讀取R3+0X0C地址處的數(shù)據(jù)存放到R2寄存器中。
6.多寄存器尋址
1>多寄存器尋址一次可傳送n個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。
2>LDMIAR1! ,{R2-R4,R6}
將R1和R1之后寄存器中的值讀出保存到R2-R4,和R6中。其中R1每次自加一。
7.堆棧尋址
1>堆棧尋址是隱含的,它使用一個專門的寄存器(堆指針)指向一塊存儲區(qū)域(堆棧)。指針?biāo)赶虻拇鎯卧词嵌褩5臈m敗?/p>
2>存儲器堆??煞譃閮煞N
?向上生長:向高地址方向生長,稱為遞增堆棧。
?向下生長:向低地址方向生長,稱為遞減堆棧。
3>按堆棧指針的執(zhí)行順序分為
?滿堆棧:堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)。
<即當(dāng)有數(shù)據(jù)入堆棧時,棧頂指針先加一,然后數(shù)據(jù)入棧
?空堆棧:堆棧指針指向下一個待壓入數(shù)據(jù)的空位置。
<即當(dāng)有數(shù)據(jù)入堆棧時,數(shù)據(jù)先入棧,然后棧頂指針在加一>
8.相對尋址
相對尋址是基址尋址的另一種形式。由程序計數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即操作數(shù)的有效地址。
9.立即尋址
1>立即尋址中,操作碼字段后面的部分不是操作數(shù)地址而是操作數(shù)本身。
2>MOVR0,#0XAA
將立即數(shù)0XAA存放到寄存器R0中。