ARM组合语言程式设计

上传人:zhan****gclb 文档编号:123999236 上传时间:2022-07-23 格式:PPTX 页数:102 大小:905.52KB
收藏 版权申诉 举报 下载
ARM组合语言程式设计_第1页
第1页 / 共102页
ARM组合语言程式设计_第2页
第2页 / 共102页
ARM组合语言程式设计_第3页
第3页 / 共102页
资源描述:

《ARM组合语言程式设计》由会员分享,可在线阅读,更多相关《ARM组合语言程式设计(102页珍藏版)》请在装配图网上搜索。

1、ARM組合語言程式設計組合語言程式設計1ARM微處理器指令優點微處理器指令優點n小晶片的面積低功耗小晶片的面積低功耗qARM架構還採用了一些特別的技術,在性能的前提下儘量縮架構還採用了一些特別的技術,在性能的前提下儘量縮小晶片的面積,並降低功耗。小晶片的面積,並降低功耗。n條件式指令條件式指令q所有的指令都可根據前面的執行結果決定是否被執行,從而所有的指令都可根據前面的執行結果決定是否被執行,從而提高指令的執行效率。提高指令的執行效率。n連續存取資料連續存取資料q可用載入可用載入/存儲指令連續傳輸資料,以提高資料的傳輸效率。存儲指令連續傳輸資料,以提高資料的傳輸效率。n同時完成邏輯處理和移位元

2、同時完成邏輯處理和移位元q可在一條資料處理指令中同時完成邏輯處理和移位處理。可在一條資料處理指令中同時完成邏輯處理和移位處理。n自動增減迴圈自動增減迴圈q在迴圈處理中使用位址的自動增減來提高執行效率。在迴圈處理中使用位址的自動增減來提高執行效率。2ARM微處理器的指令微處理器的指令nARM兩種指令集兩種指令集qARM指令指令n為32位元的長度,qThumb指令指令n為16位元長度。nThumb指令集為ARM指令集的功能子集,但與等價的ARM程式碼相比較,可節省30%40%以上的存儲空間。3ARM處理器模式處理器模式nARM架構架構支援支援7種處理器種處理器模式。模式。n模式改變模式改變q在軟體

3、控制下可以改變模式在軟體控制下可以改變模式q外部中斷或例外處理也可以引起模式發生改變。外部中斷或例外處理也可以引起模式發生改變。n大多數應用程式在使用者模式下執行。大多數應用程式在使用者模式下執行。q當處理器工作在使用者模式時,正在執行的程當處理器工作在使用者模式時,正在執行的程式不能存取某些被保護的系統資源,也不能改式不能存取某些被保護的系統資源,也不能改變模式,除非例外變模式,除非例外(exception)發生。發生。4ARM支援的支援的7種工作模式種工作模式處理器模式處理器模式說明說明User(usr)正常程式執行模式正常程式執行模式FIQ(fiq)支援高速資料般移或通道處理支援高速資料

4、般移或通道處理IRQ(irq)用於通用中斷處理用於通用中斷處理Supervisor(svc)作業系統保護模式作業系統保護模式Abort mode(abt)實現虛擬記憶體和實現虛擬記憶體和/或記憶體保護或記憶體保護Undefined(und)支援硬體輔助運算器的軟體仿真支援硬體輔助運算器的軟體仿真System(sys)執行特權作業系統工作執行特權作業系統工作5ARM微處理器的暫存器結構微處理器的暫存器結構nARM處理器共有處理器共有37個暫存器,被分為若干個個暫存器,被分為若干個組組(BANK),這些暫存器包括:這些暫存器包括:q31個通用暫存器。個通用暫存器。q包括程式計數器(包括程式計數器(

5、PC指標)。指標)。q6個程式狀態暫存器個程式狀態暫存器n用以標識CPU的工作狀態及程式的執行狀態,均為32位元,目前只使用了其中的一部分。nARM處理器有處理器有7種不同的處理器模式種不同的處理器模式q在每一種處理器模式下均有一組相應的暫存器與在每一種處理器模式下均有一組相應的暫存器與之對應。之對應。6ARM暫存器暫存器n1)不分組暫存器)不分組暫存器R0R7qR0R7是不分組暫存器。這意味著在所有處理器模式下,它們每一個都存取是不分組暫存器。這意味著在所有處理器模式下,它們每一個都存取一樣的一樣的32位元暫存器。它們是真正的通用暫存器,沒有架構所隱含的特殊用位元暫存器。它們是真正的通用暫存

6、器,沒有架構所隱含的特殊用途。途。n2)分組暫存器)分組暫存器R8R14qR8R14是分組暫存器。它們每一個存取的實體暫存器取決於當前的處理器是分組暫存器。它們每一個存取的實體暫存器取決於當前的處理器模式。若要存取特定的實體暫存器而不依賴當前的處理器模式,則要使用規定模式。若要存取特定的實體暫存器而不依賴當前的處理器模式,則要使用規定的各字。的各字。q暫存器暫存器R8R12各有兩組實體暫存器:一組為各有兩組實體暫存器:一組為FIQ模式,另一組為除了模式,另一組為除了FIQ以外以外的所有模式。暫存器的所有模式。暫存器R8R12沒有任何指定的特殊用途。沒有任何指定的特殊用途。q只是使用只是使用R8

7、R14來簡單地處理中斷。暫存器來簡單地處理中斷。暫存器R13,R14各有各有6個分組的實體暫個分組的實體暫存器。存器。1個用於使用者模式和系統模式,其他個用於使用者模式和系統模式,其他5個分別用於個分別用於5種例外模式。種例外模式。q暫存器暫存器R13通常用做堆疊指標,稱為通常用做堆疊指標,稱為SP(Stack Pointer),每種例外模式都有每種例外模式都有自己的自己的R13。q暫存器暫存器R14用作副程式鏈結暫存器,也稱為用作副程式鏈結暫存器,也稱為LR(。n3)程式計數器程式計數器R15q暫存器暫存器R15用做程式計數器用做程式計數器(PC)。7ARM暫存器暫存器8程式狀態暫存器程式狀

8、態暫存器(Program Status Register)n有一個有一個Current Program Status Register(CPSR)q在所有處理器模式下都可以存取當前的程式狀態暫存器在所有處理器模式下都可以存取當前的程式狀態暫存器CPSR。qCPSR包含條件碼旗標,中斷禁止位元,當前處理器模式以及其他狀態和控制資訊。包含條件碼旗標,中斷禁止位元,當前處理器模式以及其他狀態和控制資訊。n有五個有五個Saved Program Status Registers(SPSRs)q每種例外模式都有一個程式狀態保存暫存器每種例外模式都有一個程式狀態保存暫存器SPSR。qSPSR用於保留用於保

9、留CPSR的狀態。的狀態。9程式狀態暫存器程式狀態暫存器n條件碼旗標條件碼旗標:qN,Z,C,V 大多數指令可以測試這些條件碼旗標以決定程式大多數指令可以測試這些條件碼旗標以決定程式指令如何執行指令如何執行n控制位元控制位元:q最低最低8位元位元 I,F,T和和M位元用做控制位元。當例外出現時改變位元用做控制位元。當例外出現時改變控制位元。當處理器在特權模式下也可以由軟體改變。控制位元。當處理器在特權模式下也可以由軟體改變。n中斷禁止位元:中斷禁止位元:I 置置1則禁止則禁止IRQ中斷。中斷。F置置1則禁止則禁止FIQ中斷。中斷。nT位元:位元:qT=0 指示指示ARM執行。執行。T=1指示指

10、示Thumb執行。在這些架構系統中,執行。在這些架構系統中,可自由地使用能在可自由地使用能在ARM和和Thumb狀態之間切換的指令。狀態之間切換的指令。n模式位元:模式位元:qM0,M1,M2,M3和和M4(M4:0)是模式位元是模式位元.這些位元決定處理這些位元決定處理器的工作模式。器的工作模式。10PSR Mode位元與可使用暫存器位元與可使用暫存器11ARM和和Thumb之間狀態的切換之間狀態的切換nARM處理器可在兩種工作狀態之間切換。處理器可在兩種工作狀態之間切換。n在在Thumb狀態下,程式計數器狀態下,程式計數器PC使用位元使用位元1選擇另一個半字。選擇另一個半字。nARM和和T

11、humb之間狀態的切換不影響處理器的模式或暫存器的內容。之間狀態的切換不影響處理器的模式或暫存器的內容。n進入進入Thumb狀態。當運算元暫存器的狀態位元狀態。當運算元暫存器的狀態位元0為為1時,執行時,執行BX指令指令進入進入Thumb狀態。狀態。n如果處理器在如果處理器在Thumb狀態進入例外,則當例外處理(狀態進入例外,則當例外處理(IRQ,FIQ,Undef,Abort和和SWI)返回時,自動切換到返回時,自動切換到Thumb狀態。狀態。n當運算元暫存器的狀態位元當運算元暫存器的狀態位元0為為0時,執行時,執行BX指令進入指令進入ARM狀態。狀態。n處理器進行例外處理處理器進行例外處理

12、(IRQ,FIQ,Undef,Abort和和SWI),從例外向從例外向量位址開始執行也可以進入量位址開始執行也可以進入ARM狀態。狀態。12Thumb指令及應用指令及應用nThumb指令集是指令集是ARM指令集的一個子集,允許指令編碼為指令集的一個子集,允許指令編碼為16位元的長度。位元的長度。nThumb指令集在保留指令集在保留32程式碼優勢的同時,大大的節省了系統的存儲空程式碼優勢的同時,大大的節省了系統的存儲空間。間。n大多數的大多數的Thumb指令是無條件執行的。指令是無條件執行的。n大多數的大多數的Thumb資料處理指令的目的暫存器與其中一個來原暫存器相同。資料處理指令的目的暫存器與

13、其中一個來原暫存器相同。nThumb指令與指令與ARM指令的時間效率和空間效率關係為:指令的時間效率和空間效率關係為:qThumb程式碼所需的存儲空間約為程式碼所需的存儲空間約為ARM程式碼的程式碼的6070qThumb程式碼使用的指令數比程式碼使用的指令數比ARM程式碼多約程式碼多約3040q若使用若使用32位的記憶體,位的記憶體,ARM程式碼比程式碼比Thumb程式碼快約程式碼快約40q若使用若使用16位的記憶體,位的記憶體,Thumb程式碼比程式碼比ARM程式碼快約程式碼快約4050q與與ARM程式碼相比較,使用程式碼相比較,使用Thumb程式碼,記憶體的功耗會降低約程式碼,記憶體的功耗

14、會降低約30n若對系統的性能有較高要求,應使用若對系統的性能有較高要求,應使用32位元的存儲系統和位元的存儲系統和ARM指令集。指令集。n若對系統的成本及功耗有較高要求,則應使用若對系統的成本及功耗有較高要求,則應使用16位元的存儲系統和位元的存儲系統和Thumb指令集。指令集。13Thumb與與ARM和暫存器的比較和暫存器的比較 R0 R1 R2 R3 R4 R5 R6 R7 SP LR PC CPSR SPSR R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 SP(R13)LR(R14)PC(R15)CPSR SPSR 高暫存器 Thumb 狀態 ARM

15、 狀態 低暫存器 14Thumb狀態的暫存器集狀態的暫存器集nThumb狀態下的暫存器集是狀態下的暫存器集是ARM狀態下暫存器集的狀態下暫存器集的子集。程式師可以直接存取子集。程式師可以直接存取8個通用的暫存器個通用的暫存器(R0R7),PC,SP,LR和和CPSP。每一種特權模式都有每一種特權模式都有一組一組SP,LR和和SPSR。qThumb狀態的狀態的R0R7與與ARM狀態的狀態的R0R7是一致的。是一致的。qThumb狀態的狀態的CPSR和和SPSR與與ARM狀態的狀態的CPSR和和SPSR是一致的。是一致的。qThumb狀態的狀態的SP映射到映射到ARM狀態的狀態的R13。qThum

16、b狀態的狀態的LR映射到映射到ARM狀態的狀態的R14。qThumb狀態的狀態的PC映射到映射到ARM狀態的狀態的PC(R15)。)。15Thumb暫存器暫存器16ARM記憶體格式記憶體格式nBIG-ENDIANnLITTLE-ENDIAN17ARM 指令格式指令格式(Instruction Format)及種類及種類18ARM指令及功能描述指令及功能描述助記符助記符指令功能描述指令功能描述ADCADC帶進位元加法指令帶進位元加法指令ADDADD加法指令加法指令ANDAND邏輯與指令邏輯與指令B B跳移指令跳移指令BICBIC位元清零指令位元清零指令BLBL帶返回的跳移指令帶返回的跳移指令BL

17、XBLX帶返回和狀態切換的跳移指令帶返回和狀態切換的跳移指令BXBX帶狀態切換的跳移指令帶狀態切換的跳移指令CDPCDP輔助運算器資料操作指令輔助運算器資料操作指令CMNCMN比較反值指令比較反值指令CMPCMP比較指令比較指令EOREOR互斥指令互斥指令LDCLDC記憶體到輔助運算器的資料傳輸指令記憶體到輔助運算器的資料傳輸指令LDMLDM載入多個暫存器指令載入多個暫存器指令LDRLDR記憶體到暫存器的資料傳輸指令記憶體到暫存器的資料傳輸指令MCRMCR從從ARMARM暫存器到輔助運算器暫存器的資料傳輸指令暫存器到輔助運算器暫存器的資料傳輸指令MLAMLA乘加運算指令乘加運算指令MOVMOV

18、資料般移指令資料般移指令19ARM指令及功能描述指令及功能描述助記符指令功能描述MRCMRC從輔助運算器暫存器到從輔助運算器暫存器到ARMARM暫存器的資料傳輸指令暫存器的資料傳輸指令MRSMRS般移般移CPSRCPSR或或SPSRSPSR的內容到通用暫存器指令的內容到通用暫存器指令MSRMSR般移通用暫存器到般移通用暫存器到CPSRCPSR或或SPSRSPSR的指令的指令MULMUL3232位元乘法指令位元乘法指令MLAMLA3232位元乘加指令位元乘加指令MVNMVN資料取反般移指令資料取反般移指令ORRORR邏輯或指令邏輯或指令RSBRSB逆向減法指令逆向減法指令RSCRSC帶借位的逆向

19、減法指令帶借位的逆向減法指令SBCSBC帶借位減法指令帶借位減法指令STCSTC輔助運算器暫存器寫入記憶體指令輔助運算器暫存器寫入記憶體指令STMSTM連續記憶體字寫入指令連續記憶體字寫入指令STRSTR暫存器到記憶體的資料傳輸指令暫存器到記憶體的資料傳輸指令SUBSUB減法指令減法指令SWISWI軟體中斷指令軟體中斷指令SWPSWP交換指令交換指令TEQTEQ相等測試指令相等測試指令TSTTST位元測試指令位元測試指令20指令的條件碼指令的條件碼條件碼條件碼助記符尾碼助記符尾碼旗標旗標含義含義00000000EQEQZ Z置位置位相等相等00010001NENEZ Z清零清零不相等不相等00

20、100010CSCSC C置位置位無符號數大於或等於無符號數大於或等於00110011CCCCC C清零清零無符號數小於無符號數小於01000100MIMIN N置位置位負數負數01010101PLPLN N清零清零正數或零正數或零01100110VSVSV V置位置位溢出溢出01110111VCVCV V清零清零未溢出未溢出10001000HIHIC C置位置位Z Z清零清零無符號數大於無符號數大於10011001LSLSC C清零清零Z Z置位置位無符號數小於或等於無符號數小於或等於10101010GEGEN N等於等於V V帶符號數大於或等於帶符號數大於或等於10111011LTLTN

21、N不等於不等於V V帶符號數小於帶符號數小於11001100GTGTZ Z清零且(清零且(N N等於等於V V)帶符號數大於帶符號數大於11011101LELEZ Z置位或(置位或(N N不等於不等於V V)帶符號數小於或等於帶符號數小於或等於11101110ALAL忽略忽略無條件執行無條件執行21ARM指令的定址方式指令的定址方式n立即定址立即定址(Immediate Addressing)n暫存器定址暫存器定址(Register Addressing)n暫存器間接定址暫存器間接定址(Register Indirect Addressing)n基址變址定址基址變址定址(Index Addre

22、ssing)n多暫存器定址多暫存器定址(Multiple Register Addressing)n堆疊定址堆疊定址(Stack Addressing)22ARM指令的定址方式指令的定址方式-立即定址立即定址n立即定址也叫立即數定址,這是一種特殊的定址方立即定址也叫立即數定址,這是一種特殊的定址方式,運算元本身就在指令中給出,只要取出指令也式,運算元本身就在指令中給出,只要取出指令也就取到了運算元。這個運算元被稱為立即數,對應就取到了運算元。這個運算元被稱為立即數,對應的定址方式也就叫做立即定址。例如以下指令:的定址方式也就叫做立即定址。例如以下指令:n在以上兩條指令中,第二個源運算元即為立即

23、數,在以上兩條指令中,第二個源運算元即為立即數,要求以要求以“”為首碼,對於以十六進位表示的立即為首碼,對於以十六進位表示的立即數,還要求在數,還要求在“”後加上後加上“0 x”或或“&”。ADDR0,R0,1;R0R01ADDR0,R0,0 x3f;R0R00 x3f23ARM指令的定址方式指令的定址方式-暫存器定址暫存器定址n暫存器定址就是利用暫存器中的數值作為運暫存器定址就是利用暫存器中的數值作為運算元,這種定址方式是各類微處理器經常採算元,這種定址方式是各類微處理器經常採用的一種方式,也是一種執行效率較高的定用的一種方式,也是一種執行效率較高的定址方式。以下指令:址方式。以下指令:n該

24、指令的執行效果是將暫存器該指令的執行效果是將暫存器R1和和R2的內的內容相加,其結果存放在暫存器容相加,其結果存放在暫存器R0中。中。ADDR0,R1,R2;R0R1R224ARM指令的定址方式指令的定址方式-暫存器間接定址暫存器間接定址n暫存器間接定址就是以暫存器中的值作為運算元的位址,而運暫存器間接定址就是以暫存器中的值作為運算元的位址,而運算元本身存放在記憶體中。例如以下指令:算元本身存放在記憶體中。例如以下指令:n第一條指令將以第一條指令將以R1的值為位址的記憶體中的資料般移到的值為位址的記憶體中的資料般移到R0中。中。n第二條指令第二條指令將將R0的值般移到的值般移到以以R1的值為位

25、址的記憶體中。的值為位址的記憶體中。LDRR0,R1;R0R1STRR0,R1;R1R025ARM指令的定址方式指令的定址方式-基址變址定址基址變址定址n基址變址定址就是將暫存器(該暫存器一般稱作基址暫存器)的內容與指令中給出的位基址變址定址就是將暫存器(該暫存器一般稱作基址暫存器)的內容與指令中給出的位址偏移量相加,從而得到一個運算元的有效位址。變址定址方式常用於存取某基底位址址偏移量相加,從而得到一個運算元的有效位址。變址定址方式常用於存取某基底位址附近的位址單元。採用變址定址方式的指令常見有以下幾種形式,如下所示:附近的位址單元。採用變址定址方式的指令常見有以下幾種形式,如下所示:n在第

26、一條指令中,將暫存器在第一條指令中,將暫存器R1的內容加上的內容加上4形成運算元的有效位址,從而取得運算元存入形成運算元的有效位址,從而取得運算元存入暫存器暫存器R0中。中。n在第二條指令中,將暫存器在第二條指令中,將暫存器R1的內容加上的內容加上4形成運算元的有效位址,從而取得運算元存入形成運算元的有效位址,從而取得運算元存入暫存器暫存器R0中,然後,中,然後,R1的內容自增的內容自增4個位元組。個位元組。n在第三條指令中,以暫存器在第三條指令中,以暫存器R1的內容作為運算元的有效位址,從而取得運算元存入暫存的內容作為運算元的有效位址,從而取得運算元存入暫存器器R0中,然後,中,然後,R1的

27、內容自增的內容自增4個位元組。個位元組。n在第四條指令中,將暫存器在第四條指令中,將暫存器R1的內容加上暫存器的內容加上暫存器R2的內容形成運算元的有效位址,從而的內容形成運算元的有效位址,從而取得運算元存入暫存器取得運算元存入暫存器R0中。中。LDR R0,R1,4;R0R14LDR R0,R1,4!;R0R14、R1R14LDR R0,R1,4;R0R1、R1R14LDR R0,R1,R2;R0R1R226ARM指令的定址方式指令的定址方式-多暫存器定址多暫存器定址n採用多暫存器定址方式,一條指令可以完成多個暫採用多暫存器定址方式,一條指令可以完成多個暫存器值的般移。這種定址方式可以用一條

28、指令完成存器值的般移。這種定址方式可以用一條指令完成般移最多般移最多16個通用暫存器的值。以下指令:個通用暫存器的值。以下指令:n該指令的尾碼該指令的尾碼IA表示在每次執行完載入表示在每次執行完載入/存儲操作後,存儲操作後,R0按字長度增加,因此,指令可將連續存儲單元的按字長度增加,因此,指令可將連續存儲單元的值般移到值般移到R1R4。LDMIA R0,R1,R2,R3,R4;R1R0;R2R04;R3R08;R4R01227ARM指令的定址方式指令的定址方式-相對定址相對定址n與基址變址定址方式相類似,相對定址以程與基址變址定址方式相類似,相對定址以程式計數器式計數器PC的當前值為基底位址,

29、指令中的的當前值為基底位址,指令中的位址標號作為偏移量,將兩者相加之後得到位址標號作為偏移量,將兩者相加之後得到運算元的有效位址。以下程式段完成副程式運算元的有效位址。以下程式段完成副程式的使用和返回,跳移指令的使用和返回,跳移指令BL採用了相對定址採用了相對定址方式:方式:BLNEXT;跳移到副程式NEXT處執行NEXTMOVPC,LR;從副程式返回28ARM指令的定址方式指令的定址方式-堆疊定址堆疊定址n堆疊是一種資料結構,按先進後出(堆疊是一種資料結構,按先進後出(First In Last Out,FILO)的方式工作,使用一個稱作堆疊指標的方式工作,使用一個稱作堆疊指標的專用暫存器指

30、示當前的操作位置,堆疊指標總的專用暫存器指示當前的操作位置,堆疊指標總(SP,Stack Pointer)是指向堆疊頂。是指向堆疊頂。n當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊(疊(Full Stack),),而當堆疊指標指向下一個將要而當堆疊指標指向下一個將要放入資料的空位置時,稱為空堆疊放入資料的空位置時,稱為空堆疊(Empty Stack)。)。n同時,根據堆疊的生成方式,又可以分為遞增堆疊同時,根據堆疊的生成方式,又可以分為遞增堆疊(Ascending Stack)和遞減堆疊(和遞減堆疊(Descending Stack),),當堆疊由

31、低位址向高位址生成時,稱為當堆疊由低位址向高位址生成時,稱為遞增堆疊,當堆疊由高位址向低位址生成時,稱為遞增堆疊,當堆疊由高位址向低位址生成時,稱為遞減堆疊。遞減堆疊。29ARM支援四種堆疊工作方式支援四種堆疊工作方式n滿遞增堆疊滿遞增堆疊q堆疊指標指向最後壓入的資料,且由低位址向高位址生成。堆疊指標指向最後壓入的資料,且由低位址向高位址生成。n滿遞減堆疊滿遞減堆疊q堆疊指標指向最後壓入的資料,且由高位址向低位址生成。堆疊指標指向最後壓入的資料,且由高位址向低位址生成。n空遞增堆疊空遞增堆疊q堆疊指標指向下一個將要放入資料的空位置,且由低位址向高堆疊指標指向下一個將要放入資料的空位置,且由低位

32、址向高地址生成。地址生成。n空遞減堆疊空遞減堆疊q堆疊指標指向下一個將要放入資料的空位置,且由高位址向低堆疊指標指向下一個將要放入資料的空位置,且由高位址向低地址生成。地址生成。30ARM指令集指令集-跳移指令跳移指令n跳移指令用於實現程式流程的跳移,在跳移指令用於實現程式流程的跳移,在ARM程式中有兩種方法可以實現程式中有兩種方法可以實現程式流程的跳移:程式流程的跳移:q使用專門的跳移指令。使用專門的跳移指令。q直接向程式計數器直接向程式計數器PC寫入跳移位址值。寫入跳移位址值。n通過向程式計數器通過向程式計數器PC寫入跳移位址值,可以實現在寫入跳移位址值,可以實現在4GB的位址空間中的的位

33、址空間中的任意跳移,在跳移之前結合使用。任意跳移,在跳移之前結合使用。qMOVLR,PCn等類似指令,可以保存將來的返回位址值,從而實現在等類似指令,可以保存將來的返回位址值,從而實現在4GB連續的線性連續的線性位址空間的副程式使用。位址空間的副程式使用。nARM指令集中的跳移指令可以完成從當前指令向前或向後的指令集中的跳移指令可以完成從當前指令向前或向後的32MB的位的位址空間的跳移,包括以下址空間的跳移,包括以下4條指令:條指令:qB 跳移指令。跳移指令。qBL帶返回的跳移指令。帶返回的跳移指令。qBLX帶返回和狀態切換的跳移指令。帶返回和狀態切換的跳移指令。qBX帶狀態切換的跳移指令。帶

34、狀態切換的跳移指令。31ARM指令集指令集-跳移指令跳移指令-B指令指令nB指令的語法為:指令的語法為:qB條件條件目標位址目標位址nB指令是最簡單的跳移指令。一旦遇到一個指令是最簡單的跳移指令。一旦遇到一個 B 指令指令,ARM 處理處理器將立即跳移到給定的目標位址,從那裏繼續執行。注意存儲器將立即跳移到給定的目標位址,從那裏繼續執行。注意存儲在跳移指令中的實際值是相對當前在跳移指令中的實際值是相對當前PC值的一個偏移量,而不是值的一個偏移量,而不是一個絕對位址,它的值由彙編器來計算(參考定址方式中的相一個絕對位址,它的值由彙編器來計算(參考定址方式中的相對定址)。對定址)。n它是它是 24

35、 位元有符號數,左移兩位元後有符號擴充為位元有符號數,左移兩位元後有符號擴充為 32 位,表位,表示的有效偏移為示的有效偏移為 26 位位(前後前後32MB的位址空間的位址空間)。以下指令:。以下指令:BLabel;程式無條件跳移到標號Label處執行CMPR1,0;當CPSR暫存器中的Z條件碼置位元時,程式跳移到標號Label處執行BEQLabel32ARM指令指令集集-跳移指令跳移指令-BL指令指令nBL指令的語法為:指令的語法為:qBL條件條件 目標位址目標位址nBL 是另一個跳移指令,但跳移之前,會在是另一個跳移指令,但跳移之前,會在暫存器暫存器R14中保存中保存PC的當前內容,因此,

36、可的當前內容,因此,可以通過將以通過將R14 的內容重新載入到的內容重新載入到PC中,來中,來返回到跳移指令之後的那個指令處執行。返回到跳移指令之後的那個指令處執行。n該指令是實現副程式使用的一個基本但常用該指令是實現副程式使用的一個基本但常用的手段。以下指令:的手段。以下指令:BLLabel;當程式無條件跳移到標號Label處執行時,同時將當前的PC值保存到R14中 33ARM指令指令集集-跳移指令跳移指令-BLX指令指令nBLX指令的語法為:指令的語法為:qBLX 目標位址目標位址nBLX指令指令從從ARM指令集跳移到指令中所指定的目標指令集跳移到指令中所指定的目標位址,並將處理器的工作狀

37、態有位址,並將處理器的工作狀態有ARM狀態切換到狀態切換到Thumb狀態,該指令同時將狀態,該指令同時將PC的當前內容保存到的當前內容保存到暫存器暫存器R14中。中。n因此,當副程式使用因此,當副程式使用Thumb指令集,而使用者使用指令集,而使用者使用ARM指令集時,可以通過指令集時,可以通過BLX指令實現副程式的使指令實現副程式的使用和處理器工作狀態的切換。同時,副程式的返回用和處理器工作狀態的切換。同時,副程式的返回可以通過將暫存器可以通過將暫存器R14值複製到值複製到PC中來完成。中來完成。34ARM指令集指令集-跳移指令跳移指令-BX指令指令nBX指令的語法為:指令的語法為:qBX條

38、件條件 目標位址目標位址nBX指令跳移到指令中所指定的目標位址,目指令跳移到指令中所指定的目標位址,目標位址處的指令既可以是標位址處的指令既可以是ARM指令,也可以指令,也可以是是Thumb指令。指令。35ARM指令集指令集-跳移指令跳移指令-資料處理指令資料處理指令n資料處理指令可分為資料處理指令可分為q資料般移指令資料般移指令n資料般移指令用於在暫存器和記憶體之間進行資料的雙向傳輸。q算術邏輯運算指令算術邏輯運算指令n算術邏輯運算指令完成常用的算術與邏輯的運算,該類指令不但將運算結果保存在目的暫存器中,同時更新CPSR中的相應條件旗標位元。q比較指令比較指令n比較指令不保存運算結果,只更新

39、CPSR中相應的條件旗標位元。36資料處理指令總表資料處理指令總表qMOV資料般移指令資料般移指令qMVN資料取反般移指令資料取反般移指令qCMP比較指令比較指令qCMN反值比較指令反值比較指令qTST位元測試指令位元測試指令qTEQ相等測試指令相等測試指令qADD加法指令加法指令qADC帶進位元加法指令帶進位元加法指令qSUB減法指令減法指令qSBC帶借位減法指令帶借位減法指令qRSB逆向減法指令逆向減法指令qRSC帶借位的逆向減法指令帶借位的逆向減法指令qAND邏輯與指令邏輯與指令qORR邏輯或指令邏輯或指令qEOR邏輯互斥指令邏輯互斥指令qBIC位元清除指令位元清除指令 37ARM指令集

40、指令集-資料處理指令資料處理指令-MOV指令指令nMOV指令的語法為:指令的語法為:qMOV條件條件S目的暫存器,來源運算元目的暫存器,來源運算元nMOV指令可完成從另一個暫存器、被移位的暫存器指令可完成從另一個暫存器、被移位的暫存器或將一個立即數載入到目的暫存器。其中或將一個立即數載入到目的暫存器。其中S選項決選項決定指令的操作是否影響定指令的操作是否影響CPSR中條件旗標位元的值,中條件旗標位元的值,當沒當沒有有S時指令不更新時指令不更新CPSR中條件旗標位元的值。中條件旗標位元的值。n指令範例:指令範例:MOVR1,R0;將暫存器R0的值般移到暫存器R1MOVPC,R14;將暫存器R14

41、的值般移到PC,常用於副程式返回MOVR1,R0,LSL3;將暫存器R0的值左移3位後般移到R138ARM指令集指令集-資料處理指令資料處理指令-MVN指令指令nMVN指令的語法為:指令的語法為:qMVN條件條件S目的暫存器,來源運算元目的暫存器,來源運算元nMVN指令可完成從另一個暫存器、被移位的暫存器、指令可完成從另一個暫存器、被移位的暫存器、或將一個立即數載入到目的暫存器。或將一個立即數載入到目的暫存器。與與MOV指令不指令不同之處是在般移之前按位被取反了,即把一個被取同之處是在般移之前按位被取反了,即把一個被取反的值般移到目的暫存器中。反的值般移到目的暫存器中。n其中其中S決定指令的操

42、作是否影響決定指令的操作是否影響CPSR中條件旗標位中條件旗標位元的值,當沒元的值,當沒有有S時指令不更新時指令不更新CPSR中條件旗標位中條件旗標位元的值。元的值。n指令範例:指令範例:MVNR0,0;將立即數0取反般移到暫存器R0中,完成後R0=-139ARM指令集指令集-資料處理指令資料處理指令-CMP指令指令nCMP指令的語法為:指令的語法為:qCMP條件條件 運算元運算元1,運算元,運算元2nCMP指令用於把一個暫存器的內容和另一個暫存器的內容或立指令用於把一個暫存器的內容和另一個暫存器的內容或立即數進行比較,同時更新即數進行比較,同時更新CPSR中條件旗標位元的值。該指令進中條件旗

43、標位元的值。該指令進行一次減法運算,但不存儲結果,只更改條件旗標位元。行一次減法運算,但不存儲結果,只更改條件旗標位元。n旗標位元表示的是運算元旗標位元表示的是運算元1與運算元與運算元2的關係的關係(大、小、相等大、小、相等),例,例如,當運算元如,當運算元1大於操作運算元大於操作運算元2,則此後的有,則此後的有GT 尾碼的指令將尾碼的指令將可以執行。可以執行。n指令範例:指令範例:CMP R1,R0;將暫存器R1的值與暫存器R0的值相減,並根據結果設定CPSR的旗標位元CMP R1,100;將暫存器R1的值與立即數100相減,並根據結果設定CPSR的旗標位元40ARM指令集指令集-資料處理指

44、令資料處理指令-CMN指令指令nCMN指令的語法為:指令的語法為:qCMN條件條件 運算元運算元1,運算元,運算元2nCMN指令用於把一個暫存器的內容和另一個暫存器的內容或立指令用於把一個暫存器的內容和另一個暫存器的內容或立即數取反後進行比較,同時更新即數取反後進行比較,同時更新CPSR中條件旗標位元的值。中條件旗標位元的值。n該指令實際完成運算元該指令實際完成運算元1和運算元和運算元2相加,並根據結果更改條件相加,並根據結果更改條件旗標位元。旗標位元。n指令範例:指令範例:CMNR1,R0;將暫存器R1的值與暫存器R0的值相加,並根據結果設定CPSR的旗標位元CMNR1,100;將暫存器R1

45、的值與立即數100相加,並根據結果設定CPSR的旗標位元41ARM指令集指令集-資料處理指令資料處理指令-TST指令指令nTST指令的語法為:指令的語法為:qTST條件條件 運算元運算元1,運算元,運算元2nTST指令用於把一個暫存器的內容和另一個暫存器指令用於把一個暫存器的內容和另一個暫存器的內容或立即數進行按位的與運算,並根據運算結的內容或立即數進行按位的與運算,並根據運算結果更新果更新CPSR中條件旗標位元的值。中條件旗標位元的值。n運算元運算元1是要測試的資料,而運算元是要測試的資料,而運算元2是一個位遮罩,是一個位遮罩,該指令一般用來測試是否設定了特定的位。該指令一般用來測試是否設定

46、了特定的位。n指令範例:指令範例:TSTR1,1 ;用於測試在暫存器R1中是否設定了最低位(表示二進位數字)TSTR1,0 xffe;將暫存器R1的值與立即數0 xffe按位元與,並根據結果設定CPSR的旗標位元42ARM指令集指令集-資料處理指令資料處理指令-TEQ指令指令nTEQ指令的語法為:指令的語法為:qTEQ 條件條件 運算元運算元1,運算元,運算元2nTEQ指令用於把一個暫存器的內容和另一個暫存器指令用於把一個暫存器的內容和另一個暫存器的內容或立即數進行按位的互斥運算,並根據運算的內容或立即數進行按位的互斥運算,並根據運算結果更新結果更新CPSR中條件旗標位元的值。中條件旗標位元的

47、值。n該指令通常用於比較運算元該指令通常用於比較運算元1和運算元和運算元2是否相等。是否相等。n指令範例:指令範例:TEQR1,R2;將暫存器R1的值與暫存器R2的值按位元互斥,並根據結果設定CPSR的旗標位元43ARM指令集指令集-資料處理指令資料處理指令-ADD指令指令nADD指令的語法為:指令的語法為:qADD 條件條件S 目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2nADD指令用於把兩個運算元相加,並將結果指令用於把兩個運算元相加,並將結果存放到目的暫存器中。運算元存放到目的暫存器中。運算元1應是一個暫應是一個暫存器,運算元存器,運算元2可以是一個暫存器,被移位可以是一個暫

48、存器,被移位的暫存器,或一個立即數。的暫存器,或一個立即數。n指令範例:指令範例:ADD R0,R1,R2 ;R0=R1+R2ADD R0,R1,#256 ;R0=R1+256ADD R0,R2,R3,LSL#1 ;R0=R2+(R3 1)44ARM指令集指令集-資料處理指令資料處理指令-ADC指令指令nADC指令的語法為:指令的語法為:qADC 條件條件S 目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2nADC指令用於把兩個運算元相加,再加上指令用於把兩個運算元相加,再加上CPSR中的中的C條件旗標條件旗標位元的值,並將結果存放到目的暫存器中。它使用一個進位元位元的值,並將結果存放

49、到目的暫存器中。它使用一個進位元旗標位元,這樣就可以做比旗標位元,這樣就可以做比32位大的數的加法,注意不要忘記位大的數的加法,注意不要忘記設定設定S尾碼來更改進位元旗標。運算元尾碼來更改進位元旗標。運算元1應是一個暫存器,運算應是一個暫存器,運算元元2可以是一個暫存器,被移位的暫存器,或一個立即數。可以是一個暫存器,被移位的暫存器,或一個立即數。n以下指令序列完成兩個以下指令序列完成兩個128位數的加法,第一個數由高到低存放位數的加法,第一個數由高到低存放在暫存器在暫存器R7R4,第二個數由高到低存放在暫存器第二個數由高到低存放在暫存器R11R8,運算結果由高到低存放在暫存器運算結果由高到低

50、存放在暫存器R3R0:ADDS R0,R4,R8 ;加低端的字ADCS R1,R5,R9 ;加第二個字,帶進位ADCS R2,R6,R10 ;加第三個字,帶進位ADC R3,R7,R11 ;加第四個字,帶進位45ARM指令集指令集-資料處理指令資料處理指令-SUB指令指令nSUB指令的語法為:指令的語法為:qSUB 條件條件S 目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2nSUB指令用於把運算元指令用於把運算元1減去運算元減去運算元2,並將結果存,並將結果存放到目的暫存器中。運算元放到目的暫存器中。運算元1應是一個暫存器,運應是一個暫存器,運算元算元2可以是一個暫存器,被移位的暫存

51、器,或一可以是一個暫存器,被移位的暫存器,或一個立即數。該指令可用於有符號數或無符號數的減個立即數。該指令可用於有符號數或無符號數的減法運算。法運算。n指令範例:指令範例:SUB R0,R1,R2 ;R0=R1-R2SUB R0,R1,#256 ;R0=R1-256SUB R0,R2,R3,LSL#1 ;R0=R2-(R3 1)46ARM指令集指令集-資料處理指令資料處理指令-SBC指令指令nSBC指令的語法為:指令的語法為:qSBC 條件條件S 目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2nSBC指令用於把運算元指令用於把運算元1減去運算元減去運算元2,再減去,再減去CPSR中的

52、中的C條件旗標位元的反碼,並將結果存放條件旗標位元的反碼,並將結果存放到目的暫存器中。運算元到目的暫存器中。運算元1應是一個暫存器,運算應是一個暫存器,運算元元2可以是一個暫存器,被移位的暫存器,或一個可以是一個暫存器,被移位的暫存器,或一個立即數。該指令使用進位元旗標來表示借位,這樣立即數。該指令使用進位元旗標來表示借位,這樣就可以做大於就可以做大於32位的減法,注意不要忘記設定位的減法,注意不要忘記設定S尾尾碼來更改進位元旗標。該指令可用於有符號數或無碼來更改進位元旗標。該指令可用於有符號數或無符號數的減法運算。符號數的減法運算。n指令範例:指令範例:SUBS R0,R1,R2 ;R0=R

53、1-R2-!C,並根據結果設定CPSR的進位元旗標位元47ARM指令集指令集-資料處理指令資料處理指令-RSB指令指令nRSB指令的語法為:指令的語法為:qRSB條件條件S 目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2nRSB指令稱為逆向減法指令,用於把運算元指令稱為逆向減法指令,用於把運算元2減去減去運算元運算元1,並將結果存放到目的暫存器中。運算元,並將結果存放到目的暫存器中。運算元1應是一個暫存器,運算元應是一個暫存器,運算元2可以是一個暫存器,被可以是一個暫存器,被移位的暫存器,或一個立即數。移位的暫存器,或一個立即數。n該指令可用於有符號數或無符號數的減法運算。該指令可用

54、於有符號數或無符號數的減法運算。n指令範例:指令範例:RSB R0,R1,R2 ;R0=R2 R1RSB R0,R1,#256 ;R0=256 R1RSB R0,R2,R3,LSL#1 ;R0=(R3 1)-R248ARM指令集指令集-資料處理指令資料處理指令-RSC指令指令nRSC指令的語法為:指令的語法為:qRSC 條件條件S 目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2nRSC指令用於把運算元指令用於把運算元2減去運算元減去運算元1,再減去,再減去CPSR中的中的C條件旗標位元的反碼,並將結果存放條件旗標位元的反碼,並將結果存放到目的暫存器中。到目的暫存器中。n運算元運算元1

55、應是一個暫存器,運算元應是一個暫存器,運算元2可以是一個暫存可以是一個暫存器,被移位的暫存器,或一個立即數。該指令使用器,被移位的暫存器,或一個立即數。該指令使用進位元旗標來表示借位,這樣就可以做大於進位元旗標來表示借位,這樣就可以做大於32位的位的減法,注意不要忘記設定減法,注意不要忘記設定S尾碼來更改進位元旗標。尾碼來更改進位元旗標。n該指令可用於有符號數或無符號數的減法運算。該指令可用於有符號數或無符號數的減法運算。n指令範例:指令範例:RSC R0,R1,R2 ;R0=R2 R1-!C49ARM指令集指令集-資料處理指令資料處理指令-AND指令指令nAND指令的語法為:指令的語法為:q

56、AND 條件條件S 目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2nAND指令用於在兩個運算元上進行邏輯與運算,並指令用於在兩個運算元上進行邏輯與運算,並把結果放置到目的暫存器中。運算元把結果放置到目的暫存器中。運算元1應是一個暫應是一個暫存器,運算元存器,運算元2可以是一個暫存器,被移位的暫存可以是一個暫存器,被移位的暫存器,或一個立即數。該指令常用於遮罩運算元器,或一個立即數。該指令常用於遮罩運算元1的的某些位。某些位。n指令範例:指令範例:AND R0,R0,3 ;該指令保持R0的0、1位,其餘位清零。50ARM指令集指令集-資料處理指令資料處理指令-ORR指令指令nORR指令

57、的語法為:指令的語法為:qORR 條件條件S 目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2nORR指令用於在兩個運算元上進行邏輯或運算,並指令用於在兩個運算元上進行邏輯或運算,並把結果放置到目的暫存器中。運算元把結果放置到目的暫存器中。運算元1應是一個暫應是一個暫存器,運算元存器,運算元2可以是一個暫存器,被移位的暫存可以是一個暫存器,被移位的暫存器,或一個立即數。該指令常用於設定運算元器,或一個立即數。該指令常用於設定運算元1的的某些位。某些位。n指令範例:指令範例:ORR R0,R0,3 ;該指令設定R0的0、1位,其餘位保持不變。51ARM指令集指令集-資料處理指令資料處理指

58、令-EOR指令指令nEOR指令的語法為:指令的語法為:qEOR條件條件S 目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2nEOR指令用於在兩個運算元上進行邏輯互斥運算,指令用於在兩個運算元上進行邏輯互斥運算,並把結果放置到目的暫存器中。運算元並把結果放置到目的暫存器中。運算元1應是一個應是一個暫存器,運算元暫存器,運算元2可以是一個暫存器,被移位的暫可以是一個暫存器,被移位的暫存器,或一個立即數。該指令常用於反轉運算元存器,或一個立即數。該指令常用於反轉運算元1的某些位。的某些位。n指令範例:指令範例:EOR R0,R0,3 ;該指令反轉R0的0、1位,其餘位保持不變。52ARM指令

59、集指令集-資料處理指令資料處理指令-BIC指令指令nBIC指令的語法為:指令的語法為:qBIC 條件條件S 目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2nBIC指令用於清除運算元指令用於清除運算元1的某些位,並把結果放置的某些位,並把結果放置到目的暫存器中。運算元到目的暫存器中。運算元1應是一個暫存器,運算應是一個暫存器,運算元元2可以是一個暫存器,被移位的暫存器,或一個可以是一個暫存器,被移位的暫存器,或一個立即數。運算元立即數。運算元2為為32位的遮罩,如果在遮罩中設位的遮罩,如果在遮罩中設定了某一位,則清除這一位。未設定的遮罩位保持定了某一位,則清除這一位。未設定的遮罩位保持

60、不變。不變。n指令範例:指令範例:BIC R0,R0,1011 ;該指令清除 R0 中的位 0、1、和 3,其餘的位保持不變。53ARM指令集指令集-乘法指令與乘加指令乘法指令與乘加指令nARM微處理器支援的乘法指令與乘加指令共有微處理器支援的乘法指令與乘加指令共有6條,可分為運算條,可分為運算結果為結果為32位和運算結果為位和運算結果為64位兩類,與前面的資料處理指令不同,位兩類,與前面的資料處理指令不同,指令中的所有運算元、指令中的所有運算元、n目的暫存器必須為通用暫存器,不能對運算元使用立即數或被移目的暫存器必須為通用暫存器,不能對運算元使用立即數或被移位的暫存器,同時,目的暫存器和運算

61、元位的暫存器,同時,目的暫存器和運算元1必須是不同的暫存器。必須是不同的暫存器。n乘法指令與乘加指令共有以下乘法指令與乘加指令共有以下6條:條:qMUL32位元乘法指令位元乘法指令qMLA32位元乘加指令位元乘加指令qSMULL64位元有符號數乘法指令位元有符號數乘法指令qSMLAL64位元有符號數乘加指令位元有符號數乘加指令qUMULL64位元無符號數乘法指令位元無符號數乘法指令qUMLAL64位元無符號數乘加指令位元無符號數乘加指令54ARM指令集指令集-乘法指令與乘加指令乘法指令與乘加指令-MUL指令指令nMUL指令的語法為:指令的語法為:qMUL條件條件S目的暫存器,運算元目的暫存器,

62、運算元1,運算,運算元元2nMUL指令完成將運算元指令完成將運算元1與運算元與運算元2的乘法運的乘法運算,並把結果放置到目的暫存器中,同時可算,並把結果放置到目的暫存器中,同時可以根據運算結果設定以根據運算結果設定CPSR中相應的條件旗中相應的條件旗標位元。其中,運算元標位元。其中,運算元1和運算元和運算元2均為均為32位位元的有符號數或無符號數。元的有符號數或無符號數。n指令範例:指令範例:MULR0,R1,R2;R0=R1 R2MULSR0,R1,R2;R0=R1 R2,同時設定CPSR中的相關條件旗標位元55ARM指令指令集集-乘法指令與乘加指令乘法指令與乘加指令-MLA指令指令nMLA

63、指令的語法為:指令的語法為:qMLA條件條件S目的暫存器,運算元目的暫存器,運算元1,運算元,運算元2,運算元運算元3nMLA指令完成將運算元指令完成將運算元1與運算元與運算元2的乘法運算,再的乘法運算,再將乘積加上運算元將乘積加上運算元3,並把結果放置到目的暫存器,並把結果放置到目的暫存器中,同時可以根據運算結果設定中,同時可以根據運算結果設定CPSR中相應的條中相應的條件旗標位元。其中,運算元件旗標位元。其中,運算元1和運算元和運算元2均為均為32位元位元的有符號數或無符號數。的有符號數或無符號數。n指令範例:指令範例:MLAR0,R1,R2,R3 ;R0=R1 R2+R3MLASR0,R

64、1,R2,R3 ;R0=R1 R2+R3,同時設定CPSR中的相關條件旗標位元56ARM指令集指令集-乘法指令與乘加指令乘法指令與乘加指令-SMULL指令指令nSMULL指令的語法為:指令的語法為:qSMULL條件條件S目的暫存器目的暫存器Low,目的暫存器低目的暫存器低High,運算元運算元1,運算元,運算元2nSMULL指令完成將運算元指令完成將運算元1與運算元與運算元2的乘法運算,的乘法運算,並把結果的低並把結果的低32位元放置到目的暫存器位元放置到目的暫存器Low中,結中,結果的高果的高32位元放置到目的暫存器位元放置到目的暫存器High中,同時可以中,同時可以根據運算結果設定根據運算

65、結果設定CPSR中相應的條件旗標位元。中相應的條件旗標位元。其中,運算元其中,運算元1和運算元和運算元2均為均為32位元的有符號數。位元的有符號數。n指令範例:指令範例:SMULL R0,R1,R2,R3;R0=(R2 R3)的低32位;R1=(R2 R3)的高32位57ARM指令集指令集-乘法指令與乘加指令乘法指令與乘加指令-SMLAL指令指令nSMLAL指令的語法為:指令的語法為:qSMLAL條件條件S目的暫存器目的暫存器Low,目的暫存器目的暫存器低低High,運算元運算元1,運算元,運算元2nSMLAL指令完成將運算元指令完成將運算元1與運算元與運算元2的乘法運算,並把結果的的乘法運算

66、,並把結果的低低32位元同目的暫存器位元同目的暫存器Low中的值相加後又放置到目的暫存器中的值相加後又放置到目的暫存器Low中,結果的高中,結果的高32位元同目的暫存器位元同目的暫存器High中的值相加後又放中的值相加後又放置到目的暫存器置到目的暫存器High中,同時可以根據運算結果設定中,同時可以根據運算結果設定CPSR中中相應的條件旗標位元。其中,運算元相應的條件旗標位元。其中,運算元1和運算元和運算元2均為均為32位元的位元的有符號數。有符號數。n對於目的暫存器對於目的暫存器Low,在指令執行前存放在指令執行前存放64位元加數的低位元加數的低32位位元,指令執行後存放結果的低元,指令執行後存放結果的低32位。位。n對於目的暫存器對於目的暫存器High,在指令執行前存放在指令執行前存放64位元加數位元加數的高的高32位位元,指令執行後存放結果的高元,指令執行後存放結果的高32位。位。n指令範例:指令範例:SMLALR0,R1,R2,R3 ;R0=(R2 R3)的低32位 R0;R1=(R2 R3)的高32位 R158ARM指令集指令集-乘法指令與乘加指令乘法指令與乘加指令-UMUL

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!