版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、嵌入式系統(tǒng)教案2022-5-9第1頁/共112頁2提綱ARM 指令系統(tǒng)ARM和THUMB混合調(diào)用ATPCS 介紹THUMB 指令系統(tǒng)第四章 ARM指令系統(tǒng)及匯編程序設(shè)計第2頁/共112頁3跳轉(zhuǎn)指令 跳轉(zhuǎn)指令用于實現(xiàn)程序流程的跳轉(zhuǎn),在跳轉(zhuǎn)指令用于實現(xiàn)程序流程的跳轉(zhuǎn),在ARMARM程序中有兩種方法可以實現(xiàn)程序流程序中有兩種方法可以實現(xiàn)程序流程的跳轉(zhuǎn):程的跳轉(zhuǎn):v 使用專門的跳轉(zhuǎn)指令。使用專門的跳轉(zhuǎn)指令。v 直接向程序計數(shù)器直接向程序計數(shù)器PCPC寫入跳轉(zhuǎn)地址值。寫入跳轉(zhuǎn)地址值。ARMARM指令集中的跳轉(zhuǎn)指令可以完成從當(dāng)前指令向前或向后的指令集中的跳轉(zhuǎn)指令可以完成從當(dāng)前指令向前或向后的32MB32M
2、B的地址空間的的地址空間的跳轉(zhuǎn),包括以下跳轉(zhuǎn),包括以下4 4條指令:條指令:v B B跳轉(zhuǎn)指令跳轉(zhuǎn)指令v BLBL帶返回的跳轉(zhuǎn)指令帶返回的跳轉(zhuǎn)指令v BLXBLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令帶返回和狀態(tài)切換的跳轉(zhuǎn)指令v BXBX帶狀態(tài)切換的跳轉(zhuǎn)指令帶狀態(tài)切換的跳轉(zhuǎn)指令A(yù)RM 指令系統(tǒng)第3頁/共112頁4B指令 B指令的格式為:指令的格式為:B條件條件目標(biāo)地址目標(biāo)地址 B B指令指令是最簡單的跳轉(zhuǎn)指令。一旦遇到一個是最簡單的跳轉(zhuǎn)指令。一旦遇到一個 B B 指令,指令,ARM 處理器將立即跳轉(zhuǎn)到處理器將立即跳轉(zhuǎn)到給定的目標(biāo)地址,從那里繼續(xù)執(zhí)行。注意存儲在跳轉(zhuǎn)指令中的實際值是相對當(dāng)前給定的目標(biāo)地址,從
3、那里繼續(xù)執(zhí)行。注意存儲在跳轉(zhuǎn)指令中的實際值是相對當(dāng)前PC值的一個偏移量,而不是一個絕對地址,它的值由匯編器來計算。它是值的一個偏移量,而不是一個絕對地址,它的值由匯編器來計算。它是24位位有符號數(shù),左移兩位后有符號擴(kuò)展為有符號數(shù),左移兩位后有符號擴(kuò)展為 32 位,表示的有效偏移為位,表示的有效偏移為 26 位位(前后前后32MB的地址空間的地址空間)。如:。如:BLabel /*程序無條件跳轉(zhuǎn)到標(biāo)號程序無條件跳轉(zhuǎn)到標(biāo)號Label處執(zhí)行處執(zhí)行*/ARM 指令系統(tǒng)第4頁/共112頁5BL指令 BLBL指令的格式為:指令的格式為:BLBL條件條件 目標(biāo)地址目標(biāo)地址 BL BL 是另一個跳轉(zhuǎn)指令,但跳
4、轉(zhuǎn)之前,會在寄存器是另一個跳轉(zhuǎn)指令,但跳轉(zhuǎn)之前,會在寄存器R14R14中保存中保存PCPC的當(dāng)前內(nèi)容,因的當(dāng)前內(nèi)容,因此,可以通過將此,可以通過將R14 R14 的內(nèi)容重新加載到的內(nèi)容重新加載到PCPC中,來返回到跳轉(zhuǎn)指令之后的那個指中,來返回到跳轉(zhuǎn)指令之后的那個指令處執(zhí)行。該指令是實現(xiàn)子程序調(diào)用的一個基本但常用的手段。以下指令:令處執(zhí)行。該指令是實現(xiàn)子程序調(diào)用的一個基本但常用的手段。以下指令:BLBLLabelLabel/ /* *當(dāng)程序無條件跳轉(zhuǎn)到標(biāo)號當(dāng)程序無條件跳轉(zhuǎn)到標(biāo)號LabelLabel處執(zhí)行時,同時將當(dāng)前的處執(zhí)行時,同時將當(dāng)前的PCPC值保存到值保存到R14R14中中 * */ /
5、ARM 指令系統(tǒng)第5頁/共112頁6BLX指令 BLXBLX指令的格式為:指令的格式為:BLX BLX 目標(biāo)地址目標(biāo)地址 BLXBLX指令從指令從ARMARM指令集跳轉(zhuǎn)到指令中所指定的目標(biāo)地址,并將處理器的工作狀態(tài)由指令集跳轉(zhuǎn)到指令中所指定的目標(biāo)地址,并將處理器的工作狀態(tài)由ARMARM狀態(tài)切換到狀態(tài)切換到ThumbThumb狀態(tài),狀態(tài),該指令同時將該指令同時將PCPC的當(dāng)前內(nèi)容保存到寄存器的當(dāng)前內(nèi)容保存到寄存器R14R14中。因此,當(dāng)子程序使用中。因此,當(dāng)子程序使用ThumbThumb指令集,而調(diào)用者使用指令集,而調(diào)用者使用ARMARM指指令集時,可以通過令集時,可以通過BLXBLX指令實現(xiàn)子
6、程序的調(diào)用和處理器工作狀態(tài)的切換。同時,子程序的返回可以通過將寄指令實現(xiàn)子程序的調(diào)用和處理器工作狀態(tài)的切換。同時,子程序的返回可以通過將寄存器存器R14R14值復(fù)制到值復(fù)制到PCPC中來完成。中來完成。 ARM 指令系統(tǒng)第6頁/共112頁7BX指令 BXBX指令的格式為:指令的格式為:BXBX條件條件 目標(biāo)地址目標(biāo)地址 BXBX指令跳轉(zhuǎn)到指令中所指定的目標(biāo)地址,目標(biāo)地址處的指令既可以是指令跳轉(zhuǎn)到指令中所指定的目標(biāo)地址,目標(biāo)地址處的指令既可以是ARMARM指令,也可以是指令,也可以是ThumbThumb指令。指令。ARM 指令系統(tǒng)第7頁/共112頁8數(shù)據(jù)處理指令 數(shù)據(jù)處理指令可分為數(shù)據(jù)傳送指令、
7、算術(shù)邏輯運算指令和比較指令等。數(shù)據(jù)處理指令可分為數(shù)據(jù)傳送指令、算術(shù)邏輯運算指令和比較指令等。 數(shù)據(jù)傳送指令用于在寄存器和存儲器之間進(jìn)行數(shù)據(jù)的雙向傳輸。數(shù)據(jù)傳送指令用于在寄存器和存儲器之間進(jìn)行數(shù)據(jù)的雙向傳輸。 算術(shù)邏輯運算指令完成常用的算術(shù)與邏輯的運算,該類指令不但將運算結(jié)果保存在目的寄存器中,同時更算術(shù)邏輯運算指令完成常用的算術(shù)與邏輯的運算,該類指令不但將運算結(jié)果保存在目的寄存器中,同時更新新CPSRCPSR中的相應(yīng)條件標(biāo)志位。中的相應(yīng)條件標(biāo)志位。 比較指令不保存運算結(jié)果,只更新比較指令不保存運算結(jié)果,只更新CPSRCPSR中相應(yīng)的條件標(biāo)志位。中相應(yīng)的條件標(biāo)志位。ARM 指令系統(tǒng)第8頁/共11
8、2頁9數(shù)據(jù)處理指令靈活的第二操作數(shù)如:ADDcondS Rd, Rn, Operand2ADDcondS Rd, Rn, Operand2Operand2Operand2可能的形式:#immed_8r#immed_8rRm,shiftRm,shiftADD r0, r1, #100ADD r0, r1, #100ADD r0, r1, r2ADD r0, r1, r2ADD r0, r1, r2, ASR #1ADD r0, r1, r2, ASR #1ARM 指令系統(tǒng)R0 = r1 + 100R0 = r1 + r2R0 = r1 + (r2算術(shù)右移一位)若指定S,則根據(jù)操作結(jié)果更新條件碼標(biāo)
9、志第9頁/共112頁10數(shù)據(jù)處理指令Shift 移位模式ASRASR n n 算術(shù)右移n n位(1=n=321=n=32)LSLLSL n n 邏輯左移n n位(1=n=321=n=32)LSRLSR n n 邏輯右移n n位(1=n=321=n=32)RORROR n n 循環(huán)右移n n位(1=n=321=n=32)RRXRRX 帶擴(kuò)展的循環(huán)右移1 1位type Rs type Rs type = ASR/LSL/LSR/ROTtype = ASR/LSL/LSR/ROTARM 指令系統(tǒng)第10頁/共112頁11ASR算術(shù)右移n n位即RmRm中的內(nèi)容除以2 2的n n次方。將原來的位3131
10、拷貝到寄存器左邊的n n位中,即空出的最高位補符號位。ARM 指令系統(tǒng)第11頁/共112頁12LSR和LSL邏輯右移n n位,即將RmRm的內(nèi)容除以2 2的n n次方。寄存器左邊的n n位清零。邏輯左移n n位,即將RmRm的內(nèi)容乘以2 2的n n次方。寄存器右邊的n n位清零。ARM 指令系統(tǒng)第12頁/共112頁13ROR 循環(huán)右移n n位,把寄存器右邊的n n位移動到結(jié)果的左邊n n位。ARM 指令系統(tǒng)第13頁/共112頁14RRX 帶擴(kuò)展的循環(huán)右移將RmRm的內(nèi)容循環(huán)右移一位。進(jìn)位標(biāo)志拷貝到RmRm的位3131。ARM 指令系統(tǒng)第14頁/共112頁15MOV指令 MOVMOV指令的格式為
11、:指令的格式為:MOVMOV條件條件SS目的寄存器,源操作數(shù)目的寄存器,源操作數(shù) MOVMOV指令可完成從另一個寄存器、被移位的寄存器或?qū)⒁粋€立即數(shù)加載到目的寄指令可完成從另一個寄存器、被移位的寄存器或?qū)⒁粋€立即數(shù)加載到目的寄存器。其中存器。其中S S選項決定指令的操作是否影響選項決定指令的操作是否影響CPSRCPSR中條件標(biāo)志位的值,當(dāng)沒有中條件標(biāo)志位的值,當(dāng)沒有S S時時指令不更新指令不更新CPSRCPSR中條件標(biāo)志位的值。指令示例:中條件標(biāo)志位的值。指令示例:MOVMOVR1R1,R0R0MOV MOV R1R1,R0R0,LSL LSL 3 3ARM 指令系統(tǒng)第15頁/共112頁16M
12、VN指令 MVNMVN指令的格式為:指令的格式為:MVNMVN條件條件SS目的寄存器,源操作數(shù)目的寄存器,源操作數(shù) MVNMVN指令可完成從另一個寄存器、被移位的寄存器、或?qū)⒁粋€立即數(shù)加載到目的指令可完成從另一個寄存器、被移位的寄存器、或?qū)⒁粋€立即數(shù)加載到目的寄存器。與寄存器。與MOVMOV指令不同之處是在傳送之前按位被取反了,即把一個被取反的值指令不同之處是在傳送之前按位被取反了,即把一個被取反的值傳送到目的寄存器中。其中傳送到目的寄存器中。其中S S決定指令的操作是否影響決定指令的操作是否影響CPSRCPSR中條件標(biāo)志位的值,中條件標(biāo)志位的值,當(dāng)沒有當(dāng)沒有S S時指令不更新時指令不更新CP
13、SRCPSR中條件標(biāo)志位的值。中條件標(biāo)志位的值。MVNMVNR0R0,0 0ARM 指令系統(tǒng)第16頁/共112頁17CMP指令 CMPCMP指令的格式為:指令的格式為:CMPCMP條件條件 操作數(shù)操作數(shù)1 1,操作數(shù),操作數(shù)2 2 CMPCMP指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進(jìn)行比較,同指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進(jìn)行比較,同時更新時更新CPSRCPSR中條件標(biāo)志位的值。該指令進(jìn)行一次減法運算,但不存儲結(jié)果,只中條件標(biāo)志位的值。該指令進(jìn)行一次減法運算,但不存儲結(jié)果,只更改條件標(biāo)志位。標(biāo)志位表示的是操作數(shù)更改條件標(biāo)志位。標(biāo)志位表示的是操作數(shù)1 1與
14、操作數(shù)與操作數(shù)2 2的關(guān)系的關(guān)系( (大、小、相等大、小、相等) ),例如,當(dāng)操作數(shù)例如,當(dāng)操作數(shù)1 1大于操作操作數(shù)大于操作操作數(shù)2 2,則此后的有,則此后的有GT GT 后綴的指令將可以執(zhí)行。后綴的指令將可以執(zhí)行。CMPCMPR1R1,R0R0CMPCMPR1R1,100100ARM 指令系統(tǒng)第17頁/共112頁18CMN指令 CMNCMN指令的格式為:指令的格式為:CMNCMN條件條件 操作數(shù)操作數(shù)1 1,操作數(shù),操作數(shù)2 2 CMNCMN指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)取反后進(jìn)行比較,同時更新指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)取反后進(jìn)行比較,同
15、時更新CPSRCPSR中條件中條件標(biāo)志位的值。該指令實際完成操作數(shù)標(biāo)志位的值。該指令實際完成操作數(shù)1 1和操作數(shù)和操作數(shù)2 2相加,并根據(jù)結(jié)果更改條件標(biāo)志位。相加,并根據(jù)結(jié)果更改條件標(biāo)志位。CMNCMNR1R1,R0R0CMNCMNR1R1,100100ARM 指令系統(tǒng)第18頁/共112頁19TST指令 TSTTST指令的格式為:指令的格式為:TSTTST條件條件 操作數(shù)操作數(shù)1 1,操作數(shù),操作數(shù)2 2 TSTTST指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進(jìn)行按位的與運算,并根據(jù)運算結(jié)果更新指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進(jìn)行按位的與運算,并根據(jù)運算結(jié)果更
16、新CPSRCPSR中條件標(biāo)志位的值。操作數(shù)中條件標(biāo)志位的值。操作數(shù)1 1是要測試的數(shù)據(jù),而操作數(shù)是要測試的數(shù)據(jù),而操作數(shù)2 2是一個位掩碼,該指令一般用來檢測是否設(shè)是一個位掩碼,該指令一般用來檢測是否設(shè)置了特定的位。置了特定的位。TSTTSTR1R1,1 1TSTTSTR1R1,0 xffe0 xffeARM 指令系統(tǒng)第19頁/共112頁20TEQ指令 TEQTEQ指令的格式為:指令的格式為:TEQTEQ條件條件 操作數(shù)操作數(shù)1 1,操作數(shù),操作數(shù)2 2 TEQTEQ指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進(jìn)行按位的異指令用于把一個寄存器的內(nèi)容和另一個寄存器的內(nèi)容或立即數(shù)進(jìn)行按位
17、的異或運算,并根據(jù)運算結(jié)果更新或運算,并根據(jù)運算結(jié)果更新CPSRCPSR中條件標(biāo)志位的值。該指令通常用于比較操中條件標(biāo)志位的值。該指令通常用于比較操作數(shù)作數(shù)1 1和操作數(shù)和操作數(shù)2 2是否相等。是否相等。TEQTEQR1R1,R2R2ARM 指令系統(tǒng)第20頁/共112頁21ADD指令 ADDADD指令的格式為:指令的格式為:ADDADD條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 ADDADD指令用于把兩個操作數(shù)相加,并將結(jié)果存放到目的寄存器中。操作數(shù)指令用于把兩個操作數(shù)相加,并將結(jié)果存放到目的寄存器中。操作數(shù)1 1應(yīng)是應(yīng)是一個寄存器,操作數(shù)一個寄存器,操作
18、數(shù)2 2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)??梢允且粋€寄存器,被移位的寄存器,或一個立即數(shù)。ADD ADD R0R0,R1R1,R2 R2 ADD ADD R0R0,R1R1,#256 #256 ADD ADD R0R0,R2R2,R3R3,LSL#1LSL#1 ARM 指令系統(tǒng)第21頁/共112頁22ADC指令 ADCADC指令的格式為:指令的格式為:ADCADC條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 ADCADC指令用于把兩個操作數(shù)相加,再加上指令用于把兩個操作數(shù)相加,再加上CPSRCPSR中的中的C C條件標(biāo)志位的值,并將結(jié)果條件標(biāo)志
19、位的值,并將結(jié)果存放到目的寄存器中。操作數(shù)存放到目的寄存器中。操作數(shù)1 1應(yīng)是一個寄存器,操作數(shù)應(yīng)是一個寄存器,操作數(shù)2 2可以是一個寄存器,可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。被移位的寄存器,或一個立即數(shù)。 以下指令序列完成兩個以下指令序列完成兩個128128位數(shù)的加法,第一個數(shù)存放在寄存器位數(shù)的加法,第一個數(shù)存放在寄存器R7R7R4R4,第二個,第二個數(shù)存放在寄存器數(shù)存放在寄存器R11R11R8R8,運算結(jié)果存放在寄存器,運算結(jié)果存放在寄存器R3R3R0R0:ADDS ADDS R0R0,R4R4,R8 R8 ; 加低端的字加低端的字ADCS ADCS R1R1,R5R5,R9
20、 R9 ; 加第二個字,帶進(jìn)位加第二個字,帶進(jìn)位ADCS ADCS R2R2,R6R6,R10 R10 ; 加第三個字,帶進(jìn)位加第三個字,帶進(jìn)位ADC ADC R3R3,R7R7,R11 R11 ; 加第四個字,帶進(jìn)位加第四個字,帶進(jìn)位 ARM 指令系統(tǒng)第22頁/共112頁23SUB指令 SUBSUB指令的格式為:指令的格式為:SUBSUB條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 SUBSUB指令用于把操作數(shù)指令用于把操作數(shù)1 1減去操作數(shù)減去操作數(shù)2 2,并將結(jié)果存放到目的寄存器中。操作數(shù),并將結(jié)果存放到目的寄存器中。操作數(shù)1 1應(yīng)是一個寄存器,操作數(shù)
21、應(yīng)是一個寄存器,操作數(shù)2 2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。該指令可用于有符號數(shù)或無符號數(shù)的減法運算。該指令可用于有符號數(shù)或無符號數(shù)的減法運算。SUB SUB R0R0,R1R1,R2 R2 ; R0 = R1 - R2R0 = R1 - R2SUB SUB R0R0,R1R1,#256 #256 ; R0 = R1 - 256R0 = R1 - 256SUB SUB R0R0,R2R2,R3R3,LSL#1 LSL#1 ; R0 = R2 - (R3 1)R0 = R2 - (R3 1) ARM 指令系統(tǒng)第23頁/共112頁24
22、SBC指令 SBCSBC指令的格式為:指令的格式為:SBCSBC條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 SBCSBC指令用于把操作數(shù)指令用于把操作數(shù)1 1減去操作數(shù)減去操作數(shù)2 2,再減去,再減去CPSRCPSR中的中的C C條件標(biāo)志位的反碼,并條件標(biāo)志位的反碼,并將結(jié)果存放到目的寄存器中。操作數(shù)將結(jié)果存放到目的寄存器中。操作數(shù)1 1應(yīng)是一個寄存器,操作數(shù)應(yīng)是一個寄存器,操作數(shù)2 2可以是一個寄可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。存器,被移位的寄存器,或一個立即數(shù)。 SUBS SUBS R0R0,R1R1,R2R2 ARM 指令系統(tǒng)第24頁
23、/共112頁25RSB指令 RSBRSB指令的格式為:指令的格式為:RSBRSB條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 RSBRSB指令稱為逆向減法指令,用于把操作數(shù)指令稱為逆向減法指令,用于把操作數(shù)2 2減去操作數(shù)減去操作數(shù)1 1,并將結(jié)果存放到目的,并將結(jié)果存放到目的寄存器中。操作數(shù)寄存器中。操作數(shù)1 1應(yīng)是一個寄存器,操作數(shù)應(yīng)是一個寄存器,操作數(shù)2 2可以是一個寄存器,被移位的寄可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。存器,或一個立即數(shù)。RSB RSB R0R0,R1R1,R2 R2 RSB RSB R0R0,R1R1,#256 #256
24、 RSB RSB R0R0,R2R2,R3R3,LSL#1LSL#1ARM 指令系統(tǒng)第25頁/共112頁26RSC指令 RSCRSC指令的格式為:指令的格式為:RSCRSC條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 RSCRSC指令用于把操作數(shù)指令用于把操作數(shù)2 2減去操作數(shù)減去操作數(shù)1 1,再減去,再減去CPSRCPSR中的中的C C條件標(biāo)志位的反碼,并條件標(biāo)志位的反碼,并將結(jié)果存放到目的寄存器中。操作數(shù)將結(jié)果存放到目的寄存器中。操作數(shù)1 1應(yīng)是一個寄存器,操作數(shù)應(yīng)是一個寄存器,操作數(shù)2 2可以是一個寄可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。該指
25、令使用進(jìn)位標(biāo)志來表示借位,這樣存器,被移位的寄存器,或一個立即數(shù)。該指令使用進(jìn)位標(biāo)志來表示借位,這樣就可以做大于就可以做大于3232位的減法,注意不要忘記設(shè)置位的減法,注意不要忘記設(shè)置S S后綴來更改進(jìn)位標(biāo)志。后綴來更改進(jìn)位標(biāo)志。RSC RSC R0R0,R1R1,R2R2 ARM 指令系統(tǒng)第26頁/共112頁27AND指令 ANDAND指令的格式為:指令的格式為:ANDAND條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 ANDAND指令用于在兩個操作數(shù)上進(jìn)行邏輯與運算,并把結(jié)果放置到目的寄存器中。指令用于在兩個操作數(shù)上進(jìn)行邏輯與運算,并把結(jié)果放置到目的寄存
26、器中。操作數(shù)操作數(shù)1 1應(yīng)是一個寄存器,操作數(shù)應(yīng)是一個寄存器,操作數(shù)2 2可以是一個寄存器,被移位的寄存器,或一可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。該指令常用于屏蔽操作數(shù)個立即數(shù)。該指令常用于屏蔽操作數(shù)1 1的某些位。的某些位。AND AND R0R0,R0R0,3 3 ARM 指令系統(tǒng)第27頁/共112頁28ORR指令 ORRORR指令的格式為:指令的格式為:ORRORR條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 ORRORR指令用于在兩個操作數(shù)上進(jìn)行邏輯或運算,并把結(jié)果放置到目的寄存器中。指令用于在兩個操作數(shù)上進(jìn)行邏輯或運算,并把結(jié)果放置到
27、目的寄存器中。操作數(shù)操作數(shù)1 1應(yīng)是一個寄存器,操作數(shù)應(yīng)是一個寄存器,操作數(shù)2 2可以是一個寄存器,被移位的寄存器,或一可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。該指令常用于設(shè)置操作數(shù)個立即數(shù)。該指令常用于設(shè)置操作數(shù)1 1的某些位。的某些位。ORR ORR R0R0,R0R0,3 3 ARM 指令系統(tǒng)第28頁/共112頁29EOR指令 EOREOR指令的格式為:指令的格式為:EOREOR條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 EOREOR指令用于在兩個操作數(shù)上進(jìn)行邏輯異或運算,并把結(jié)果放置到目的寄存器中。指令用于在兩個操作數(shù)上進(jìn)行邏輯異或運算,并
28、把結(jié)果放置到目的寄存器中。操作數(shù)操作數(shù)1 1應(yīng)是一個寄存器,操作數(shù)應(yīng)是一個寄存器,操作數(shù)2 2可以是一個寄存器,被移位的寄存器,或一可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。該指令常用于反轉(zhuǎn)操作數(shù)個立即數(shù)。該指令常用于反轉(zhuǎn)操作數(shù)1 1的某些位。的某些位。 EOR EOR R0R0,R0R0,3 3 ARM 指令系統(tǒng)第29頁/共112頁30BIC指令 BICBIC指令的格式為:指令的格式為:BICBIC條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 BICBIC指令用于清除操作數(shù)指令用于清除操作數(shù)1 1的某些位,并把結(jié)果放置到目的寄存器中。操作數(shù)的某些位,
29、并把結(jié)果放置到目的寄存器中。操作數(shù)1 1應(yīng)是一個寄存器,操作數(shù)應(yīng)是一個寄存器,操作數(shù)2 2可可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。操作數(shù)以是一個寄存器,被移位的寄存器,或一個立即數(shù)。操作數(shù)2 2為為3232位的掩碼,如果在掩碼中設(shè)置了某一位,位的掩碼,如果在掩碼中設(shè)置了某一位,則清除這一位。未設(shè)置的掩碼位保持不變。則清除這一位。未設(shè)置的掩碼位保持不變。BIC BIC R0R0,R0R0,0 x0b0 x0bARM 指令系統(tǒng)第30頁/共112頁31乘法指令與乘加指令乘法指令與乘加指令 ARMARM微處理器支持的乘法指令與乘加指令共有微處理器支持的乘法指令與乘加指令共有6 6條,可分為運
30、算結(jié)果為條,可分為運算結(jié)果為3232位和運位和運算結(jié)果為算結(jié)果為6464位兩類,與前面的數(shù)據(jù)處理指令不同,指令中的所有操作數(shù)、目的位兩類,與前面的數(shù)據(jù)處理指令不同,指令中的所有操作數(shù)、目的寄存器必須為通用寄存器,不能對操作數(shù)使用立即數(shù)或被移位的寄存器,同時,寄存器必須為通用寄存器,不能對操作數(shù)使用立即數(shù)或被移位的寄存器,同時,目的寄存器和操作數(shù)目的寄存器和操作數(shù)1 1必須是不同的寄存器。必須是不同的寄存器。 乘法指令與乘加指令共有以下乘法指令與乘加指令共有以下6 6條:條:MULMUL3232位乘法指令位乘法指令MLAMLA3232位乘加指令位乘加指令SMULLSMULL6464位有符號數(shù)乘法
31、指令位有符號數(shù)乘法指令SMLALSMLAL6464位有符號數(shù)乘加指令位有符號數(shù)乘加指令UMULLUMULL6464位無符號數(shù)乘法指令位無符號數(shù)乘法指令UMLALUMLAL6464位無符號數(shù)乘加指令位無符號數(shù)乘加指令 ARM 指令系統(tǒng)第31頁/共112頁32MUL指令 MULMUL指令的格式為:指令的格式為:MULMUL條件條件SS目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2 MULMUL指令完成將操作數(shù)指令完成將操作數(shù)1 1與操作數(shù)與操作數(shù)2 2的乘法運算,并把結(jié)果放置到目的寄存器中,同時可以根據(jù)運算結(jié)果設(shè)置的乘法運算,并把結(jié)果放置到目的寄存器中,同時可以根據(jù)運算結(jié)果設(shè)置C
32、PSRCPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1 1和操作數(shù)和操作數(shù)2 2均為均為3232位的有符號數(shù)或無符號數(shù)。位的有符號數(shù)或無符號數(shù)。MULMULR0R0,R1R1,R2R2MULSMULSR0R0,R1R1,R2R2ARM 指令系統(tǒng)第32頁/共112頁33MLA指令 MLAMLA指令的格式為:指令的格式為:MLAMLA條件條件S S 目的寄存器,操作數(shù)目的寄存器,操作數(shù)1 1,操作數(shù),操作數(shù)2 2,操作數(shù),操作數(shù)3 3 MLAMLA指令完成將操作數(shù)指令完成將操作數(shù)1 1與操作數(shù)與操作數(shù)2 2的乘法運算,再將乘積加上操作數(shù)的乘法運算,再將乘積加上操作數(shù)3 3
33、,并把結(jié)果放置到目的寄存器中,同,并把結(jié)果放置到目的寄存器中,同時可以根據(jù)運算結(jié)果設(shè)置時可以根據(jù)運算結(jié)果設(shè)置CPSRCPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1 1和操作數(shù)和操作數(shù)2 2均為均為3232位的有符號數(shù)或無符位的有符號數(shù)或無符號數(shù)。號數(shù)。MLAMLAR0R0,R1R1,R2R2,R3R3MLASMLASR0R0,R1R1,R2R2,R3R3ARM 指令系統(tǒng)第33頁/共112頁34SMULL指令 SMULLSMULL指令的格式為:指令的格式為:SMULLSMULL條件條件SS目的寄存器目的寄存器LowLow,目的寄存器低,目的寄存器低HighHigh,操
34、作數(shù),操作數(shù)1 1,操作,操作數(shù)數(shù)2 2 SMULLSMULL指令完成將操作數(shù)指令完成將操作數(shù)1 1與操作數(shù)與操作數(shù)2 2的乘法運算,并把結(jié)果的低的乘法運算,并把結(jié)果的低3232位放置到目的位放置到目的寄存器寄存器LowLow中,結(jié)果的高中,結(jié)果的高3232位放置到目的寄存器位放置到目的寄存器HighHigh中,同時可以根據(jù)運算結(jié)果中,同時可以根據(jù)運算結(jié)果設(shè)置設(shè)置CPSRCPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1 1和操作數(shù)和操作數(shù)2 2均為均為3232位的有符號數(shù)。位的有符號數(shù)。SMULLSMULL R0R0,R1R1,R2R2,R3R3ARM 指令系統(tǒng)第34
35、頁/共112頁35SMLAL指令 SMLALSMLAL指令的格式為:指令的格式為:SMLALSMLAL條件條件SS目的寄存器目的寄存器LowLow,目的寄存器低,目的寄存器低HighHigh,操作數(shù),操作數(shù)1 1,操作數(shù)操作數(shù)2 2 SMLALSMLAL指令完成將操作數(shù)指令完成將操作數(shù)1 1與操作數(shù)與操作數(shù)2 2的乘法運算,并把結(jié)果的低的乘法運算,并把結(jié)果的低3232位同目位同目的寄存器的寄存器LowLow中的值相加后又放置到目的寄存器中的值相加后又放置到目的寄存器LowLow中,結(jié)果的高中,結(jié)果的高3232位同目的寄存器位同目的寄存器HighHigh中的值相加后又放置到目的寄存器中的值相加后
36、又放置到目的寄存器HighHigh中,中,同時可以根據(jù)運算結(jié)果設(shè)置同時可以根據(jù)運算結(jié)果設(shè)置CPSRCPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1 1和和操作數(shù)操作數(shù)2 2均為均為3232位的有符號數(shù)。位的有符號數(shù)。 對于目的寄存器對于目的寄存器LowLow,在指令執(zhí)行前存放,在指令執(zhí)行前存放6464位加數(shù)的低位加數(shù)的低3232位,指令執(zhí)位,指令執(zhí)行后存放結(jié)果的低行后存放結(jié)果的低3232位。位。 對于目的寄存器對于目的寄存器HighHigh,在指令執(zhí)行前存放,在指令執(zhí)行前存放6464位加數(shù)的高位加數(shù)的高3232位,指令執(zhí)位,指令執(zhí)行后存放結(jié)果的高行后存放結(jié)果的高323
37、2位。位。SMLALSMLALR0R0,R1R1,R2R2,R3R3ARM 指令系統(tǒng)第35頁/共112頁36UMULL指令 UMULLUMULL指令的格式為:指令的格式為:UMULLUMULL條件條件SS目的寄存器目的寄存器LowLow,目的寄存器低,目的寄存器低HighHigh,操作數(shù),操作數(shù)1 1,操作,操作數(shù)數(shù)2 2 UMULLUMULL指令完成將操作數(shù)指令完成將操作數(shù)1 1與操作數(shù)與操作數(shù)2 2的乘法運算,并把結(jié)果的低的乘法運算,并把結(jié)果的低3232位放置到目的位放置到目的寄存器寄存器LowLow中,結(jié)果的高中,結(jié)果的高3232位放置到目的寄存器位放置到目的寄存器HighHigh中,同
38、時可以根據(jù)運算結(jié)果中,同時可以根據(jù)運算結(jié)果設(shè)置設(shè)置CPSRCPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1 1和操作數(shù)和操作數(shù)2 2均為均為3232位的無符號數(shù)。位的無符號數(shù)。UMULLUMULL R0R0,R1R1,R2R2,R3R3ARM 指令系統(tǒng)第36頁/共112頁37UMLAL指令 UMLALUMLAL指令的格式為:指令的格式為:UMLALUMLAL條件條件SS目的寄存器目的寄存器LowLow,目的寄存器低,目的寄存器低HighHigh,操作數(shù),操作數(shù)1 1,操作數(shù)操作數(shù)2 2 UMLALUMLAL指令完成將操作數(shù)指令完成將操作數(shù)1 1與操作數(shù)與操作數(shù)2 2的
39、乘法運算,并把結(jié)果的低的乘法運算,并把結(jié)果的低3232位位同目的寄存器同目的寄存器LowLow中的值相加后又放置到目的寄存器中的值相加后又放置到目的寄存器LowLow中,結(jié)果的高中,結(jié)果的高3232位同目的寄存器位同目的寄存器HighHigh中的值相加后又放置到目的寄存器中的值相加后又放置到目的寄存器HighHigh中,同時中,同時可以根據(jù)運算結(jié)果設(shè)置可以根據(jù)運算結(jié)果設(shè)置CPSRCPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1 1和和操作數(shù)操作數(shù)2 2均為均為3232位的無符號數(shù)。位的無符號數(shù)。 對于目的寄存器對于目的寄存器LowLow,在指令執(zhí)行前存放,在指令執(zhí)行前
40、存放6464位加數(shù)的低位加數(shù)的低3232位,指令執(zhí)行位,指令執(zhí)行后存放結(jié)果的低后存放結(jié)果的低3232位。位。 對于目的寄存器對于目的寄存器HighHigh,在指令執(zhí)行前存放,在指令執(zhí)行前存放6464位加數(shù)的高位加數(shù)的高3232位,指令執(zhí)位,指令執(zhí)行后存放結(jié)果的高行后存放結(jié)果的高3232位。位。UMLALUMLALR0R0,R1R1,R2R2,R3R3ARM 指令系統(tǒng)第37頁/共112頁38程序狀態(tài)寄存器訪問指令 ARMARM微處理器支持程序狀態(tài)寄存器訪問指令,用于在程序狀態(tài)寄存器和通用寄存器之間傳送數(shù)據(jù),程序狀微處理器支持程序狀態(tài)寄存器訪問指令,用于在程序狀態(tài)寄存器和通用寄存器之間傳送數(shù)據(jù),程
41、序狀態(tài)寄存器訪問指令包括以下兩條:態(tài)寄存器訪問指令包括以下兩條:MRSMRS程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令指令MSRMSR通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令指令A(yù)RM 指令系統(tǒng)第38頁/共112頁39程序狀態(tài)寄存器(PSRPSR)處理指令 MRS/MSRMRS/MSRMRS 狀態(tài)寄存器的內(nèi)容讀取到通用寄存器MSR 立即數(shù)或通用寄存器內(nèi)容寫到狀態(tài)寄存器的制定區(qū)域MSR cond _, #immed_8rMSR cond _, rmfields:c控制域(PSR7:0)x擴(kuò)展域(PSR15:8)s狀態(tài)域(PSR
42、23:16)f標(biāo)志域(PSR31:24)ARM 指令系統(tǒng)第39頁/共112頁40MRS指令 MRSMRS指令的格式為:指令的格式為:MRSMRS條件條件 通用寄存器,程序狀態(tài)寄存器(通用寄存器,程序狀態(tài)寄存器(CPSRCPSR或或SPSRSPSR)MRSMRS指令用于將程序狀態(tài)寄存器的內(nèi)容傳送到通用寄存器中。該指令一般用在以下幾種情況:指令用于將程序狀態(tài)寄存器的內(nèi)容傳送到通用寄存器中。該指令一般用在以下幾種情況:1.1. 當(dāng)需要改變程序狀態(tài)寄存器的內(nèi)容時,可用當(dāng)需要改變程序狀態(tài)寄存器的內(nèi)容時,可用MRSMRS將程序狀態(tài)寄存器的內(nèi)容讀入通用寄存器,修改后再寫回將程序狀態(tài)寄存器的內(nèi)容讀入通用寄存器
43、,修改后再寫回程序狀態(tài)寄存器。程序狀態(tài)寄存器。2.2. 當(dāng)在異常處理或進(jìn)程切換時,需要保存程序狀態(tài)寄存器的值,可先用該指令讀出程序狀態(tài)寄存器的值,然當(dāng)在異常處理或進(jìn)程切換時,需要保存程序狀態(tài)寄存器的值,可先用該指令讀出程序狀態(tài)寄存器的值,然后保存。后保存。MRSMRSR0R0,CPSRCPSRMRSMRSR0R0,SPSRSPSRARM 指令系統(tǒng)第40頁/共112頁41MSR指令 MSRMSR指令的格式為:指令的格式為:MSRMSR條件條件 程序狀態(tài)寄存器(程序狀態(tài)寄存器(CPSRCPSR或或SPSRSPSR)_ ,操作數(shù),操作數(shù) MSRMSR指令用于將操作數(shù)的內(nèi)容傳送到程序狀態(tài)寄存器的特定域
44、中。指令用于將操作數(shù)的內(nèi)容傳送到程序狀態(tài)寄存器的特定域中。其中,操作數(shù)可以為通用寄存器或立即數(shù)。其中,操作數(shù)可以為通用寄存器或立即數(shù)。 用于設(shè)置程序狀態(tài)用于設(shè)置程序狀態(tài)寄存器中需要操作的位,寄存器中需要操作的位,3232位的程序狀態(tài)寄存器可分為位的程序狀態(tài)寄存器可分為4 4個域:個域: 位位3131:2424為條件標(biāo)志位域,用為條件標(biāo)志位域,用f f表示;表示;位位2323:1616為狀態(tài)位域,用為狀態(tài)位域,用s s表示;表示;位位1515:88為擴(kuò)展位域,用為擴(kuò)展位域,用x x表示;表示;位位77:00為控制位域,用為控制位域,用c c表示;表示; 該指令通常用于恢復(fù)或改變程序狀態(tài)寄存器的內(nèi)
45、容,在使用時,該指令通常用于恢復(fù)或改變程序狀態(tài)寄存器的內(nèi)容,在使用時,一般要在一般要在MSRMSR指令中指明將要操作的域。指令中指明將要操作的域。MSRMSRCPSRCPSR,R0R0MSRMSRCPSR_cCPSR_c,R0R0ARM 指令系統(tǒng)第41頁/共112頁42加載/存儲指令及批量數(shù)據(jù)加載/存儲指令 ARMARM微處理器支持加載微處理器支持加載/ /存儲指令用于在寄存器和存儲器之間傳送數(shù)據(jù),加載指令用于將存儲器中的數(shù)據(jù)存儲指令用于在寄存器和存儲器之間傳送數(shù)據(jù),加載指令用于將存儲器中的數(shù)據(jù)傳送到寄存器,存儲指令則完成相反的操作。常用的加載存儲指令如下:傳送到寄存器,存儲指令則完成相反的操
46、作。常用的加載存儲指令如下:LDRLDR字?jǐn)?shù)據(jù)加載指令字?jǐn)?shù)據(jù)加載指令LDRBLDRB字節(jié)數(shù)據(jù)加載指令字節(jié)數(shù)據(jù)加載指令LDRHLDRH半字?jǐn)?shù)據(jù)加載指令半字?jǐn)?shù)據(jù)加載指令STRSTR字?jǐn)?shù)據(jù)存儲指令字?jǐn)?shù)據(jù)存儲指令STRBSTRB字節(jié)數(shù)據(jù)存儲指令字節(jié)數(shù)據(jù)存儲指令STRHSTRH半字?jǐn)?shù)據(jù)存儲指令半字?jǐn)?shù)據(jù)存儲指令LDMLDM批量數(shù)據(jù)加載指令批量數(shù)據(jù)加載指令STMSTM批量數(shù)據(jù)存儲指令批量數(shù)據(jù)存儲指令A(yù)RM 指令系統(tǒng)第42頁/共112頁43加載/ /存儲指令(LDR/STR/LDM/STM)(LDR/STR/LDM/STM)LDR/STR:采用寄存器間接尋址寄存器間接尋址和基變址尋址的方式1.零偏移;LDR
47、r0, r1STR r0, r12.程序相對偏移;LDR r0, =0 x123456783.后索引偏移;LDR r0, r13, #0 x04LDR r1, r13, #0 x04ARM 指令系統(tǒng)第43頁/共112頁44加載/ /存儲指令(LDR/STR/LDM/STM)(LDR/STR/LDM/STM)4.前索引偏移;OPcond Rd, Rn, offset !Offset 就是數(shù)據(jù)處理指令中的第二操作數(shù);就是數(shù)據(jù)處理指令中的第二操作數(shù);!為一個可選的后綴,即是否修改!為一個可選的后綴,即是否修改RnRn為為R15時不能選擇該后綴;時不能選擇該后綴;LDR r0, r1, #0 x04L
48、DR r0, r1, #0 x04!LDR r0, r1, r2, ASR #0 x04!ARM 指令系統(tǒng)第44頁/共112頁45LDM/STMLDM/STM可以傳送R0-R15R0-R15的任意組合 OP cond mode Rn!, reglistmode:IA每次傳送后地址加1FD 滿遞減堆棧IB每次傳送前地址加1ED 空遞減堆棧DA每次傳送后地址減1FA 滿遞增堆棧DB每次傳送前地址減1EA 空遞增堆棧ARM 指令系統(tǒng)第45頁/共112頁46LDM/STMLDM/STM后綴描述! 回寫使能標(biāo)志回寫使能標(biāo)志 是否拷貝是否拷貝SPSR到到CPSRLDMIA r0, r1, r2, r3,
49、r4LDMIA r0!, r1, r2, r3, r4STMFD r13!, r0, r4-r7, LR;子程序入口子程序入口LDMFD r13!, r0, r4-r7, PC;子程序返回子程序返回ARM 指令系統(tǒng)第46頁/共112頁47LDRLDR指令 LDRLDR指令的格式為:指令的格式為:LDRLDR條件條件 目的寄存器,目的寄存器, LDRLDR指令用于從存儲器中將一個指令用于從存儲器中將一個3232位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。該位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。該指令通常用于從存儲器中讀取指令通常用于從存儲器中讀取3232位的字?jǐn)?shù)據(jù)到通用寄存器,然后對數(shù)位的字?jǐn)?shù)據(jù)到通用寄存器,然后對數(shù)
50、據(jù)進(jìn)行處理。當(dāng)程序計數(shù)器據(jù)進(jìn)行處理。當(dāng)程序計數(shù)器PCPC作為目的寄存器時,指令從存儲器中讀取作為目的寄存器時,指令從存儲器中讀取的字?jǐn)?shù)據(jù)被當(dāng)作目的地址,從而可以實現(xiàn)程序流程的跳轉(zhuǎn)。該指令在程序的字?jǐn)?shù)據(jù)被當(dāng)作目的地址,從而可以實現(xiàn)程序流程的跳轉(zhuǎn)。該指令在程序設(shè)計中比較常用,且尋址方式靈活多樣,請讀者認(rèn)真掌握。設(shè)計中比較常用,且尋址方式靈活多樣,請讀者認(rèn)真掌握。 LDR LDR R0R0,R1 R1 LDR LDR R0R0,R1R1,R2 R2 LDR LDR R0R0,R1R1,8 8 LDR LDR R0R0,R1R1,R2 R2 ! ARM 指令系統(tǒng)第47頁/共112頁48LDRB指令 L
51、DRBLDRB指令的格式為:指令的格式為:LDRLDR條件條件B B 目的寄存器,目的寄存器, LDRBLDRB指令用于從存儲器中將一個指令用于從存儲器中將一個8 8位的字節(jié)數(shù)據(jù)傳送到目的寄存器中,同時將寄位的字節(jié)數(shù)據(jù)傳送到目的寄存器中,同時將寄存器的高存器的高2424位清零。該指令通常用于從存儲器中讀取位清零。該指令通常用于從存儲器中讀取8 8位的字節(jié)數(shù)據(jù)到通用寄存位的字節(jié)數(shù)據(jù)到通用寄存器,然后對數(shù)據(jù)進(jìn)行處理。當(dāng)程序計數(shù)器器,然后對數(shù)據(jù)進(jìn)行處理。當(dāng)程序計數(shù)器PCPC作為目的寄存器時,指令從存儲器作為目的寄存器時,指令從存儲器中讀取的字?jǐn)?shù)據(jù)被當(dāng)作目的地址,從而可以實現(xiàn)程序流程的跳轉(zhuǎn)。中讀取的字
52、數(shù)據(jù)被當(dāng)作目的地址,從而可以實現(xiàn)程序流程的跳轉(zhuǎn)。LDRB LDRB R0R0,R1 R1 LDRB LDRB R0R0,R1R1,88 ARM 指令系統(tǒng)第48頁/共112頁49LDRH指令 LDRHLDRH指令的格式為:指令的格式為:LDRLDR條件條件H H 目的寄存器,目的寄存器, LDRHLDRH指令用于從存儲器中將一個指令用于從存儲器中將一個1616位的半字?jǐn)?shù)據(jù)傳送到目的寄存器中,同時將位的半字?jǐn)?shù)據(jù)傳送到目的寄存器中,同時將寄存器的高寄存器的高1616位清零。該指令通常用于從存儲器中讀取位清零。該指令通常用于從存儲器中讀取1616位的半字?jǐn)?shù)據(jù)到通用位的半字?jǐn)?shù)據(jù)到通用寄存器,然后對數(shù)據(jù)進(jìn)
53、行處理。當(dāng)程序計數(shù)器寄存器,然后對數(shù)據(jù)進(jìn)行處理。當(dāng)程序計數(shù)器PCPC作為目的寄存器時,指令從存作為目的寄存器時,指令從存儲器中讀取的字?jǐn)?shù)據(jù)被當(dāng)作目的地址,從而可以實現(xiàn)程序流程的跳轉(zhuǎn)。儲器中讀取的字?jǐn)?shù)據(jù)被當(dāng)作目的地址,從而可以實現(xiàn)程序流程的跳轉(zhuǎn)。LDRH LDRH R0R0,R1 R1 LDRH LDRH R0R0,R1R1,8 8 LDRH LDRH R0R0,R1R1,R2R2 ARM 指令系統(tǒng)第49頁/共112頁50STR指令 STRSTR指令的格式為:指令的格式為:STRSTR條件條件 源寄存器,源寄存器, STRSTR指令用于從源寄存器中將一個指令用于從源寄存器中將一個3232位的字?jǐn)?shù)
54、據(jù)傳送到存儲器中。該指令在程序設(shè)計中比較常用,且尋址方位的字?jǐn)?shù)據(jù)傳送到存儲器中。該指令在程序設(shè)計中比較常用,且尋址方式靈活多樣,使用方式可參考指令式靈活多樣,使用方式可參考指令LDRLDR。STRSTRR0R0,R1R1,8 8STRSTRR0R0,R1R1,88ARM 指令系統(tǒng)第50頁/共112頁51STRB指令 STRBSTRB指令的格式為:指令的格式為:STRSTR條件條件B B 源寄存器,源寄存器, STRBSTRB指令用于從源寄存器中將一個指令用于從源寄存器中將一個8 8位的字節(jié)數(shù)據(jù)傳送到存儲器中。該字節(jié)數(shù)據(jù)為源寄存器中的低位的字節(jié)數(shù)據(jù)傳送到存儲器中。該字節(jié)數(shù)據(jù)為源寄存器中的低8 8
55、位。位。STRB STRB R0R0,R1 R1 STRB STRB R0R0,R1R1,88 ARM 指令系統(tǒng)第51頁/共112頁52STRH指令 STRHSTRH指令的格式為:指令的格式為:STRSTR條件條件H H 源寄存器,源寄存器, STRHSTRH指令用于從源寄存器中將一個指令用于從源寄存器中將一個1616位的半字?jǐn)?shù)據(jù)傳送到存儲器中。該半字?jǐn)?shù)據(jù)為源寄存器中的低位的半字?jǐn)?shù)據(jù)傳送到存儲器中。該半字?jǐn)?shù)據(jù)為源寄存器中的低1616位。位。STRH STRH R0R0,R1 R1 STRH STRH R0R0,R1R1,88 ARM 指令系統(tǒng)第52頁/共112頁53批量數(shù)據(jù)加載/存儲指令 AR
56、MARM微處理器所支持批量數(shù)據(jù)加載微處理器所支持批量數(shù)據(jù)加載/ /存儲指令可以一次在一片連續(xù)的存儲器單元和多個寄存器之間傳送數(shù)存儲指令可以一次在一片連續(xù)的存儲器單元和多個寄存器之間傳送數(shù)據(jù),批量加載指令用于將一片連續(xù)的存儲器中的數(shù)據(jù)傳送到多個寄存器,批量數(shù)據(jù)存儲指令則完成相反據(jù),批量加載指令用于將一片連續(xù)的存儲器中的數(shù)據(jù)傳送到多個寄存器,批量數(shù)據(jù)存儲指令則完成相反的操作。常用的加載存儲指令如下:的操作。常用的加載存儲指令如下:1.1.LDMLDM批量數(shù)據(jù)加載指令批量數(shù)據(jù)加載指令2.2.STMSTM批量數(shù)據(jù)存儲指令批量數(shù)據(jù)存儲指令 ARM 指令系統(tǒng)第53頁/共112頁54LDMLDM(或STMS
57、TM)指令 LDMLDM(或(或STMSTM)指令的格式為:)指令的格式為:LDMLDM(或(或STMSTM) 條件條件類型類型 基址寄存器基址寄存器 ! ,寄存器列表,寄存器列表 LDMLDM(或(或STMSTM)指令用于從由基址寄存器所指示的一片連續(xù)存儲器到寄存器列表所指示的多個寄存器之間傳)指令用于從由基址寄存器所指示的一片連續(xù)存儲器到寄存器列表所指示的多個寄存器之間傳送數(shù)據(jù),該指令的常見用途是將多個寄存器的內(nèi)容入?;虺鰲K蛿?shù)據(jù),該指令的常見用途是將多個寄存器的內(nèi)容入?;虺鰲?LDM LDM R0!, r0-r4R0!, r0-r4ARM 指令系統(tǒng)第54頁/共112頁55 類型 為以下幾
58、種情況IAIA每次傳送后地址加每次傳送后地址加1 1;IBIB每次傳送前地址加每次傳送前地址加1 1;DADA每次傳送后地址減每次傳送后地址減1 1;DBDB每次傳送前地址減每次傳送前地址減1 1;FDFD滿遞減堆棧;滿遞減堆棧;EDED空遞減堆棧;空遞減堆棧;FAFA滿遞增堆棧;滿遞增堆棧;EAEA空遞增堆棧;空遞增堆棧;ARM 指令系統(tǒng)第55頁/共112頁56后綴 ! 為可選后綴,若選用該后綴,則當(dāng)數(shù)據(jù)傳送完畢之后,將最后的地址寫入基址寄存器,否則基址寄存為可選后綴,若選用該后綴,則當(dāng)數(shù)據(jù)傳送完畢之后,將最后的地址寫入基址寄存器,否則基址寄存器的內(nèi)容不改變。器的內(nèi)容不改變。 基址寄存器不允
59、許為基址寄存器不允許為R15R15,寄存器列表可以為,寄存器列表可以為R0R0R15R15的任意組合。的任意組合。 為可選后綴,當(dāng)指令為為可選后綴,當(dāng)指令為LDMLDM且寄存器列表中包含且寄存器列表中包含R15R15,選用該后綴時表示:除了正常的數(shù)據(jù)傳送之外,選用該后綴時表示:除了正常的數(shù)據(jù)傳送之外,還將還將SPSRSPSR復(fù)制到復(fù)制到CPSRCPSR。同時,該后綴還表示傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式下的寄。同時,該后綴還表示傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式下的寄存器。存器。 STMFD R13!STMFD R13!,R0R0,R4-R12R4-R12,LRL
60、R LDMFD R13!LDMFD R13!,R0R0,R4-R12R4-R12,PCPCARM 指令系統(tǒng)第56頁/共112頁57數(shù)據(jù)交換指令數(shù)據(jù)交換指令 ARMARM微處理器所支持?jǐn)?shù)據(jù)交換指令能在存儲器和寄存器之間交換數(shù)據(jù)。數(shù)據(jù)交換指令有如下兩條:微處理器所支持?jǐn)?shù)據(jù)交換指令能在存儲器和寄存器之間交換數(shù)據(jù)。數(shù)據(jù)交換指令有如下兩條:1.1.SWPSWP 字?jǐn)?shù)據(jù)交換指令字?jǐn)?shù)據(jù)交換指令2.2.SWPBSWPB字節(jié)數(shù)據(jù)交換指令字節(jié)數(shù)據(jù)交換指令A(yù)RM 指令系統(tǒng)第57頁/共112頁58SWP指令 SWPSWP指令的格式為:指令的格式為:SWPSWP條件條件 目的寄存器,源寄存器目的寄存器,源寄存器1 1,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新課標(biāo)小學(xué)語文“學(xué)習(xí)任務(wù)群”的教學(xué)思路
- 高中物理第十一章電路及其應(yīng)用課時13串聯(lián)電路和并聯(lián)電路課件新人教版必修第三冊
- Windows Server網(wǎng)絡(luò)管理項目教程(Windows Server 2022)(微課版)5.5 拓展案例1:Web站點安全加固
- 全省小學(xué)數(shù)學(xué)教師賽課一等獎數(shù)學(xué)一年級上冊(人教2024年新編)《10的加、減法》課件
- 2014年腔體耦合器投資分析研究咨詢報告
- 2024至2030年中國整體式豆奶機行業(yè)投資前景及策略咨詢研究報告
- 2024至2030年中國成套污水處理機械設(shè)備數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年中國家用縫紉機控制器拉桿行業(yè)投資前景及策略咨詢研究報告
- 高中物理第五章交變電流5電能的輸送課件新人教版選修3-
- 2024至2030年中國中頻整體退火設(shè)備行業(yè)投資前景及策略咨詢研究報告
- 國家開放大學(xué)《西方行政學(xué)說》章節(jié)測試參考答案
- 五年級上冊英語課件-Unit4 What can you do Part A |人教(PEP) (共16張PPT)
- 遼寧省葫蘆島市藥品零售藥店企業(yè)藥房名單目錄
- 整本書閱讀《鄉(xiāng)土中國》導(dǎo)讀課件-統(tǒng)編版高中語文必修上冊
- 三年級上冊生命與健康教學(xué)計劃
- 小學(xué)生量感培養(yǎng)的調(diào)查問卷(教師)
- 【高中美術(shù)課件】禮儀與教化
- 名著老人與??碱}集錦帶答案
- 服裝企業(yè)組織架構(gòu)
- A股全部上市公司統(tǒng)計
- 概預(yù)算審核實施方案
評論
0/150
提交評論