版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、既可以认为是一个公司的名字ARM Instruction Set & Assembly Language ProgrammingJianjian SONGSoftware Institute, Nanjing University既可以认为是一个公司的名字ContentnARM Architecture IntroductionnARM Instruction SetnARM Assembly Language Programming既可以认为是一个公司的名字2. ARM Architecture IntroductionnARM (Advanced RISC Machines)n既可
2、以认为是一个公司的名字,也可以认为是一类微处理器的通称,还可以认为是一种技术的名字。nARM公司是一家设计公司,是IP (Intellectual Property)供应商,靠转让设计许可证由合作伙伴生产各具特色的芯片。nhttp:/既可以认为是一个公司的名字ARM的特点nARM具有RISC体系的一般特点:n大量寄存器n绝大多数操作都在寄存器中进行,通过Load/Store的在内存和寄存器间传递数据。n寻址方式简单n采用固定长度的指令格式n此外,n小体积、低功耗、低成本、高性能n16位/32位双指令集n全球众多合作伙伴既可以认为是一个公司的名字ARM体系结构的扩充nThumb (T varia
3、nt): 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. AR
4、M 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 p
5、rovide 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
6、 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 ; (
7、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
8、 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 byt
9、es.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既可以认
10、为是一个公司的名字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 (an
11、d 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 perform
12、s 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既可以认为
13、是一个公司的名字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
14、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
15、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, reus
16、ing 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
17、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既可以认为是一个公司的名字C assignment, contd.MUL r2,r2,r0 ; compute final value for yADR r4,y ; get address for ySTR
18、r2,r4 ; store y既可以认为是一个公司的名字Example: C assignmentnC:z = (a 2) | (b & 15);nAssembler:ADR r4,a ; get address for aLDR r0,r4 ; get value of aMOV r0,r0,LSL 2 ; perform shiftADR r4,b ; get address for bLDR r1,r4 ; get value of bAND r1,r1,#15 ; perform ANDORR r1,r0,r1 ; perform OR既可以认为是一个公司的名字C assign
19、ment, contd.ADR r4,z ; get address for zSTR r1,r4 ; store value for z既可以认为是一个公司的名字Additional addressing modesnBase-plus-offset addressing:LDR r0,r1,#16nLoads from location r1+16nAuto-indexing increments base register:LDR r0,r1,#16!nPost-indexing fetches, then does offset:LDR r0,r1,#16nLoads r0 from
20、r1, then adds 16 to r1.既可以认为是一个公司的名字ARM flow of controlnAll operations can be performed conditionally, testing CPSR:nEQ, NE, CS, CC, MI, PL, VS, VC, HI, LS, GE, LT, GT, LEnBranch operation:B #100nCan be performed conditionally.既可以认为是一个公司的名字Example: if statementnC: if (a b) x = 5; y = c + d; else x =
21、 c - d;nAssembler:; compute and test conditionADR r4,a ; get address for aLDR r0,r4 ; get value of aADR r4,b ; get address for bLDR r1,r4 ; get value for bCMP r0,r1 ; compare a = b, branch to false block既可以认为是一个公司的名字If statement, contd.; true blockMOV r0,#5 ; generate value for xADR r4,x ; get addre
22、ss for xSTR r0,r4 ; store xADR r4,c ; get address for cLDR r0,r4 ; get value of cADR r4,d ; get address for dLDR r1,r4 ; get value of dADD r0,r0,r1 ; compute yADR r4,y ; get address for ySTR r0,r4 ; store yB after ; branch around false block既可以认为是一个公司的名字If statement, contd.; false blockfblock ADR r4
23、,c ; get address for cLDR r0,r4 ; get value of cADR r4,d ; get address for dLDR r1,r4 ; get value for dSUB r0,r0,r1 ; compute a-bADR r4,x ; get address for xSTR r0,r4 ; store value of xafter .既可以认为是一个公司的名字Example: Conditional instruction implementation; true blockMOVLT r0,#5 ; generate value for xAD
24、RLT r4,x ; get address for xSTRLT r0,r4 ; store xADRLT r4,c ; get address for cLDRLT r0,r4 ; get value of cADRLT r4,d ; get address for dLDRLT r1,r4 ; get value of dADDLT r0,r0,r1 ; compute yADRLT r4,y ; get address for ySTRLT r0,r4 ; store y既可以认为是一个公司的名字Example: switch statementnC: switch (test) ca
25、se 0: break; case 1: nAssembler:ADR r2,test ; get address for testLDR r0,r2 ; load value for testADR r1,switchtab ; load address for switch tableLDR r15,r1,r0,LSL #2 ; index switch tableswitchtab DCD case0DCD case1.既可以认为是一个公司的名字Example: FIR filternC:for (i=0, f=0; iN; i+)f = f + ci*xi;nAssembler; lo
26、op initiation codeMOV r0,#0 ; use r0 for IMOV r8,#0 ; use separate index for arraysADR r2,N ; get address for NLDR r1,r2 ; get value of NMOV r2,#0 ; use r2 for f既可以认为是一个公司的名字FIR filter, cont.dADR r3,c ; load r3 with base of cADR r5,x ; load r5 with base of x; loop bodyloop LDR r4,r3,r8 ; get ciLDR r
27、6,r5,r8 ; get xiMUL r4,r4,r6 ; compute ci*xiADD r2,r2,r4 ; add into running sumADD r8,r8,#4 ; add one word offset to array indexADD r0,r0,#1 ; add 1 to iCMP r0,r1 ; exit?BLT loop ; if i N, continue既可以认为是一个公司的名字ARM subroutine linkagenBranch and link instruction:BL foonCopies current PC to r14.nTo ret
28、urn from subroutine:MOV r15,r14既可以认为是一个公司的名字Nested subroutine callsnNesting/recursion requires coding convention:f1LDR r0,r13 ; load arg into r0 from stack; call f2()STR r13!,r14 ; store f1s return adrsSTR r13!,r0 ; store arg to f2 on stackBL f2 ; branch and link to f2; return from f1()SUB r13,#4 ;
29、pop f2s arg off stackLDR r13!,r15 ; restore register and return既可以认为是一个公司的名字SummarynLoad/store architecturenMost instructions are RISCy, operate in single cycle.nSome multi-register operations take longer.nAll instructions can be executed conditionally.既可以认为是一个公司的名字4. ARM Assembly Language Programmi
30、ngnWhy and when to use?nAT&T format and Intel formatnGrammar of ARM assembly languagenExamples既可以认为是一个公司的名字Why and when to use?n操作系统内核中的底层程序直接与硬件打交道,需要用到的专用指令。nCPU中的特殊指令n频繁使用代码的时间效率n程序的空间效率(如操作系统的引导程序)Refer to “Linux内核源代码情景分析” (浙江大学出版社)1.5节既可以认为是一个公司的名字AT&T format and Intel format既可以认为是一个公司的
31、名字Grammar of ARM assembly languagen语句n程序格式既可以认为是一个公司的名字语句n语句n指令n伪操作n宏n语句格式n symbol instruction | directive | pseudo-instruction ;comment 既可以认为是一个公司的名字伪操作n符号定义伪操作n数据定义伪操作n汇编控制伪操作n框架描述伪操作n信息报告伪操作n其它伪操作既可以认为是一个公司的名字关于变量的伪操作n声明一个全局变量,并初始化nGBLA, GBLL, GBLSn声明一个局部变量,并初始化nLCLA, LCLL, LCLSn变量赋值nSETA, SETL, SETS既可以认为是一个公司的名字ExampleGBLA objectsize ;声明一个全局的算术变量objectsize SETA 0 xff ;给该变量赋值SPACE objectsize ;使用该变量GBLL statusBstatusB SETL TRUE既可以认为是一个公司的名字关于数据常量的伪操作nEQUnname EQU expr , typen通常在.inc文件中既可以认为是一个公司的名字分配内存单元nSPACEnlabel SPACE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025买卖合同范本(宅基地)
- 科技赋能下的宠物托儿所财务风险识别与防范
- 课题申报参考:量子信息产业劳动力教育需求调查与教育资源开发
- 课题申报参考:劳动力流动、代际居住分离与农村养老服务整合研究
- 知识经济时代的终身学习与发展
- 2025年华师大新版七年级生物下册月考试卷含答案
- 2025年湘教新版九年级历史下册阶段测试试卷含答案
- 2025年浙教版必修1历史下册月考试卷
- 2025年人教A新版七年级科学下册阶段测试试卷含答案
- 2025年苏教新版九年级历史下册月考试卷
- 【语文】第23课《“蛟龙”探海》课件 2024-2025学年统编版语文七年级下册
- 加强教师队伍建设教师领域学习二十届三中全会精神专题课
- 2024-2025学年人教版数学七年级上册期末复习卷(含答案)
- 2024年决战行测5000题言语理解与表达(培优b卷)
- 四年级数学上册人教版24秋《小学学霸单元期末标准卷》考前专项冲刺训练
- 2025年慢性阻塞性肺疾病全球创议GOLD指南修订解读课件
- (完整版)减数分裂课件
- 银行办公大楼物业服务投标方案投标文件(技术方案)
- 第01讲 直线的方程(九大题型)(练习)
- 微粒贷逾期还款协议书范本
- 人教版七年级上册数学全册课时练习带答案
评论
0/150
提交评论