版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、既可以認(rèn)為是一個(gè)公司的名字ARM Instruction Set & Assembly Language ProgrammingJianjian SONGSoftware Institute, Nanjing University既可以認(rèn)為是一個(gè)公司的名字ContentnARM Architecture IntroductionnARM Instruction SetnARM Assembly Language Programming既可以認(rèn)為是一個(gè)公司的名字2. ARM Architecture IntroductionnARM (Advanced RISC Machines)n既可
2、以認(rèn)為是一個(gè)公司的名字,也可以認(rèn)為是一類微處理器的通稱,還可以認(rèn)為是一種技術(shù)的名字。nARM公司是一家設(shè)計(jì)公司,是IP (Intellectual Property)供應(yīng)商,靠轉(zhuǎn)讓設(shè)計(jì)許可證由合作伙伴生產(chǎn)各具特色的芯片。nhttp:/既可以認(rèn)為是一個(gè)公司的名字ARM的特點(diǎn)nARM具有RISC體系的一般特點(diǎn):n大量寄存器n絕大多數(shù)操作都在寄存器中進(jìn)行,通過Load/Store的在內(nèi)存和寄存器間傳遞數(shù)據(jù)。n尋址方式簡(jiǎn)單n采用固定長(zhǎng)度的指令格式n此外,n小體積、低功耗、低成本、高性能n16位/32位雙指令集n全球眾多合作伙伴既可以認(rèn)為是一個(gè)公司的名字ARM體系結(jié)構(gòu)的擴(kuò)充nThumb (T varia
3、nt): n16位指令集,用以改善指令密度;nLong Multiplication (M variant): n增加兩條用于長(zhǎng)乘法操作的指令;nDSP (E variant): n用于DSP應(yīng)用的算術(shù)運(yùn)算指令集;nJazeller (J variant): n允許直接執(zhí)行Java字節(jié)碼什么是指令密度?什么是指令密度?執(zhí)行同等操作序列的前提下,單位內(nèi)存空間所容納的機(jī)器指令數(shù)。既可以認(rèn)為是一個(gè)公司的名字ARM處理器系列nARM7系列nARM9系列nARM9E系列nARM10系列nSecureCore系列nIntel StrongARMnIntel XScale既可以認(rèn)為是一個(gè)公司的名字3. AR
4、M Instruction SetnAssembly languagenARM programming modelnARM memory organizationnARM data operationsnARM flow of control既可以認(rèn)為是一個(gè)公司的名字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.既可以認(rèn)為是一個(gè)公司的名字ARM assembly language examplelabel1ADR r4,cLDR r0,r4 ; a commentADR r4,dLDR r1,r4SUB r0,r0,r1 ; comment既可以認(rèn)為是一個(gè)公司的名字ARM指令的一般編碼格式cond00XopcodeSRnRdShifter-operand31
6、 28 27 26 25 24 21 20 19 16 15 12 11 0opcode: 指令操作符編碼cond: 指令執(zhí)行條件編碼S: 指令的操作是否影響CPSR的值Rn: 包含第一個(gè)操作數(shù)的寄存器編碼Rd: 目標(biāo)寄存器編碼Shifter_operand: 第二個(gè)操作數(shù)符號(hào)表示:符號(hào)表示: , , 既可以認(rèn)為是一個(gè)公司的名字ARM Addressing Modes (preliminary)n寄存器尋址n例:ADD R0 , R1 , R2 ; (R1)+(R2)R0n立即數(shù)尋址n例:ADD R3 , R3 , #2 ; (R3)+2R3n寄存器間接尋址n例:LDR R0 , R3 ; (
7、R3)R0n寄存器變址n例:LDR R0 , R1, #4 ; (R1)+4)R0n相對(duì)尋址n例:B rel ; (PC)+offsetPC既可以認(rèn)為是一個(gè)公司的名字Pseudo-opsnSome assembler directives dont correspond directly to instructions:nDefine current address.nReserve storage.nConstants.既可以認(rèn)為是一個(gè)公司的名字ARM programming modelr0r1r2r3r4r5r6r7r8r9r10r11r12r13r14r15 (PC)CPSR310N Z
8、 C V既可以認(rèn)為是一個(gè)公司的名字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.既可以認(rèn)為是一個(gè)公司的名字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.既可以認(rèn)為是一個(gè)公司的名字Instructions OverviewnData instructionsnLoad/Store instructionsnMove InstructionsnComparison instructionsnBranch instructions既可以認(rèn)
10、為是一個(gè)公司的名字ARM data instructionsnBasic format:ADD r0,r1,r2nComputes r1+r2, stores in r0.nImmediate operand:ADD r0,r1,#2nComputes r1+2, stores in r0.既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字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.既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為
13、是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字偽指令nADRnADRcond register, exprn將基于PC的地址值或基于寄存器的地址值讀取到寄存器中 n匯編替換成一條指令nADRLnADRLcond
14、register, exprnADRL偽指令比ADR讀取更大的地址范圍。n匯編替換為兩條指令nLDRnLDRcond register, =expr | label_exprn將一個(gè)32位的常數(shù)或地址值讀取到寄存器中nNOPn空操作,如MOV R0, R0既可以認(rèn)為是一個(gè)公司的名字ARM move instructionsnMOV, MVN : move (negated)MOV r0, r1 ; r0 - r1既可以認(rèn)為是一個(gè)公司的名字ARM comparison instructionsnCMP : comparenCMN : negated comparenTST : bit-wise
15、testnTEQ : bit-wise negated testnThese instructions set only the NZCV bits of CPSR.既可以認(rèn)為是一個(gè)公司的名字ARM branch instructionsnB: BranchnBL: Branch and Link既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字C assignment, contd.SUB r3,r3,r2 ; complete computation of xADR r4,x; get address for xSTR r3,r4; store value of x既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字C assignment, contd.MUL r2,r2,r0 ; compute final value for yADR r4,y ; get address for ySTR
18、r2,r4 ; store y既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字C assign
19、ment, contd.ADR r4,z ; get address for zSTR r1,r4 ; store value for z既可以認(rèn)為是一個(gè)公司的名字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.既可以認(rèn)為是一個(gè)公司的名字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.既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字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 .既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字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.既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字ARM subroutine linkagenBranch and link instruction:BL foonCopies current PC to r14.nTo ret
28、urn from subroutine:MOV r15,r14既可以認(rèn)為是一個(gè)公司的名字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既可以認(rèn)為是一個(gè)公司的名字SummarynLoad/store architecturenMost instructions are RISCy, operate in single cycle.nSome multi-register operations take longer.nAll instructions can be executed conditionally.既可以認(rèn)為是一個(gè)公司的名字4. ARM Assembly Language Programmi
30、ngnWhy and when to use?nAT&T format and Intel formatnGrammar of ARM assembly languagenExamples既可以認(rèn)為是一個(gè)公司的名字Why and when to use?n操作系統(tǒng)內(nèi)核中的底層程序直接與硬件打交道,需要用到的專用指令。nCPU中的特殊指令n頻繁使用代碼的時(shí)間效率n程序的空間效率(如操作系統(tǒng)的引導(dǎo)程序)Refer to “Linux內(nèi)核源代碼情景分析” (浙江大學(xué)出版社)1.5節(jié)既可以認(rèn)為是一個(gè)公司的名字AT&T format and Intel format既可以認(rèn)為是一個(gè)公司的
31、名字Grammar of ARM assembly languagen語句n程序格式既可以認(rèn)為是一個(gè)公司的名字語句n語句n指令n偽操作n宏n語句格式n symbol instruction | directive | pseudo-instruction ;comment 既可以認(rèn)為是一個(gè)公司的名字偽操作n符號(hào)定義偽操作n數(shù)據(jù)定義偽操作n匯編控制偽操作n框架描述偽操作n信息報(bào)告?zhèn)尾僮鱪其它偽操作既可以認(rèn)為是一個(gè)公司的名字關(guān)于變量的偽操作n聲明一個(gè)全局變量,并初始化nGBLA, GBLL, GBLSn聲明一個(gè)局部變量,并初始化nLCLA, LCLL, LCLSn變量賦值nSETA, SETL, SETS既可以認(rèn)為是一個(gè)公司的名字ExampleGBLA objectsize ;聲明一個(gè)全局的算術(shù)變量objectsize SETA 0 xff ;給該變量賦值SPACE objectsize ;使用該變量GBLL statusBstatusB SETL TRUE既可以認(rèn)為是一個(gè)公司的名字關(guān)于數(shù)據(jù)常量的偽操作nEQUnname EQU expr , typen通常在.inc文件中既可以認(rèn)為是一個(gè)公司的名字分配內(nèi)存單元nSPACEnlabel SPACE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年哈爾濱鐵道職業(yè)技術(shù)學(xué)院招聘教師筆試真題
- 白酒產(chǎn)品報(bào)價(jià)方案
- 2024年醫(yī)用衛(wèi)生材料敷料項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告范文
- 病毒預(yù)防的研究報(bào)告
- 病毒新種相關(guān)研究報(bào)告
- 病房緊急呼叫課程設(shè)計(jì)
- 病房呼叫器電子課程設(shè)計(jì)
- 病床呼叫器課程設(shè)計(jì)
- 2024年溫泉水開發(fā)利用項(xiàng)目規(guī)劃申請(qǐng)報(bào)告模板
- 玻璃隔斷施工計(jì)劃方案
- 仿古亭施工方案
- 云南省八年級(jí)《信息技術(shù)》上冊(cè)教案:第2課 探究因特網(wǎng)
- 幼兒園大班數(shù)學(xué)《6的組成與分解》課件
- 消化內(nèi)鏡護(hù)士進(jìn)修匯報(bào)
- 07《車遲國(guó)斗法》-《西游記》故事精講精練
- 年產(chǎn)100萬瓶工業(yè)氣體、醫(yī)用氧氣充裝項(xiàng)目可研報(bào)告
- 單位反恐專項(xiàng)經(jīng)費(fèi)保障制度
- 前程無憂國(guó)企招聘筆試題庫(kù)
- 信息網(wǎng)絡(luò)傳播權(quán)的侵權(quán)認(rèn)定及其保護(hù)
- GB/T 44143-2024科技人才評(píng)價(jià)規(guī)范
- 專題03正比例函數(shù)和反比例函數(shù)(原卷版+解析)
評(píng)論
0/150
提交評(píng)論