版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、共129頁(yè)1 1第第3 3章章 ARMARM指令集指令集 4 4學(xué)時(shí)學(xué)時(shí)本章主要內(nèi)容本章主要內(nèi)容1 1、ARMARM指令集簡(jiǎn)介;指令集簡(jiǎn)介;2 2、ARMARM指令的尋址方式;指令的尋址方式;3 3、ARMARM指令集。指令集。共129頁(yè)2 2本章教學(xué)要求本章教學(xué)要求掌握:掌握:ARMARM指令的尋址方式指令的尋址方式,ARMARM指令集指令集。共129頁(yè)3 33.1 ARM3.1 ARM指令集簡(jiǎn)介指令集簡(jiǎn)介 ARMARM微處理器微處理器 的指令集是的指令集是 加載加載/ /存儲(chǔ)存儲(chǔ)型型的,具有效率高、代碼密度低的特點(diǎn),的,具有效率高、代碼密度低的特點(diǎn),它的它的 3232位位 編碼能夠包含的信
2、息量很大,編碼能夠包含的信息量很大,每一條語(yǔ)句完成的功能很多。每一條語(yǔ)句完成的功能很多。 在在 多寄存器多寄存器 操作指令中操作指令中 一次一次 最多最多可以完成可以完成 1616個(gè)個(gè) 寄存器的數(shù)據(jù)傳送,而這寄存器的數(shù)據(jù)傳送,而這樣的操作要是樣的操作要是 不在不在 多寄存器操作的指令多寄存器操作的指令中,要執(zhí)行中,要執(zhí)行 1616條條 語(yǔ)句才能實(shí)現(xiàn)。語(yǔ)句才能實(shí)現(xiàn)。共129頁(yè)4 一個(gè)簡(jiǎn)單的一個(gè)簡(jiǎn)單的ARMARM匯編程序:匯編程序: AREA Example,CODE,READONLYAREA Example,CODE,READONLY;聲明代碼段;聲明代碼段ExampleExample ENTR
3、Y ENTRY ;標(biāo)識(shí)程序入口;標(biāo)識(shí)程序入口 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頁(yè)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頁(yè)6跳轉(zhuǎn)指令跳轉(zhuǎn)指令 跳轉(zhuǎn)指令跳轉(zhuǎn)指令用于用于控制控制程序的執(zhí)行流程序的執(zhí)行流程、指令的特權(quán)等級(jí)程、指令的特權(quán)等級(jí)和和在在ARMARM代碼代碼與與ThumbThumb代碼代碼
5、之間進(jìn)行切換。之間進(jìn)行切換。狀態(tài)寄存器傳輸指令狀態(tài)寄存器傳輸指令 用于用于控制控制在在存儲(chǔ)器存儲(chǔ)器和和寄存器寄存器之間之間的數(shù)據(jù)的數(shù)據(jù)傳輸傳輸、交換、交換、加載加載、存儲(chǔ)。、存儲(chǔ)。共129頁(yè)7數(shù)據(jù)處理指令數(shù)據(jù)處理指令 用于操作片上的用于操作片上的ALUALU、桶型移位、桶型移位器、器、乘法器乘法器以完成在以完成在3131個(gè)個(gè)3232位位的通用的通用寄存器之間的寄存器之間的高速數(shù)據(jù)處理高速數(shù)據(jù)處理。ARMARM協(xié)處理器指令協(xié)處理器指令 ARMARM協(xié)處理器指令用于控制外部協(xié)處理器指令用于控制外部的的協(xié)處理器協(xié)處理器,這些指令已開(kāi)發(fā)統(tǒng)一的,這些指令已開(kāi)發(fā)統(tǒng)一的方式用于方式用于片外功能指令集片外功能
6、指令集。ARMARM支持支持1616個(gè)協(xié)處理器。個(gè)協(xié)處理器。共129頁(yè)8異常中斷產(chǎn)生指令異常中斷產(chǎn)生指令 ARMARM有有 兩條兩條 異常中斷產(chǎn)生指令,異常中斷產(chǎn)生指令,分別為分別為軟中斷指令軟中斷指令SWI SWI 和和 斷點(diǎn)中斷斷點(diǎn)中斷指令指令BKPTBKPT。Load/StoreLoad/Store內(nèi)存訪問(wèn)指令內(nèi)存訪問(wèn)指令 LoadLoad指令指令用于從用于從內(nèi)存內(nèi)存中讀取數(shù)據(jù)中讀取數(shù)據(jù)放入放入寄存器寄存器中,中,StoreStore指令用于將指令用于將寄寄存器存器中的數(shù)據(jù)保存到中的數(shù)據(jù)保存到內(nèi)存內(nèi)存中。中。共129頁(yè)9(1 1)ARMARM指令的格式指令的格式 ARMARM指令的格式如
7、下:指令的格式如下: s s , , , 指令格式舉例:指令格式舉例: LDR R3LDR R3,R6;R6;讀取讀取R6R6地址上的地址上的存儲(chǔ)單元內(nèi)容,執(zhí)行條件存儲(chǔ)單元內(nèi)容,執(zhí)行條件ALAL。 BEQ NEXTBEQ NEXT; ;跳轉(zhuǎn)指令,執(zhí)行條件跳轉(zhuǎn)指令,執(zhí)行條件EQEQ即相等時(shí)跳轉(zhuǎn)到即相等時(shí)跳轉(zhuǎn)到NEXTNEXT執(zhí)行。執(zhí)行。共129頁(yè)10 ADDS R0ADDS R0,R1R1,#2#2; ;加法指令,加法指令,R0=R1+2R0=R1+2,影響,影響CPSRCPSR寄存器。寄存器。 SUBNES R0SUBNES R0,R1R1,#0X03#0X03; ;條件執(zhí)條件執(zhí)行減法運(yùn)算(行
8、減法運(yùn)算(NENE),),R0=R1-0X03R0=R1-0X03,影,影響響CPSRCPSR寄存器。寄存器。 在在ARMARM指令中,靈活地使用第二指令中,靈活地使用第二個(gè)操作數(shù)(個(gè)操作數(shù)(operand2operand2)能夠提高代碼)能夠提高代碼效率,第二個(gè)操作數(shù)的形式如下:效率,第二個(gè)操作數(shù)的形式如下:共129頁(yè)11#immed_8r8#immed_8r8位常數(shù)表達(dá)式位常數(shù)表達(dá)式 但但 8 8位常數(shù)位常數(shù) 的使用是有限制的,的使用是有限制的,具體如下:具體如下:共129頁(yè)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頁(yè)13RmRm寄存器方式寄存器方式 LDR R0LDR R0,R2,#-1;R2,#-1;讀取讀取 R2R2 地地址上的存儲(chǔ)器單元內(nèi)容存入址上的存儲(chǔ)器單元
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頁(yè)14 LDR R0LDR R0,R1,-R2R1,-R2; ;讀取讀取R1R1地址地址上的存儲(chǔ)器單元內(nèi)容存入上的存儲(chǔ)器單元內(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頁(yè)15RRX RRX ;帶擴(kuò)展的循環(huán)右移;帶擴(kuò)展的循環(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頁(yè)163.1.2 ARM3.1.2 ARM指令的條件碼域指令的條件碼域 當(dāng)處理器工作在當(dāng)處理器工作在 ARMARM狀態(tài)狀態(tài) 時(shí),時(shí),幾乎所有的指令均根據(jù)幾乎所有的指令均根據(jù) CPSRCPSR 中的中的 條件碼的狀態(tài)條件碼的狀態(tài) 和和 指令的條件域指令的條件域 有有條件執(zhí)行。當(dāng)指令的執(zhí)行條件滿足時(shí),條件執(zhí)行。當(dāng)指令的執(zhí)行條件滿足時(shí),指令被執(zhí)行,指令被執(zhí)行,否則指令
13、被忽略否則指令被忽略。 ARMARM指令的指令的 條件碼條件碼 和和 助記符助記符 如下表所示:如下表所示:共129頁(yè)17條件碼條件碼條件碼助記符條件碼助記符CPSRCPSR中條件標(biāo)志位值中條件標(biāo)志位值含義含義00000000EQEQZ=1Z=1相等相等00010001NENEZ=0Z=0不相等不相等00100010CS/HSCS/HSC=1C=1無(wú)符號(hào)數(shù)大于或等于無(wú)符號(hào)數(shù)大于或等于00110011CC/LOCC/LOC=0C=0無(wú)符號(hào)數(shù)小于無(wú)符號(hào)數(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無(wú)符號(hào)數(shù)大于無(wú)符號(hào)數(shù)大于10011001LSLSC=0C=0且且Z=1Z=1無(wú)符號(hào)數(shù)小于或等于無(wú)符號(hào)數(shù)小于或等于10101010GEGEN=1N=1且且V=1V=1或或N=0N=0且且V=0V=0帶符號(hào)數(shù)大于或等于帶符號(hào)數(shù)大于或等于10111011LTLTN=1N=1且且V=0V=0或或N=0N=0且且V=1V=1帶符號(hào)數(shù)小于帶符號(hào)數(shù)小于共129頁(yè)1811001100GTGTZ=0Z=0且且N=VN=V帶符號(hào)數(shù)大于帶符號(hào)數(shù)大于11011101LELEZ=1Z=1或或N!=VN!=V帶符號(hào)數(shù)小于或等
15、于帶符號(hào)數(shù)小于或等于11101110ALAL無(wú)條件執(zhí)行無(wú)條件執(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頁(yè)19(2 2)!后綴)!后綴 在指令的地址表達(dá)式中含有在指令的地址表達(dá)式中含有 !后綴時(shí)
16、,指令執(zhí)行后,基地址寄存器后綴時(shí),指令執(zhí)行后,基地址寄存器中的地址將會(huì)發(fā)生變化,變化的結(jié)果中的地址將會(huì)發(fā)生變化,變化的結(jié)果如下:如下:基址寄存器中的地址值(指令執(zhí)行基址寄存器中的地址值(指令執(zhí)行后)后)= =指令執(zhí)行前的值指令執(zhí)行前的值+ +地址偏移量;地址偏移量;如果指令不含如果指令不含 !后綴,則地址值后綴,則地址值不會(huì)發(fā)生變化。不會(huì)發(fā)生變化。共129頁(yè)20LDMIA R3LDMIA R3,R0R0,#04;#04;R3=R0R3=R0+ +#04#04,沒(méi)有使用!后綴,沒(méi)有使用!后綴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ù)是一個(gè)字節(jié),據(jù)是一個(gè)字節(jié),不是一個(gè)字或半字不是一個(gè)字或半字。共129頁(yè)21LDR R4LDR R4,R0R0,#12#12;R4R4= =R0R0+ +1212,指令傳送一個(gè)字指令傳送一個(gè)字LDRB R4LDRB R4,R0R0,#12#12;R4R4= =R0R0+ +1212,指令傳送一個(gè)字節(jié)指令傳送一個(gè)字節(jié)(4 4)T T后綴后綴 指令在特權(quán)模式下對(duì)存儲(chǔ)器的訪指令在特權(quán)模式下對(duì)存儲(chǔ)器的訪問(wèn),將被存儲(chǔ)器看作是用戶模式的訪問(wèn),將被存儲(chǔ)器看作是
18、用戶模式的訪問(wèn)。問(wèn)。共129頁(yè)22 T T 后綴使用受很多限制,一般只后綴使用受很多限制,一般只用在用在 字傳送字傳送 和和 無(wú)符號(hào)字節(jié)無(wú)符號(hào)字節(jié) 傳送中。傳送中。在用戶模式下不可以選用,選用是沒(méi)在用戶模式下不可以選用,選用是沒(méi)有意義的;不能與前變址一起使用。有意義的;不能與前變址一起使用。LDRT R4LDRT R4,R5R5;R4=R5TR4=R5T模式模式共129頁(yè)233.2 ARM3.2 ARM指令的尋址方式指令的尋址方式 尋址方式:尋址方式:就是處理器根據(jù)指令就是處理器根據(jù)指令中給出的中給出的 地址信息地址信息 來(lái)尋找來(lái)尋找 物理地物理地址址 的方式。的方式。 ARMARM指令集支持
19、有:指令集支持有:立即數(shù)尋址、立即數(shù)尋址、寄存器尋址、寄存器尋址、寄存器間接尋址、寄存器間接尋址、基址基址變址尋址、變址尋址、堆棧尋址、堆棧尋址、多寄存器尋址多寄存器尋址等。等。共129頁(yè)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頁(yè)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ù)本身放在放在存儲(chǔ)器存儲(chǔ)器中。中。共129頁(yè)26MOV R1MOV R1,R2 ;R1=R2 R2 ;R1=R2 錯(cuò)誤指令錯(cuò)誤指令LDR R1LDR R1,R2 ;R1=R2R2 ;R1=R23.
21、2.4 3.2.4 基址變址尋址基址變址尋址 就是將寄存器(就是將寄存器(該寄存器一般稱該寄存器一般稱作基址寄存器作基址寄存器)的內(nèi)容與指令中給出)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個(gè)操的地址偏移量相加,從而得到一個(gè)操作數(shù)的有效地址。作數(shù)的有效地址。共129頁(yè)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)存儲(chǔ)器合理的范指令可以在系統(tǒng)存儲(chǔ)器合理的范圍內(nèi)基址加上不超過(guò)圍內(nèi)基址加上不超過(guò) 4KB4KB 的偏移量。的偏移量。 有前變址、自動(dòng)變址、后變址。有前變址、自動(dòng)變址、后變址。共129頁(yè)28(1 1)前變址模式)前變址模式 LDR R1 LDR R1,R2R2,#0X5#0X5(2 2)自動(dòng)變址模式)自動(dòng)變址模式 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頁(yè)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 ;取一個(gè)數(shù)取一個(gè)數(shù) STR R0STR R0,R2,#4 ;R2,#4 ;復(fù)制一個(gè)數(shù)復(fù)制一個(gè)數(shù) NEXT1 ;NEXT1 ;源數(shù)據(jù)源數(shù)據(jù) NEXT2 ;NEXT2 ;目標(biāo)數(shù)據(jù)目標(biāo)數(shù)據(jù)共129頁(yè)303
24、.2.5 3.2.5 堆棧尋址堆棧尋址(1 1)FullFull棧:堆棧指針棧:堆棧指針指向棧頂元素指向棧頂元素;(2 2)EmptyEmpty棧:堆棧指針棧:堆棧指針指向第一個(gè)指向第一個(gè)可用元素可用元素;(3 3)遞減棧:堆棧向內(nèi)存)遞減棧:堆棧向內(nèi)存地址減少地址減少的的方向生成;方向生成; 根據(jù)不同的尋址方式,將堆棧分根據(jù)不同的尋址方式,將堆棧分為以下為以下 4 4 種:種:共129頁(yè)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頁(yè)3232 在在ARMARM指令中,堆棧尋址方式通過(guò)指令中,堆棧尋址方式通過(guò) Load/StoreLoad/Store 指令來(lái)實(shí)現(xiàn)。指令來(lái)實(shí)現(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頁(yè)333.2.6 3.2.6 多寄存器尋址多寄存器尋址LDMIA R1LDMIA R1,R2R2、R3R3、R4R4、R5R53.2.7 3.2.7 相對(duì)尋址相對(duì)尋址 相對(duì)尋址是基址的一種變通,與相對(duì)尋址是基址的一種變通,與基址尋址方式基本類似。基址尋址方式基本類似。相對(duì)尋址相對(duì)尋址以以程序計(jì)數(shù)器程序計(jì)數(shù)器 PCPC 的當(dāng)前值為基址,指的當(dāng)前值為基址,指令中
27、的令中的地址標(biāo)號(hào)地址標(biāo)號(hào)作為作為偏移量偏移量,將兩者,將兩者相加之后得到操作數(shù)的有效地址。相加之后得到操作數(shù)的有效地址。共129頁(yè)34 BL NEXT ;BL NEXT ;跳轉(zhuǎn)到子程序跳轉(zhuǎn)到子程序NEXTNEXT 處執(zhí)行處執(zhí)行 NEXT NEXT MOV PC,LR ; MOV PC,LR ;從子程序返回從子程序返回共129頁(yè)353.3 ARM3.3 ARM指令集指令集 ARMARM指令集指令集可以分為:可以分為:跳轉(zhuǎn)指令、跳轉(zhuǎn)指令、數(shù)據(jù)處理指令、數(shù)據(jù)處理指令、乘法指令與乘加指令、乘法指令與乘加指令、程序狀態(tài)寄存器訪問(wèn)指令、程序狀態(tài)寄存器訪問(wèn)指令、加載加載/ /存存儲(chǔ)指令、儲(chǔ)指令、批量數(shù)據(jù)加載
28、批量數(shù)據(jù)加載/ /存儲(chǔ)指令、存儲(chǔ)指令、數(shù)據(jù)交換指令、數(shù)據(jù)交換指令、移位指令、移位指令、協(xié)處理器協(xié)處理器指令、指令、異常產(chǎn)生指令等異常產(chǎn)生指令等 1010 大類。大類。共129頁(yè)36363.3.1 3.3.1 跳轉(zhuǎn)指令跳轉(zhuǎn)指令 執(zhí)行流程的改變迫使程序計(jì)數(shù)器執(zhí)行流程的改變迫使程序計(jì)數(shù)器(PCPC)指向一個(gè)新的地址,指令集包)指向一個(gè)新的地址,指令集包含的跳轉(zhuǎn)指令如下:含的跳轉(zhuǎn)指令如下:助記符助記符說(shuō)明說(shuō)明操作操作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頁(yè)3737 另一種實(shí)現(xiàn)指令跳轉(zhuǎn)的方式是通另一種實(shí)現(xiàn)指令跳轉(zhuǎn)的方式是通過(guò)過(guò)直接直接向向 PCPC 寄存器中寫(xiě)入寄存器中寫(xiě)入目標(biāo)地址目標(biāo)地址值值,實(shí)現(xiàn)在,實(shí)現(xiàn)在 4
30、GB4GB 地址空間中任意跳地址空間中任意跳轉(zhuǎn),這種跳轉(zhuǎn)又稱為轉(zhuǎn),這種跳轉(zhuǎn)又稱為 長(zhǎng)跳轉(zhuǎn)長(zhǎng)跳轉(zhuǎn)。 如果在長(zhǎng)跳轉(zhuǎn)指令之前使用如果在長(zhǎng)跳轉(zhuǎn)指令之前使用“MOV LRMOV LR”或或“MOV PCMOV PC”等指令,可等指令,可以保存將來(lái)返回的地址值,也就實(shí)現(xiàn)以保存將來(lái)返回的地址值,也就實(shí)現(xiàn)了在了在 4GB 4GB 的地址空間中的子程序調(diào)的地址空間中的子程序調(diào)用。用。共129頁(yè)3838 B B 指令與指令與 BLBL 指令的編碼格式如下:指令的編碼格式如下:(1 1)跳轉(zhuǎn)指令)跳轉(zhuǎn)指令 B B 及帶連接的跳轉(zhuǎn)指令及帶連接的跳轉(zhuǎn)指令 BLBL共129頁(yè)3939 從代碼中看到從代碼中看到 L L 控
31、制了控制了 PCPC 與與 LRLR 寄寄存器之間的開(kāi)關(guān)。當(dāng)存器之間的開(kāi)關(guān)。當(dāng) L=0L=0 時(shí),該開(kāi)關(guān)斷開(kāi),時(shí),該開(kāi)關(guān)斷開(kāi),指令為指令為 B B 指令;當(dāng)指令;當(dāng) L=1L=1 時(shí),該開(kāi)關(guān)接通,時(shí),該開(kāi)關(guān)接通,指令為指令為 BLBL 指令。指令。 B B 和和 BL BL 指令的助記符格式為:指令的助記符格式為:B B 和和BL BL 跳轉(zhuǎn)指令跳轉(zhuǎn)指令 也叫也叫 程序轉(zhuǎn)移指令。程序轉(zhuǎn)移指令。 可以跳轉(zhuǎn)到一個(gè)絕對(duì)地址,如可以跳轉(zhuǎn)到一個(gè)絕對(duì)地址,如: B 0X1234。共129頁(yè)4040 B B 指令和指令和 BLBL 指令都是以一個(gè)指令都是以一個(gè) 2424 位有符號(hào)數(shù)位有符號(hào)數(shù) signed_
32、immed_24signed_immed_24 間接提間接提供目標(biāo)地址,真正的目標(biāo)地址是由處供目標(biāo)地址,真正的目標(biāo)地址是由處理器根據(jù)這個(gè)有符號(hào)數(shù)和當(dāng)前的理器根據(jù)這個(gè)有符號(hào)數(shù)和當(dāng)前的 PCPC 值計(jì)算出來(lái)的。值計(jì)算出來(lái)的。 具體計(jì)算為:先將具體計(jì)算為:先將 signed_immed_24signed_immed_24 左移兩位并擴(kuò)展為左移兩位并擴(kuò)展為3232位位有符號(hào)數(shù)有符號(hào)數(shù),然后再將這,然后再將這3232位位有符有符號(hào)數(shù)與號(hào)數(shù)與 PCPC 的當(dāng)前值相加并回送的當(dāng)前值相加并回送 PCPC。共129頁(yè)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 ,編,編寫(xiě)一個(gè)程序段,求取寫(xiě)一個(gè)程序段,求取 a a 和和 b b 的的 最大最大公約數(shù)公約數(shù) 并將其存入寄存器并將其存入寄存器 R0R0 。共129頁(yè)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)之前會(huì)把前會(huì)把 BLBL 指令的下一條指令地址(指令的下一條指令地址(斷點(diǎn)斷點(diǎn)
35、地址地址)保存到連接寄存器)保存到連接寄存器 LRLR(R14R14),因,因此程序在必要的時(shí)候可以通過(guò)將此程序在必要的時(shí)候可以通過(guò)將 LRLR 的內(nèi)的內(nèi)容進(jìn)行計(jì)算并加載到容進(jìn)行計(jì)算并加載到 PCPC 中使程序返回到中使程序返回到跳轉(zhuǎn)點(diǎn)。跳轉(zhuǎn)點(diǎn)。共129頁(yè)4343 BLBL 指令經(jīng)常被用來(lái)調(diào)用一個(gè)子程序。指令經(jīng)常被用來(lái)調(diào)用一個(gè)子程序。共129頁(yè)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)行 “與與” 運(yùn)算得運(yùn)算得到。根據(jù)到。根據(jù) RmRm 最低位的值,目標(biāo)地最低位的值,目標(biāo)地址處的指令既可以是址處的指令既可以是 ARMARM 指令,也指令,也可以是可以是 ThumbThumb 指令。指令。共129頁(yè)4545共129頁(yè)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í)行,并同時(shí)將處理器的工作狀態(tài)從同時(shí)將處理器的工作狀態(tài)從 ARMARM 狀態(tài)狀態(tài)切換到切換到 ThumbThumb 狀態(tài)和將狀態(tài)和將 PCPC 的當(dāng)前內(nèi)的當(dāng)前內(nèi)容保存到寄存器容保存到寄存器 LRLR 中。中。共129頁(yè)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頁(yè)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頁(yè)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頁(yè)5050 ADDADD指令的執(zhí)行如下:
40、指令的執(zhí)行如下:共129頁(yè)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運(yùn)算結(jié)果有進(jìn)位運(yùn)算結(jié)果有進(jìn)位C=1C=1,否則,否則C=0C=0V V運(yùn)算結(jié)果有溢出運(yùn)算結(jié)果有溢出V=1V=1,否則,否則V=0V=0改為OX256行嗎?例子:例子:共129頁(yè)5252(2 2)SUBS
41、UB指令指令 SUBSUB指令的格式為:指令的格式為:SUBS , , SUBS , , SUBSUB指令把指令把 RnRn 作為被減數(shù),作為被減數(shù),operand2operand2 作為減數(shù)進(jìn)行減法運(yùn)算,作為減數(shù)進(jìn)行減法運(yùn)算,然后將結(jié)果存放在然后將結(jié)果存放在 RdRd。 operand2 operand2 可以是:可以是:寄存器尋址寄存器尋址方式、方式、立即尋址方式、立即尋址方式、帶移位預(yù)處帶移位預(yù)處理的寄存器尋址方式理的寄存器尋址方式。共129頁(yè)5353 SUB SUB 的執(zhí)行流程為:的執(zhí)行流程為:共129頁(yè)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運(yùn)算結(jié)果有借位則運(yùn)算結(jié)果有借位則C=0,C=0,否則否則C=1C=1V V運(yùn)算結(jié)果有溢出則運(yùn)算結(jié)果有溢出則V=1,V=1,否則否則V=0V=0例:例:共129頁(yè)5555(3 3)ADCADC
43、指令指令 ADCADC指令的格式為:指令的格式為:ADCS ,ADCS , ADCADC 指令把指令把 三個(gè)數(shù)三個(gè)數(shù) 進(jìn)行加法運(yùn)算。進(jìn)行加法運(yùn)算。即把即把 RnRn 與與 operand2operand2 相加,然后再加相加,然后再加上上 CPRS CPRS 中的中的 C C 標(biāo)志位的值,最后將標(biāo)志位的值,最后將結(jié)果存放到目的操作數(shù)結(jié)果存放到目的操作數(shù) RdRd 中。中。共129頁(yè)5656 RnRn 為寄存器尋址;為寄存器尋址;operand2operand2 可以可以為:為:寄存器尋址寄存器尋址、立即數(shù)尋址、立即數(shù)尋址、帶移位帶移位預(yù)處理的寄存器尋址預(yù)處理的寄存器尋址。共129頁(yè)5757 A
44、DCADC 通常用來(lái)實(shí)現(xiàn)字長(zhǎng)大于通常用來(lái)實(shí)現(xiàn)字長(zhǎng)大于 3232 位位的加法運(yùn)算。的加法運(yùn)算。 標(biāo)志位的修改同標(biāo)志位的修改同 ADDADD、只修改、只修改 N N、Z Z、C C、V V。 例:有例:有 兩個(gè)兩個(gè)128128位數(shù)位數(shù),第一個(gè)數(shù)由,第一個(gè)數(shù)由高到低存放在寄存器高到低存放在寄存器 R7R4R7R4 中,第二個(gè)中,第二個(gè)數(shù)由高到低存放在寄存器數(shù)由高到低存放在寄存器 R11R8R11R8 中,中,請(qǐng)編寫(xiě)程序把兩個(gè)數(shù)相加,運(yùn)算結(jié)果由請(qǐng)編寫(xiě)程序把兩個(gè)數(shù)相加,運(yùn)算結(jié)果由高到低存放到寄存器高到低存放到寄存器 R3R0R3R0中中。共129頁(yè)58ADDS R0ADDS R0,R4R4,R8 R8
45、;加低位字,;加低位字,不帶進(jìn)位不帶進(jìn)位ADCS R1ADCS R1,R5R5,R9 R9 ;加第二個(gè)字,;加第二個(gè)字,帶進(jìn)位帶進(jìn)位ADCS R2ADCS R2,R6R6,R10 R10 ;加第三個(gè)字,;加第三個(gè)字,帶進(jìn)位帶進(jìn)位ADCS R3ADCS R3,R7R7,R11 R11 ;加第四個(gè)字,;加第四個(gè)字,帶進(jìn)位帶進(jìn)位實(shí)現(xiàn)程序?yàn)椋簩?shí)現(xiàn)程序?yàn)椋哼@段程序有缺陷這段程序有缺陷嗎?嗎?能否不要這些能否不要這些 S S ?共129頁(yè)5959(4 4)SBCSBC指令指令 SBCSBC指令的格式為:指令的格式為:SBCS , , SBCS , , SBCSBC 指令把指令把 RnRn 作為被減數(shù),作為
46、被減數(shù),operand2 operand2 作為減數(shù)進(jìn)行減法運(yùn)算,作為減數(shù)進(jìn)行減法運(yùn)算,然后再減去然后再減去 CPSRCPSR 中中 C C 條件標(biāo)志位條件標(biāo)志位的的反碼反碼,最后將結(jié)果存入,最后將結(jié)果存入 RdRd。共129頁(yè)6060 SBCSBC指令執(zhí)行流程為:指令執(zhí)行流程為:共129頁(yè)6161SBCS R0SBCS R0,R1R1,R2 R2 ;R0(R1)-(R2)-R0(R1)-(R2)-!C C 該指令主要用于字長(zhǎng)大于該指令主要用于字長(zhǎng)大于 3232 位的數(shù)位的數(shù)據(jù)的減法運(yùn)算。據(jù)的減法運(yùn)算。 標(biāo)志位的修改同標(biāo)志位的修改同 SUBSUB。例子:例子:共129頁(yè)6262(5 5)RSB
47、RSB指令指令 RSBRSB指令的格式為:指令的格式為:RSBS ,RSBS , RSBRSB 指令之所以被稱為逆向減指令之所以被稱為逆向減法指令,是因?yàn)樵撝噶畎逊ㄖ噶?,是因?yàn)樵撝噶畎?operand2operand2 作為被減數(shù),而把作為被減數(shù),而把 RnRn 作為減數(shù)來(lái)作為減數(shù)來(lái)進(jìn)行減法運(yùn)算,運(yùn)算結(jié)果仍然被存進(jìn)行減法運(yùn)算,運(yùn)算結(jié)果仍然被存入入 RdRd。共129頁(yè)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頁(yè)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頁(yè)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)行邏輯“與與”運(yùn)算,并把結(jié)果存入運(yùn)算,并把結(jié)果存入 RdRd。共129頁(yè)6666 AND AND 指令執(zhí)行流程:指令執(zhí)行流程:共129頁(yè)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頁(yè)6868(2 2)ORRORR指令指令 ORR ORR指令的格式為:指令的格式為:ORRS ,ORRS , ORRORR 指令把指令把 Rn Rn 和和 operand2operand2 按位進(jìn)行邏輯按位進(jìn)行邏輯“或或”運(yùn)算,并把結(jié)運(yùn)算,并把結(jié)果存入果存入 RdRd。ORR R0ORR R0,R0R
51、0,#3 #3 ;該指令設(shè)置;該指令設(shè)置R0R0的的0 0、1 1位,其余位不變位,其余位不變例:請(qǐng)把寄存器例:請(qǐng)把寄存器R2R2中的高中的高8 8位數(shù)據(jù)傳送到位數(shù)據(jù)傳送到寄存器寄存器R3R3的低的低8 8位。位。共129頁(yè)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原來(lái)的原來(lái)的內(nèi)容沒(méi)有變內(nèi)容沒(méi)有變注意:注意:R3R3原來(lái)的高原來(lái)的高2424位內(nèi)容變了位內(nèi)容變了共129頁(yè)7070(3 3)EOREOR指令指令 EOR EOR指令的格式為:指令的格式為:EORS ,EORS , EOR EOR 指令把指令把 RnRn 和和 operand2operand2 按位按位進(jìn)行邏輯進(jìn)行邏輯“異或異或”運(yùn)算,并把結(jié)果存入運(yùn)算,并把結(jié)果存入 RdRd。EOR R0EOR R0,R0R0,#3 #3 ;該指令反轉(zhuǎn);該指令反轉(zhuǎn)R0R0的的0 0、1 1位,其余位保持不變。位,其余位保持不變。 標(biāo)志位的修改同標(biāo)志位的修改同ANDAND。共129頁(yè)7171
53、(4 4)BICBIC指令指令 BICBIC指令的格式為:指令的格式為:BICS ,BICS , BIC BIC 指令的功能是清除指令的功能是清除 RnRn 的的某些位,并把結(jié)果存入某些位,并把結(jié)果存入 RdRd。共129頁(yè)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頁(yè)733.3.2.3 3.3.2.3 寄存器移位操作指令寄存器移位操作指令 包括:包括:數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令MOV MOV 和和 數(shù)據(jù)非傳數(shù)據(jù)非傳送指令送指令MVNMVN。(1 1)MOVMOV指令指令 MOVMOV 指令將一個(gè)數(shù)指令將一個(gè)數(shù) N N 送到目標(biāo)寄存送到目標(biāo)寄存器器 RdRd ,其中,其中 N N 可以是可以是 寄存器寄存器,也可以,也可以是是 立即數(shù)立即數(shù)。
55、MOV MOV 指令的格式為:指令的格式為: MOVS , MOVS , 共129頁(yè)74 MOV MOV 指令的執(zhí)行流程:指令的執(zhí)行流程:共129頁(yè)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頁(yè)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頁(yè)773
57、.3.2.4 3.3.2.4 比較操作指令比較操作指令 包括:包括:比較指令比較指令CMPCMP、負(fù)數(shù)比較指令、負(fù)數(shù)比較指令CMNCMN、位測(cè)試指令位測(cè)試指令TST TST 以及以及 相等測(cè)試指令相等測(cè)試指令TEQTEQ。(1 1)CMPCMP指令指令 CMP CMP指令的格式為:指令的格式為:CMP , CMP , CMP CMP 指令把指令把 RdRd 作為被減數(shù)和作為被減數(shù)和operand2operand2 進(jìn)行一次減法運(yùn)算操作,但不進(jìn)行一次減法運(yùn)算操作,但不存儲(chǔ)運(yùn)算結(jié)果,只根據(jù)結(jié)果來(lái)更新存儲(chǔ)運(yùn)算結(jié)果,只根據(jù)結(jié)果來(lái)更新 CPSRCPSR 的相應(yīng)條件標(biāo)志位的相應(yīng)條件標(biāo)志位 N N、Z Z、
58、C C、V V。共129頁(yè)7878受影響的受影響的CPSRCPSR標(biāo)志位標(biāo)志位取值取值N N運(yùn)算結(jié)果的第運(yùn)算結(jié)果的第3131位被復(fù)制到位被復(fù)制到N NZ Z運(yùn)算結(jié)果為運(yùn)算結(jié)果為0 0則則Z=1Z=1,否則,否則Z=0Z=0C C運(yùn)算結(jié)果有借位則運(yùn)算結(jié)果有借位則C=0C=0,否則,否則C=1C=1V V運(yùn)算結(jié)果有溢出則運(yùn)算結(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頁(yè)7979 CMN CMN 指令把指令把 RdRd 作為被減數(shù)與作為被減數(shù)與operand2operand2 的的 反反 進(jìn)行一次減法運(yùn)算,但不進(jìn)行一次減法運(yùn)算,但不存儲(chǔ)結(jié)果,只更新存儲(chǔ)結(jié)果,只更新 CPSRCPSR 中條件標(biāo)志位。中條件標(biāo)志位。(2 2)CMNCMN指令指令 CMNCMN指令的格式為:指令的格式為:CMN , CMN , 注意:比較類指令本身帶有更新注意:比較類指令本身帶有更新 CPSRCPSR的功能,故在該指令中不能使用后綴的功能,故在該指令中不能使用后綴 S S。共129頁(yè)8080(3 3)TSTTST測(cè)試指令
60、測(cè)試指令 TST TST指令的格式為:指令的格式為:TST , TST , TST TST 指令的功能是把指令的功能是把 RdRd 和和 operand2operand2 按位進(jìn)行邏輯按位進(jìn)行邏輯“與與”運(yùn)算,并根據(jù)運(yùn)算結(jié)運(yùn)算,并根據(jù)運(yùn)算結(jié)果更新果更新 CPSRCPSR 中的條件標(biāo)志位的值。中的條件標(biāo)志位的值。RdRd 是是要測(cè)試的數(shù)據(jù),要測(cè)試的數(shù)據(jù),operand2operand2 是一個(gè)掩碼。該是一個(gè)掩碼。該指令一般用來(lái)檢測(cè)是否設(shè)置了特定的位。指令一般用來(lái)檢測(cè)是否設(shè)置了特定的位。TST R1TST R1,#0 x5 #0 x5 ;測(cè)試寄存器;測(cè)試寄存器R1R1中的第中的第0 0位和第位和第2 2位是否是位是否是1 1。共129頁(yè)8181 TEQT
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電話銷售策略總結(jié)
- 旅游行業(yè)導(dǎo)游服務(wù)技巧總結(jié)
- 冷鏈物流保安工作總結(jié)
- 2023年廣西壯族自治區(qū)河池市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2021年吉林省白山市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年遼寧省鞍山市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年四川省綿陽(yáng)市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 青海省果洛藏族自治州(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)部編版階段練習(xí)(下學(xué)期)試卷及答案
- 2024年樓梯配件項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2025年梅毒診斷抗原項(xiàng)目申請(qǐng)報(bào)告
- 歷代反腐完整
- 《現(xiàn)代控制理論》(劉豹-唐萬(wàn)生)
- 廣東省佛山市南海區(qū)三水區(qū)2022-2023學(xué)年七年級(jí)上學(xué)期期末歷史試題(無(wú)答案)
- 重視心血管-腎臟-代謝綜合征(CKM)
- 學(xué)術(shù)英語(yǔ)(理工類)
- 淺談“五育并舉”背景下中小學(xué)勞動(dòng)教育的探索與研究 論文
- 大樹(shù)的故事 單元作業(yè)設(shè)計(jì)
- 六年級(jí)道德與法治學(xué)情分析
- 新加坡雙語(yǔ)教育政策發(fā)展研究
- (全國(guó)通用版)小學(xué)英語(yǔ)四大時(shí)態(tài)綜合練習(xí)(含答案)
- 走近翻譯學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫(kù)2023年
評(píng)論
0/150
提交評(píng)論