嵌入式系統4+(ARM指令詳細介紹)_第1頁
嵌入式系統4+(ARM指令詳細介紹)_第2頁
嵌入式系統4+(ARM指令詳細介紹)_第3頁
嵌入式系統4+(ARM指令詳細介紹)_第4頁
嵌入式系統4+(ARM指令詳細介紹)_第5頁
已閱讀5頁,還剩58頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、西安電子科技大學計算機學院2西安電子科技大學計算機學院3數據處理指令數據處理指令load/store指令指令跳轉指令跳轉指令CPSR處理指令處理指令異常產生指令異常產生指令協處理器指令協處理器指令西安電子科技大學計算機學院4數據傳送指令(數據傳送指令(2條)條)算術運算指令(算術運算指令(6條)條)邏輯運算指令(邏輯運算指令(4條)條)比較指令(比較指令(2條)條)測試指令(測試指令(2條)條)乘法指令(乘法指令(6條)條)西安電子科技大學計算機學院5MOV指令指令 qMOV指令的格式為: MOV條件條件S 目的寄存器,源操作數目的寄存器,源操作數qMOV指令可完成從另一個寄存器、被移位的寄存

2、器或將一個立即數加載到目的寄存器。其中S選項決定指令的操作是否影響CPSR中條件標志位的值,當沒有S時指令不更新CPSR中條件標志位的值。指令示例:MOV R1,R0MOV R1,R0,LSL 3西安電子科技大學計算機學院6MVN指令指令 qMVN指令的格式為:MVN條件條件S 目的寄存器,源操作數目的寄存器,源操作數qMVN指令可完成從另一個寄存器、被移位的寄存器、或將一個立即數加載到目的寄存器。與MOV指令不同之處是在傳送之前按位被取反了,即把一個被取反的值傳送到目的寄存器中。其中S決定指令的操作是否影響CPSR中條件標志位的值,當沒有S時指令不更新CPSR中條件標志位的值。指令示例:MV

3、N R0,0西安電子科技大學計算機學院7ADD指令指令 qADD指令的格式為: ADD條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2qADD指令用于把兩個操作數相加,并將結果存放到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。q指令示例:ADD R0,R1,R2 ADD R0,R1,#256 ADD R0,R2,R3,LSL#1 西安電子科技大學計算機學院8ADC指令指令 qADC指令的格式為: ADC條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2qADC指令用于把兩個操作數相加,再加上CPSR中的C條

4、件標志位的值,并將結果存放到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。q以下指令序列完成兩個128位數的加法,第一個數存放在寄存器R7R4,第二個數存放在寄存器R11R8,運算結果存放在寄存器R3R0:ADDS R0,R4,R8 ; 加低端的字ADCS R1,R5,R9 ; 加第二個字,帶進位ADCS R2,R6,R10 ; 加第三個字,帶進位ADC R3,R7,R11 ; 加第四個字,帶進位 西安電子科技大學計算機學院9SUB指令指令 qSUB指令的格式為: SUB條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2qSUB

5、指令用于把操作數1減去操作數2,并將結果存放到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。該指令可用于有符號數或無符號數的減法運算。q指令示例:SUB R0,R1,R2 ; R0 = R1 - R2SUB R0,R1,#256 ; R0 = R1 - 256SUB R0,R2,R3,LSL#1 ; R0 = R2 - (R3 1) 西安電子科技大學計算機學院10SBC指令指令 qSBC指令的格式為: SBC條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2qSBC指令用于把操作數1減去操作數2,再減去CPSR中的C條件標志位的

6、非,并將結果存放到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。q以下指令序列實現64減法(R1,R0)-(R3,R2)SUBS R0,R0,R2 SBCR1,R1,R3西安電子科技大學計算機學院11RSB指令指令 qRSB指令的格式為: RSB條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2qRSB指令稱為逆向減法指令,用于把操作數2減去操作數1,并將結果存放到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。指令示例:RSB R0,R1,R2 RSB R0,R1,#256 RSB

7、 R0,R2,R3,LSL#1西安電子科技大學計算機學院12RSC指令指令 qRSC指令的格式為: RSC條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2qRSC指令用于把操作數2減去操作數1,再減去CPSR中的C條件標志位,并將結果存放到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。該指令使用進位標志來表示借位,這樣就可以做大于32位的減法。q下列指令實現64位數據的負數RSBS R2,R0,#0RSC R3,R1,#0 西安電子科技大學計算機學院13AND指令指令 qAND指令的格式為: AND條件條件S 目的寄存器,操作

8、數目的寄存器,操作數1,操作數,操作數2qAND指令用于在兩個操作數上進行邏輯與運算,并把結果放置到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。該指令常用于屏蔽操作數1的某些位。例如:AND R0,R0,3 ;將高位屏蔽(取出低位)西安電子科技大學計算機學院14ORR指令指令 qORR指令的格式為: ORR條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2qORR指令用于在兩個操作數上進行邏輯或運算,并把結果放置到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。該指令常用于設置操作

9、數1的某些位。例如:ORR R0,R0,3 ;將低位置位西安電子科技大學計算機學院15EOR指令指令 qEOR指令的格式為: EOR條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2qEOR指令用于在兩個操作數上進行邏輯異或運算,并把結果放置到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。該指令常用于反轉操作數1的某些位。例如:EOR R0,R0,3 西安電子科技大學計算機學院16BIC指令指令 qBIC指令的格式為: BIC條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2qBIC指令用于清除操作數1的某些位

10、,并把結果放置到目的寄存器中。操作數1應是一個寄存器,操作數2可以是一個寄存器,被移位的寄存器,或一個立即數。操作數2為32位的掩碼,如果在掩碼中設置了某一位,則清除這一位。未設置的掩碼位保持不變。例如:BIC R0,R0,3;清除低兩位西安電子科技大學計算機學院17CMP指令指令 qCMP指令的格式為: CMP條件條件 操作數操作數1,操作數,操作數2qCMP指令用于把一個寄存器的內容和另一個寄存器的內容或立即數進行比較,同時無條件更新CPSR中條件標志位的值。該指令進行一次減法運算,但不存儲結果,只更改條件標志位。標志位表示的是操作數1與操作數2的關系(大、小、相等),例如,當操作數1大于

11、操作操作數2,則此后的有GT后綴的指令將可以執行。例如:CMP R1,R0CMP R1,100西安電子科技大學計算機學院18CMN指令指令 qCMN指令的格式為: CMN條件條件 操作數操作數1,操作數,操作數2qCMN指令用于把一個寄存器的內容和另一個寄存器的內容或立即數取補后進行比較,同時無條件更新CPSR中條件標志位的值。該指令實際完成操作數1和操作數2相加,并根據結果更改條件標志位。例如:CMN R1,R0CMN R1,100西安電子科技大學計算機學院19TST指令指令 qTST指令的格式為: TST條件條件 操作數操作數1,操作數,操作數2qTST指令用于把一個寄存器的內容和另一個寄

12、存器的內容或立即數進行按位的與運算,并根據運算結果無條件更新CPSR中條件標志位的值。操作數1是要測試的數據,而操作數2是一個位掩碼,該指令一般用來檢測是否設置了特定的位。TSTR1,1TSTR1,0 xffe西安電子科技大學計算機學院20TEQ指令指令 qTEQ指令的格式為: TEQ條件條件 操作數操作數1,操作數,操作數2qTEQ指令用于把一個寄存器的內容和另一個寄存器的內容或立即數進行按位的異或運算,并根據運算結果無條件更新CPSR中條件標志位的值。該指令通常用于比較操作數1和操作數2是否相等。例如:TEQ R1,R2西安電子科技大學計算機學院21MUL32位乘法指令位乘法指令MLA32

13、位乘加指令位乘加指令SMULL64位有符號數乘法指令位有符號數乘法指令SMLAL64位有符號數乘加指令位有符號數乘加指令UMULL64位無符號數乘法指令位無符號數乘法指令UMLAL64位無符號數乘加指令位無符號數乘加指令 西安電子科技大學計算機學院22MUL指令指令 qMUL指令的格式為: MUL條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2qMUL指令完成將操作數1與操作數2的乘法運算,并把結果的低32位放置到目的寄存器中,同時可以根據運算結果設置CPSR中相應的條件標志位。其中,操作數1和操作數2均為32位的有符號數或無符號數。例如:MULR0,R1,R2MULSR0

14、,R1,R2西安電子科技大學計算機學院23MLA指令指令 qMLA指令的格式為: MLA條件條件S 目的寄存器,操作數目的寄存器,操作數1,操作數,操作數2,操,操 作數作數3qMLA指令完成將操作數1與操作數2的乘法運算,再將乘積加上操作數3,并把結果的低32位放置到目的寄存器中,同時可以根據運算結果設置CPSR中相應的條件標志位。其中,操作數1和操作數2均為32位的有符號數或無符號數。例如:MLAR0,R1,R2,R3MLASR0,R1,R2,R3西安電子科技大學計算機學院24SMULL指令指令qSMULL指令格式為: SMULL條件條件S目的寄存器目的寄存器Low,目的寄存器,目的寄存器

15、High,操作數,操作數1,操作數,操作數2qSMULL指令完成將操作數1與操作數2的乘法運算,并把結果的低32位放置到目的寄存器Low中,結果的高32位放置到目的寄存器High中,同時可以根據運算結果設置CPSR中相應的條件標志位。其中,操作數1和操作數2均為32位的有符號數。例如:SMULL R0,R1,R2,R3;R0(Low32)(R2R3)Low32 ;R1(High32)(R2R3)High32西安電子科技大學計算機學院25SMLAL指令指令qSMLAL指令的格式為: SMLAL條件條件S目的寄存器目的寄存器Low,目的寄存器,目的寄存器High,操作,操作數數1,操作數,操作數2

16、qSMLAL指令完成將操作數1與操作數2的乘法運算,并把結果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,結果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同時可以根據運算結果設置CPSR中相應的條件標志位。其中,操作數1和操作數2均為32位的有符號數。q對于目的寄存器Low,在指令執行前存放64位加數的低32位,指令執行后存放結果的低32位。對于目的寄存器High,在指令執行前存放64位加數的高32位,指令執行后存放結果的高32位。西安電子科技大學計算機學院26UMULL指令指令qUMULL指令的格式為: UMULL條件條件S目的寄存器目的寄存

17、器Low,目的寄存器,目的寄存器High,操作數,操作數1,操作數,操作數2 qUMULL指令完成將操作數1與操作數2的乘法運算,并把結果的低32位放置到目的寄存器Low中,結果的高32位放置到目的寄存器High中,同時可以根據運算結果設置CPSR中相應的條件標志位。其中,操作數1和操作數2均為32位的無符號數。例如:UMULL R0,R1,R2,R3;R0(Low32)(R2R3)Low32 ;R1(High32)(R2R3)High32西安電子科技大學計算機學院27UMLAL指令指令qUMLAL指令的格式為: UMLAL條件條件S 目的寄存器目的寄存器Low,目的寄存器,目的寄存器High

18、,操作,操作數數1,操作數,操作數2 qUMLAL指令完成將操作數1與操作數2的乘法運算,并把結果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,結果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同時可以根據運算結果設置CPSR中相應的條件標志位。其中,操作數1和操作數2均為32位的無符號數。q對于目的寄存器Low,在指令執行前存放64位加數的低32位,指令執行后存放結果的低32位。對于目的寄存器High,在指令執行前存放64位加數的高32位,指令執行后存放結果的高32位。西安電子科技大學計算機學院28ARM微處理器支持加載微處理器支持加載(Loa

19、d)/存儲存儲(Store)指令用于在寄存指令用于在寄存器和存儲器之間傳送數據。器和存儲器之間傳送數據。q單寄存器存取指令 LDR字數據加載指令 LDRB字節數據加載指令 LDRH半字數據加載指令 STR字數據存儲指令 STRB字節數據存儲指令 STRH半字數據存儲指令q多寄存器存取指令 LDM批量數據加載指令 STM批量數據存儲指令q存儲器和寄存器交換指令 SWP/ SWPB西安電子科技大學計算機學院29LDR指令指令qLDR指令的格式為: LDR條件條件 目的寄存器,目的寄存器, qLDR指令用于從存儲器中將一個32位的字數據傳送到目的寄存器中。該指令通常用于從存儲器中讀取32位的字數據到

20、通用寄存器,然后對數據進行處理。例如:LDR R0,R1 ;將內存單元R1中的字讀取到R0寄存器中LDR R0,R1,R2 ;將內存單元R1R2中的字讀取到R0寄存器中LDR R0,R1,8 ;將內存單元R1+8中的字讀取到R0寄存器中LDR R0,R1,R2!;將內存單元R1+R2中的字讀取到R0寄存器中,同時R1R1+R2西安電子科技大學計算機學院30LDRB指令指令 qLDRB指令的格式為: LDR條件條件B 目的寄存器,目的寄存器,qLDRB指令用于從存儲器中將一個8位的字節數據傳送到目的寄存器中,同時將寄存器的高24位清零。該指令通常用于從存儲器中讀取8位的字節數據到通用寄存器,然后

21、對數據進行處理。 LDRB R0,R1 ;將內存單元R1中的字節讀取到R0 寄存器中,R0中高24位設置為0LDRB R0,R1,8 ;將內存單元R18中的字節 讀取到R0寄存器中,R0中高24位設置為0西安電子科技大學計算機學院31LDRH指令指令qLDRH指令的格式為: LDR條件條件H 目的寄存器,目的寄存器,qLDRH指令用于從存儲器中將一個16位的半字數據傳送到目的寄存器中,同時將寄存器的高16位清零。該指令通常用于從存儲器中讀取16位的半字數據到通用寄存器,然后對數據進行處理。LDRH R0,R1;將內存單元R1中的半字(16位)數據讀取到R0寄存器中,R0中高16位設置為0LDR

22、H R0,R1,8;將內存單元R18中的半字(16位)數據讀取到R0寄存器中,R0中高16位設置為0LDRH R0,R1,R2;將內存單元R1R2中的半字(16位)數據讀取到R0寄存器中,R0中高16位設置為0 西安電子科技大學計算機學院32STR指令指令qSTR指令的格式為: STR條件條件 源寄存器,源寄存器,qSTR指令用于從源寄存器中將一個32位的字數據傳送到存儲器中。該指令在程序設計中比較常用,且尋址方式靈活多樣,使用方式可參考指令LDR。STRR0,R1,8 ;將R0的字數據保存到內存單元R1中,同時R1R1+8(后變)STRR0,R1,8 ;將R0的字數據保存到內存單元R1+8中

23、(前變)西安電子科技大學計算機學院33STRB指令指令qSTRB指令的格式為: STR條件條件B 源寄存器,源寄存器,qSTRB指令用于從源寄存器中將一個8位的字節數據傳送到存儲器中。該字節數據為源寄存器中的低8位。STRBR0,R1 ;將R0的低8位數據保存到內存單元R1中STRBR0,R1,8 ;將R0的低8位數據保存到內存單元R1中 西安電子科技大學計算機學院34STRH指令指令qSTRH指令的格式為: STR條件條件H 源寄存器,源寄存器,qSTRH指令用于從源寄存器中將一個16位的半字數據傳送到存儲器中。該半字數據為源寄存器中的低16位。STRHR0,R1 ;將R0中的16位的半字數

24、據保存到內存單元R1中STRHR0,R1,8 ;將R0中的16位的半字數據保存到內存單元R18中 西安電子科技大學計算機學院35LDR/STR指令的尋址方式指令的尋址方式q基址尋址q變址尋址變址尋址靈活多變,需要認真掌握變址尋址靈活多變,需要認真掌握西安電子科技大學計算機學院36批量數據加載批量數據加載(LDM)/存儲存儲(STM)內存訪問內存訪問指令指令 qARM微處理器所支持批量數據加載/存儲指令可以一次在一片連續的存儲器單元和多個寄存器之間傳送數據。批量數據加載指令(LDM)用于將一片連續的存儲器中的數據傳送到多個寄存器,批量數據存儲指令(STR) 則完成相反的操作。qIA、IB、DA、

25、DBqFD、ED、FA、EA西安電子科技大學計算機學院37STM指令指令qSTM指令的格式為: STM條件條件類型類型 基址寄存器基址寄存器!,寄存器列,寄存器列表表qSTM指令用于將寄存器列表所指示的多個寄存器數據送到由基址寄存器所指示的一片連續存儲器,該指令的常見用途是將多個寄存器的內容入棧。例如:STMFD R0!, r0-r4;將寄存器列表中的寄存器(R1R4)內容按照滿遞減的方式存入到R0指示的4個連續存儲器單元中西安電子科技大學計算機學院38LDM指令指令qLDM指令的格式為: LDM條件條件類型類型 基址寄存器基址寄存器!,寄存器列,寄存器列表表qLDM指令用于從由基址寄存器所指

26、示的一片連續存儲器送字數據到寄存器列表所指示的多個寄存器中,該指令的常見用途是將多個寄存器出棧。例如: LDMFD R0!, r1-r4 ;將R0指示的4個連續存儲器單元的內容按照滿遞減的方式送到寄存器列表中的寄存器(R1R4)中西安電子科技大學計算機學院39可選后綴可選后綴q!回寫使能標志為可選后綴,若選用該后綴,則當數據傳送完畢之后,將最后的地址寫入基址寄存器,否則基址寄存器的內容不改變。q為可選后綴,當指令為LDM,且寄存器列表中包含R15,選用該后綴時表示:除了正常的數據傳送之外,還將SPSR復制到CPSR。 西安電子科技大學計算機學院40ARM微處理器所支持數據交換指令能在存微處理器

27、所支持數據交換指令能在存儲器和寄存器之間交換數據。數據交換指儲器和寄存器之間交換數據。數據交換指令主要用于實現信號量操作,信號量用于令主要用于實現信號量操作,信號量用于進程間的同步與互斥。進程間的同步與互斥。 西安電子科技大學計算機學院41SWP指令指令qSWP指令的格式為: SWP條件條件 目的寄存器,源寄存器目的寄存器,源寄存器1,源寄存器源寄存器2qSWP指令用于將源寄存器2所指向的存儲器中的字數據傳送到目的寄存器中,同時將源寄存器1中的字數據傳送到源寄存器2所指向的存儲器中。顯然,當源寄存器1和目的寄存器為同一個寄存器時,指令交換該寄存器和存儲器的內容。SWP R0,R1,R2 ;R0

28、R2,R2R1SWP R0,R0,R2 ;R0(目的)R2,R2 R0(源) 即實現了寄存器R0的內容與存 儲器地址R2的內容的交換西安電子科技大學計算機學院42SEMEQU 0 x40003000SEM_WAITMOVR1, #0LDR R0, = SEMSWP R1, R1, R0 ;取出信號量,并設置其為0CMP R1, #0 ;判斷是否有信號BEQ SEM_WAIT ;若沒有,則等待西安電子科技大學計算機學院43ARM中實現程序跳轉中實現程序跳轉q直接向PC寄存器寫入目標地址值q跳轉指令實現向向PC寄存器寫入目標地址值寄存器寫入目標地址值q可實現4GB地址空間的任意跳轉跳轉指令可以完成

29、從當前指令向前或向后跳轉指令可以完成從當前指令向前或向后的的32MB的地址空間的跳轉,包括的地址空間的跳轉,包括 :qB 跳轉指令qBL帶返回的跳轉指令qBX帶狀態切換的跳轉指令qBLX帶返回和狀態切換的跳轉指令西安電子科技大學計算機學院44B指令指令qB指令的格式為: B條件條件 目標地址目標地址qB指令是最簡單的跳轉指令。一旦遇到一個B指令,ARM 處理器將立即跳轉到給定的目標地址,從那里繼續執行。注意存儲在跳轉指令中的實際值是相對當前PC值的一個偏移量,而不是一個絕對地址,它的值由匯編器來計算。它是24位有符號數,左移兩位后有符號擴展為 32 位,表示的有效偏移為 26 位(前后32MB

30、的地址空間)。如:B Label /*程序無條件跳轉到標號Label處執行*/西安電子科技大學計算機學院45BL指令指令qBL指令的格式為: BL條件條件目標地址目標地址qBL是另一個跳轉指令,但跳轉之前,會在寄存器R14中保存PC的當前內容,因此,可以通過將R14的內容重新加載到PC中,來返回到跳轉指令之后的那個指令處執行。該指令是實現子程序調用的一個基本但常用的手段。例如:BLLabel/*當程序無條件跳轉到標號Label處執行時,同時將當前的PC值保存到R14中 */ 西安電子科技大學計算機學院46BX指令指令qBX指令的格式為: BX條件條件 目標地址目標地址qBX指令跳轉到指令中所指

31、定的目標地址,目標地址處的指令既可以是ARM指令,也可以是Thumb指令。因此,當前處理器工作狀態使用Thumb指令集時,通過BX指令可使當前處理器工作狀態切換到ARM指令集運行狀態,反之亦然。具體狀態有目標寄存器最低位決定。例如:ADRLR0, ThumbFun+1BXR0;跳轉到R0指定的地址,并根據R0最低位來切換處理器狀態西安電子科技大學計算機學院47BLX指令指令qBLX指令的格式為: BLX 目標地址目標地址qBLX指令從ARM指令集跳轉到指令中所指定的目標地址,并將處理器的工作狀態由ARM狀態切換到Thumb狀態,該指令同時將PC的當前內容保存到寄存器R14中。因此,當子程序使用

32、Thumb指令集,而調用者使用ARM指令集時,可以通過BLX指令實現子程序的調用和處理器工作狀態的切換。同時,子程序的返回可以通過將寄存器R14值復制到PC中來完成。 西安電子科技大學計算機學院48ARM微處理器支持程序狀態寄存器(微處理器支持程序狀態寄存器(PSR)訪問指令,用于在程序狀態寄存器訪問指令,用于在程序狀態寄存器(CPSR/SPSR)和通用寄存器之間傳送數據,和通用寄存器之間傳送數據,程序狀態寄存器訪問指令包括以下兩條:程序狀態寄存器訪問指令包括以下兩條:qMRS 狀態寄存器的內容讀取到通用寄存器(RnCPSR/SPSR)qMSR 立即數或通用寄存器內容寫到狀態寄存器的指定區域(

33、CPSR/SPSRRn)西安電子科技大學計算機學院49MRS指令的格式為:指令的格式為:MRS條件條件 通用寄存器,程序狀態寄存器(通用寄存器,程序狀態寄存器(CPSR或或SPSR)MRS指令用于將程序狀態寄存器的內容傳送到通指令用于將程序狀態寄存器的內容傳送到通用寄存器中。例如:用寄存器中。例如:MRSR0,CPSR;R0CPSRMRSR0,SPSR;R0SPSR該指令一般用在以下幾種情況:該指令一般用在以下幾種情況: q當需要改變程序狀態寄存器的內容時,可用MRS將程序狀態寄存器的內容讀入通用寄存器,修改后再寫回程序狀態寄存器。q當在異常處理或進程切換時,需要保存程序狀態寄存器的值,可先用

34、該指令讀出程序狀態寄存器的值,然后保存。 西安電子科技大學計算機學院50MSR指令的格式為:指令的格式為: MSR條件條件程序狀態寄存器(程序狀態寄存器(CPSR或或SPSR)_,操作數,操作數MSR指令用于將操作數的內容傳送到程序狀態寄指令用于將操作數的內容傳送到程序狀態寄存器的特定域中。其中,操作數可以為通用寄存存器的特定域中。其中,操作數可以為通用寄存器或立即數。器或立即數。MSR指令的形式如下:指令的形式如下:qMSR cond _, #immed_8rqMSR cond _, Rm西安電子科技大學計算機學院51其中其中:用于設置程序狀態寄存器中需要操作的用于設置程序狀態寄存器中需要操

35、作的位位 (4個域)個域)qc位7:0為控制位域,用c表示;qx位15:8為擴展位域,用x表示; qs位23:16為狀態位域,用s表示; qf位31:24為條件標志位域,用f表示;q例如:MSRCPSR,R0;CPSRR0MSRCPSR_c,R0;CPSR_cR0,僅改變CPSR的控制域即位7:0西安電子科技大學計算機學院52ARM微處理器所支持的異常指令有如下兩微處理器所支持的異常指令有如下兩條:條:qSWI軟件中斷指令qBKPT斷點中斷指令 (ARMv5以上)西安電子科技大學計算機學院53SWI指令指令 qSWI指令的格式為: SWI條件條件 24位的立即數位的立即數qSWI指令用于產生軟

36、件中斷,以便用戶程序能調用操作系統的系統例程。操作系統在SWI的異常處理程序中提供相應的系統服務,指令中24位的立即數指定用戶程序調用系統例程的類型,相關參數通過通用寄存器傳遞,當指令中24位的立即數被忽略時,用戶程序調用系統例程的類型由通用寄存器R0的內容決定,同時,參數通過其他通用寄存器傳遞。例如: SWI 0 x02 ; 西安電子科技大學計算機學院54BKPT指令指令qBKPT指令的格式為: BKPT 16位的立即數位的立即數qBKPT指令產生軟件斷點中斷,可用于程序的調試。 西安電子科技大學計算機學院55數據操作指令數據操作指令數據存取指令(內存協處理器寄存器)數據存取指令(內存協處理器寄存器)數據傳送指令(數據傳送指令(ARM寄存器協處理器寄寄存器協處理器寄存器)存器)西安電子科技大學計算機學院56CDP指令指令qCDP指令的格式為: CDP條件條件 協處理器編碼,協處理器操作碼協處理器編碼,協處理器操作碼1,目的寄存器,目的寄存器,源寄存器源寄存器1,源寄存器,源寄存器2, 協處理器操作碼協處理器操作碼2 qCDP指令用于ARM處理器通知ARM協處理器執行特定的操作,若協處理器不能成功完成特定的操作,則產生未定義指令異常。其中協處理器操作碼1和協處理器操作碼2為協處理器將要執行的操作,目的寄存器和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論