版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1嵌入式系统设计与实例开发嵌入式系统设计与实例开发基于基于3232位微处理器与实时操作系统位微处理器与实时操作系统ARMARM指令集与编程指令集与编程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-bit)l字字 (32-bit)(32-bit)l字必须被排成字必须被排成4 4个字节边界对
2、齐个字节边界对齐, ,半字必须被排列成半字必须被排列成2 2个字节边界个字节边界对齐对齐 3ARM 指令集的特点l向后兼容:新版本增加指令,并保持指令向后兼容;向后兼容:新版本增加指令,并保持指令向后兼容;lLoad-store Load-store 结构结构* *uload/store load/store 从存储器中读某个值从存储器中读某个值, ,操作完后再将其放回存储操作完后再将其放回存储器中器中u只对存放在寄存器的数据进行处理;只对存放在寄存器的数据进行处理;u对于存储器中的数据,只能使用对于存储器中的数据,只能使用load/storeload/store指令进行存取指令进行存取4指令
3、格式l指令格式指令格式u3 3 地址指令格式地址指令格式 在在ARMARM状态中使用状态中使用u例例指令语法指令语法目标寄存器(目标寄存器(Rd)源寄存器源寄存器1(Rn)源寄存器源寄存器2(Rm)ADD r3,r1,r2r3r1r25ARM 指令分类l数据处理指令数据处理指令 使用和改变寄存器的值使用和改变寄存器的值l数据传送指令数据传送指令 把存储器的值拷贝到寄存器中把存储器的值拷贝到寄存器中 (load) or (load) or 把寄存器中的值拷贝到存储器中把寄存器中的值拷贝到存储器中(store)(store)l控制流指令控制流指令 分支分支分支和链接分支和链接, , 保存返回的地址
4、保存返回的地址, ,以恢复最先的次序以恢复最先的次序l软件中断指令软件中断指令l程序状态寄存器指令程序状态寄存器指令l协处理器指令协处理器指令6ARM指令编码格式l说明说明lCondl指令执行的条件编码指令执行的条件编码lOpcodel指令操作符编码指令操作符编码lSl决定指令的操作是否影响决定指令的操作是否影响CPSR的值的值lRdl操作目标寄存器编码操作目标寄存器编码lRnl包含第一操作数的寄存器编码包含第一操作数的寄存器编码lShifter_operandl表示第二操作数表示第二操作数cond001opcodesRnRdShifter_operand 31 28 27 25 24 21
5、20 19 16 15 12 11 8 7 07ARM指令集8数据处理指令 - 1l数据处理指令的类别数据处理指令的类别u算术操作算术操作u按位逻辑操作按位逻辑操作u寄存器移位操作寄存器移位操作u比较操作比较操作l操作数操作数: 32-bits : 32-bits 宽宽; ;有有3 3种指定操作数的方式种指定操作数的方式u来自寄存器来自寄存器u第二操作数可以是常数第二操作数可以是常数( (立即数立即数) )u移位寄存器操作数移位寄存器操作数l结果结果: 32-bits : 32-bits 宽宽, , 放在寄存器中放在寄存器中u长乘法产生长乘法产生6464位结果位结果9数据处理指令 2*cond
6、0 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:21MnemonicMeaningEffect0000ANDLogical bit-wise ANDR
7、d := 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 carryRd := Op2 - Rn + C - 1
8、1000TSTTestScc 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数据处理指令 - 4ADD r0, r1, r2r0 := r1 +
9、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, r2r0 := r1 and (not) r2寄存器移位寄
10、存器移位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指令语法:指令语法: 指令指令cond S Rd, N例:例:PRE r0= 5 , r2=6 MO
11、V r0, r2 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;CMP r0,#0MOVEQ r1,#0MOVGT r1,#1l使用条件比较指令使用条件比较指令if (a=4 | a=10) x=0;CMP r0,#4CMPNE r0,#10MOVEQ r1,#023条件执行l所有的所有的ARM指令都可以指令都可以条条件件执执行行l指令的指
12、令的执执行行与与否取否取决决于于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 - N set (negative)l0101 = PL - N
13、 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 = LT - N set and V clear, or N cl
14、ear 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位位值值cond0 0 0 0R m3128 2724 2321
15、20 1916 1512 118 74301 0 0 1R sR n/R dLoR d/R dH im ulS25乘法l例子例子 ( (乘法乘法, , 乘法累加器乘法累加器) )l注意注意u最低最低 32-bits 32-bits 置于结果寄存器中置于结果寄存器中, ,其余被忽略其余被忽略 u不支持第二立即操作数不支持第二立即操作数u结果寄存器与源寄存器必须不同结果寄存器与源寄存器必须不同 uif S bit is set the V is preserved and if S bit is set the V is preserved and the C is rendered meanin
16、glessthe C is rendered meaninglessMUL r4, r3, r2r4 := r3 x r2MLA r4, r3, r2, r1r4 := r3 x r2 + r1 26数据传送指令 - 1l单指令传送单指令传送 (LDR, STR)(LDR, STR)u单字单字(32bit), (32bit), 半字半字( (6 bit) 6 bit) 以及字节以及字节(8 bit) (8 bit) 传送传送u寻址寻址u寄存器偏移寄存器偏移u地址地址 = =基址基址 寄存器偏移寄存器偏移u立即数偏移立即数偏移u地址地址 = = 基址基址 立即数常数立即数常数u后变址后变址Pos
17、t-indexingPost-indexing: modify address after use: modify address after useu前变址前变址Pre-indexing: modify address before usePre-indexing: modify address before useu回写回写u如果可能如果可能, ,更新基址寄存器更新基址寄存器27单寄存器传送指令LDR把一个字装入一个寄存器把一个字装入一个寄存器Rdmem32addressSTR从一个寄存器保存一个字或者一个字节从一个寄存器保存一个字或者一个字节Rdmem32addressLDRB把一个字节
18、装入一个寄存器把一个字节装入一个寄存器Rdmem8addressSTRB从一个寄存器保存一个字节从一个寄存器保存一个字节Rdmem8addressLDRH把一个半字节装入一个寄存器把一个半字节装入一个寄存器Rdmem16addressSTRH从一个寄存器保存一个半字从一个寄存器保存一个半字Rdmem16addressLDRSB把一个有符号字节装入寄存器把一个有符号字节装入寄存器RdsignExtent(mem8address)STRSH把一个有符号半字装入寄存器把一个有符号半字装入寄存器RdsignExtent(mem16address)28寻址方式变址模式变址模式数据数据基址寄存器基址寄存器
19、示例示例回写前变址回写前变址membase+offset基址寄存器加上偏基址寄存器加上偏移移LDR r0,r1,#4!前变址前变址membase+offset不变不变LDR r0,r1,#4后变址后变址membase基址寄存器加上偏基址寄存器加上偏移移LDR r0,r1,#429例子lPRE r0=0 x00000000, r1=0 x00009000, Mem320 x00009000=0 x01010101 Mem320 x00009004=0 x02020202回写型前变址寻址:回写型前变址寻址: LDR r0, r1, #0 x4!lPOST r0=0 x02020202, r1=0
20、x00009004前变址寻址:前变址寻址: LDR r0, r1,#0 x4 lPOST r0=0 x02020202, r1=0 x00009000后变址寻址:后变址寻址: 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.TABLE1:.TABLE2:.CO
21、PY: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)uload (LDM) load (LDM) 或或 store (STM) store (STM) 当前可访问寄存器的任意子集当前可访问寄存器的任意子集u 使用使用u堆栈堆栈: maintaining full or empty stacks w
22、hich can : maintaining full or empty stacks which can grow up or down memorygrow up or down memoryu上下文切换上下文切换: : 保存或重新存储工作寄存器保存或重新存储工作寄存器u块拷贝块拷贝: :在主存储器中移动大数据块在主存储器中移动大数据块u寻址寻址uPre/Post indexingPre/Post indexinguAuto increment or decrementAuto increment or decrementu回写到基址寄存器回写到基址寄存器Write back the ba
23、se registerWrite back the base register32多寄存器数据传送指令的要点l多寄存器多寄存器Load/Store指令会增加中断的延迟,因为指令会增加中断的延迟,因为ARM不会打断不会打断正在执行的指令去响应中断,而必须等到指令执行完成;正在执行的指令去响应中断,而必须等到指令执行完成;l一般编译器将提供一个选项以控制一般编译器将提供一个选项以控制Load/Store指令可以传送的最指令可以传送的最大寄存器数目,以限制最大中断延迟。大寄存器数目,以限制最大中断延迟。33多寄存器传送指令的寻址模式寻址模式寻址模式描述描述起始地址起始地址结束地址结束地址Rn!IA执
24、行后增加执行后增加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(执行后增加执行后增加)PO
25、ST: mem320 x9000=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:将存储器中的
26、连续数据装载到寄存器lPRE mem320 x80018=0 x03, mem320 x80014=0 x02, mem320 x80010=0 x01, r0=0 x00080010, r1=0 x00000000, r2=0 x00000000, r3=0 x00000000执行指令:执行指令: LDMIA r0!, r1-r3lPOST r0=0 x0008001c, r1=0 x00000001, r2=0 x00000002, r3=0 x000000030 x800200 x000000050 x8001c0 x000000040 x800180 x000000030 x80014
27、0 x000000020 x800100 x000000010 x8000c0 x00000000地址指针 存储地址 数据r3=0 x00000000r2=0 x00000000r1=0 x00000000r0=0 x8001037例2:完成一个存储器数据块拷贝l注:注:r9存放源数据的起始地址存放源数据的起始地址 r10存放目标起始地址存放目标起始地址 r11存放源结束地址存放源结束地址 loop LDMIA r9!, r0-r7 ;装载装载32字节并更新字节并更新r9指针指针 STMIA r10!, r0-r7 ;存储存储32字节并更新字节并更新r10指针指针 CMP r9, r11 ;是
28、否到达结束地址是否到达结束地址 BNE loop ;不相等跳转不相等跳转目的目的源源高地址低地址拷贝存储地址r9r11r1038堆栈操作lARM使用多寄存器使用多寄存器Load/Store指令来完成堆栈操作;指令来完成堆栈操作;l使用堆栈时,需要确定堆栈在存储空间中是向上生长(使用堆栈时,需要确定堆栈在存储空间中是向上生长(递增的递增的“A”)还是向下生长(递减的)还是向下生长(递减的“D”););l满堆栈(满堆栈(“F”)是指堆栈指针指向堆栈的最后一个已)是指堆栈指针指向堆栈的最后一个已使用的地址或满位置;相反,空堆栈(使用的地址或满位置;相反,空堆栈(“E”)是指)是指SP指向堆栈的第一个
29、没有使用的地址或空位置;指向堆栈的第一个没有使用的地址或空位置;39堆栈操作寻址方式寻址方式寻址方式说明说明pop=LDMpush=STMFA递增满递增满LDMFALDMDASTMFASTMIBFD递减满递减满LDMFDLDMIASTMFDSTMDBEA递增空递增空LDMEALDMDBSTMEASTMIAED递减空递减空LDMEDLDMIBSTMEDSTMDA40LDMFD sp!,r4-r7,pcSP100FF1234AOBE80341010123484209753r41r5 14544r60r712lr9048pc9020r4100100FFr5FF1234r61234A0BEr7A0BE
30、8034pc8034堆栈r4100r5FFr61234r7A0BElr8034ABCD8765102E16FFFF1010123484209753存储器顶存储器顶SPSP100FF1234A0BE8034SPOld SP100FF1234A0BE8034lARM堆栈操作通过块传送指令来完成堆栈操作通过块传送指令来完成:STMFD(Push)块存储块存储- Full Descending stack STMDBLDMFD(Pop)块装载块装载- Full Descending stack LDMIASTMFD sp!,r4-r7,lr41例:把寄存器内容放入堆栈,更新sp0 x800180 x0
31、00000010 x800140 x000000020 x80010Empty0 x8000cEmpty0 x800180 x000000010 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单
32、数据交换单数据交换 (SWAP)(SWAP)u在寄存器和外部存储器之间交换字节或字在寄存器和外部存储器之间交换字节或字u读存储器和写存储器是是放在一起的读存储器和写存储器是是放在一起的u原子指令原子指令u执行时不能中断执行时不能中断u当当LOCKLOCK 信号输出操作时信号输出操作时, ,外部存储器管理单元被锁定外部存储器管理单元被锁定, ,当当u多线程操作时使程序同步多线程操作时使程序同步(OS(OS支持支持) )u锁定锁定u信号量信号量43l在寄存器和存储器之间,由一次存储器读和一次存储器写组成的原子操作。完成在寄存器和存储器之间,由一次存储器读和一次存储器写组成的原子操作。完成一个字节或
33、字的交换。一个字节或字的交换。l语法:语法:l SWPB Rd, Rm, Rnl可用作信号量可用作信号量l不能由不能由armcc编译产生,必须使用汇编器。编译产生,必须使用汇编器。RmRd321temp存储器存储器RnSWP44SWAP指令的用法lPRE mem320 x9000=0 x12345678, r0=0 x00000000, r1=0 x11112222, r2=0 x00009000执行操作:执行操作: SWP r0, r1, r2lPOST: mem320 x9000=0 x11112222, r0=0 x12345678, r1=0 x11112222, r2=0 x0000
34、9000l交换指令多用于实现操作系统中的信号量和互斥操作,该指令有交换指令多用于实现操作系统中的信号量和互斥操作,该指令有修饰符修饰符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,则表示该服务被另一
35、个过,则表示该服务被另一个过程使用,程序继续循环,直至为程使用,程序继续循环,直至为0 046软件中断 (SWI)l产生一个异常陷阱,跳转到产生一个异常陷阱,跳转到SWI 硬件向量。硬件向量。lSWI 处理程序可以检测处理程序可以检测SWI号,从而决定采取何种操作。号,从而决定采取何种操作。l通过通过SWI机制,运行在用户模式下的应用程序,可请求操作系统机制,运行在用户模式下的应用程序,可请求操作系统执行一系列特权操作。执行一系列特权操作。l语法:语法:l SWI 47软件中断 (SWI)执行的操作指令指令名称名称执行操作执行操作SWI软件中断软件中断Lr_svc=SWI指令后面的指令地址指令
36、后面的指令地址spsr_svc=cpsrpc=vectors+0 x8cpsr模式模式=SVCcpsr I=1(屏蔽屏蔽IRQ中断)中断)48SWI中断处理程序l处理软件中断的代码段称为中断处理程序(处理软件中断的代码段称为中断处理程序(SWI Handler),中断处中断处理程序是通过执行指令的地址获取软件中断号,指令地址是从理程序是通过执行指令的地址获取软件中断号,指令地址是从lr计计算出来的;算出来的;lSWI号的确定方法:号的确定方法: SWI_Number=and NOT(0 xff00000000)283124270 Cond 1 1 1 1SWI number (ignored
37、by processor)23条件域条件域49SWI处理程序应用示例lSWI_handler ;保存寄存器保存寄存器r0r12和和lr STMFD sp!, r0-r12,lr ;read the SWI instruction LDR r10,lr,#-4 ;make off top 8 bits BIC r10,r10, #0 xff000000 ; r10-contains the SWI number BL service_routine ;return from SWI handler LDMFD sp!, r0-r12,pc50控制和分支指令l控制指令控制指令u分支和分支连接分支和
38、分支连接u跳到希望的指令中跳到希望的指令中u保存当前的保存当前的PCPC并返回并返回 (with (with L L bit) bit)u分支和交换分支和交换u跳到期望的指令中与指令集交换跳到期望的指令中与指令集交换uRm0 = 1: Subsequent inst. are THUMB.Rm0 = 1: Subsequent inst. are THUMB.uRm0 = 0: Subsequent inst. are ARM.Rm0 = 0: Subsequent inst. are ARM.cond1 0 1L24-bit signed word offset3128 2725 24 23
39、0condRm0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 03128276 5 4 301L51lBranch :B labellBranch with Link :BL subroutine_labell处理器把偏移量左移两位,进行符号扩展后再与处理器把偏移量左移两位,进行符号扩展后再与PC相加相加 l跳转范围:跳转范围: 32 Mbyte?l如何执行长跳转?2831240 Cond 1 0 1 L 偏移量偏移量 条件码区域条件码区域Link bit0 = Branch1 = Branch with link232527分支指令52控制流指令Branc
40、h Interpretation Normal uses B BAL Unconditional 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 Arithm
41、etic operation did not give carry-out Unsigned 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 occu
42、rred BGT Greater than Signed integer comparison 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
43、 BLS Lower or same Unsigned comparison gave 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
44、 SUB2.LDMFD r13!, r0-r2,pcSUB2:.MOV pc, r14 ; 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 r0
45、7:0SWI SWI_WriteC; return from a user program 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
46、?LDRLS pc, r1, r0, LSL #2B ERRORSUBTAB:DCD SUB0DCD SUB1DCD SUB2.56程序状态寄存器访问指令l程序状态寄存器访问指令程序状态寄存器访问指令(MRS, MSR)(MRS, MSR)lMRS MRS 程序状态寄存器到通用寄存器的数据传送指令程序状态寄存器到通用寄存器的数据传送指令lMSR MSR 通用寄存器到程序状态寄存器的数据传送指令通用寄存器到程序状态寄存器的数据传送指令57PSR 传送指令lMRS和和MSR允许传送允许传送CPSR / SPSR中的内容到中的内容到/从一个通用寄存器中。从一个通用寄存器中。l语法:语法:l MRS
47、Rd, ; Rd = l MSR ,Rm ; = Rm在这里:在这里:l = CPSR 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一般原理是通过增加核扩展指令集一般原理是通过增加核扩展指令集lEx
48、ample : Example : 如如 MMU & cache. 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 1
49、512 118 75 430C op1C R nC R dC P#C op2059协处理器指令lARM体系支持体系支持16个协处理器个协处理器l针对每个协处理器的指令占用针对每个协处理器的指令占用 ARM指令集中的固定部分指令集中的固定部分 l如果相应的协处理器不存在,如果相应的协处理器不存在, 将发生一个未定义指令异常。将发生一个未定义指令异常。l这有三种协处理器指令这有三种协处理器指令l协处理器数据处理指令协处理器数据处理指令l CDP:初始化协处理器数据处理操作:初始化协处理器数据处理操作l协处理器寄存器传送指令协处理器寄存器传送指令l MRC: 从从 ARM 寄存器移到协处理器寄存器寄
50、存器移到协处理器寄存器l MCR:从协处理器寄存器移到:从协处理器寄存器移到ARM 寄存器寄存器l协协处理器存储器传送指令处理器存储器传送指令l LDC:从存储器装载到协处理器寄存器:从存储器装载到协处理器寄存器l STC:从协处理器寄存器存储到存储器:从协处理器寄存器存储到存储器60常量的装载lARM指令不用于将一个指令不用于将一个32位的常量装入寄存器,因为位的常量装入寄存器,因为ARM本身是本身是32位的,所以指令中不可能再定义一个普通的位的,所以指令中不可能再定义一个普通的32位常量;位常量;lARM增加了增加了2条伪指令,把条伪指令,把32位常量送入寄存器:位常量送入寄存器:l例:例
51、: LDR Rd, =constant ;LDR常量装载伪指令常量装载伪指令 ADR Rd, Label ;ADR地址装载伪指令地址装载伪指令61l为允许装载大常数,汇编器提供了一条伪指令为允许装载大常数,汇编器提供了一条伪指令:lLDR rd, =constl它可能汇编成下列指令:它可能汇编成下列指令:lMOV or MVN。或或lLDR 指令,从数据池(指令,从数据池(Literal pools)读取常数。)读取常数。lFor examplelLDR r0,=0 xFF=MOV r0,#0 xFFlLDR r0,=0 x55555555=LDR r0,PC,#Imm12DCD 0 x555
52、55555l推荐使用这种方法把常数装入寄存器推荐使用这种方法把常数装入寄存器 。装载32 bit常数62015310ADDS r2,r2,#1ADD r2,#132-bit ARM 指令16-bit Thumb 指令对于由编译器产生的大部分指令:对于由编译器产生的大部分指令:n没有条件执行n源、目的寄存器必须相同n仅能使用低寄存器n常数大小有限制n不能使用在线移位器关于Thumb指令集lThumb 是是16-bit 指令集指令集l代码密度优化代码密度优化 (总代码大小约为(总代码大小约为ARM指令的指令的65%)l使用窄总线存储器时可以大大提高性能。使用窄总线存储器时可以大大提高性能。l是是
53、ARM 指令集的一个子集。指令集的一个子集。l核存在一个执行状态核存在一个执行状态 Thumb状态状态lARM和和Thumb之间切换使用之间切换使用BX 指令指令63写 Thumb汇编程序lThumb不是一个不是一个“好好” 指令集!指令集!l最好用编译器来产生最好用编译器来产生l约束并不一致约束并不一致l手动编码使用手动编码使用ARM指令集比较好指令集比较好 l更多细节,参看:更多细节,参看:lARM “Architecture Reference Manual”64ADS与与ARM汇编程序设计汇编程序设计65生成二进制文件的过程66编译器的基本功能l规定汇编语言的语法规则规定汇编语言的语法
54、规则lADS Vs. GNUl预编译预编译(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汇编程序中的变量、对变
56、量赋值以及定义寄存器的别名等。用于定义局部变量的LCLA、LCLL、LCLS; 用于定义全局变量的GBLA、GBLL、GBLS ;用于对变量赋值的SETA、SETL、SETS ;为通用寄存器列表定义名称的RLIST。 71符号定义伪指令 1. LCLA、LCLL、LCLSl格式:LCLA/LCLL/LCLS局部变量名l说明:LCLA、LCLL、LCLS伪指令用于定义一个汇编程序中的局部变量,并初始化,其中:LCLA定义一个局部的数字变量,初始化为0;LCLL定义一个局部的逻辑变量,初始化为F;LCLS定义一个局部的字符串变量,初始化为空串;l这三条伪指令用于声明局部变量,在其局部作用范围内变量
57、名必须唯一。 72符号定义伪指令 2. GBLA、GBLL、GBLSl格式:GBLA/GBLL/GBLS 变量名l说明:GBLA、GBLL、GBLS伪操作定义一个汇编程序中的全局变量,并初始化,其中:GBLA定义一个全局数字变量,并初始化为0;GBLL定义一个全局逻辑变量,并初始化为“F”;GBLS定义一个全局字符串变量,并初始化为空串; 这三条伪指令用于定义全局变量,因此在整个程序范围内变量名必须唯一。 73符号定义伪指令 3. SETA、SETL、SETSl格式:变量名SETA/SETL/SETS表达式l说明:SETA:给一个数字变量赋值;SETL:给一个逻辑变量赋值;SETS:给一个字符
58、串变量赋值;格式中的变量名必须为已经定义过的全局或局部变量,表达式为将要赋给变量的值。 74 符号定义伪指令4. RLISTl格式:名称 RLIST寄存器列表l说明:RLIST可用于对一个通用寄存器列表定义名称,该名称可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器为根据寄存器的编号由低到高访问次序,与列表中的寄存器排列次序无关。75 数据定义伪指令l用于为数据分配存储单元,同时也可完成已分配存储单元的初始化。 DCBDCW/DCWUDCD/DCDU DCQ/DCQU DCFS/DCFSU DCFD/DCFDU SPACE FIELD MAP76数据定义伪指令1. D
59、CB: 标号 DCB 表达式 说明:DCB用于分配一块字节单元并用伪指令中指定的表达式进行初始化。其中,表达式可以为使用双引号的字符串或0255的数字,DCB可用“=”代替。 2. DCW/DCWU: 标号 DCW/DCWU 表达式 说明:DCW分配一段半字存储单元并用表达式值初始化,它定义的存储空间是半字对齐的。77数据定义伪指令3. DCD/DCDU: 标号 DCD/DCDU 表达式 说明:DCD伪指令用于分配一块字存储单元并用伪指令中指定的表达式初始化,它定义的存储空间是字对齐的。DCD也可用“&”代替。 4. DCQ/DCQU: 标号 DCQ/DCQU 表达式 说明:DCQ用于
60、分配一块以8个字节为单位的存储区域并用伪指令中指定的表达式初始化,它定义的存储空间是字对齐的。DCQU功能跟DCQ类似,只是分配的存储单元不严格字对齐。 78数据定义伪指令5.DCFD/DCFDU: 标号DCFD/DCFDU 表达式 说明:DCFD用于为双精度的浮点数分配一片连续的字存储单元并用伪指令中指定的表达式初始化,它定义的存储空间是字对齐的,每个双精度的浮点数占据两个字单元。DCFDU功能跟DCFD类似,只是分配的存储单元不严格字对齐。6.DCFS/DCFSU: 标号DCFS/DCFSU 表达式 说明:DCFS用于为单精度的浮点数分配一片连续的字存储单元并用表达式初始化,它定义的存储空间是字对齐的,每个单精
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年货架销售合同范本
- 2025版食堂环保审查达标合同2篇
- 2024年金融科技产品研发合作合同
- 2025年度户外LED广告屏租赁合同专业版3篇
- 2025版航空航天专用钢管材料采购协议
- 2025年度环保型窗户产品安装与检测合同3篇
- 2025版高端设备进出口贸易合同2篇
- 2024年私人墓地交易法律合同版B版
- 2024年度运动场地租赁合同(含赛事宣传推广及媒体合作)3篇
- 2025年发票开具系统升级与维护服务合同3篇
- 2024年锅炉运行值班员(中级)技能鉴定理论考试题库(含答案)
- 福建省泉州市2023-2024学年高一上学期期末质检英语试题(解析版)
- 中华人民共和国民法典(总则)培训课件
- 苏教版(2024新版)七年级上册生物期末模拟试卷 3套(含答案)
- 《项目管理》完整课件
- IB课程-PYP小学项目省公开课获奖课件说课比赛一等奖课件
- 上市央国企数智化进程中人才就业趋势
- 2024-2030年中国苯胺行业现状动态与需求前景展望报告
- 英雄之旅思维模型
- 钉钉数字化管理师中级题库
- 解一元二次方程(公式法)(教学设计)-九年级数学上册同步备课系列
评论
0/150
提交评论