第四講 ARM指令系統(3課時)_第1頁
第四講 ARM指令系統(3課時)_第2頁
第四講 ARM指令系統(3課時)_第3頁
第四講 ARM指令系統(3課時)_第4頁
第四講 ARM指令系統(3課時)_第5頁
已閱讀5頁,還剩60頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、No. 1Sep 2007 復習第三講:復習第三講:ARM編程模型和異常處理編程模型和異常處理 ARM指令集第第 四四 講講 ARM指令系統和匯編編程指令系統和匯編編程No. 2Sep 2007ARM 編程模型編程模型ARM存儲器格式:零地址開始字節線型組合存儲器格式:零地址開始字節線型組合ARM的七種工作模式的七種工作模式p用戶模式:用戶模式:USERp系統(高級用戶)模式:系統(高級用戶)模式:SYSTEMp異常模式:異常模式:Supervisor,Undef, About, IRQ,FIQ不同的模式對應不同的寄存器資源和權限不同的模式對應不同的寄存器資源和權限ARM的寄存器組成的寄存器組

2、成影子寄存器的概念影子寄存器的概念R13,R14,R15CPSR/SPSRNo. 3Sep 2007ARM 寄存器組織寄存器組織Usermoder0-r7,r15,andcpsrr8r9r10r11r12r13 (sp)r14 (lr)spsrFIQr8r9r10r11r12r13 (sp)r14 (lr)r15 (pc)cpsrr0r1r2r3r4r5r6r7Userr13 (sp)r14 (lr)spsrIRQUsermoder0-r12,r15,andcpsrr13 (sp)r14 (lr)spsrUndefUsermoder0-r12,r15,andcpsrr13 (sp)r14 (l

3、r)spsrSVCUsermoder0-r12,r15,andcpsrr13 (sp)r14 (lr)spsrAbortUsermoder0-r12,r15,andcpsrThumb stateLow registersThumb stateHigh registersNote: System mode uses the User mode register set No. 4Sep 2007ARM 異??偨Y異??偨Y異常改變指令正常執行的順序異常改變指令正常執行的順序ARM有有7種異常種異常p復位復位p數據中止數據中止(ABOUT)p快速中斷請求快速中斷請求p普通中斷請求普通中斷請求p預取指中

4、止預取指中止(ABOUT)p軟件中斷(軟件中斷(SWI)p未定義指令中止未定義指令中止(UNDEF)一旦異常發生,處理器進入特定模式,跳轉到向量表中的一旦異常發生,處理器進入特定模式,跳轉到向量表中的異常處理程序入口異常處理程序入口每種異常都有一個優先級每種異常都有一個優先級中斷是一種特殊的異常中斷是一種特殊的異常No. 5Sep 2007Vector TableVector table may be placed at 0 xFFFF0000 on ARM720T and ARM9/10 family devicesFIQIRQ(Reserved)Data AbortPrefetch Abo

5、rtSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140 x100 x0C0 x080 x040 x00異常處理異常處理 When an exception occurs, the ARM:p Copies CPSR into SPSR_p Sets appropriate CPSR bits l If core currently in Thumb state thenuARM state is entered.l Mode field bits l Interrupt disable bits (if appropriat

6、e)p Stores the return address in LR_p Sets PC to vector address To return, exception handler needs to:p Restore CPSR from SPSR_p Restore PC from LR_ This can only be done in ARM state.No. 6Sep 2007異常返回時候異常返回時候PC指針的調整指針的調整 SWI和未定義指令異常是由當前執行的指令產生的和未定義指令異常是由當前執行的指令產生的 ,當,當SWI和未定義和未定義指令異常產生時,程序計數器指令異常產生

7、時,程序計數器PC的值還未更新,它指向當前指令后面的值還未更新,它指向當前指令后面第第2條指令:條指令: MOV PC ,LR 當當IRQ和和FIQ異常產生時,程序計數器異常產生時,程序計數器PC的值已經更新,它指向當前的值已經更新,它指向當前指令后面第指令后面第3條指令。條指令。 SUBS PC , LR ,4 當發生指令預取中止異常時,程序要返回到該有問題的指令處,重新讀取并當發生指令預取中止異常時,程序要返回到該有問題的指令處,重新讀取并執行該指令。因此指令預取中止異常處理程序返回到產生該指令預取中止異執行該指令。因此指令預取中止異常處理程序返回到產生該指令預取中止異常的指令處常的指令處

8、 SUBS PC ,LR ,4 數據訪問中止異常是由數據訪問指令產生的,當數據訪問中止異常產數據訪問中止異常是由數據訪問指令產生的,當數據訪問中止異常產生時,程序計數器生時,程序計數器PC的值已經更新,它指向當前指令后面的第的值已經更新,它指向當前指令后面的第3條指條指令。令。SUBS PC ,LR , 8 No. 7Sep 2007復習第三講:ARM編程模型和異常處理 ARM指令集指令集第第 四四 講講 ARM指令系統和匯編編程指令系統和匯編編程No. 8Sep 2007ARM指令集的特點指令集的特點 所有的所有的ARM指令都是指令都是32位寬位寬,在存儲器中以,在存儲器中以4字節的邊界對齊

9、,字節的邊界對齊,THUMB指令指令16位寬,位寬,2字節邊界對齊字節邊界對齊 LOAD/STORE架構架構,包含非常強大的多寄存器,包含非常強大的多寄存器Load和和Store指令指令 指令可條件執行指令可條件執行 ARM指令的分類指令的分類p 數據處理指令數據處理指令p 分支指令分支指令p 數據傳送指令(訪問存儲器)數據傳送指令(訪問存儲器)p 其他指令其他指令l 軟件中斷軟件中斷SWI指令指令l 程序狀態寄存器指令程序狀態寄存器指令Thumb指令集具有靈活、小巧的特點ARM指令集支持ARM核所有的特性,具有高效、快速的特點No. 9Sep 2007No. 10Sep 2007 ARM是三

10、地址指令格式,指令的基本格式如下:4.2 指令集介紹指令集介紹ARM指令集指令集基本基本指令格式指令格式 S , 其中號內的項是必須的,號內的項是可選的。各項的說明如下:opcode:指令助記符;cond:執行條件;S:是否影響CPSR寄存器的值;Rd:目標寄存器; Rn:第1個操作數的寄存器;operand2:第2個操作數;指令語法指令語法目標寄存器(目標寄存器(Rd)源寄存器源寄存器1(Rn)源寄存器源寄存器2(Rm)ADD r3,r1,r2r3r1r2例:No. 11Sep 2007 ARM指令可以通過增加條件執行碼后綴來條件執行指令可以通過增加條件執行碼后綴來條件執行 采用這種方法可以

11、減少分支指令,就可增加代碼密度,提高運行性能采用這種方法可以減少分支指令,就可增加代碼密度,提高運行性能,看下面的例子,看下面的例子p CMP r3,#0 CMP r3,#0 BEQ skip ADDNE r0,r1,r2 ADD r0,r1,r2 skip在缺省的情況下,數據處理指令不會影響到在缺省的情況下,數據處理指令不會影響到 狀態寄存器中狀態寄存器中的標識位。的標識位。但是條件碼標志可由但是條件碼標志可由“S”來設置,來設置,CMP不需要加不需要加“S”loop SUBS r1,r1,#1 BNE loop if Z flag clear then branch decrement r

12、1 and set flags 條件執行和標志位條件執行和標志位No. 12Sep 2007條件執行舉例條件執行舉例 CMP r0, #0 ADDEQ r1, r1, #1 ADDNE r2, r2, #1 .if (r0 = 0) r1 = r1 + 1;else r2 = r2 + 1;C source code CMP r0, #0 BNE else ADD r1, r1, #1 B endelse ADD r2, r2, #1end .ARM instructions 5 instructions 5 words 5 or 6 cycles 3 instructions 3 words

13、 3 cyclesNo. 13Sep 2007 條件碼條件碼No. 14Sep 2007ARM數據處理指令指令編碼指令執行的條件碼I用于區別立即數(I為1)和寄存器移位(I為0)opcode數據處理指令操作碼第二操作數Rd目標寄存器Rn第一操作數寄存器S設置條件碼,與指令中的S位對應帶進位加法ADC0101帶進位減法指令SBC0110帶進位逆向減法指令RSC0111位測試指令TST1000相等測試指令TEQ1001比較指令CMP1010負數比較指令CMN1011邏輯或操作指令ORR1100數據傳送MOV1101位清除指令BIC1110數據非傳送MVN1111加法運算指令ADD0100逆向減法指

14、令RSB0011減法運算指令SUB0010邏輯異或操作指令EOR0001邏輯與操作指令AND0000說明指令助記符操作碼opcode操作碼功能表No. 15Sep 2007寄存器寄存器, 可以選擇移位可以選擇移位p移位的值移位的值:l 5 bit 整數整數l 另外一個寄存器的值另外一個寄存器的值立即數立即數p8位立即數位立即數, 范圍是范圍是 0-255.l 一個一個8位的常數循環右移偶數位位的常數循環右移偶數位p32位常數載入寄存器以后使用位常數載入寄存器以后使用Result操作數操作數 1BarrelShifter操作數操作數 2ALU第二個操作數桶型移位器第二個操作數桶型移位器 ADDr

15、0, r1, r2ADDr0, r1, r2, LSL#7ADDr0, r1, r2, LSL r3ADDr0, r1, #0 x4ENo. 16Sep 2007數據處理指令的二進制編碼數據處理指令的二進制編碼cond0 0operand 2#opcodeSRnRd3128 27 26 25 2421 20 1916 1512 110目標寄存器第一個操作數寄存器條件碼算術/邏輯功能代碼8-bit 立即數12511870#rotRm11765430#shiftRm025118765430RsSh010Sh立即數立即數表示的移位位數移位類型第二個操作數寄存器寄存器表示的移位位數No. 17Sep

16、2007 ARM指令中的操作數不能包含指令中的操作數不能包含32位的立即數常量位的立即數常量p 所有的所有的ARM指令都固定為指令都固定為32位長位長 數據處理指令中有數據處理指令中有12位可以用作第二個操作數,位位可以用作第二個操作數,位7:0是是8位立即數,位位立即數,位11:8是移位的位數是移位的位數 規則是規則是“每個立即數是由一個每個立即數是由一個8位的常數循環右移偶數位得到位的常數循環右移偶數位得到” 研究表明:在操作數中大部分是小數據,只有很少是大數據研究表明:在操作數中大部分是小數據,只有很少是大數據50% of all constants lie between the ra

17、nge -15 and +15 and 90% lie in the range -511 and +511. Will vary depending on the application.07118immed_8ShifterRORrotx2立即數立即數 (1)No. 18Sep 2007 舉例舉例: 匯編器把立即數轉換為移位的方式匯編器把立即數轉換為移位的方式p MOV r0,#4096; uses 0 x40 ror 26p ADD r1,r2,#0 xFF0000; uses 0 xFF ror 16 不能夠按照規則生成的立即數會導致錯誤不能夠按照規則生成的立即數會導致錯誤031ror

18、 #0 range 0-0 xff000000 step 0 x01000000 ror #8 range 0-0 x000000ff step 0 x00000001 range 0-0 x000003fc step 0 x00000004 ror #30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0立即數立即數 (2)No. 19Sep 2007 使用偽指令

19、裝載一個使用偽指令裝載一個32位的常量位的常量pLDR rd, =const 匯編編譯以后兩種結果匯編編譯以后兩種結果:p直接直接 MOV or MVN 指令產生一個立即數指令產生一個立即數orp在數據區內存放常量在數據區內存放常量p使用使用LDR指令指令 把把PC偏移量的地址上的數據載入寄存器偏移量的地址上的數據載入寄存器 舉例舉例pLDR r0,=0 xFF=MOV r0,#0 xFFpLDR r0,=0 x55555555=LDR r0,PC,#Imm12DCD 0 x5555555532位常數的生成位常數的生成No. 20Sep 2007桶型移位器桶型移位器DestinationCF0

20、DestinationCFLSL : 邏輯左移邏輯左移ASR: 算術右移算術右移邏輯左移,算術乘2算術除2 保留符號位DestinationCF.0DestinationCFLSR : 邏輯右移邏輯右移ROR: 循環右移循環右移算術除2Bit rotate with wrap aroundfrom LSB to MSBDestinationRRX: 帶擴展的循環右移帶擴展的循環右移Single bit rotate with wrap aroundfrom CF to MSBCFADD r5,r5,r3,LSL r2; r5:=r5+r3 2r2No. 21Sep 2007助記符助記符說明說明

21、操作操作條件碼位置條件碼位置MOV Rd,operand2數據傳送數據傳送RdRdoperand2 operand2 MOVcondSMOVcondSMVN Rd,operand2MVN Rd,operand2數據非傳送數據非傳送RdRd(operand2)(operand2)MVNcondSMVNcondSARM數據處理指令數據傳送 MOV指令將8位圖立即數或寄存器傳送到目標寄存器(Rd),可用于移位運算等操作。指令格式如下: MOVcondS Rd,operand2 MOV指令舉例如下: MOVR11,#0 xF000000B;R1= 0 xF000000B MOVR0,R1;R0=R1

22、MOVSR3,R1,LSL #2;R3=R12,并影響標志位 MOVPC,LR;PC=LR,子程序返回 No. 22Sep 2007助記符助記符說明說明操作操作條件碼位置條件碼位置MOV Rd,operand2MOV Rd,operand2數據傳送數據傳送RdRdoperand2 operand2 MOVcondSMOVcondSMVN Rd,operand2數據非傳送數據非傳送RdRd(operand2)(operand2)MVNcondSMVNcondSARM數據處理指令數據傳送 MVN指令將8位圖立即數或寄存器(operand2)按位取反后傳送到目標寄存器(Rd),因為其具有取反功能,所

23、以可以裝載范圍更廣的立即數。指令格式如下: MVNcondS Rd,operand2 MVN指令舉例如下: MVNR1,#0 xFF;R1=0 xFFFFFF00 MVNR1,R2;將R2按位取反,結果存到R1No. 23Sep 2007助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2加法運算指令加法運算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondSSUB Rd, Rn, operand2SUB Rd, Rn, operand2減法運算指令減法運算指令RdRdRn-operand2Rn-operand2SUBco

24、ndSSUBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向減法指令逆向減法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2帶進位加法帶進位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, operand2SBC Rd, Rn, operand2帶進位減法指令帶進位減法指令RdRdRn-operand2-Rn-operand2-(NOT)Carr

25、y(NOT)CarrySBCcondSSBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2帶進位逆向減法帶進位逆向減法指令指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondSARM數據處理指令算術運算 加法運算指令ADD指令將operand2的值與Rn的值相加,結果保存到Rd寄存器。指令格式如下: ADDcondS Rd,Rn,operand2 應用示例: ADDS R1,R1,#1020;R1=R1+1020,并影響標志位 ADD R1,R1,R2,LSL #2;R1=

26、R1+R22 No. 24Sep 2007助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2加法運算指令加法運算指令RdRdRn+operand2Rn+operand2ADDcondSADDcondSSUB Rd, Rn, operand2減法運算指令減法運算指令RdRdRn-operand2Rn-operand2SUBcondSSUBcondSRSB Rd, Rn, operand2RSB Rd, Rn, operand2逆向減法指令逆向減法指令RdRdoperand2-Rnoperand2-RnRSBcondSR

27、SBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2帶進位加法帶進位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSADCcondSSBC Rd, Rn, operand2SBC Rd, Rn, operand2帶進位減法指令帶進位減法指令RdRdRn-operand2-Rn-operand2-(NOT)Carry(NOT)CarrySBCcondSSBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2帶進位逆向減法帶進位逆向減法指令指令RdRdoperand2-

28、Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondSARM數據處理指令算術運算 減法運算指令SUB指令用寄存器Rn減去operand2,結果保存到Rd中。指令格式如下: SUBcondS Rd,Rn,operand2 應用示例: SUBSR0,R0,#240;R0=R0-240 ,并影響標志位 SUBSR2,R1,R2;R2=R1-R2 ,并影響標志位 No. 25Sep 2007助記符助記符說明說明操作操作條件碼位置條件碼位置ADD Rd, Rn, operand2ADD Rd, Rn, operand2加法運算指令加法運算指令RdRdRn+

29、operand2Rn+operand2ADDcondSADDcondSSUB Rd, Rn, operand2SUB Rd, Rn, operand2減法運算指令減法運算指令RdRdRn-operand2Rn-operand2SUBcondSSUBcondSRSB Rd, Rn, operand2逆向減法指令逆向減法指令RdRdoperand2-Rnoperand2-RnRSBcondSRSBcondSADC Rd, Rn, operand2ADC Rd, Rn, operand2帶進位加法帶進位加法RdRdRn+operand2+CarryRn+operand2+CarryADCcondSA

30、DCcondSSBC Rd, Rn, operand2SBC Rd, Rn, operand2帶進位減法指令帶進位減法指令RdRdRn-operand2-Rn-operand2-(NOT)Carry(NOT)CarrySBCcondSSBCcondSRSC Rd, Rn, operand2RSC Rd, Rn, operand2帶進位逆向減法帶進位逆向減法指令指令RdRdoperand2-Rn-operand2-Rn-(NOT)Carry(NOT)CarryRSCcondSRSCcondSARM數據處理指令算術運算 逆向減法運算指令RSB指令將operand2的值減去Rn,結果保存到Rd中。指

31、令格式如下: RSBcondS Rd,Rn,operand2 應用示例: RSB R3,R1,#0 xFF00 ;R3=0 xFF00-R1 RSBS R1,R2,R2,LSL #2 ;R1=(R210, 則執行本指令 No. 31Sep 2007助記符助記符說明說明操作操作條件碼位置條件碼位置CMP Rn, operand2CMP Rn, operand2比較指令比較指令標志標志N N、Z Z、C C、V VRn-Rn-operand2operand2CMPcondCMPcondCMN Rn, operand2負數比較指令負數比較指令標 志標 志 N N 、 Z Z 、 C C 、V VRn

32、+operand2Rn+operand2CMNcondCMNcondTST Rn, operand2TST Rn, operand2位測試指令位測試指令標志標志N N、Z Z、C C、V VRn & Rn & operand2operand2TSTcondTSTcondTEQ Rn, operand2TEQ Rn, operand2相等測試指令相等測試指令標志標志N N、Z Z、C C、V VRn Rn operand2operand2TEQcondTEQcondARM數據處理指令比較指令 負數比較指令CMN指令使用寄存器Rn的值加上operand2的值,根據操作的結果更新CP

33、SR中的相應條件標志位,以便后面的指令根據相應的條件標志來判斷是否執行。指令格式如下: CMNcondRn, operand2 應用示例: CMNR0,#1 ; R0+1,判斷R0是否為1的補碼;如果是,則設置Z標志位No. 32Sep 2007助記符助記符說明說明操作操作條件碼位置條件碼位置CMP Rn, operand2CMP Rn, operand2比較指令比較指令標志標志N N、Z Z、C C、V VRn-Rn-operand2operand2CMPcondCMPcondCMN Rn, operand2CMN Rn, operand2負數比較指令負數比較指令標 志標 志 N N 、 Z

34、 Z 、 C C 、V VRn+operand2Rn+operand2CMNcondCMNcondTST Rn, operand2位測試指令位測試指令標志標志N N、Z Z、C C、V VRn & Rn & operand2operand2TSTcondTSTcondTEQ Rn, operand2TEQ Rn, operand2相等測試指令相等測試指令標志標志N N、Z Z、C C、V VRn Rn operand2operand2TEQcondTEQcondARM數據處理指令比較指令 位測試指令TST指令將寄存器Rn的值與operand2的值按位作邏輯“與”操作,根據操作的

35、結果更新CPSR中的相應條件標志位,以便后面的指令根據相應的條件標志來判斷是否執行。指令格式如下: TSTcond Rn, operand2 應用示例: TSTR0,#0 x01; 判斷R0的最低位是否為0 TSTR1,#0 x0F; 判斷R1的低4位是否為0 No. 33Sep 2007助記符助記符說明說明操作操作條件碼位置條件碼位置CMP Rn, operand2CMP Rn, operand2比較指令比較指令標志標志N N、Z Z、C C、V VRn-Rn-operand2operand2CMPcondCMPcondCMN Rn, operand2CMN Rn, operand2負數比較

36、指令負數比較指令標 志標 志 N N 、 Z Z 、 C C 、V VRn+operand2Rn+operand2CMNcondCMNcondTST Rn, operand2TST Rn, operand2位測試指令位測試指令標志標志N N、Z Z、C C、V VRn & Rn & operand2operand2TSTcondTSTcondTEQ Rn, operand2相等測試指令相等測試指令標志標志N N、Z Z、C C、V VRn Rn operand2operand2TEQcondTEQcondARM數據處理指令比較指令 相等測試指令TEQ指令將寄存器Rn的值與ope

37、rand2的值按位作邏輯“異或”操作,根據操作的結果更新CPSR中的相應條件標志位,以便后面的指令根據相應的條件標志來判斷是否執行。指令格式如下: TEQcond Rn, operand2 應用示例: TEQR0,R1; 比較R0與R1是否相等 (不影響V位和C位)No. 34Sep 2007ARM指令乘法指令乘法指令編碼指令執行的條件碼Opcode乘法指令操作碼S設置條件碼,與指令中的S位對應Rm為被乘數寄存器Rn/RdLo為MLA指令相加的寄存器或64位乘法指令的目標寄存器(低32位)Rd/RdHi為目標寄存器或64位乘法指令的目標寄存器(高32位)Rs為乘數寄存器64位有符號乘加指令位有

38、符號乘加指令SMLAL11164位有符號乘法指令位有符號乘法指令SMULL11064位無符號乘加指令位無符號乘加指令UMLAL10164位無符號乘法指令位無符號乘法指令UMULL10032位乘加指令位乘加指令MLA00132位乘法指令位乘法指令MUL000說明說明指令助記符指令助記符操作碼操作碼opcode操作碼功能表No. 35Sep 2007助記符助記符說明說明操作操作條件碼位置條件碼位置MUL Rd,Rm,Rs3232位乘法指令位乘法指令RdRdRmRm* *Rs (RdRs (RdRm)Rm)MULcondSMULcondSMLA Rd,Rm,Rs,RnMLA Rd,Rm,Rs,Rn3

39、232位乘加指令位乘加指令RdRdRmRm* *Rs+Rn (RdRs+Rn (RdRm)Rm)MLAcondSMLAcondSUMULL RdLo,RdHi,Rm,RsUMULL RdLo,RdHi,Rm,Rs6464位無符號乘法指令位無符號乘法指令(RdLo,RdHi) (RdLo,RdHi) RmRm* *Rs Rs UMULLcondSUMULLcondSUMLAL RdLo,RdHi,Rm,RsUMLAL RdLo,RdHi,Rm,Rs6464位無符號乘加指令位無符號乘加指令(RdLo,RdHi) (RdLo,RdHi) RmRm* *Rs+(RdLo,RdHi)Rs+(RdLo,R

40、dHi)UMLALcondSUMLALcondSSMULL RdLo,RdHi,Rm,RsSMULL RdLo,RdHi,Rm,Rs6464位有符號乘法指令位有符號乘法指令(RdLo,RdHi) (RdLo,RdHi) RmRm* *RsRsSMULLcondSSMULLcondSSMLAL RdLo,RdHi,Rm,RsSMLAL RdLo,RdHi,Rm,Rs6464位有符號乘加指令位有符號乘加指令(RdLo,RdHi) (RdLo,RdHi) RmRm* *Rs+(RdLo,RdHi)Rs+(RdLo,RdHi)SMLALcondSSMLALcondSARM指令乘法指令 32位乘法指令M

41、UL指令將Rm和Rs中的值相乘,結果的低32位保存到Rd中。 Rd,Rm,Rs不能為R15。只影響CPSR中的N位和Z位,不影響V,C不確定。指令格式如下:MULcondS Rd,Rm,Rs 應用示例: MUL R1,R2,R3 ;R1=R2R3 MULS R0,R3,R7 ;R0=R3R7,影響CPSR中的N位和Z位 No. 36Sep 2007數據處理指令數據通路動作數據處理指令數據通路動作Dataaddress registerincrementregistersRdRnPCRmas ins.as instructionmultdata outdata ini. pipe(a) r eg

42、ister - register operationsaddress registerincrem entregistersR dR nP Cas ins.as instructionm ultdata outdata ini. pipe7:0(b) register - immediate operationsNo. 37Sep 2007ARM分支指令指令編碼分支指令B/BL指令編碼格式指令執行的條件碼L區別B指令(L為0)和BL指令(L為1)24位有符號立即數(偏移量)分支指令BX指令編碼格式指令執行的條件碼Rm目標地址寄存器,該寄存器裝載跳轉地址No. 38Sep 2007助記符助記符說

43、明說明操作操作條件碼位置條件碼位置B label分支指令分支指令PCPClabellabelBcondBcondBL labelBL label帶鏈接的分支指令帶鏈接的分支指令LRLRPC-4PC-4,PCPClabellabelBLcondBLcondBX RmBX Rm帶狀態切換的分支指令帶狀態切換的分支指令PCPCRmRm,切換處理器狀態,切換處理器狀態BXcondBXcondARM指令分支指令 分支指令B指令,該指令跳轉范圍限制在當前指令的32M字節地址內(ARM指令為字對齊,最低2位地址固定為0)。指令格式如下:Bcond Label 應用示例: B WAITA; 跳轉到WAITA標

44、號處 B0 x1234; 跳轉到絕對地址0 x1234處 No. 39Sep 2007BL LabelxxxxxxLabelxxxMOV PC,LRAddr1Addr2xxxxxxLRPC助記符助記符說明說明操作操作條件碼位置條件碼位置B labelB label分支指令分支指令PCPClabellabelBcondBcondBL label帶鏈接的分支指令帶鏈接的分支指令LRLRPC-4PC-4,PCPClabellabelBLcondBLcondBX RmBX Rm帶狀態切換的分支指令帶狀態切換的分支指令PCPCRmRm,切換處理器狀態,切換處理器狀態BXcondBXcondARM指令分支

45、指令 帶鏈接的分支指令BL指令適用于子程序調用,使用該指令后,下一條指令的地址被拷貝到R14(即LR) 連接寄存器中,然后跳轉到指定地址運行程序。跳轉范圍限制在當前指令的32M字節地址內。指令格式如下:BLcond LabelAddr1LabelAddr2Addr21.當程序執行到BL跳轉指令時,硬件將下一條指令的地址Addr2裝入LR寄存器,并把跳轉地址裝入程序計數器(PC)2. 程序跳轉到目標地址Label繼續執行,當子程序執行結束后,將LR寄存器內容存入PC,返回調用函數繼續執行 應用示例(調用子程序): BL LabelNo. 40Sep 2007助記符助記符說明說明操作操作條件碼位置

46、條件碼位置B labelB label分支指令分支指令PCPClabellabelBcondBcondBL labelBL label帶鏈接的分支指令帶鏈接的分支指令LRLRPC-4PC-4,PCPClabellabelBLcondBLcondBX Rm帶狀態切換的分支指令帶狀態切換的分支指令PCPCRmRm,切換處理器狀態,切換處理器狀態BXcondBXcondARM指令分支指令 帶狀態切換的分支指令BX指令,該指令可以根據跳轉地址(Rm)的最低位來切換處理器狀態。其跳轉范圍限制在當前指令的32M字節地址內(ARM指令為字對齊,最低2位地址固定為0)。指令格式如下:BXcond Rm跳轉地址

47、跳轉地址Rm0跳轉后跳轉后CPSR標志標志T位位處理器狀態處理器狀態00ARM11ThumbNo. 41Sep 2007分支指令數據通路操作分支指令數據通路操作address registerincrementregistersPClsl #2= A + Bmultdata outdata ini. pipe23:0(a) 1st cycle - compute branch targetaddress registerincrementregistersR 14PCshifter= Amultdata outdata ini. pipe(b) 2nd cycle - save return

48、addressNo. 42Sep 2007數據傳送指令數據傳送指令單寄存器的單寄存器的Load和和Store指令指令這些指令在這些指令在ARM寄存器和存儲器之間提供單數據項傳送,寄存器和存儲器之間提供單數據項傳送,數據可以是字節、字、半字;數據可以是字節、字、半字;多寄存器的多寄存器的Load和和Store指令指令 這些指令的靈活性比單寄存器傳送質量差,但是可以使得這些指令的靈活性比單寄存器傳送質量差,但是可以使得大量數據有效傳遞,用于保存上下文或者搬運數據大量數據有效傳遞,用于保存上下文或者搬運數據單寄存器交換指令單寄存器交換指令 一條指令實現寄存器和存儲器中的數據交換,使用比較少一條指令實

49、現寄存器和存儲器中的數據交換,使用比較少ARM的數據傳送指令:的數據傳送指令:都是寄存器間接尋址,基址偏移和都是寄存器間接尋址,基址偏移和基址變址基址變址(在寄存器地址的基礎上增加立即數或者寄存器偏在寄存器地址的基礎上增加立即數或者寄存器偏移量)移量)LDR r0,r1No. 43Sep 2007助記符助記符說明說明操作操作條件碼位置條件碼位置LDR Rd,addressing 加載字數據加載字數據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondLDRcondLDRB Rd,addressing 加載無符號字節數據加載無符號字節數

50、據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondBLDRcondBLDRT Rd,addressing以用戶模式加載字數以用戶模式加載字數據據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondTLDRcondTLDRBT Rd, addressing 以用戶模式加載無符以用戶模式加載無符號字節數據號字節數據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondBTLDRcondBTLDRH Rd, addres

51、sing 加載無符號半字數據加載無符號半字數據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondHLDRcondHLDRSB Rd, addressing 加載有符號字節數據加載有符號字節數據RdRdaddressingaddressing,addressingaddressing索引索引LDRcondSBLDRcondSBLDRSH Rd, addressing加載有符號半字數據加載有符號半字數據 Rdaddressing,addressing索引索引 LDRcondSH ARM存儲器訪問指令單寄存器加載No. 44Sep 200

52、7助記符助記符說明說明操作操作條件碼位置條件碼位置STR Rd, addressing 存儲字數據存儲字數據addressingaddressingRdRd,addressingaddressing索引索引STRcondSTRcondSTRB Rd,addressing 存儲字節數據存儲字節數據addressingaddressingRdRd,addressingaddressing索引索引STRcondBSTRcondBSTRT Rd,addressing 以用戶模式存儲字數以用戶模式存儲字數據據addressingaddressingRdRd, addressingaddressing索引

53、索引STRcondTSTRcondTSTRBT Rd,addressing 以用戶模式存儲字節以用戶模式存儲字節數據數據addressingaddressingRdRd,addressingaddressing索引索引STRcondBTSTRcondBTSTRH Rd,addressing 存儲半字數據存儲半字數據addressing addressing RdRd,addressingaddressing索引索引STRcondHSTRcondHARM存儲器訪問指令單寄存器存儲 LDR/STR指令用于對內存變量的訪問、內存緩沖區數據的訪問、外圍部件的控制操作等。若使用LDR指令加載數據到PC寄

54、存器,則實現程序跳轉功能,這樣也就實現了程序散轉。 所有單寄存器加載/存儲指令可分為“字和無符號字節加載存儲指令”和“半字和有符號字節加載存儲指令。No. 45Sep 2007No. 46Sep 2007ARM存儲器訪問指令單寄存器存儲LDR和STR字和無符號字節加載/存儲指令 LDR/STR指令尋址非常靈活,它由兩部分組成,其中一部分為一個基址寄存器,可以為任一個通用寄存器;另一部分為一個地址偏移量。地址偏移量有以下3種格式: 立即數。立即數可以是一個無符號的數值。這個數據可以加到基址寄存器,也可以從基址寄存器中減去這個數值。 如:LDR R1,R0,#0 x12 ;R1-R0+0 x12寄

55、存器。寄存器中的數值可以加到基址寄存器,也可以從基址寄存器中減去這個數值。 如:LDR R1,R0,R2 ; R1-R0+R2 LDR R1,R0,-R2 ; R1-R0-R2寄存器及移位常數。寄存器移位后的值可以加到基址寄存器,也可以從基址寄存器中減去這個數值。 如:LDR R1,R0,R2,LSL #2 ;R1R3-R8/4,存儲R0的最低有效字節2.加載/存儲半字和有符號字節指令LDRSB R1,R0,R3;將R0+R3地址上的字節數據存入R1,;高24位用符號擴展LDRH R6,R2,#2;將R2指向地址的半字數據存入R6,高16位用0擴展;讀出后,R2=R2+2STRH R1,R0,

56、#2!;將R1的半字數據保存到R0+2地址,;只修改低2字節數據,然后R0=R0+2ARM存儲器訪問指令單寄存器存儲No. 49Sep 2007STR 指令數據通路操作指令數據通路操作address registerincrementregistersRnPClsl #0= A / A + B / A - Bmultdata outdata ini. pipe11:0 (a) 1st cycle - compute addressaddress registerincrementregistersRnRdshifter= A + B / A - BmultPCbyte?data ini. pi

57、pe(b) 2nd cycle - store data & auto-indexNo. 50Sep 2007 塊數據傳送塊數據傳送批量加載和存儲指令(批量加載和存儲指令(LDM/STM)允許在存儲器和)允許在存儲器和16個個寄存器之間傳送數據寄存器之間傳送數據p寄存器的傳送順序不能任意指定寄存器的傳送順序不能任意指定p低地址的內容總是傳送到低寄存器低地址的內容總是傳送到低寄存器l 例:例:LDMIA r10!, r0,r1,r4基址寄存器指定了訪問存儲器的地址基址寄存器指定了訪問存儲器的地址這些指令有效的用于:這些指令有效的用于:p在存儲器中傳送數據塊在存儲器中傳送數據塊p在堆棧中保

58、存和恢復上下文在堆棧中保存和恢復上下文r1r4r0r10IncreasingAddressNo. 51Sep 2007 LDM/STM操作操作 LDM(或(或STM)條件條件類型類型 基址寄存器基址寄存器! ,例:,例: LDMIA r12!, r0-r11; 由基址寄存器所指示的一片連續存儲器到寄存器列表所指示的多個寄由基址寄存器所指示的一片連續存儲器到寄存器列表所指示的多個寄存器之間傳送數據存器之間傳送數據 p IA每次傳送后地址加每次傳送后地址加1;p IB每次傳送前地址加每次傳送前地址加1;p DA每次傳送后地址減每次傳送后地址減1;p DB每次傳送前地址減每次傳送前地址減1; 比較大

59、的中斷延遲比較大的中斷延遲IAr1IncreasingAddressr4r0r1r4r0r1r4r0r1r4r0r10IBDADBLDMxx r10, r0,r1,r4STMxx r10, r0,r1,r4Base Register (Rb)No. 52Sep 2007 內存塊拷貝內存塊拷貝 可以使得可以使得STM/LDM指令自動更新基址寄存器指令自動更新基址寄存器p 對于對于IA、IB,寄存器的內容加,寄存器的內容加4p 對于對于DA、DB,寄存器的內容減,寄存器的內容減4 例:例:p ;r12指向源數據的起始地址指向源數據的起始地址p ;r14指向源數據的結束地址指向源數據的結束地址p ;

60、r13指向目標數據的起始地址指向目標數據的起始地址p Loop LDMIA r12!, r0-r11; p STMIA r13!, r0-r11;p CMP r12, r14p BNEloopIncreasingMemoryr13r14r12No. 53Sep 2007 堆棧操作堆棧操作 ARM的堆棧操作由塊傳送指令來實現的堆棧操作由塊傳送指令來實現p STMFD(Push) 批量存儲滿遞減堆棧批量存儲滿遞減堆棧p LDMFD(Pop)批量加載滿遞減堆棧)批量加載滿遞減堆棧 例:例:STMFD sp!, r4-r7, lr;現場保存,將;現場保存,將r4r7、lr入棧入棧 例:例:LDMFD sp!, r4-r7, pc;恢復現場,異常處理返

溫馨提示

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

評論

0/150

提交評論