Arm處理器是基于精簡指令集計算機(RISC)原理設(shè)計的,指令集和相關(guān)譯碼機制較為簡單,具有32位Arm指令集和16位Thumb指令集,Arm指令集效率高,但是代碼密度低,而Thumb指令集具有更好的代碼密度,卻仍然保持Arm的大多數(shù)性能上的優(yōu)勢,它是Arm指令集的子集。所有Arm指令都是可以有條件執(zhí)行的,而Thumb指令僅有一條指令具備條件執(zhí)行功能。Arm程序和Thumb程序可相互調(diào)用,相互之間的狀態(tài)切換開銷幾乎為零。
Cortex-M0處理器基于ARMv6-M架構(gòu),是一款功耗和性能較為均衡的處理器。Cortex-M0只支持56條指令的小指令集,其中大部分指令是16位指令。
Arm Cortex-M 指令集對比:
1. 指令集
1.1 在處理器內(nèi)移動數(shù)據(jù)
MOV
1.2 存儲器訪問
確保訪問的內(nèi)存地址是對齊的,這一點很重要。在ARMv6-M架構(gòu)(包括Cortex-M0和Cortex-M0處理器)上不支持非對齊傳輸。任何未對齊內(nèi)存訪問的嘗試都會導(dǎo)致HardFault異常。
LDR
1.3 ??臻g訪問
PUSH{
1.4 算數(shù)運算
ADD
1.5 邏輯運算
ANDS
1.6 移位和循環(huán)操作
ASRS
1.7 展開和順序反轉(zhuǎn)操作
這些反向指令通常用于在小端和之間轉(zhuǎn)換數(shù)據(jù)大整數(shù)。
REV
1.8 擴展操作
它們通常用于數(shù)據(jù)類型轉(zhuǎn)換。
SXTB
1.9 程序流控制
B
條件轉(zhuǎn)移指令B
1.10 內(nèi)存屏障指令
在Cortex-M0和Cortex-M0處理器上支持內(nèi)存屏障指令,從而在Cortex-M處理器和其他ARM處理器家族中提供更好的兼容性。
//數(shù)據(jù)內(nèi)存屏障,確保所有內(nèi)存訪問都完成 //在新的內(nèi)存訪問被提交之前。
DMB
//數(shù)據(jù)同步屏障,確保所有的內(nèi)存訪問都完成 //在執(zhí)行下一條指令之前。
DSB
//指令同步障礙,刷新管道和 //確保之前所有的指令都已完成 //在執(zhí)行新指令之前。
ISB
1.11 異常相關(guān)指令
SVC
1.12 睡眠模式功能相關(guān)說明
//等待中斷,停止程序執(zhí)行,直到一個中斷到達, //如果處理器進入調(diào)試狀態(tài)。
WFI
//等待事件,如果設(shè)置了內(nèi)部事件寄存器,則清除 //內(nèi)部事件注冊和繼續(xù)執(zhí)行。 //停止程序執(zhí)行,直到事件(如中斷)到達 //如果處理器進入調(diào)試狀態(tài)。
WFE
//發(fā)送事件,設(shè)置本地事件寄存器并發(fā)送一個事件脈沖 //多處理器系統(tǒng)中的其他微處理器。
SEV
1.13 其他說明
NOP;NoOperation BKPT
2. 指令說明
2.1 可訪問high registers的指令
絕大部分指令只能訪問low registers,也就是只能訪問R0~R7寄存器??梢栽L問high registers的指令只有兩條,這兩條指令都不更新APSR,指令沒有S后綴。
MOV
其它兩條和SP加法有關(guān)的可以訪問high registers的指令其本質(zhì)是ADD指令。
ADDSP,
2.2 分配臨時變量的指令
函數(shù)內(nèi)的臨時變量分配到堆棧,進入函數(shù)給臨時變量分配空間時使用SUB指令。
SUB SP, SP, #immed7 ; SP = SP – ZeroExtend(#immed7<<2)
退出函數(shù)釋放臨時變量空間時使用ADD指令。
ADD SP, SP, #immed7 ; SP = SP + ZeroExtend(#immed7<<2)
上面兩條指令的立即數(shù)只有7位,最多可以增減SP指針127個字空間,如果超過127個字,使用這條指令:
ADD SP,
只有ADD指令,沒有SUB指令,如果需要SUB,那么給Rm賦值負數(shù)即可。
2.3 取臨時變量地址的指令
在堆棧分配了臨時變量空間后,總要取得臨時變量的地址才能做進一步的操作。
ADD
立即數(shù)不夠,可以用寄存器。
ADD
2.4 RSBS指令
RSBS
這是倒過來的減法,常量減去寄存器值,而且常量只能是0。所以這條指令實質(zhì)上就是一條取負數(shù)指令。
Rd = 0 - Rm 等價于:Rd = -Rm Rd 寄存器值等于負的 Rm 寄存器值。
原文標題:技術(shù)分享 | Cortex-M0中斷控制和系統(tǒng)控制(六)
文章出處:【微信公眾號:安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
處理器
+關(guān)注
關(guān)注
68文章
18926瀏覽量
227221 -
ARM
+關(guān)注
關(guān)注
134文章
8967瀏覽量
365018 -
指令集
+關(guān)注
關(guān)注
0文章
220瀏覽量
23280
原文標題:技術(shù)分享 | Cortex-M0中斷控制和系統(tǒng)控制(六)
文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論