单击此处编辑母版标题样式单击此处编辑母版副标题样式既可以认为是一个公司的名字1ARM Instruction Set & Assembly Language ProgrammingnJianjian SONGnSoftware Institute, Nanjing UniversityContentnARM Architecture IntroductionnARM Instruction SetnARM Assembly Language Programming既可以认为是一个公司的名字2. ARM Architecture IntroductionnARM (Advanced RISC Machines)n既可以认为是一个公司的名字,也可以认为是一类微处理器的通称,还可以认为是一种技术的名字nARM公司是一家设计公司,是IP (Intellectual Property)供应商,靠转让设计许可证由合作伙伴生产各具特色的芯片nhttp:/既可以认为是一个公司的名字ARM的特点nARM具有RISC体系的一般特点:n大量寄存器n绝大多数操作都在寄存器中进行,通过Load/Store的在内存和寄存器间传递数据。
n寻址方式简单n采用固定长度的指令格式n此外,n小体积、低功耗、低成本、高性能n16位/32位双指令集n全球众多合作伙伴既可以认为是一个公司的名字ARM体系结构的扩充nThumb (T variant): n16位指令集,用以改善指令密度;nLong Multiplication (M variant): n增加两条用于长乘法操作的指令;nDSP (E variant): n用于DSP应用的算术运算指令集;nJazeller (J variant): n允许直接执行Java字节码什么是指令密度?执行同等操作序列的前提下,单位内存空间所容纳的机器指令数既可以认为是一个公司的名字ARM处理器系列nARM7系列nARM9系列nARM9E系列nARM10系列nSecureCore系列nIntel StrongARMnIntel XScale既可以认为是一个公司的名字3. ARM Instruction SetnAssembly languagenARM programming modelnARM memory organizationnARM data operationsnARM flow of control既可以认为是一个公司的名字Assembly languagenWhat is assembly language and why assembly language?nOne-to-one with instructions (more or less).nBasic features:nOne instruction per line.nLabels provide names for addresses (usually in first column).nInstructions often start in later columns.nColumns run to end of line.既可以认为是一个公司的名字ARM assembly language examplelabel1ADR r4,cLDR r0,r4 ; a commentADR r4,dLDR r1,r4SUB r0,r0,r1 ; comment既可以认为是一个公司的名字ARM指令的一般编码格式cond00XopcodeSRnRdShifter-operand31 28 27 26 25 24 21 20 19 16 15 12 11 0opcode: 指令操作符编码cond: 指令执行条件编码S: 指令的操作是否影响CPSR的值Rn: 包含第一个操作数的寄存器编码Rd: 目标寄存器编码Shifter_operand: 第二个操作数符号表示: , , 既可以认为是一个公司的名字ARM Addressing Modes (preliminary)n寄存器寻址n例:ADD R0 , R1 , R2 ; (R1)+(R2)R0n立即数寻址n例:ADD R3 , R3 , #2 ; (R3)+2R3n寄存器间接寻址n例:LDR R0 , R3 ; (R3)R0n寄存器变址n例:LDR R0 , R1, #4 ; (R1)+4)R0n相对寻址n例:B rel ; (PC)+offsetPC既可以认为是一个公司的名字Pseudo-opsnSome assembler directives dont correspond directly to instructions:nDefine current address.nReserve storage.nConstants.既可以认为是一个公司的名字ARM programming modelr0r1r2r3r4r5r6r7r8r9r10r11r12r13r14r15 (PC)CPSR310N Z C V既可以认为是一个公司的名字ARM status bitsnEvery arithmetic, logical, or shifting operation sets CPSR bits:nN (negative), Z (zero), C (carry), V (overflow).nExamples: n-1 + 1 = 0: NZCV = 0110.n231-1+1 = -231: NZCV = 0101.既可以认为是一个公司的名字ARM data typesnWord is 32 bits long.nWord can be divided into four 8-bit bytes.nARM addresses can be 32 bits long.nAddress refers to byte.nAddress 4 starts at byte 4.nCan be configured at power-up as either little- or big-endian mode.既可以认为是一个公司的名字Instructions OverviewnData instructionsnLoad/Store instructionsnMove InstructionsnComparison instructionsnBranch instructions既可以认为是一个公司的名字ARM data instructionsnBasic format:ADD r0,r1,r2nComputes r1+r2, stores in r0.nImmediate operand:ADD r0,r1,#2nComputes r1+2, stores in r0.既可以认为是一个公司的名字ARM data instructionsnADD, ADC : add (w. carry)nSUB, SBC : subtract (w. carry)nRSB, RSC : reverse subtract (w. carry)nMUL, MLA : multiply (and accumulate)nAND, ORR, EORnBIC : bit clearnLSL, LSR : logical shift left/rightnASL, ASR : arithmetic shift left/rightnROR : rotate rightnRRX : rotate right extended with C既可以认为是一个公司的名字Data operation varietiesnLogical shift:nfills with zeroes.nArithmetic shift:nfills with zeroes or ones.nRRX performs 33-bit rotate, including C bit from CPSR above sign bit.既可以认为是一个公司的名字ARM load/store instructionsnLDR, LDRH, LDRB : load (half-word, byte)nSTR, STRH, STRB : store (half-word, byte)nAddressing modes:nregister indirect : LDR r0,r1nwith second register : LDR r0,r1,-r2nwith constant : LDR r0,r1,#4既可以认为是一个公司的名字ARM ADR pseudo-opnCannot refer to an address directly in an instruction.nGenerate value by performing arithmetic on PC.nADR pseudo-op generates instruction required to calculate address:ADR r1,FOO既可以认为是一个公司的名字伪指令nADRnADRcond register, exprn将基于PC的地址值或基于寄存器的地址值读取到寄存器中 n汇编替换成一条指令nADRLnADRLcond register, exprnADRL伪指令比ADR读取更大的地址范围。
n汇编替换为两条指令nLDRnLDRcond register, =expr | label_exprn将一个32位的常数或地址值读取到寄存器中nNOPn空操作,如MOV R0, R0既可以认为是一个公司的名字ARM move instructionsnMOV, MVN : move (negated) MOV r0, r1 ; r0 - r1既可以认为是一个公司的名字ARM comparison instructionsnCMP : comparenCMN : negated comparenTST : bit-wise testnTEQ : bit-wise negated testnThese instructions set only the NZCV bits of CPSR.既可以认为是一个公司的名字ARM branch instructionsnB: BranchnBL: Branch and Link既可以认为是一个公司的名字Example: C assignmentsnC: x = (a + b) - c;nAssembler:ADR r4,a; get address for aLDR r0,r4; get value of aADR r4,b; get address for b, reusing r4LDR r1,r4; get value of bADD r3,r0,r1 ; compute a+bADR r4,c; get address for cLDR r2,r4; get value of c既可以认为是一个公司的名字C assignment, contd.SUB r3,r3,r2 ; complete computation of xADR r4,x; get address for xSTR r3,r4; store value of x既可以认为是一个公司的名字Example: C assignmentnC:y = a*(b+c);nAssembler:ADR r4,b ; get address for bLDR r0,r4 ; get value of bADR r4,c ; get address for cLDR r1,r4 ; get value of cADD r2,r0,r1 ; compute partial resultADR r4,a ; get address for aLDR r0,r4 ; get value of a既可以认为是。