四ARM指令集ppt课件_第1页
四ARM指令集ppt课件_第2页
四ARM指令集ppt课件_第3页
四ARM指令集ppt课件_第4页
四ARM指令集ppt课件_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1嵌入式系统设计与实例开发嵌入式系统设计与实例开发基于基于3232位微处置器与实时操位微处置器与实时操作系统作系统第四讲第四讲 ARM ARM指令集与编程指令集与编程北京航空航天大学北京航空航天大学机器人研讨所机器人研讨所王田苗魏洪兴王田苗魏洪兴2指令长度l指令集可以是以下任一种指令集可以是以下任一种l32 bits 32 bits 长长 (ARM(ARM形状形状) )l16 bits 16 bits 长长 (Thumb (Thumb 形状形状) )lARM7TDMI ARM7TDMI 支持支持3 3种数据类型种数据类型l字节字节 (8-bit)(8-bit)l半字半字 (16-bit)(16

2、-bit)l字字 (32-bit)(32-bit)l字必需被排成字必需被排成4 4个字节边境对齐个字节边境对齐, ,半字必需被陈列成半字必需被陈列成2 2个字节边境个字节边境对齐对齐 3ARM 指令集的特点l向后兼容:新版本添加指令,并坚持指令向后兼容;向后兼容:新版本添加指令,并坚持指令向后兼容;lLoad-store Load-store 构造构造* *lload/store load/store 从存储器中读某个值从存储器中读某个值, ,操作完后再将其放回存储器操作完后再将其放回存储器中中l只对存放在存放器的数据进展处置;只对存放在存放器的数据进展处置;l对于存储器中的数据,只能运用对于

3、存储器中的数据,只能运用load/storeload/store指令进展存取指令进展存取4指令格式l指令格式l3 地址指令格式 l在ARM形状中运用l例指令语法指令语法目标寄存器(目标寄存器(Rd)源寄存器源寄存器1(Rn)源寄存器源寄存器2(Rm)ADD r3,r1,r2r3r1r25ARM 指令分类l数据处置指令数据处置指令 运用和改动存放器的值运用和改动存放器的值l数据传送指令数据传送指令 把存储器的值拷贝到存放器中把存储器的值拷贝到存放器中 (load) or (load) or 把存放器中的值拷贝到存储器中把存放器中的值拷贝到存储器中(store)(store)l控制流指令控制流指令

4、 l分支分支l分支和链接分支和链接, , 保管前往的地址保管前往的地址, ,以恢复最先的次序以恢复最先的次序l软件中断指令软件中断指令l程序形状存放器指令程序形状存放器指令l协处置器指令协处置器指令6ARM指令编码格式l阐明阐明lCondl指令执行的条件编码指令执行的条件编码lOpcodel指令操作符编码指令操作符编码lSl决议指令的操作能否影响决议指令的操作能否影响CPSR的值的值lRdl操作目的存放器编码操作目的存放器编码lRnl包含第一操作数的存放器编码包含第一操作数的存放器编码lShifter_operandl表示第二操作数表示第二操作数cond001opcodesRnRdShifte

5、r_operand 31 28 27 25 24 21 20 19 16 15 12 11 8 7 07ARM指令集8数据处置指令 - 1l数据处置指令的类别数据处置指令的类别l算术操作算术操作l按位逻辑操作按位逻辑操作l存放器移位操作存放器移位操作l比较操作比较操作l操作数操作数: 32-bits : 32-bits 宽宽; ;有有3 3种指定操作数的方式种指定操作数的方式l来自存放器来自存放器l第二操作数可以是常数第二操作数可以是常数( (立刻数立刻数) )l移位存放器操作数移位存放器操作数l结果结果: 32-bits : 32-bits 宽宽, , 放在存放器中放在存放器中l长乘法产生长

6、乘法产生6464位结果位结果9数据处置指令 2*cond0 0operand 2#opcodeSRnRd3128 27 26 25 2421 20 1916 1512 110目的存放器第一操作存放器设置操作码算术/逻辑功能8-bit 立刻数125118 70#rotRm11765 430#shiftRm025118 765 430RsSh010Shimmediate alignmentimmediate shift lengthshift typesecond operand register移位存放器长度10数据处置指令 - 3Opcode24:21MnemonicMeaningEffect

7、0000ANDLogical bit-wise ANDRd := Rn AND Op20001EORLogical bit-wise exclusive ORRd := Rn EOR Op20010SUBSubtractRd := Rn - Op20011RSBReverse subtractRd := Op2 - Rn0100ADDAddRd := Rn + Op20101ADCAdd with carryRd := Rn + Op2 + C0110SBCSubtract with carryRd := Rn - Op2 + C - 10111RSCReverse subtract with

8、 carryRd := Op2 - Rn + C - 11000TSTTestScc on Rn AND Op21001TEQTest equivalenceScc on Rn EOR Op21010CMPCompareScc on Rn - Op21011CMNCompare negatedScc on Rn + Op21100ORRLogical bit-wise ORRd := Rn OR Op21101MOVMoveRd := Op21110BICBit clearRd := Rn AND NOT Op21111MVNMove negatedRd := NOT Op211数据处置指令

9、- 4ADD r0, r1, r2r0 := r1 + r2ADC r0, r1, r2r0 := r1 + r2 + CSUB r0, r1, r2r0 := r1 - r2SBC r0, r1, r2r0 := r1 - r2 + C - 1RSB r0, r1, r2r0 := r2 r1RSC r0, r1, r2r0 := r2 r1 + C - 1算术操作算术操作按位逻辑操作按位逻辑操作AND r0, r1, r2r0 := r1 and r2ORR r0, r1, r2r0 := r1 or r2EOR r0, r1, r2r0 := r1 xor r2BIC r0, r1, r

10、2r0 := r1 and (not) r2存放器移位存放器移位MOV r0, r2r0 := r2MVN r0, r2r0 := not r2比较操作比较操作CMP r1, r2set cc on r1 - r2CMN r1, r2set cc on r1 + r2TST r1, r2set cc on r1 and r2TEQ r1, r2set cc on r1 xor r212数据处置指令 - MOVlMOV指令是把一个数指令是把一个数N送到目的存放器中,送到目的存放器中,N可以是存放器,也可以是存放器,也可以是立刻数。可以是立刻数。lMOV指令语法:指令语法:l 指令指令cond S

11、 Rd, Nl例:例:PRE r0= 5 , r2=6l MOV r0, r2l POST r0=6 ,r2=6MOV r0, r2r0 := r2MVN r0, r2r0 := not r213桶形移位器桶形移位器Rd结果N预处置未预处置RmRn14桶形移位器的运用lPRE r0=8, r2=5lMOV r0 ,r2, LSL #2逻辑左移两位:逻辑左移两位:r20) x=1;lCMP r0,#0MOVEQ r1,#0MOVGT r1,#1l运用条件比较指令运用条件比较指令lif (a=4 | a=10) x=0;lCMP r0,#4CMPNE r0,#10MOVEQ r1,#023条件执行

12、l一切的一切的ARM指令都可以指令都可以条条件件执执行行l指令的指令的执执行行与与否取否取决决于于CPSR存放器的存放器的N, Z, C and V标标志位志位l一切的一切的Thumb指令都可以解指令都可以解压压成全部成全部条条件指令件指令lCondition Field in instructionl0000 = EQ - Z set (equal)l0001 = NE - Z clear (not equal)l0010 = CS - C set (unsigned higher or same)l0011 = CC - C clear (unsigned lower)l0100 = MI

13、 - N set (negative)l0101 = PL - N clear (positive or zero)l0110 = VS - V set (overflow)l0111 = VC - V clear (no overflow)l1000 = HI - C set and Z clear (unsigned higher)l1001 = LS - C clear or Z set (unsigned lower or same)l1010 = GE - N set and V set, or N clear and V clear (greater or equal)l1011

14、= LT - N set and V clear, or N clear and V set (less than)l1100 = GT - Z clear, and either N set and V set, or N clear and V clear (greater than)l1101 = LE - Z set, or N set and V clear, or N clear and V set (less than or equal)l1110 = AL - alwaysl1111 = NV - never31 27 0 Cond 24乘法指令集l在存放器在存放器产产生生32

15、位位值值cond0 0 0 0R m3128 2724 2321 20 1916 1512 118 74301 0 0 1R sR n/R dLoR d/R dH im ulS25乘法l例子例子 ( (乘法乘法, , 乘法累加器乘法累加器) )l留意留意l最低最低 32-bits 32-bits 置于结果存放器中置于结果存放器中, ,其他被忽略其他被忽略 l不支持第二立刻操作数不支持第二立刻操作数l结果存放器与源存放器必需不同结果存放器与源存放器必需不同 lif S bit is set the V is preserved and if S bit is set the V is prese

16、rved and the C is rendered meaninglessthe C is rendered meaninglessMUL r4, r3, r2r4 := r3 x r2MLA r4, r3, r2, r1r4 := r3 x r2 + r1 26数据传送指令 - 1l单指令传送单指令传送 (LDR, STR)(LDR, STR)l单字单字(32bit), (32bit), 半字半字(6 bit) (6 bit) 以及字节以及字节(8 bit) (8 bit) 传送传送l寻址寻址l存放器偏移存放器偏移l地址地址 = =基址基址 存放器偏移存放器偏移l立刻数偏移立刻数偏移l地址

17、地址 = = 基址基址 立刻数常数立刻数常数l后变址后变址Post-indexing: modify address after usePost-indexing: modify address after usel前变址前变址Pre-indexing: modify address before usePre-indexing: modify address before usel回写回写l假设能够假设能够, ,更新基址存放器更新基址存放器27单存放器传送指令LDR把一个字装入一个寄存器把一个字装入一个寄存器Rdmem32addressSTR从一个寄存器保存一个字或者一个字节从一个寄存器保存

18、一个字或者一个字节Rdmem32addressLDRB把一个字节装入一个寄存器把一个字节装入一个寄存器Rdmem8addressSTRB从一个寄存器保存一个字节从一个寄存器保存一个字节Rdmem8addressLDRH把一个半字节装入一个寄存器把一个半字节装入一个寄存器Rdmem16addressSTRH从一个寄存器保存一个半字从一个寄存器保存一个半字Rdmem16addressLDRSB把一个有符号字节装入寄存器把一个有符号字节装入寄存器RdsignExtent(mem8address)STRSH把一个有符号半字装入寄存器把一个有符号半字装入寄存器RdsignExtent(mem16addr

19、ess)28寻址方式变址模式变址模式数据数据基址寄存器基址寄存器示例示例回写前变址回写前变址membase+offset基址寄存器加上偏基址寄存器加上偏移移LDR r0,r1,#4!前变址前变址membase+offset不变不变LDR r0,r1,#4后变址后变址membase基址寄存器加上偏基址寄存器加上偏移移LDR r0,r1,#429例子lPREl r0=0 x00000000, r1=0 x00009000, l Mem320 x00009000=0 x01010101l Mem320 x00009004=0 x02020202l回写型前变址寻址: LDR r0, r1, #0 x4

20、!lPOST r0=0 x02020202, r1=0 x00009004l前变址寻址: LDR r0, r1,#0 x4 lPOST r0=0 x02020202, r1=0 x00009000l后变址寻址: LDR r0, r1 ,#0 x4lPOST r0=0 x01010101, r1=0 x0000900430数据传送指令 - 5COPY:ADR r1, TABLE1; r1 points to TABLE1ADR r2, TABLE2; r2 points to TABLE2LOOP:LDR r0, r1STR r0, r2ADD r1, r1, #4ADD r2, r2, #4.

21、TABLE1:.TABLE2:.COPY:ADR r1, TABLE1; r1 points to TABLE1ADR r2, TABLE2; r2 points to TABLE2LOOP:LDR r0, r1, #4STR r0, r2, #4.TABLE1:.TABLE2:.31多存放器数据传送指令 - LDMl多数据传送指令多数据传送指令 (LDM, STM)(LDM, STM)lload (LDM) load (LDM) 或或 store (STM) store (STM) 当前可访问存放器的恣意子集当前可访问存放器的恣意子集l 运用运用l堆栈堆栈: maintaining full

22、 or empty stacks which can grow up : maintaining full or empty stacks which can grow up or down memoryor down memoryl上下文切换上下文切换: : 保管或重新存储任务存放器保管或重新存储任务存放器l块拷贝块拷贝: :在主存储器中挪动大数据块在主存储器中挪动大数据块l寻址寻址lPre/Post indexingPre/Post indexinglAuto increment or decrementAuto increment or decrementl回写到基址存放器回写到基址存放

23、器Write back the base registerWrite back the base register32多存放器数据传送指令的要点l多存放器多存放器Load/Store指令会添加中断的延迟,由于指令会添加中断的延迟,由于ARM不会打断不会打断正在执行的指令去呼应中断,而必需等到指令执行完成;正在执行的指令去呼应中断,而必需等到指令执行完成;l普通编译器将提供一个选项以控制普通编译器将提供一个选项以控制Load/Store指令可以传送的最指令可以传送的最大存放器数目,以限制最大中断延迟。大存放器数目,以限制最大中断延迟。33多存放器传送指令的寻址方式寻址模式寻址模式描述描述起始地址

24、起始地址结束地址结束地址Rn!IA执行后增加执行后增加RnRn+4*N-4Rn+4*NIB执行前增加执行前增加Rn+4Rn+4*NRn+4*NDA执行后减少执行后减少Rn-4*N+4RnRn-4*NDB执行前减少执行前减少Rn-4*NRn-4Rn-4*N注:!决议Rn的值能否随着传送而改动34例子要求:保管r1r3到内存地址0 x90000 x900c,并且更新基址存放器r4PRE: r1=0 x00000001, r2=0 x00000002, r3=0 x00000003, r4=0 x9000执行操作: STMIA r4!, r1, r2, r3(执行后添加)POST: mem320 x

25、9000=0 x00000001 mem320 x9004=0 x00000002 mem320 x9008=0 x00000003 r4=0 x900c35多存放器传送寻址方式r5r1r9r0r9STMIA r9!, r0,r1,r5100016100c16101816r1r5r9STMDA r9!, r0,r1,r5r0r9100016100c16101816r5r9STMDB r9!, r0,r1,r5r1r0r9100016100c16101816r5r1r0r9r9STMIB r9!, r0,r1,r5100016100c1610181636例1:将存储器中的延续数据装载到存放器lP

26、REl mem320 x80018=0 x03, mem320 x80014=0 x02,l mem320 x80010=0 x01,l r0=0 x00080010, r1=0 x00000000,l r2=0 x00000000, r3=0 x00000000l执行指令: LDMIA r0!, r1-r3lPOSTl r0=0 x0008001c,l r1=0 x00000001,l r2=0 x00000002,l r3=0 x000000030 x800200 x000000050 x000000050 x8001c0 x000000040 x800180 x000000030 x80

27、0140 x000000020 x800100 x000000010 x8000c0 x00000000地址指针 存储地址 数据r3=0 x00000000r2=0 x00000000r1=0 x00000000r0=0 x8001037例2:完成一个存储器数据块拷贝l注:r9存放源数据的起始地址l r10存放目的起始地址l r11存放源终了地址l loopl LDMIA r9!, r0-r7 ;装载32字节并更新r9指针l STMIA r10!, r0-r7 ;存储32字节并更新r10指针l CMP r9, r11 ;能否到达终了地址l BNE loop ;不相等跳转目的源高地址低地址拷贝存

28、储地址r9r11r1038堆栈操作lARM运用多存放器运用多存放器Load/Store指令来完成堆栈操作;指令来完成堆栈操作;l运用堆栈时,需求确定堆栈在存储空间中是向上生长运用堆栈时,需求确定堆栈在存储空间中是向上生长递增的递增的“A还是向下生长递减的还是向下生长递减的“D;l满堆栈满堆栈“F是指堆栈指针指向堆栈的最后一个已是指堆栈指针指向堆栈的最后一个已运用的地址或满位置;相反,空堆栈运用的地址或满位置;相反,空堆栈“E是指是指SP指向堆栈的第一个没有运用的地址或空位置;指向堆栈的第一个没有运用的地址或空位置;39堆栈操作寻址方式寻址方式寻址方式说明说明pop=LDMpush=STMFA递

29、增满递增满LDMFALDMDASTMFASTMIBFD递减满递减满LDMFDLDMIASTMFDSTMDBEA递增空递增空LDMEALDMDBSTMEASTMIAED递减空递减空LDMEDLDMIBSTMEDSTMDA40LDMFD sp!,r4-r7,pcSP100FF1234AOBE80341010123484209753r41r5 14544r60r712lr9048pc9020r4100100FFr5FF1234r61234A0BEr7A0BE8034pc8034堆栈r4100r5FFr61234r7A0BElr8034ABCD8765102E16FFFF101012348420975

30、3存储器顶存储器顶SPSP100FF1234A0BE8034SPOld SP100FF1234A0BE8034lARM堆栈操作经过块传送指令来完成堆栈操作经过块传送指令来完成:lSTMFD(Push)块存储块存储- Full Descending stack STMDBlLDMFD(Pop)块装载块装载- Full Descending stack LDMIASTMFD sp!,r4-r7,lr41例:把存放器内容放入堆栈,更新sp0 x800180 x000000010 x800140 x000000020 x80010Empty0 x8000cEmpty0 x800180 x0000000

31、10 x800140 x000000020 x800100 x000000030 x8000c0 x00000002PRE 地址 数据POST 地址 数据SPSPPRE : r1=0 x00000002, r4=0 x00000003, sp=0 x00080014执行指令:执行指令: STMFD sp!, r1,r4POST: r1=0 x00000002, r4=0 x00000003, sp=0 x0008000c42单数据交换指令 - SWAPl单数据交换单数据交换 (SWAP) (SWAP)l在存放器和外部存储器之间交换字节或字在存放器和外部存储器之间交换字节或字l读存储器和写存储器

32、是是放在一同的读存储器和写存储器是是放在一同的l原子指令原子指令l执行时不能中断执行时不能中断l当当LOCKLOCK 信号输出操作时信号输出操作时, ,外部存储器管理单元被锁定外部存储器管理单元被锁定, ,当当l多线程操作时使程序同步多线程操作时使程序同步(OS(OS支持支持) )l锁定锁定l信号量信号量43l在存放器和存储器之间,由一次存储器读和一次存储器写组成的原子操作。完成在存放器和存储器之间,由一次存储器读和一次存储器写组成的原子操作。完成一个字节或字的交换。一个字节或字的交换。l语法:语法:l SWPB Rd, Rm, Rnl可用作信号量可用作信号量l不能由不能由armcc编译产生,

33、必需运用汇编器。编译产生,必需运用汇编器。RmRd321temp存储器存储器RnSWP44SWAP指令的用法lPREl mem320 x9000=0 x12345678,l r0=0 x00000000, r1=0 x11112222, r2=0 x00009000l执行操作:执行操作: SWP r0, r1, r2lPOST:l mem320 x9000=0 x11112222,l r0=0 x12345678, r1=0 x11112222, r2=0 x00009000l交换指令多用于实现操作系统中的信号量和互斥操作,该指令有交换指令多用于实现操作系统中的信号量和互斥操作,该指令有修饰符

34、修饰符B,即有字交换和字节交换两种方式;,即有字交换和字节交换两种方式;45SWP指令运用例如SpinSpin MOV r1, =semaphore MOV r1, =semaphore MOV r2, #1 MOV r2, #1 SWP r3, r2, r1 SWP r3, r2, r1 CMP r3, #1 CMP r3, #1 BEQ spin BEQ spin注:信号量指向的单元是注:信号量指向的单元是0 0或或1 1,假设为,假设为1 1,那么表示该效力被另一个,那么表示该效力被另一个过程运用,程序继续循环,直至为过程运用,程序继续循环,直至为0 046软件中断 (SWI)l产生一个

35、异常圈套,跳转到产生一个异常圈套,跳转到SWI 硬件向量。硬件向量。lSWI 处置程序可以检测处置程序可以检测SWI号,从而决议采取何种操作。号,从而决议采取何种操作。l经过经过SWI机制,运转在用户方式下的运用程序,可恳求操作系统机制,运转在用户方式下的运用程序,可恳求操作系统执行一系列特权操作。执行一系列特权操作。l语法:语法:l SWI 47软件中断 (SWI)执行的操作指令指令名称名称执行操作执行操作SWI软件中断软件中断Lr_svc=SWI指令后面的指令地址指令后面的指令地址spsr_svc=cpsrpc=vectors+0 x8cpsr模式模式=SVCcpsr I=1(屏蔽屏蔽IR

36、Q中断)中断)48SWI中断处置程序l处置软件中断的代码段称为中断处置程序处置软件中断的代码段称为中断处置程序SWI Handler),中断处中断处置程序是经过执行指令的地址获取软件中断号,指令地址是从置程序是经过执行指令的地址获取软件中断号,指令地址是从lr计计算出来的;算出来的;lSWI号确实定方法:号确实定方法:l SWI_Number=and NOT(0 xff00000000)283124270 Cond 1 1 1 1SWI number (ignored by processor)23条件域条件域49SWI处置程序运用例如lSWI_handlerl ;保管存放器保管存放器r0r1

37、2和和lrl l STMFD sp!, r0-r12,lrl ;read the SWI instructionl LDR r10,lr,#-4l ;make off top 8 bitsl BIC r10,r10, #0 xff000000l ; r10-contains the SWI numberl BL service_routinel ;return from SWI handlerl LDMFD sp!, r0-r12,pc50控制和分支指令l控制指令控制指令l分支和分支衔接分支和分支衔接l跳到希望的指令中跳到希望的指令中l保管当前的保管当前的PCPC并前往并前往 (with (w

38、ith L L bit) bit)l分支和交换分支和交换l跳到期望的指令中与指令集交换跳到期望的指令中与指令集交换lRm0 = 1: Subsequent inst. are THUMB.Rm0 = 1: Subsequent inst. are THUMB.lRm0 = 0: Subsequent inst. are ARM.Rm0 = 0: Subsequent inst. are ARM.cond1 0 1L24-bit signed word offset3128 2725 24 230condRm0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 03

39、128276 5 4 301L51lBranch :B labellBranch with Link :BL subroutine_labell处置器把偏移量左移两位,进展符号扩展后再与处置器把偏移量左移两位,进展符号扩展后再与PC相加相加 l跳转范围:跳转范围: 32 Mbyte?l如何执行长跳转?如何执行长跳转?2831240 Cond 1 0 1 L 偏移量偏移量 条件码区域条件码区域Link bit 0 = Branch1 = Branch with link232527分支指令52控制流指令Branch Interpretation Normal uses B BAL Uncondi

40、tional Always Always take this branch Always take this branch BEQ Equal Comparison equal or zero result BNE Not equal Comparison not equal or non-zero result BPL Plus Result positive or zero BMI Minus Result minus or negative BCC BLO Carry clear Lower Arithmetic operation did not give carry-out Unsi

41、gned comparison gave lower BCS BHS Carry set Higher or same Arithmetic operation gave carry-out Unsigned comparison gave higher or same BVC Overflow clear Signed integer operation; no overflow occurred BVS Overflow set Signed integer operation; overflow occurred BGT Greater than Signed integer compa

42、rison gave greater than BGE Greater or equal Signed integer comparison gave greater or equal BLT Less than Signed integer comparison gave less than BLE Less or equal Signed integer comparison gave less than or equal BHI Higher Unsigned comparison gave higher BLS Lower or same Unsigned comparison gav

43、e lower or same 53分支和链接指令l分支子程序分支子程序 (r14 serves as a link register)(r14 serves as a link register)l嵌套子程序嵌套子程序BL SUBR; branch to SUBR.; return hereSUBR:.; SUBR entry pointMOV pc, r14 ; returnBL SUB1 .SUB1:; save work and link registerSTMFD r13!, r0-r2,r14 BL SUB2.LDMFD r13!, r0-r2,pcSUB2:.MOV pc, r1

44、4 ; copy r14 into r15Full Descending54恳求管理程序l管理程序是在特权级操作的程序管理程序是在特权级操作的程序, ,它可以实现用户级程序不能实它可以实现用户级程序不能实现的义务现的义务lExample: send text to the displayExample: send text to the displaylARM ISA ARM ISA 包括包括 SWI (SoftWare Interrupt)SWI (SoftWare Interrupt); output r07:0SWI SWI_WriteC; return from a user prog

45、ram back to monitorSWI SWI_Exit55转移表l根据程序计算值调用一个子程序根据程序计算值调用一个子程序BL JTAB.JTAB:CMP r0, #0BEQ SUB0CMP r0, #1BEQ SUB1CMP r0, #2BEQ SUB2Note: slow when the list is long, and all subroutines are equally frequentBL JTAB.JTAB:ADR r1, SUBTABCMP r0, #SUBMAX ; overrun?LDRLS pc, r1, r0, LSL #2B ERRORSUBTAB:DCD

46、 SUB0DCD SUB1DCD SUB2.56程序形状存放器访问指令l程序形状存放器访问指令程序形状存放器访问指令(MRS, MSR)(MRS, MSR)lMRS MRS 程序形状存放器到通用存放器的数据传送指令程序形状存放器到通用存放器的数据传送指令lMSR MSR 通用存放器到程序形状存放器的数据传送指令通用存放器到程序形状存放器的数据传送指令57PSR 传送指令lMRS和和MSR允许传送允许传送CPSR / SPSR中的内容到中的内容到/从一个通用存放器中。从一个通用存放器中。l语法:语法:l MRS Rd, ; Rd = l MSR ,Rm ; = Rml在这里:在这里:l = CP

47、SR or SPSRl_fields = fsxc的恣意组合的恣意组合l也允许送一个立刻数到也允许送一个立刻数到 psr_fieldsl MSR ,#Immediatel用户方式下,一切位均可以被读取,但只需条件标志位用户方式下,一切位均可以被读取,但只需条件标志位 (_)可被写。可被写。2731N Z C V Q2867I F T mode1623 815 54024fsxc U n d e f i n e dJ58协处置器指令 - 1l协处置器协处置器l普通原理是经过添加核扩展指令集普通原理是经过添加核扩展指令集lExample : Example : 如如 MMU & cache

48、. FPUMMU & cache. FPU等系统控制器等系统控制器l存放器存放器l协处置器公用协处置器公用lARM ARM 控制数据流控制数据流l协处置器只包含数据处置和存贮器传送操作协处置器只包含数据处置和存贮器传送操作l协处置器数据操作协处置器数据操作 (CDP)(CDP)l这类指令是用来通知协处置器执行某些内部操作这类指令是用来通知协处置器执行某些内部操作l无结果前往无结果前往ARM,ARMARM,ARM并不等待操作完成并不等待操作完成cond1 1 1 0C R m3128 2724 2320 1916 1512 118 75 430C op1C R nC R dC P#C o

49、p2059协处置器指令lARM体系支持体系支持16个协处置器个协处置器l针对每个协处置器的指令占用针对每个协处置器的指令占用 ARM指令集中的固定部分指令集中的固定部分 l假设相应的协处置器不存在,假设相应的协处置器不存在, 将发生一个未定义指令异常。将发生一个未定义指令异常。l这有三种协处置器指令这有三种协处置器指令l协处置器数据处置指令协处置器数据处置指令l CDP:初始化协处置器数据处置操作:初始化协处置器数据处置操作l协处置器存放器传送指令协处置器存放器传送指令l MRC: 从从 ARM 存放器移到协处置器存放器存放器移到协处置器存放器l MCR:从协处置器存放器移到:从协处置器存放器

50、移到ARM 存放器存放器l协处置器存储器传送指令协处置器存储器传送指令l LDC:从存储器装载到协处置器存放器:从存储器装载到协处置器存放器l STC:从协处置器存放器存储到存储器:从协处置器存放器存储到存储器60常量的装载lARM指令不用于将一个指令不用于将一个32位的常量装入存放器,由于位的常量装入存放器,由于ARM本身是本身是32位的,所以指令中不能够再定义一个普通的位的,所以指令中不能够再定义一个普通的32位常量;位常量;lARM添加了添加了2条伪指令,把条伪指令,把32位常量送入存放器:位常量送入存放器:l例:例:l LDR Rd, =constant ;LDR常量装载伪指令常量装载

51、伪指令l ADR Rd, Label ;ADR地址装载伪指令地址装载伪指令61l为允许装载大常数,汇编器提供了一条伪指令为允许装载大常数,汇编器提供了一条伪指令:lLDR rd, =constl它能够汇编成以下指令:它能够汇编成以下指令:lMOV or MVN。l或或lLDR 指令,从数据池指令,从数据池Literal pools读取常数。读取常数。lFor examplelLDR r0,=0 xFF=MOV r0,#0 xFFlLDR r0,=0 x55555555 =LDR r0,PC,#Imm12DCD 0 x55555555l引荐运用这种方法把常数装入存放器引荐运用这种方法把常数装入存

52、放器 。装载32 bit常数62015310ADDS r2,r2,#1ADD r2,#132-bit ARM 指令16-bit Thumb 指令对于由编译器产生的大部分指令:对于由编译器产生的大部分指令:没有条件执行没有条件执行源、目的存放器必需一样源、目的存放器必需一样仅能运用低存放器仅能运用低存放器常数大小有限制常数大小有限制不能运用在线移位器不能运用在线移位器关于Thumb指令集lThumb 是是16-bit 指令集指令集l代码密度优化代码密度优化 总代码大小约为总代码大小约为ARM指令的指令的65%l运用窄总线存储器时可以大大提高性能。运用窄总线存储器时可以大大提高性能。l是是 ARM

53、 指令集的一个子集。指令集的一个子集。l核存在一个执行形状核存在一个执行形状 Thumb形状形状lARM和和Thumb之间切换运用之间切换运用BX 指令指令63写 Thumb汇编程序lThumb不是一个不是一个“好好 指令集!指令集!l最好用编译器来产生最好用编译器来产生l约束并不一致约束并不一致l手动编码运用手动编码运用ARM指令集比较好指令集比较好 l更多细节,参看:更多细节,参看:lARM “Architecture Reference Manual64ADS与与ARM汇编程序设计汇编程序设计65生成二进制文件的过程66编译器的根本功能l规定汇编言语的语法规那么lADS Vs. GNUl

54、预编译(Pre-assembler) 规范汇编言语l编译二进制文件67预编译(Pre-assembler)l处置伪指令处置伪指令(Pseudo-Instruction)l伪指令:做为汇编言语的参数,或被预编译器识别,翻译成规范伪指令:做为汇编言语的参数,或被预编译器识别,翻译成规范汇编言语。汇编言语。l伪指令的功能:伪指令的功能:l提高程序的可读性和易维护性提高程序的可读性和易维护性l易于编程易于编程68链接器Linker)l将多个目的文件链接成一个可执行的文件将多个目的文件链接成一个可执行的文件l编译器只担任把程序翻译成机器码,但处置与存储器地址相关的编译器只担任把程序翻译成机器码,但处置与

55、存储器地址相关的内容,这部分任务由链接器来完成;内容,这部分任务由链接器来完成;l一个程序编译完成后会分成代码段一个程序编译完成后会分成代码段Read-Only,RO)、数据段、数据段Read-Write,RW)、零初始化段、零初始化段Zero-Initialized,ZI),需求把不,需求把不同的程序的不同区段链接成一个完好延续的区。同的程序的不同区段链接成一个完好延续的区。69符号定义伪指令数据定义伪指令汇编控制伪指令信息报告伪指令宏指令以及其他伪指令。伪指令70符号定义伪指令l用于定义ARM汇编程序中的变量、对变量赋值以及定义存放器的别名等。l用于定义部分变量的LCLA、LCLL、LCL

56、S; l用于定义全局变量的GBLA、GBLL、GBLS ;l用于对变量赋值的SETA、SETL、SETS ;l为通用存放器列表定义称号的RLIST。 71符号定义伪指令 1. LCLA、LCLL、LCLS格式:LCLA/LCLL/LCLS 部分变量名阐明:LCLA、LCLL、LCLS伪指令用于定义一个汇编程序中的部分变量,并初始化,其中:LCLA定义一个部分的数字变量,初始化为0;LCLL定义一个部分的逻辑变量,初始化为F;LCLS定义一个部分的字符串变量,初始化为空串;这三条伪指令用于声明部分变量,在其部分作用范围内变量名必需独一。 72符号定义伪指令 2. GBLA、GBLL、GBLS格式

57、:GBLA/GBLL/GBLS 变量名阐明:GBLA、GBLL、GBLS伪操作定义一个汇编程序中的全局变量,并初始化,其中:GBLA定义一个全局数字变量,并初始化为0;GBLL定义一个全局逻辑变量,并初始化为“F;GBLS定义一个全局字符串变量,并初始化为空串; 这三条伪指令用于定义全局变量,因此在整个程序范围内变量名必需独一。 73符号定义伪指令 3. SETA、SETL、SETS格式:变量名SETA/SETL/SETS表达式阐明:SETA:给一个数字变量赋值;SETL:给一个逻辑变量赋值;SETS:给一个字符串变量赋值;格式中的变量名必需为曾经定义过的全局或部分变量,表达式为将要赋给变量的

58、值。 74 符号定义伪指令4. RLIST格式:称号 RLIST存放器列表阐明:RLIST可用于对一个通用存放器列表定义称号,该称号可在ARM指令LDM/STM中运用。在LDM/STM指令中,列表中的存放器为根据存放器的编号由低到高访问次序,与列表中的存放器陈列次序无关。75 数据定义伪指令l用于为数据分配存储单元,同时也可完成已分配存储单元的初始化。 lDCBlDCW/DCWUlDCD/DCDU lDCQ/DCQU lDCFS/DCFSU lDCFD/DCFDU lSPACE lFIELD lMAP76数据定义伪指令1. DCB: 标号 DCB 表达式 阐明:DCB用于分配一块字节单元并用伪

59、指令中指定的表达式进展初始化。其中,表达式可以为运用双引号的字符串或0255的数字,DCB可用“=替代。 2. DCW/DCWU: 标号 DCW/DCWU 表达式 阐明:DCW分配一段半字存储单元并用表达式值初始化,它定义的存储空间是半字对齐的。77数据定义伪指令3. DCD/DCDU: 标号 DCD/DCDU 表达式 阐明:DCD伪指令用于分配一块字存储单元并用伪指令中指定的表达式初始化,它定义的存储空间是字对齐的。DCD也可用“&替代。 4. DCQ/DCQU: 标号 DCQ/DCQU 表达式 阐明:DCQ用于分配一块以8个字节为单位的存储区域并用伪指令中指定的表达式初始化,它定义

60、的存储空间是字对齐的。DCQU功能跟DCQ类似,只是分配的存储单元不严厉字对齐。 78数据定义伪指令5.DCFD/DCFDU: 标号 DCFD/DCFDU 表达式 阐明:DCFD用于为双精度的浮点数分配一片延续的字存储单元并用伪指令中指定的表达式初始化,它定义的存储空间是字对齐的,每个双精度的浮点数占据两个字单元。DCFDU功能跟DCFD类似,只是分配的存储单元不严厉字对齐。6.DCFS/DCFSU: 标号 DCFS/DCFSU 表达式 阐明:DCFS用于为单精度的浮点数分配一片延续的字存储单元并用表达式初始化,它定义的存储空间是字对齐的,每个单精度浮点数运用一个字单元.DCFSU功能跟DCFS类似,只是分配的存储

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论