指令集选择若对系统的性能有较高要求,应使用32位的存储系统和ARM指令若对系统的成本及功耗有较高要求,则应使用16位的存储系统和Thumb指令集。若两者结合使用,充分发挥其各自的优点,会取得更好的效果。If (X ≥= 0)tccarmccreturnx,C SourceelseCodereturn-x,iabsCMPro,#0iabsCMPr0,#0BGERSBLTrO,rO,#OreturnAssemblyNEGro,roMovpc.IrCodeMOVreturnpc,IrCodeInstructionSize (Bytes)NormalizedComparisonARM3121.0480.67Thumb16/77
指令集选择 • 若对系统的性能有较高要求,应使用32位的存储系统和 ARM指令 • 若对系统的成本及功耗有较高要求,则应使用16位的存储 系统和Thumb指令集。 • 若两者结合使用,充分发挥其各自的优点,会取得更好的 效果。 llxx@ustc.edu.cn 16/77
ARM指令的寻址方式·立即寻址一ADDRO,R0,#0x3f:R0-R0+0x3f一有效立即数:立即数扩展161512.11875433128272625242322212019Data ProcessingRdCondOpcodeRnOperand200PSRTranster寄存器寻址寄存器间接寻址:LDRRO,[R1]基址变址寻址多寄存器寻址:LDMIARO,【R1,R2,R3,R4}相对寻址·堆栈寻址17/77llxx@ustc.edu.cn
ARM指令的寻址方式 • 立即寻址 – ADD R0,R0,#0x3f ;R0←R0+0x3f – 有效立即数:立即数扩展 • 寄存器寻址 llxx@ustc.edu.cn 17/77 • 寄存器间接寻址:LDR R0,[R1] • 基址变址寻址 • 多寄存器寻址:LDMIA R0,{R1,R2,R3,R4} • 相对寻址 • 堆栈寻址
ARM基址变址寻址·将基址寄存器的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。一“变址”:改变基址寄存器的内容·变址寻址方式常用于访问某基地址附近的地址单元。变址方式:前变址、自动变址(“回写”!)、后变址(“回写”!)、偏移变址;RO←[R1十4],前,未变址!LDR RO,[R1,#4]LDR RO,[R1,#4]!;RO←[R1+4]、R1R1+4,自;R0←[R1]、R1←R1+4,后LDRRO,[R1],#4;RO←[R1十R2],偏,未变址!LDR RO,[R1,R2]18/77Ilxx@ustc.edu.cn
ARM基址变址寻址 • 将基址寄存器的内容与指令中给出的地址偏移量 相加,从而得到一个操作数的有效地址。 – “变址” :改变基址寄存器的内容 • 变址寻址方式常用于访问某基地址附近的地址单元。 • 变址方式: llxx@ustc.edu.cn 18/77 前变址、自动变址(“回写”!)、后变址(“回写”!)、 偏移变址 LDR R0,[R1,#4] ;R0←[R1+4],前,未变址! LDR R0,[R1,#4]! ;R0←[R1+4]、R1←R1+4,自 LDR R0,[R1],#4 ;R0←[R1]、R1←R1+4,后 LDR R0,[R1,R2] ;R0←[R1+R2],偏,未变址!
Pre or Post Indexed AddressingPre-indexed:STRr0,[rl,#12]roOffsetSource0x5Register120x5-0x20cforSTRr1Base0x2000x200Register.....Auto-updateform:STRr0,Ir1,#12]!Post-indexed:STRro,[r1],#12....r1OffsetUpdatedBase0x20c120x20cRegisterroSource0x5Registerr1OriginalforSTRBase0x50x2000x200Register
0x5 r1 0x200 Base Register 0x200 r0 0x5 Source Register for STR Offset 12 0x20c Auto-update form: STR r0,[r1,#12]! Pre or Post Indexed Addressing? • Pre-indexed: STR r0,[r1,#12] 0x5 r1 0x200 Original Base Register 0x200 r0 0x5 Source Register for STR Offset 12 0x20c r1 0x20c Updated Base Register Auto-update form: STR r0,[r1,#12]! • Post-indexed: STR r0,[r1],#12
栈操作图示STMFD SP!,STMED SP!,STMFA SP!,STMEA SP!,(r0,rl,r3-r5)[r0,rl,r3-r5](r0,rl,r3-r5][r0,rl,r3-r5]0x418r5r5r4r3r4r3r1r1roOIdSP→r50x400OldSProOldSPOldSP→r5r4r4r3r1r3r1roroSP0x3e820/77Ilxx@ustc.edu.cn
栈操作图示 llxx@ustc.edu.cn 20/77