![第3章ARM指令集(2016年2月22日)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/3f21d619-972b-422d-b67c-6bc7352fbcda/3f21d619-972b-422d-b67c-6bc7352fbcda1.gif)
![第3章ARM指令集(2016年2月22日)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/3f21d619-972b-422d-b67c-6bc7352fbcda/3f21d619-972b-422d-b67c-6bc7352fbcda2.gif)
![第3章ARM指令集(2016年2月22日)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/3f21d619-972b-422d-b67c-6bc7352fbcda/3f21d619-972b-422d-b67c-6bc7352fbcda3.gif)
![第3章ARM指令集(2016年2月22日)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/3f21d619-972b-422d-b67c-6bc7352fbcda/3f21d619-972b-422d-b67c-6bc7352fbcda4.gif)
![第3章ARM指令集(2016年2月22日)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/3f21d619-972b-422d-b67c-6bc7352fbcda/3f21d619-972b-422d-b67c-6bc7352fbcda5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、共129頁1 1第第3 3章章 ARMARM指令集指令集 4 4學(xué)時學(xué)時本章主要內(nèi)容本章主要內(nèi)容1 1、ARMARM指令集簡介;指令集簡介;2 2、ARMARM指令的尋址方式;指令的尋址方式;3 3、ARMARM指令集。指令集。共129頁2 2本章教學(xué)要求本章教學(xué)要求掌握:掌握:ARMARM指令的尋址方式指令的尋址方式,ARMARM指令集指令集。共129頁3 33.1 ARM3.1 ARM指令集簡介指令集簡介 ARMARM微處理器微處理器 的指令集是的指令集是 加載加載/ /存儲存儲型型的,具有效率高、代碼密度低的特點,的,具有效率高、代碼密度低的特點,它的它的 3232位位 編碼能夠包含的信
2、息量很大,編碼能夠包含的信息量很大,每一條語句完成的功能很多。每一條語句完成的功能很多。 在在 多寄存器多寄存器 操作指令中操作指令中 一次一次 最多最多可以完成可以完成 1616個個 寄存器的數(shù)據(jù)傳送,而這寄存器的數(shù)據(jù)傳送,而這樣的操作要是樣的操作要是 不在不在 多寄存器操作的指令多寄存器操作的指令中,要執(zhí)行中,要執(zhí)行 1616條條 語句才能實現(xiàn)。語句才能實現(xiàn)。共129頁4 一個簡單的一個簡單的ARMARM匯編程序:匯編程序: AREA Example,CODE,READONLYAREA Example,CODE,READONLY;聲明代碼段;聲明代碼段ExampleExample ENTR
3、Y ENTRY ;標(biāo)識程序入口;標(biāo)識程序入口 CODE32 CODE32 ;聲明;聲明3232位位ARMARM指令指令START MOV R0,#0 START MOV R0,#0 ;設(shè)置參數(shù);設(shè)置參數(shù) MOV R1,#10 MOV R1,#10LOOP BL ADD_SUB LOOP BL ADD_SUB ;調(diào)用子程序;調(diào)用子程序ADD_SUBADD_SUB B LOOP B LOOPADD_SUBADD_SUB ADDS R0,R0,R1 ADDS R0,R0,R1 ;R0=R0+R1R0=R0+R1 MOV PC,LR MOV PC,LR ;子程序返回;子程序返回 END END ;文件
4、結(jié)束;文件結(jié)束共129頁53.1.1 ARM3.1.1 ARM指令的分類與格式指令的分類與格式(1 1)ARMARM指令的分類指令的分類 ARMARM指令可以分為:指令可以分為:跳轉(zhuǎn)指令、跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、數(shù)據(jù)處理指令、程序狀態(tài)寄存器程序狀態(tài)寄存器(PSRPSR)傳輸指令、)傳輸指令、Load/StoreLoad/Store指令指令、協(xié)處理器指令協(xié)處理器指令 和和 異常中斷產(chǎn)生指令異常中斷產(chǎn)生指令 六類六類。共129頁6跳轉(zhuǎn)指令跳轉(zhuǎn)指令 跳轉(zhuǎn)指令跳轉(zhuǎn)指令用于用于控制控制程序的執(zhí)行流程序的執(zhí)行流程、指令的特權(quán)等級程、指令的特權(quán)等級和和在在ARMARM代碼代碼與與ThumbThumb代碼代碼
5、之間進(jìn)行切換。之間進(jìn)行切換。狀態(tài)寄存器傳輸指令狀態(tài)寄存器傳輸指令 用于用于控制控制在在存儲器存儲器和和寄存器寄存器之間之間的數(shù)據(jù)的數(shù)據(jù)傳輸傳輸、交換、交換、加載加載、存儲。、存儲。共129頁7數(shù)據(jù)處理指令數(shù)據(jù)處理指令 用于操作片上的用于操作片上的ALUALU、桶型移位、桶型移位器、器、乘法器乘法器以完成在以完成在3131個個3232位位的通用的通用寄存器之間的寄存器之間的高速數(shù)據(jù)處理高速數(shù)據(jù)處理。ARMARM協(xié)處理器指令協(xié)處理器指令 ARMARM協(xié)處理器指令用于控制外部協(xié)處理器指令用于控制外部的的協(xié)處理器協(xié)處理器,這些指令已開發(fā)統(tǒng)一的,這些指令已開發(fā)統(tǒng)一的方式用于方式用于片外功能指令集片外功能
6、指令集。ARMARM支持支持1616個協(xié)處理器。個協(xié)處理器。共129頁8異常中斷產(chǎn)生指令異常中斷產(chǎn)生指令 ARMARM有有 兩條兩條 異常中斷產(chǎn)生指令,異常中斷產(chǎn)生指令,分別為分別為軟中斷指令軟中斷指令SWI SWI 和和 斷點中斷斷點中斷指令指令BKPTBKPT。Load/StoreLoad/Store內(nèi)存訪問指令內(nèi)存訪問指令 LoadLoad指令指令用于從用于從內(nèi)存內(nèi)存中讀取數(shù)據(jù)中讀取數(shù)據(jù)放入放入寄存器寄存器中,中,StoreStore指令用于將指令用于將寄寄存器存器中的數(shù)據(jù)保存到中的數(shù)據(jù)保存到內(nèi)存內(nèi)存中。中。共129頁9(1 1)ARMARM指令的格式指令的格式 ARMARM指令的格式如
7、下:指令的格式如下: s s , , , 指令格式舉例:指令格式舉例: LDR R3LDR R3,R6;R6;讀取讀取R6R6地址上的地址上的存儲單元內(nèi)容,執(zhí)行條件存儲單元內(nèi)容,執(zhí)行條件ALAL。 BEQ NEXTBEQ NEXT; ;跳轉(zhuǎn)指令,執(zhí)行條件跳轉(zhuǎn)指令,執(zhí)行條件EQEQ即相等時跳轉(zhuǎn)到即相等時跳轉(zhuǎn)到NEXTNEXT執(zhí)行。執(zhí)行。共129頁10 ADDS R0ADDS R0,R1R1,#2#2; ;加法指令,加法指令,R0=R1+2R0=R1+2,影響,影響CPSRCPSR寄存器。寄存器。 SUBNES R0SUBNES R0,R1R1,#0X03#0X03; ;條件執(zhí)條件執(zhí)行減法運算(行
8、減法運算(NENE),),R0=R1-0X03R0=R1-0X03,影,影響響CPSRCPSR寄存器。寄存器。 在在ARMARM指令中,靈活地使用第二指令中,靈活地使用第二個操作數(shù)(個操作數(shù)(operand2operand2)能夠提高代碼)能夠提高代碼效率,第二個操作數(shù)的形式如下:效率,第二個操作數(shù)的形式如下:共129頁11#immed_8r8#immed_8r8位常數(shù)表達(dá)式位常數(shù)表達(dá)式 但但 8 8位常數(shù)位常數(shù) 的使用是有限制的,的使用是有限制的,具體如下:具體如下:共129頁12 合法常量:合法常量:0X3FC(0XFF2)0X3FC(0XFF2)、0 0、0XF0000000(0XF02
9、4)0XF0000000(0XF024)、200200(0XC80XC8)、0XF0000001(0X1F28)0XF0000001(0X1F28)。 常數(shù)表達(dá)式應(yīng)用舉例:常數(shù)表達(dá)式應(yīng)用舉例: 非法常量:非法常量:0X1FE0X1FE、511511、0XFFFF0XFFFF、0X10100X1010、0XF00000100XF0000010。 MOV R0MOV R0,#1#1 AND R1AND R1,R2R2,#0X0F#0X0F共129頁13RmRm寄存器方式寄存器方式 LDR R0LDR R0,R2,#-1;R2,#-1;讀取讀取 R2R2 地地址上的存儲器單元內(nèi)容存入址上的存儲器單元
10、內(nèi)容存入 R0R0,且,且R2=R2-1R2=R2-1 寄存器方式舉例:寄存器方式舉例: SUB R1SUB R1,R1R1,R2 ;R1=R1-R2R2 ;R1=R1-R2 MOV PC,R0 ;MOV PC,R0 ;PC=R0PC=R0,程序跳轉(zhuǎn),程序跳轉(zhuǎn)到指定地址到指定地址共129頁14 LDR R0LDR R0,R1,-R2R1,-R2; ;讀取讀取R1R1地址地址上的存儲器單元內(nèi)容存入上的存儲器單元內(nèi)容存入R0R0,且,且R1=R1-R2R1=R1-R2Rm,shiftRm,shift寄存器移位方式寄存器移位方式ASR #nASR #n;算數(shù)右移;算數(shù)右移n n位(位(1 n 321
11、 n 32)LSL #nLSL #n;邏輯左移;邏輯左移n n位(位(0 n 310 n 31)LSR #nLSR #n;邏輯右移;邏輯右移n n位(位(1 n 321 n 32)ROR #nROR #n;循環(huán)右移;循環(huán)右移n n位(位(1 n 311 n 31)共129頁15RRX RRX ;帶擴展的循環(huán)右移;帶擴展的循環(huán)右移1 1位位Type Rs Type Rs ;其中;其中TypeType為為ASRASR、LSLLSL、LSRLSR和和RORROR中的一種,中的一種,RsRs為偏移量寄存為偏移量寄存器,器,低低8 8位位有效。有效。 寄存器偏移方式應(yīng)用舉例:寄存器偏移方式應(yīng)用舉例:AD
12、D R2ADD R2,R2R2,R2R2,LSL #3;R2=R2 x 9LSL #3;R2=R2 x 9SUB R1SUB R1,R1R1,R3R3,LSL #2LSL #2;R1=R1-R3 ;R1=R1-R3 X 4X 4共129頁163.1.2 ARM3.1.2 ARM指令的條件碼域指令的條件碼域 當(dāng)處理器工作在當(dāng)處理器工作在 ARMARM狀態(tài)狀態(tài) 時,時,幾乎所有的指令均根據(jù)幾乎所有的指令均根據(jù) CPSRCPSR 中的中的 條件碼的狀態(tài)條件碼的狀態(tài) 和和 指令的條件域指令的條件域 有有條件執(zhí)行。當(dāng)指令的執(zhí)行條件滿足時,條件執(zhí)行。當(dāng)指令的執(zhí)行條件滿足時,指令被執(zhí)行,指令被執(zhí)行,否則指令
13、被忽略否則指令被忽略。 ARMARM指令的指令的 條件碼條件碼 和和 助記符助記符 如下表所示:如下表所示:共129頁17條件碼條件碼條件碼助記符條件碼助記符CPSRCPSR中條件標(biāo)志位值中條件標(biāo)志位值含義含義00000000EQEQZ=1Z=1相等相等00010001NENEZ=0Z=0不相等不相等00100010CS/HSCS/HSC=1C=1無符號數(shù)大于或等于無符號數(shù)大于或等于00110011CC/LOCC/LOC=0C=0無符號數(shù)小于無符號數(shù)小于01000100MIMIN=1N=1負(fù)數(shù)負(fù)數(shù)01010101PLPLN=0N=0正數(shù)或零正數(shù)或零01100110VSVSV=1V=1溢出溢出0
14、1110111VCVCV=0V=0未溢出未溢出10001000HIHIC=1C=1且且Z=0Z=0無符號數(shù)大于無符號數(shù)大于10011001LSLSC=0C=0且且Z=1Z=1無符號數(shù)小于或等于無符號數(shù)小于或等于10101010GEGEN=1N=1且且V=1V=1或或N=0N=0且且V=0V=0帶符號數(shù)大于或等于帶符號數(shù)大于或等于10111011LTLTN=1N=1且且V=0V=0或或N=0N=0且且V=1V=1帶符號數(shù)小于帶符號數(shù)小于共129頁1811001100GTGTZ=0Z=0且且N=VN=V帶符號數(shù)大于帶符號數(shù)大于11011101LELEZ=1Z=1或或N!=VN!=V帶符號數(shù)小于或等
15、于帶符號數(shù)小于或等于11101110ALAL無條件執(zhí)行無條件執(zhí)行11111111NVNVARMV3ARMV3之前之前該執(zhí)行從不執(zhí)行該執(zhí)行從不執(zhí)行3.1.3 ARM3.1.3 ARM指令可選后綴指令可選后綴(1 1)S S后綴后綴 使用使用 S S 后綴后,指令執(zhí)行后程后綴后,指令執(zhí)行后程序狀態(tài)寄存器的條件標(biāo)志位將序狀態(tài)寄存器的條件標(biāo)志位將刷新刷新。 有的指令不使用有的指令不使用 S S 后綴,也要后綴,也要刷新條件標(biāo)志位,如刷新條件標(biāo)志位,如CMPCMP、CMNCMN、TSTTST等指令。等指令。共129頁19(2 2)!后綴)!后綴 在指令的地址表達(dá)式中含有在指令的地址表達(dá)式中含有 !后綴時
16、,指令執(zhí)行后,基地址寄存器后綴時,指令執(zhí)行后,基地址寄存器中的地址將會發(fā)生變化,變化的結(jié)果中的地址將會發(fā)生變化,變化的結(jié)果如下:如下:基址寄存器中的地址值(指令執(zhí)行基址寄存器中的地址值(指令執(zhí)行后)后)= =指令執(zhí)行前的值指令執(zhí)行前的值+ +地址偏移量;地址偏移量;如果指令不含如果指令不含 !后綴,則地址值后綴,則地址值不會發(fā)生變化。不會發(fā)生變化。共129頁20LDMIA R3LDMIA R3,R0R0,#04;#04;R3=R0R3=R0+ +#04#04,沒有使用!后綴,沒有使用!后綴LDMIA R3LDMIA R3,R0R0,#04#04! ;R3=R0 ;R3=R0+ +#04#04,
17、使用,使用!后綴后綴R0=R0R0=R0+ +#0X4#0X4(3 3)B B后綴后綴 B B后綴的含義是:指令所涉及的數(shù)后綴的含義是:指令所涉及的數(shù)據(jù)是一個字節(jié),據(jù)是一個字節(jié),不是一個字或半字不是一個字或半字。共129頁21LDR R4LDR R4,R0R0,#12#12;R4R4= =R0R0+ +1212,指令傳送一個字指令傳送一個字LDRB R4LDRB R4,R0R0,#12#12;R4R4= =R0R0+ +1212,指令傳送一個字節(jié)指令傳送一個字節(jié)(4 4)T T后綴后綴 指令在特權(quán)模式下對存儲器的訪指令在特權(quán)模式下對存儲器的訪問,將被存儲器看作是用戶模式的訪問,將被存儲器看作是
18、用戶模式的訪問。問。共129頁22 T T 后綴使用受很多限制,一般只后綴使用受很多限制,一般只用在用在 字傳送字傳送 和和 無符號字節(jié)無符號字節(jié) 傳送中。傳送中。在用戶模式下不可以選用,選用是沒在用戶模式下不可以選用,選用是沒有意義的;不能與前變址一起使用。有意義的;不能與前變址一起使用。LDRT R4LDRT R4,R5R5;R4=R5TR4=R5T模式模式共129頁233.2 ARM3.2 ARM指令的尋址方式指令的尋址方式 尋址方式:尋址方式:就是處理器根據(jù)指令就是處理器根據(jù)指令中給出的中給出的 地址信息地址信息 來尋找來尋找 物理地物理地址址 的方式。的方式。 ARMARM指令集支持
19、有:指令集支持有:立即數(shù)尋址、立即數(shù)尋址、寄存器尋址、寄存器尋址、寄存器間接尋址、寄存器間接尋址、基址基址變址尋址、變址尋址、堆棧尋址、堆棧尋址、多寄存器尋址多寄存器尋址等。等。共129頁243.2.1 3.2.1 立即尋址立即尋址 立即尋址立即尋址 也叫也叫 立即數(shù)尋址立即數(shù)尋址。操。操作數(shù)本身就在指令中給出,只要取出作數(shù)本身就在指令中給出,只要取出了指令也就取到了操作數(shù)。了指令也就取到了操作數(shù)。MOV R1MOV R1,#0XFF#0XFF;R1=0XFFR1=0XFFSUBSUBS S R0 R0,R0R0,#2#2;R0=R0-2R0=R0-2,影響標(biāo),影響標(biāo)志志共129頁253.2.
20、2 3.2.2 寄存器尋址寄存器尋址 寄存器尋址方式把寄存器中的數(shù)寄存器尋址方式把寄存器中的數(shù)值作為操作數(shù)。值作為操作數(shù)。MOV R1MOV R1,R2 ;R1=R2R2 ;R1=R2ADD R0ADD R0,R1R1,R2 ;R0=R1+R2R2 ;R0=R1+R23.2.3 3.2.3 寄存器間接尋址寄存器間接尋址 以以寄存器寄存器中的值作為操作數(shù)的中的值作為操作數(shù)的地地址址,而,而操作數(shù)本身操作數(shù)本身放在放在存儲器存儲器中。中。共129頁26MOV R1MOV R1,R2 ;R1=R2 R2 ;R1=R2 錯誤指令錯誤指令LDR R1LDR R1,R2 ;R1=R2R2 ;R1=R23.
21、2.4 3.2.4 基址變址尋址基址變址尋址 就是將寄存器(就是將寄存器(該寄存器一般稱該寄存器一般稱作基址寄存器作基址寄存器)的內(nèi)容與指令中給出)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個操的地址偏移量相加,從而得到一個操作數(shù)的有效地址。作數(shù)的有效地址。共129頁27LDR R2LDR R2,R3R3,#0X0C ;R2#0X0C ;R2= =R3R3+ +0X0C0X0CSTR R1STR R1,R0R0,#-4#-4! ! ;R0 ;R0= =R0R0- -4 4, R1 R1= =R0R0LDR R1LDR R1,R0R0,R3R3,LSL#1LSL#1 ;R1 ;R1 = =
22、R0 R0 + + R3 R3 x x 2 2 指令可以在系統(tǒng)存儲器合理的范指令可以在系統(tǒng)存儲器合理的范圍內(nèi)基址加上不超過圍內(nèi)基址加上不超過 4KB4KB 的偏移量。的偏移量。 有前變址、自動變址、后變址。有前變址、自動變址、后變址。共129頁28(1 1)前變址模式)前變址模式 LDR R1 LDR R1,R2R2,#0X5#0X5(2 2)自動變址模式)自動變址模式 LDR R0 LDR R0,R1R1,#4#4! ;R0R0= =R1R1+ +4,R14,R1= =R1R1+ +4 4(3 3)后變址模式)后變址模式 LDR R0 LDR R0,R1R1,#4#4 ; ;R0R0= =R
23、1,R1R1,R1= =R1R1+ +4 4共129頁29 使用后變址尋址方式完成表復(fù)制使用后變址尋址方式完成表復(fù)制程序:程序:COPY ADR R1COPY ADR R1,NEXT1 ;R1NEXT1 ;R1指向指向NEXT1NEXT1 ADR R2ADR R2,NEXT2 ;R2NEXT2 ;R2指向指向NEXT2NEXT2LOOP LDR R0LOOP LDR R0,R1,#4 ;R1,#4 ;取一個數(shù)取一個數(shù) STR R0STR R0,R2,#4 ;R2,#4 ;復(fù)制一個數(shù)復(fù)制一個數(shù) NEXT1 ;NEXT1 ;源數(shù)據(jù)源數(shù)據(jù) NEXT2 ;NEXT2 ;目標(biāo)數(shù)據(jù)目標(biāo)數(shù)據(jù)共129頁303
24、.2.5 3.2.5 堆棧尋址堆棧尋址(1 1)FullFull棧:堆棧指針棧:堆棧指針指向棧頂元素指向棧頂元素;(2 2)EmptyEmpty棧:堆棧指針棧:堆棧指針指向第一個指向第一個可用元素可用元素;(3 3)遞減棧:堆棧向內(nèi)存)遞減棧:堆棧向內(nèi)存地址減少地址減少的的方向生成;方向生成; 根據(jù)不同的尋址方式,將堆棧分根據(jù)不同的尋址方式,將堆棧分為以下為以下 4 4 種:種:共129頁3131(4 4)遞增棧:堆棧向內(nèi)存)遞增棧:堆棧向內(nèi)存地址增加地址增加的的方向生成。方向生成。 根據(jù)堆棧的不同種類,將其尋址根據(jù)堆棧的不同種類,將其尋址方式分為以下方式分為以下 4 4 種:種:(1 1)滿
25、遞減)滿遞減FDFD(Full DescendingFull Descending););(2 2)空遞減)空遞減EDED(Empty DescendingEmpty Descending););(3 3)滿遞增)滿遞增FAFA(Full AscendingFull Ascending););(4 4)空遞增)空遞增FAFA(Empty AscendingEmpty Ascending)。)。共129頁3232 在在ARMARM指令中,堆棧尋址方式通過指令中,堆棧尋址方式通過 Load/StoreLoad/Store 指令來實現(xiàn)。指令來實現(xiàn)。STMFD SP!,R1-R7STMFD SP!,R
26、1-R7,LR ;LR ;將將R1R7R1R7、LRLR入棧,滿遞減堆棧入棧,滿遞減堆棧LDMFD SP!,R1-R7LDMFD SP!,R1-R7,LR ;LR ;數(shù)據(jù)出棧,數(shù)據(jù)出棧,放入放入R1R7R1R7、LRLR寄存器寄存器共129頁333.2.6 3.2.6 多寄存器尋址多寄存器尋址LDMIA R1LDMIA R1,R2R2、R3R3、R4R4、R5R53.2.7 3.2.7 相對尋址相對尋址 相對尋址是基址的一種變通,與相對尋址是基址的一種變通,與基址尋址方式基本類似?;穼ぶ贩绞交绢愃?。相對尋址相對尋址以以程序計數(shù)器程序計數(shù)器 PCPC 的當(dāng)前值為基址,指的當(dāng)前值為基址,指令中
27、的令中的地址標(biāo)號地址標(biāo)號作為作為偏移量偏移量,將兩者,將兩者相加之后得到操作數(shù)的有效地址。相加之后得到操作數(shù)的有效地址。共129頁34 BL NEXT ;BL NEXT ;跳轉(zhuǎn)到子程序跳轉(zhuǎn)到子程序NEXTNEXT 處執(zhí)行處執(zhí)行 NEXT NEXT MOV PC,LR ; MOV PC,LR ;從子程序返回從子程序返回共129頁353.3 ARM3.3 ARM指令集指令集 ARMARM指令集指令集可以分為:可以分為:跳轉(zhuǎn)指令、跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、數(shù)據(jù)處理指令、乘法指令與乘加指令、乘法指令與乘加指令、程序狀態(tài)寄存器訪問指令、程序狀態(tài)寄存器訪問指令、加載加載/ /存存儲指令、儲指令、批量數(shù)據(jù)加載
28、批量數(shù)據(jù)加載/ /存儲指令、存儲指令、數(shù)據(jù)交換指令、數(shù)據(jù)交換指令、移位指令、移位指令、協(xié)處理器協(xié)處理器指令、指令、異常產(chǎn)生指令等異常產(chǎn)生指令等 1010 大類。大類。共129頁36363.3.1 3.3.1 跳轉(zhuǎn)指令跳轉(zhuǎn)指令 執(zhí)行流程的改變迫使程序計數(shù)器執(zhí)行流程的改變迫使程序計數(shù)器(PCPC)指向一個新的地址,指令集包)指向一個新的地址,指令集包含的跳轉(zhuǎn)指令如下:含的跳轉(zhuǎn)指令如下:助記符助記符說明說明操作操作B B跳轉(zhuǎn)指令跳轉(zhuǎn)指令PClabelPClabelBLBL帶返回的連接跳轉(zhuǎn)帶返回的連接跳轉(zhuǎn)PClabel(LRBLPClabel(LRBL后面的第一條指令后面的第一條指令) )BXBX跳轉(zhuǎn)
29、并切換狀態(tài)跳轉(zhuǎn)并切換狀態(tài)PCRm & 0 xFFFFFFFE,TRm&1PCRm & 0 xFFFFFFFE,TRm&1BLXBLX帶返回的跳轉(zhuǎn)并切換狀態(tài)帶返回的跳轉(zhuǎn)并切換狀態(tài)PClabel,T1;PClabel,T1;PCRm & 0 xFFFFFFFE,TRm&1;PCRm & 0 xFFFFFFFE,TRm&1;LRBLLRBL后面的第一條指令后面的第一條指令共129頁3737 另一種實現(xiàn)指令跳轉(zhuǎn)的方式是通另一種實現(xiàn)指令跳轉(zhuǎn)的方式是通過過直接直接向向 PCPC 寄存器中寫入寄存器中寫入目標(biāo)地址目標(biāo)地址值值,實現(xiàn)在,實現(xiàn)在 4
30、GB4GB 地址空間中任意跳地址空間中任意跳轉(zhuǎn),這種跳轉(zhuǎn)又稱為轉(zhuǎn),這種跳轉(zhuǎn)又稱為 長跳轉(zhuǎn)長跳轉(zhuǎn)。 如果在長跳轉(zhuǎn)指令之前使用如果在長跳轉(zhuǎn)指令之前使用“MOV LRMOV LR”或或“MOV PCMOV PC”等指令,可等指令,可以保存將來返回的地址值,也就實現(xiàn)以保存將來返回的地址值,也就實現(xiàn)了在了在 4GB 4GB 的地址空間中的子程序調(diào)的地址空間中的子程序調(diào)用。用。共129頁3838 B B 指令與指令與 BLBL 指令的編碼格式如下:指令的編碼格式如下:(1 1)跳轉(zhuǎn)指令)跳轉(zhuǎn)指令 B B 及帶連接的跳轉(zhuǎn)指令及帶連接的跳轉(zhuǎn)指令 BLBL共129頁3939 從代碼中看到從代碼中看到 L L 控
31、制了控制了 PCPC 與與 LRLR 寄寄存器之間的開關(guān)。當(dāng)存器之間的開關(guān)。當(dāng) L=0L=0 時,該開關(guān)斷開,時,該開關(guān)斷開,指令為指令為 B B 指令;當(dāng)指令;當(dāng) L=1L=1 時,該開關(guān)接通,時,該開關(guān)接通,指令為指令為 BLBL 指令。指令。 B B 和和 BL BL 指令的助記符格式為:指令的助記符格式為:B B 和和BL BL 跳轉(zhuǎn)指令跳轉(zhuǎn)指令 也叫也叫 程序轉(zhuǎn)移指令。程序轉(zhuǎn)移指令。 可以跳轉(zhuǎn)到一個絕對地址,如可以跳轉(zhuǎn)到一個絕對地址,如: B 0X1234。共129頁4040 B B 指令和指令和 BLBL 指令都是以一個指令都是以一個 2424 位有符號數(shù)位有符號數(shù) signed_
32、immed_24signed_immed_24 間接提間接提供目標(biāo)地址,真正的目標(biāo)地址是由處供目標(biāo)地址,真正的目標(biāo)地址是由處理器根據(jù)這個有符號數(shù)和當(dāng)前的理器根據(jù)這個有符號數(shù)和當(dāng)前的 PCPC 值計算出來的。值計算出來的。 具體計算為:先將具體計算為:先將 signed_immed_24signed_immed_24 左移兩位并擴展為左移兩位并擴展為3232位位有符號數(shù)有符號數(shù),然后再將這,然后再將這3232位位有符有符號數(shù)與號數(shù)與 PCPC 的當(dāng)前值相加并回送的當(dāng)前值相加并回送 PCPC。共129頁4141 B forwardB forward ADD R1,R2,#4 ADD R1,R2,#
33、4 forward SUB R1,R2,#56forward SUB R1,R2,#56 B B 和和 BLBL 指令轉(zhuǎn)移的偏移量為指令轉(zhuǎn)移的偏移量為 2626 位,位,即轉(zhuǎn)移的跨度為前后即轉(zhuǎn)移的跨度為前后 32MB32MB 地址空間。地址空間。例:現(xiàn)已知寄存器例:現(xiàn)已知寄存器 R0R0 中存放了數(shù)據(jù)中存放了數(shù)據(jù) a a ,寄存器,寄存器 R1R1 中存放了數(shù)據(jù)中存放了數(shù)據(jù) b b ,編,編寫一個程序段,求取寫一個程序段,求取 a a 和和 b b 的的 最大最大公約數(shù)公約數(shù) 并將其存入寄存器并將其存入寄存器 R0R0 。共129頁4242 gcb CMP R0,R1 gcb CMP R0,R
34、1 ;比較;比較a a和和b b的大小的大小 SUBGT R0,R0,R1 SUBGT R0,R0,R1 ;如果;如果ab,ab,則則a=a-ba=a-b SUBLT R1,R1,R0 SUBLT R1,R1,R0 ;如果;如果ab,ab,則則b=b-ab=b-a BNE gcb BNE gcb ;如果;如果a!=b,a!=b,則返回則返回gcbgcb MOV PC,LR MOV PC,LR ;如果;如果a=b,a=b,則返回主程序則返回主程序 B B 和和 BLBL 的區(qū)別在于:的區(qū)別在于:BLBL 在跳轉(zhuǎn)之在跳轉(zhuǎn)之前會把前會把 BLBL 指令的下一條指令地址(指令的下一條指令地址(斷點斷點
35、地址地址)保存到連接寄存器)保存到連接寄存器 LRLR(R14R14),因,因此程序在必要的時候可以通過將此程序在必要的時候可以通過將 LRLR 的內(nèi)的內(nèi)容進(jìn)行計算并加載到容進(jìn)行計算并加載到 PCPC 中使程序返回到中使程序返回到跳轉(zhuǎn)點。跳轉(zhuǎn)點。共129頁4343 BLBL 指令經(jīng)常被用來調(diào)用一個子程序。指令經(jīng)常被用來調(diào)用一個子程序。共129頁4444(2 2)帶狀態(tài)切換的跳轉(zhuǎn)指令)帶狀態(tài)切換的跳轉(zhuǎn)指令 BXBX BX BX 指令的格式為:指令的格式為: BX RmBX Rm BX BX 指令的目標(biāo)地址由指令的目標(biāo)地址由 Rm Rm 值與值與#0XFFFF FFFE #0XFFFF FFFE
36、進(jìn)行進(jìn)行 “與與” 運算得運算得到。根據(jù)到。根據(jù) RmRm 最低位的值,目標(biāo)地最低位的值,目標(biāo)地址處的指令既可以是址處的指令既可以是 ARMARM 指令,也指令,也可以是可以是 ThumbThumb 指令。指令。共129頁4545共129頁4646(3 3)帶連接和狀態(tài)切換的連接跳轉(zhuǎn)指令)帶連接和狀態(tài)切換的連接跳轉(zhuǎn)指令 BLXBLX BLXBLX 指令的格式有兩種:指令的格式有兩種:BLX BLX 和和 BLX RmBLX Rm 以以 targettarget 方式提供目標(biāo)地址的方式提供目標(biāo)地址的 BLXBLX 指令的功能是:把程序跳轉(zhuǎn)到指指令的功能是:把程序跳轉(zhuǎn)到指令中所指定的目標(biāo)地址繼續(xù)執(zhí)
37、行,并令中所指定的目標(biāo)地址繼續(xù)執(zhí)行,并同時將處理器的工作狀態(tài)從同時將處理器的工作狀態(tài)從 ARMARM 狀態(tài)狀態(tài)切換到切換到 ThumbThumb 狀態(tài)和將狀態(tài)和將 PCPC 的當(dāng)前內(nèi)的當(dāng)前內(nèi)容保存到寄存器容保存到寄存器 LRLR 中。中。共129頁4747 而以而以 RmRm 方式提供目標(biāo)地址的方式提供目標(biāo)地址的 BLXBLX 指令,除了跳轉(zhuǎn)和將指令,除了跳轉(zhuǎn)和將 PCPC 保存到保存到 LR LR 之外,也可進(jìn)行狀態(tài)切換,但其切之外,也可進(jìn)行狀態(tài)切換,但其切換的依據(jù)是換的依據(jù)是 Rm Rm 最低位的值。如果值最低位的值。如果值為為 0 0 ,則目標(biāo)地址處應(yīng)為,則目標(biāo)地址處應(yīng)為 ARMARM
38、指令,指令,如果值為如果值為 1 1 ,則目標(biāo)地址處應(yīng)為,則目標(biāo)地址處應(yīng)為 ThumbThumb 指令。指令。共129頁483.3.2 3.3.2 數(shù)據(jù)處理指令數(shù)據(jù)處理指令 數(shù)據(jù)處理指令分為:數(shù)據(jù)處理指令分為:算術(shù)操作指令、算術(shù)操作指令、按位邏輯操作指令、按位邏輯操作指令、寄存器移位指令、寄存器移位指令、比較操作。比較操作。3.3.2.1 3.3.2.1 算數(shù)操作指令算數(shù)操作指令 包括:包括:加法指令加法指令A(yù)DDADD、減法指令、減法指令SUBSUB、逆向減法指令逆向減法指令RSBRSB、帶進(jìn)位加法指令、帶進(jìn)位加法指令A(yù)DCADC、帶進(jìn)位減法指令帶進(jìn)位減法指令SBCSBC、帶借位逆向減法、帶
39、借位逆向減法指令指令RSCRSC。共129頁4949(1 1)ADDADD指令指令 加法指令加法指令A(yù)DDADD的格式為:的格式為:ADDS ,ADDS , ADDADD 指令把第指令把第 1 1 源操作數(shù)源操作數(shù) RnRn 和和第第 2 2 源操作數(shù)源操作數(shù) operand2operand2 相加后,將相加后,將結(jié)果存放到目的操作數(shù)結(jié)果存放到目的操作數(shù) RdRd。 RnRn 為寄存器尋址;為寄存器尋址;operand2operand2 可可以為:以為:寄存器尋址、寄存器尋址、立即尋址、立即尋址、帶移帶移位預(yù)處理的寄存器尋址位預(yù)處理的寄存器尋址。共129頁5050 ADDADD指令的執(zhí)行如下:
40、指令的執(zhí)行如下:共129頁5151ADD R0,R1,R2 ;R0(R1)+(R2)ADD R0,R1,#255 ;R0 (R1)+ 255ADD R0,R2,R3,LSL#1 ;R0 (R2) +(R31)受影響的受影響的CPSRCPSR標(biāo)志位標(biāo)志位取值取值N N寄存器寄存器Rd31Rd31被復(fù)制到被復(fù)制到N NZ Z如果如果RdRd為為0 0,則,則Z=1Z=1,否則,否則Z=0Z=0C C運算結(jié)果有進(jìn)位運算結(jié)果有進(jìn)位C=1C=1,否則,否則C=0C=0V V運算結(jié)果有溢出運算結(jié)果有溢出V=1V=1,否則,否則V=0V=0改為OX256行嗎?例子:例子:共129頁5252(2 2)SUBS
41、UB指令指令 SUBSUB指令的格式為:指令的格式為:SUBS , , SUBS , , SUBSUB指令把指令把 RnRn 作為被減數(shù),作為被減數(shù),operand2operand2 作為減數(shù)進(jìn)行減法運算,作為減數(shù)進(jìn)行減法運算,然后將結(jié)果存放在然后將結(jié)果存放在 RdRd。 operand2 operand2 可以是:可以是:寄存器尋址寄存器尋址方式、方式、立即尋址方式、立即尋址方式、帶移位預(yù)處帶移位預(yù)處理的寄存器尋址方式理的寄存器尋址方式。共129頁5353 SUB SUB 的執(zhí)行流程為:的執(zhí)行流程為:共129頁5454SUB R0SUB R0,R1R1,R2 R2 ;R0R0(R1R1)-
42、-(R2R2)SUB R0SUB R0,R1R1,#256 #256 ;R0R0(R1R1)- 256- 256SUB R0SUB R0,R2R2,R3R3,LSL#1LSL#1;R0R0(R2R2)- - (R31R31)受影響的受影響的CPSRCPSR標(biāo)志位標(biāo)志位取值取值N N寄存器寄存器Rd31Rd31被復(fù)制到被復(fù)制到N NZ Z如果如果RdRd為為0 0則則Z=1,Z=1,否則否則Z=0Z=0C C運算結(jié)果有借位則運算結(jié)果有借位則C=0,C=0,否則否則C=1C=1V V運算結(jié)果有溢出則運算結(jié)果有溢出則V=1,V=1,否則否則V=0V=0例:例:共129頁5555(3 3)ADCADC
43、指令指令 ADCADC指令的格式為:指令的格式為:ADCS ,ADCS , ADCADC 指令把指令把 三個數(shù)三個數(shù) 進(jìn)行加法運算。進(jìn)行加法運算。即把即把 RnRn 與與 operand2operand2 相加,然后再加相加,然后再加上上 CPRS CPRS 中的中的 C C 標(biāo)志位的值,最后將標(biāo)志位的值,最后將結(jié)果存放到目的操作數(shù)結(jié)果存放到目的操作數(shù) RdRd 中。中。共129頁5656 RnRn 為寄存器尋址;為寄存器尋址;operand2operand2 可以可以為:為:寄存器尋址寄存器尋址、立即數(shù)尋址、立即數(shù)尋址、帶移位帶移位預(yù)處理的寄存器尋址預(yù)處理的寄存器尋址。共129頁5757 A
44、DCADC 通常用來實現(xiàn)字長大于通常用來實現(xiàn)字長大于 3232 位位的加法運算。的加法運算。 標(biāo)志位的修改同標(biāo)志位的修改同 ADDADD、只修改、只修改 N N、Z Z、C C、V V。 例:有例:有 兩個兩個128128位數(shù)位數(shù),第一個數(shù)由,第一個數(shù)由高到低存放在寄存器高到低存放在寄存器 R7R4R7R4 中,第二個中,第二個數(shù)由高到低存放在寄存器數(shù)由高到低存放在寄存器 R11R8R11R8 中,中,請編寫程序把兩個數(shù)相加,運算結(jié)果由請編寫程序把兩個數(shù)相加,運算結(jié)果由高到低存放到寄存器高到低存放到寄存器 R3R0R3R0中中。共129頁58ADDS R0ADDS R0,R4R4,R8 R8
45、;加低位字,;加低位字,不帶進(jìn)位不帶進(jìn)位ADCS R1ADCS R1,R5R5,R9 R9 ;加第二個字,;加第二個字,帶進(jìn)位帶進(jìn)位ADCS R2ADCS R2,R6R6,R10 R10 ;加第三個字,;加第三個字,帶進(jìn)位帶進(jìn)位ADCS R3ADCS R3,R7R7,R11 R11 ;加第四個字,;加第四個字,帶進(jìn)位帶進(jìn)位實現(xiàn)程序為:實現(xiàn)程序為:這段程序有缺陷這段程序有缺陷嗎?嗎?能否不要這些能否不要這些 S S ?共129頁5959(4 4)SBCSBC指令指令 SBCSBC指令的格式為:指令的格式為:SBCS , , SBCS , , SBCSBC 指令把指令把 RnRn 作為被減數(shù),作為
46、被減數(shù),operand2 operand2 作為減數(shù)進(jìn)行減法運算,作為減數(shù)進(jìn)行減法運算,然后再減去然后再減去 CPSRCPSR 中中 C C 條件標(biāo)志位條件標(biāo)志位的的反碼反碼,最后將結(jié)果存入,最后將結(jié)果存入 RdRd。共129頁6060 SBCSBC指令執(zhí)行流程為:指令執(zhí)行流程為:共129頁6161SBCS R0SBCS R0,R1R1,R2 R2 ;R0(R1)-(R2)-R0(R1)-(R2)-!C C 該指令主要用于字長大于該指令主要用于字長大于 3232 位的數(shù)位的數(shù)據(jù)的減法運算。據(jù)的減法運算。 標(biāo)志位的修改同標(biāo)志位的修改同 SUBSUB。例子:例子:共129頁6262(5 5)RSB
47、RSB指令指令 RSBRSB指令的格式為:指令的格式為:RSBS ,RSBS , RSBRSB 指令之所以被稱為逆向減指令之所以被稱為逆向減法指令,是因為該指令把法指令,是因為該指令把 operand2operand2 作為被減數(shù),而把作為被減數(shù),而把 RnRn 作為減數(shù)來作為減數(shù)來進(jìn)行減法運算,運算結(jié)果仍然被存進(jìn)行減法運算,運算結(jié)果仍然被存入入 RdRd。共129頁6363RSB R0RSB R0,R1R1,R2 R2 ;R0R0(R2R2)- -(R1R1)RSB R0RSB R0,R1R1,#256 #256 ;R0256 -R0256 -(R1R1)RSB R0RSB R0,R2R2,
48、R3R3,LSL#1LSL#1;R0R0(R31R31)- - (R2R2)例子:例子:共129頁6464(6 6)RSCRSC指令指令 RSCRSC指令的格式為:指令的格式為:RSCS ,RSCS , RSCRSC 指令把指令把 operand2operand2 作為被減數(shù),作為被減數(shù),而把而把 RnRn 作為減數(shù),然后再減去作為減數(shù),然后再減去 CPSR CPSR 中中的的 C C 條件標(biāo)志位的條件標(biāo)志位的 反碼反碼,最后將結(jié)果存,最后將結(jié)果存入入 RdRd。 RSC R0RSC R0,R1R1,R2R2共129頁653.3.2.2 3.3.2.2 按位邏輯操作指令按位邏輯操作指令 按位邏
49、輯操作指令包括:按位邏輯操作指令包括:邏輯與操作邏輯與操作指令指令A(yù)NDAND、邏輯或操作指令邏輯或操作指令ORRORR、邏輯異或邏輯異或操作指令操作指令EOREOR 以及以及 位清除指令位清除指令BICBIC。(1 1)ANDAND指令指令 AND AND指令的格式為:指令的格式為:ANDS ,ANDS , ANDAND 指令把指令把 RnRn 和和 operand2operand2 按位按位 進(jìn)行邏輯進(jìn)行邏輯“與與”運算,并把結(jié)果存入運算,并把結(jié)果存入 RdRd。共129頁6666 AND AND 指令執(zhí)行流程:指令執(zhí)行流程:共129頁6767例:例: AND R0 AND R0,R0R0
50、,#3 #3 ;該指令保持;該指令保持R0R0的的0 0、1 1位,其余位清零位,其余位清零受影響的受影響的CPSRCPSR標(biāo)志位標(biāo)志位取值取值N N寄存器寄存器Rd31Rd31被復(fù)制到被復(fù)制到N NZ Z如果如果RdRd為為0 0則則Z=1Z=1,否則,否則Z=0Z=0C CC=0C=0共129頁6868(2 2)ORRORR指令指令 ORR ORR指令的格式為:指令的格式為:ORRS ,ORRS , ORRORR 指令把指令把 Rn Rn 和和 operand2operand2 按位進(jìn)行邏輯按位進(jìn)行邏輯“或或”運算,并把結(jié)運算,并把結(jié)果存入果存入 RdRd。ORR R0ORR R0,R0R
51、0,#3 #3 ;該指令設(shè)置;該指令設(shè)置R0R0的的0 0、1 1位,其余位不變位,其余位不變例:請把寄存器例:請把寄存器R2R2中的高中的高8 8位數(shù)據(jù)傳送到位數(shù)據(jù)傳送到寄存器寄存器R3R3的低的低8 8位。位。共129頁6969MOV R0MOV R0,R2R2,LSR #24 LSR #24 ;將;將R2R2右移右移2424位,位,即將其高即將其高8 8位移至低位移至低8 8位送位送R0R0。ORR R3ORR R3,R0R0,R3R3,LSL #8 LSL #8 ;將;將R3R3左移左移8 8位位后將后將R0R0低低8 8位送至位送至R3R3。 標(biāo)志位的影響同標(biāo)志位的影響同ANDAND
52、。注意:注意:R2R2原來的原來的內(nèi)容沒有變內(nèi)容沒有變注意:注意:R3R3原來的高原來的高2424位內(nèi)容變了位內(nèi)容變了共129頁7070(3 3)EOREOR指令指令 EOR EOR指令的格式為:指令的格式為:EORS ,EORS , EOR EOR 指令把指令把 RnRn 和和 operand2operand2 按位按位進(jìn)行邏輯進(jìn)行邏輯“異或異或”運算,并把結(jié)果存入運算,并把結(jié)果存入 RdRd。EOR R0EOR R0,R0R0,#3 #3 ;該指令反轉(zhuǎn);該指令反轉(zhuǎn)R0R0的的0 0、1 1位,其余位保持不變。位,其余位保持不變。 標(biāo)志位的修改同標(biāo)志位的修改同ANDAND。共129頁7171
53、(4 4)BICBIC指令指令 BICBIC指令的格式為:指令的格式為:BICS ,BICS , BIC BIC 指令的功能是清除指令的功能是清除 RnRn 的的某些位,并把結(jié)果存入某些位,并把結(jié)果存入 RdRd。共129頁7272 Rn Rn 為寄存器尋址方式;為寄存器尋址方式;operand2operand2 可可以是寄存器尋址方式,也可以是立即數(shù)尋以是寄存器尋址方式,也可以是立即數(shù)尋址方式。址方式。Operand2Operand2 為為 3232位位 掩碼,如果掩碼,如果在掩碼中設(shè)置了某一位,則清除這一位,在掩碼中設(shè)置了某一位,則清除這一位,未設(shè)置的掩碼位保持不變。未設(shè)置的掩碼位保持不變
54、。BIC R0BIC R0,R0R0,#0 xB #0 xB ;該指令清除;該指令清除R0R0中的中的0 0、1 1和和3 3位,其余位保持不變。位,其余位保持不變。 標(biāo)志位的修改同標(biāo)志位的修改同ANDAND。共129頁733.3.2.3 3.3.2.3 寄存器移位操作指令寄存器移位操作指令 包括:包括:數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令MOV MOV 和和 數(shù)據(jù)非傳數(shù)據(jù)非傳送指令送指令MVNMVN。(1 1)MOVMOV指令指令 MOVMOV 指令將一個數(shù)指令將一個數(shù) N N 送到目標(biāo)寄存送到目標(biāo)寄存器器 RdRd ,其中,其中 N N 可以是可以是 寄存器寄存器,也可以,也可以是是 立即數(shù)立即數(shù)。
55、MOV MOV 指令的格式為:指令的格式為: MOVS , MOVS , 共129頁74 MOV MOV 指令的執(zhí)行流程:指令的執(zhí)行流程:共129頁7575例:例:MOV R2MOV R2,#0 x7E#0 x7E ;將立即數(shù);將立即數(shù)0 x7E0 x7E傳傳 送到寄存器送到寄存器R2R2中中MOV R1MOV R1,R0R0,LSL#3LSL#3 ;將寄存器;將寄存器R0 R0 * * 8 8 傳送到寄存器傳送到寄存器R1R1受影響的受影響的CPSRCPSR標(biāo)志位標(biāo)志位取值取值N N寄存器寄存器Rd31Rd31被復(fù)制到被復(fù)制到N NZ Z如果如果RdRd為為0 0,則,則Z=1Z=1,否則,
56、否則Z=0Z=0C CC=0C=0共129頁7676(2 2)MVNMVN指令指令 MVNMVN指令的格式為:指令的格式為:MVNS , MVNS , MVN MVN 指令在進(jìn)行數(shù)據(jù)傳送之前,指令在進(jìn)行數(shù)據(jù)傳送之前,先把源操作數(shù)先把源操作數(shù) operand2 operand2 按位取反,按位取反,然后再傳送到目的寄存器然后再傳送到目的寄存器 RdRd。MVN R0MVN R0,#0 #0 ;將立即數(shù);將立即數(shù)0 0取反傳送到寄取反傳送到寄 存器存器R0R0中,完成后中,完成后R0=-1R0=-1。 標(biāo)志修改同標(biāo)志修改同MOVMOV指令,只修改指令,只修改N N、Z Z、C C。共129頁773
57、.3.2.4 3.3.2.4 比較操作指令比較操作指令 包括:包括:比較指令比較指令CMPCMP、負(fù)數(shù)比較指令、負(fù)數(shù)比較指令CMNCMN、位測試指令位測試指令TST TST 以及以及 相等測試指令相等測試指令TEQTEQ。(1 1)CMPCMP指令指令 CMP CMP指令的格式為:指令的格式為:CMP , CMP , CMP CMP 指令把指令把 RdRd 作為被減數(shù)和作為被減數(shù)和operand2operand2 進(jìn)行一次減法運算操作,但不進(jìn)行一次減法運算操作,但不存儲運算結(jié)果,只根據(jù)結(jié)果來更新存儲運算結(jié)果,只根據(jù)結(jié)果來更新 CPSRCPSR 的相應(yīng)條件標(biāo)志位的相應(yīng)條件標(biāo)志位 N N、Z Z、
58、C C、V V。共129頁7878受影響的受影響的CPSRCPSR標(biāo)志位標(biāo)志位取值取值N N運算結(jié)果的第運算結(jié)果的第3131位被復(fù)制到位被復(fù)制到N NZ Z運算結(jié)果為運算結(jié)果為0 0則則Z=1Z=1,否則,否則Z=0Z=0C C運算結(jié)果有借位則運算結(jié)果有借位則C=0C=0,否則,否則C=1C=1V V運算結(jié)果有溢出則運算結(jié)果有溢出則V=1V=1,否則,否則V=0V=0CMP R1CMP R1,R0 R0 ;(R1)-(R0)(R1)-(R0);根據(jù)結(jié)果設(shè)置;根據(jù)結(jié)果設(shè)置CPSRCPSR的標(biāo)志位。的標(biāo)志位。CMP R1CMP R1,#100 #100 ;(R1)-100(R1)-100;根據(jù)結(jié)果
59、設(shè)置;根據(jù)結(jié)果設(shè)置CPSRCPSR的標(biāo)志位。的標(biāo)志位。共129頁7979 CMN CMN 指令把指令把 RdRd 作為被減數(shù)與作為被減數(shù)與operand2operand2 的的 反反 進(jìn)行一次減法運算,但不進(jìn)行一次減法運算,但不存儲結(jié)果,只更新存儲結(jié)果,只更新 CPSRCPSR 中條件標(biāo)志位。中條件標(biāo)志位。(2 2)CMNCMN指令指令 CMNCMN指令的格式為:指令的格式為:CMN , CMN , 注意:比較類指令本身帶有更新注意:比較類指令本身帶有更新 CPSRCPSR的功能,故在該指令中不能使用后綴的功能,故在該指令中不能使用后綴 S S。共129頁8080(3 3)TSTTST測試指令
60、測試指令 TST TST指令的格式為:指令的格式為:TST , TST , TST TST 指令的功能是把指令的功能是把 RdRd 和和 operand2operand2 按位進(jìn)行邏輯按位進(jìn)行邏輯“與與”運算,并根據(jù)運算結(jié)運算,并根據(jù)運算結(jié)果更新果更新 CPSRCPSR 中的條件標(biāo)志位的值。中的條件標(biāo)志位的值。RdRd 是是要測試的數(shù)據(jù),要測試的數(shù)據(jù),operand2operand2 是一個掩碼。該是一個掩碼。該指令一般用來檢測是否設(shè)置了特定的位。指令一般用來檢測是否設(shè)置了特定的位。TST R1TST R1,#0 x5 #0 x5 ;測試寄存器;測試寄存器R1R1中的第中的第0 0位和第位和第2 2位是否是位是否是1 1。共129頁8181 TEQT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 怎樣寫村務(wù)公開申請書
- 行業(yè)準(zhǔn)入申請書
- 2025年中國中壓平燙機市場調(diào)查研究報告
- 2025至2031年中國高氯氰菊酯乳油殺蟲劑行業(yè)投資前景及策略咨詢研究報告
- 部編版二年級語文下冊必考知識點(精簡版)
- 貧困證明申請書格式
- 大學(xué)生助學(xué)金申請書格式
- 醫(yī)師獨立值班申請書
- 財務(wù)提前轉(zhuǎn)正申請書
- 建設(shè)項目申請書
- YY/T 0729.2-2009組織粘合劑粘接性能試驗方法第2部分:T-剝離拉伸承載強度
- GB/T 11379-2008金屬覆蓋層工程用鉻電鍍層
- 移出經(jīng)營異常名錄申請表
- 2023年延長石油集團(tuán)企業(yè)文化知識試題
- 堤防工程重點難點
- 象數(shù)療法好療效
- A320系列飛行訓(xùn)練課程:電子飛行儀表系統(tǒng)概況
- 黃土地質(zhì)災(zāi)害類型及其危害性評估
- 交際德語教程第二版A1Studio[21] 課后習(xí)題參考答案
- 部編版道法三下知識點匯總【需要背誦】
- 氣割、電氣焊作業(yè)的應(yīng)急救援預(yù)案
評論
0/150
提交評論