更好理解 mmu ,下载 10.1.4.123 中的 mmu.pdf

56
事项 更好理解 MMU ,下载 http://10.1.4.1 23 中的 mmu.pdf

Upload: amory

Post on 16-Mar-2016

142 views

Category:

Documents


14 download

DESCRIPTION

事项. 更好理解 MMU ,下载 http://10.1.4.123 中的 mmu.pdf. 更好说明寻址过程. 为什么我们要学指令?. C 语言: y=a*(b+c) ARM 指令实现: ADR R4,b LDR R0,[R4] ADR r4,c LDR r1,[r4] ADD r2,r0,r1 - PowerPoint PPT Presentation

TRANSCRIPT

  • MMUhttp://10.1.4.123mmu.pdf

  • C y=a*(b+c) ARMADR R4,b LDR R0,[R4] ADR r4,c LDR r1,[r4] ADD r2,r0,r1 ADR r4,a LDR r0,[r4] MUL r2,r2,r0 ADR r4,y STR r2,[r4]

  • ARM Load/Store ARM ARM ARM ARM XScale

  • 5.2.2 ARMARM{cond}CPSR ARMNZCV

  • 5.2.3 Load/Store Load/Store Load/Store Load/Store Load/Store PLD

  • Load/Store

    ARM(8)(32): 1zero offset LDR | STR {}{B}{T} Rd ,[Rn ] ((Rn))Rd Rn 2pre-indexed offset LDR | STR{} {B} Rd , [Rn , < offset >] {!} ;Rn+ offsetRd RnRnRnR15 3programrelative LDR | STR{} Rd , LABEL LABELRd PCPCRn 4post-indexed offset LDR | STR{} {B} {T} Rd , [Rn ], < offset > RnRnRnRnR15LDR Rd , [Rn ] , offset ((Rn))Rd(Rn)+offsetRn

  • 1) R0 LDR R1 , UARTADD ; UARTR1 STRB R0 , [R1] UARTADD & &1000000 UART 2) LDR R8[R10] (( R10))R8 LDRNE R2[R5#960] Z1((R5)+960)R2(R5)+960R5 STR R2[R9#consta-struc] ; consta-struc1~4095 STRB R0[R3-R8ASR #2] R0(R3-R8/4)R0R3R8 STR R5[R7]#-8 R5(R7) R7-8R7 LDR R0localdata ; lacaldata

  • Load/Store ARM168 1zero offset LDR | STR{} H | SH | SB Rd,[Rn]2pre-indexed offsetLDR | STR{} H | SH | SB Rd , [Rn , ] {!}3pregramrelatveLDR | STR{} H | SH | SB Rd , LABEL4post-indexed offsetLDR | STR{}H | SH | SB Rd , [Rn ], H | SH | SB SH LDR H SB LDR

  • LDREQSH R11[R6] R11[R6]1632 LDRH R1[R0#22] R1[R0+22]1632 STRH R4[R0+R1] R0+R1R0 LDRSB R6constf constf

  • Load/Store ARM(64) 1zero offset LDR | STR{} D Rd,[Rn]2pre-indexed offsetLDR | STR{} D Rd , [Rn , ] {!}3pregramrelatveLDR | STR{} D Rd , LABEL4post-indexed offsetLDR | STR{} D Rd , [Rn ],

  • Load/Store R0~R15 1 LDM | STM{} Rn{!} , 2SPSRCPSRPC LDM {}< mode > Rn{!} , ^ 3PC LDM | STM{}< mode > Rn , ^

  • 1 STMFD R13! , {R0-R2 , R14} LDMFD R13! , {R0-R2 , PC} 2 LDMIA R8{R0R2R9} ; ((R8))R0 ; ((R8)+4)R2 ; ((R8)+8)R9 STMDB R1{R3R6R11R12} ; (R3)R1- 4 ; (R4)R1- 8 ; (R5)R1- 12 ; (R6)R1- 16 ; (R11)R1- 20 ; (R12)R1- 24 ; (R1)- 24R1 STMFD R13{R0R4-R7LR} LDMFD R13{R0R4-R7PC} ; 3 SUB1 STMFD SP! , {R0-R2 , R14} R0~R2 ; BL label ; ; LDMFD SP! , {R0-R2 , R15} R0~R2

  • PLD Cache PLDPreLoaDPLDPLD [Rn{offset}]Rn Offset Rn PLD [R9#-2481]

  • SWP{} {B} Rd , Rm , Rn ((Rn))Rd , (Rm)Rn; nm ,d , ;d=m, ,Rm((Rn))

  • 5.2.4 ARM QADDQSUBQDADDQDSUB

  • ARMflexible second operandOperand2

  • 1# immed-8r 8pattern3202482628300xFF0xFF0000xF000000F0x1010xFF040xFF0030xFFFFFFFF 2Rm {, shift} Rm ARMRm Shift Rm

  • 32 { } {S} Rd , Rn , Operand2 ADDSUBRSBADCSBCRSCANDORREORBIC MOVMVNCMPCMNTSTTEQ

  • 1 ADD R2,R1,R3 R1+(R3)R2 2 SUBSR2, R2, #1 ; R2-1R2 BEQ LABEL ; 0LABEL 3 R05ADD R0, R0, R0, LSL #2 ; (R0)*5R0 4 R010 ADD R0, R0, R0, LSL #2 ; (R0)*10R0 MOV R0, R0, LSL #1

  • CLZCount Leading ZerosRmleading zerosRd032[31]10 CLZ {} Rd , Rm RdARMRdR15 Rm

  • QADDQSUBQDADDQDSUB DSP22 {} Rd, Rm, RnQADDQSUBQDADDQDSUB Rd Rm,Rn

  • DSP//-231~231-1//231-1231-1/-231-231 QDADDQDSUBSATRm+SATRn*2QSAT

  • QADD R0R1R9 ;SAT(R1+R9)R0QDSUBLT R9R0R1 ;SAT(R0-SAT((R9)*2))R9

  • 5.2.5ARMARMARMThumbBBLBXBLX /BXBLX

  • / BBL32MBLR14 B{L} {} Label

  • BLBranch and LinkR14LRLabelBLL=1 , PCR14,PC+offset PC BBL22532MLabel

  • 1) CMP R0 , #5 ; R05 BLT SUB1 SUB1 BGE SUB2 SUB2 2) BL SUB SUB ; SUB . ; MOV PC , R14 ; 3) MOV R0 , #10 ; LOOP SUBS R0 , #1 ; 1 BNE LOOP ; 0 , . ;

  • BXBLX BXBLXThumbARMThumbThumbARM 1 B{L}X {} Rm 2 BLX RmRm[0]Rm[0]1CPSRTThumbRm[0]0[1]1

  • 1 BX R0 ; R0 ; R0[0]1 Thumb : 2 ThumbCODE32 ARM BLX TSUB ; Thumb TSUBCODE16 ; Thumb TSUB ;Thumb TSUB BX R14 ; ARM

  • 5.2.6ARM ARMCPU

  • ARM16 ARM CDP MRC ARM MCRARM LDC STC

  • CDPCDP2(CDPCoprocessor Data operation) CDP {} CP#, opcodel, CRd, CRn, CRm{,opcode2} CDP2 CP#, opcodel, CRd, CRn, CRm{,opcode2} CP# pnn0~15 Opcodel CRn,CRm,CRn opcode2

  • CDP p1,10,c1,c2,c3 ;1C2C310 C1

    CDPEQ p2,5,c1,c2,c3,2 ;Z12C2C352C1

  • LDCSTC 1 LDC | STC{} {L} , CRd , [Rn ] 2 LDC | STC{} {L} , CRd , [Rn , #offset ]{!} LDC2 | STC2 , CRd , [Rn , #offset ]{!} 3 LDC | STC{} {L} , CRd , [Rn] , #offset LDC2 |STC2 , CRd , [Rn] , #offset

  • 1 LDC p6 , CR1 , [R4] ; 6CR1 R4 2 LDC p6 , CR4 , [R2 , 4] ; 6CR4R2+4 3 STC p8 , CR8 , [R2 , #4] ! ; 8CR8R2+4 R2=R2+4 4 STC p6 , CR9 , [R2] , #-16 ; 6CR9 R2 R2=R2-16

  • MRCMRC2 MCRMCR2 ARM 1ARM MRC{} , , Rd , CRn , CRm { , } MRC2 < CP#> , , Rd , CRn , CRm { , } 2ARM MCR{} < CP#> , , Rd , CRn , CRm { , } MCR2 < CP#> , , Rd , CRn , CRm { , }CDPCDP2

  • 1 MRC p15 , 5, R4 , C0 , C2, 3 ; 15C0C253CPU42 MCR p14 , 1, R7 , C7 , C12, 6 ; 14CPU7 1614C12

  • MCRRMRRC 2ARM MRRC{} < CP#>, , Rd, CRn, CRmMCRR{} < CP#>, , Rd, CRn, CRm

  • 5.2.7ARM SWI (v5T)

  • MRS{} Rd , CPSR | SPSR RdRdR15R=0CPSRR=1SPSR MRSMSRPSRQSPSR

  • MRS R0 , CPSR CPSRR0 MRS R3, SPSR SPSRR3

  • MSR{} CPSR_f | SPSR_f , < #immed_8r > MSR{} CPSR_ | SPSR_ , RmC: PSR07X: PSR815SPSR1623F: PSR2431immed_8r832Rm

  • 1 NZCV MSR CPSR_f , #&f0000000 80 2 CNZV MRS R0 , CPSR CPSRR0 ORR R0 , R0 , #&20000000 ; R029 MSR CPSR_f , R0 R0CPSR

    3 IRQ MRS R0 , CPSR ; CPSRR0 BIC R0 , R0 , #&1f R05 ORR R0 , R0 , #&12 IRQ MSR CPSR_c , R0 R0CPSR

  • SWI SWI{} immed_24immed_240-224-124 SWI0x08CPSRSPSRSWI

  • (v5T)BKPT immed_16 immed_160~6553616 BKPTARM v5

  • 5.2.8XScale MIA MIAPH MIAxy MARMRA

  • MIA MIAMLAMIAacc0 MIA {} acc0 , Rm , Rs Rs Rm acc0 0

  • MIAPH MIAPH321616acc0 MIA {} acc0 , Rm , Rs Rs Rm acc0 0

  • MIAxy MIAxy16x=1Rm16x=0Rm16y=1Rs16y=0Rs16 MIAxy{} acc0 , Rm , Rs Rs Rm xy 00 MIABB 01 MIABT 10 MIATB 11 MIATT acc0 0

  • MARMRA ARM2MAR{} acc0 , RdLo , RdHi MRA{} RdLo , RdHi , acc0 RdHi RdLo acc0 0MAR RdLo acc0[310]RdHiacc0[3932]MRA acc0[310] RdLoacc0[3932]RdHi

  • ARM ARM ARM Thumb ARM

  • 5.3 Thumb 015310ADDS r2,r2,#1ADD r2,#132-bit ARM 16-bit Thumb Thumb 16-bit ARM65% ARM ThumbARMThumbBX

  • ARMThumbTThumbARM7TDMICPSRTThumbARMThumbARMARMARMThumbBXThumbThumbARMThumb BXARMThumbARMThumbARMThumbARMThumbR0~R7R13R14R15PCThumbR8~R15CPSR