ARM指令集与编程._第1页
ARM指令集与编程._第2页
免费预览已结束,剩余31页可下载查看

下载本文档

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

文档简介

1、2005叫创科技博创科技UJUJUJ.UP-TECH.匚DM北京博创兴业科技有限公司BEIJNG UNIVERSAL PIONEERING TECHNOLOGY Co., LTD2005博创科技总体介绍:指令分类特点,格式,条件码数据处理指令:数据传输折令,算术指令,逻供指令,比较指令,乘法指令(略),前导 寧计数(略)程序状态访问指令跳转指令单数据访存指令多数据访存指令英它指令:信兮量操作指令,异常屮断产生指令,协处理器指令(略)伪指令(略)基 J:ARM 的编程博创科技 嵌入互动博创科技1AL UP-TECH CC博创科技嵌入互动博创科技嵌入互动博创料技inh UP-TECH CC2005

2、鮒创科技1 总休介绍指令分类、特点、格式、条件码2005鮒创科技1.1 指令分类ARM 指令集总体分为 6 类指令数据处理抬令:数据传输抬令,并术指令,逻轲指令,比较抬令,乘法指令, 前导零计数。程序状态访问指令:mrs 和 msr跳转指令:b 和 bl。0 访存指令:单数据访存指令?多数据访存指令,信号量操作指令。 片阳屮断产 4:.抬令:sw 闭 I bkpto协处理器指令。博创料技lfUirr博创科技嵌入互动2005側创科技1.2 指令特点所有指令都足32bit。大多数指令都在单周期内完成。所有指令都可以条件执珂load/store系纟占构。指令集可以通过协处理器扩展2005叫创科技r博

3、创科技llit 1 Mi 1 i J0. YF H re,/博创科技嵌入互动1.3 ARM 指令的格式3128 2725 242120 1916 1512 II 8 70Cond001OpcodesRnRdOperand2s vRd, vRn, vOperand2Cond:指令的条件码。Opcode:指令操作码。S:操作是否影响 cpsr。Rn:包含第一个操作数的寄存器编码。博创科技UP-TECHCC博创科技嵌入互动2005側创科技Rd:冃标寄存器编码。Operand2:第 2 操作数。22005叫创科技1.3 ARM 指令的格式(续)1.4 ARM 指令的条件执行所有的 ARM 指令可包含一

4、个可选的条件码, 只有在 cpsr 中的条件标志位满足指定的条件 时,指令才会被执行。不符合条件的代码 依然占用一个时钟周期(相当于一个 NOP 指令)。if (a = b) & (c = d) e+;/ rO, rl, r2, 3, r4 : a, b, c, d,e emp rO, rl empeq r2, r3addeci r4 r4. #1_博创科技1AL UP-TECH CC博创科技嵌入互动InsZction hpcCond0 ( J OpcodesRnRd0perand2Cond0 0 0 0 0 c7.cRdRnRo10 0 1RmCond0 0 0 0 1I 7.sRdMiRd

5、LoRB10 0 1RmCond0 0 0 1 0卜00RnRd0 0 0 010 0 1RmCondo彳IEL E w LRnRdOffsetCond10CFw LRnRegister ListCond0 0 (I I1yLRnRdOffeotl1 H1CffCond0 0 0EI0XLRnRd0 0 0 01S H1RmCond1 0 1IOffsetCond0 0 0 10 0 10 1111111111110 0 0 1RnCondi i d iu彳w| LRnCRdCPNumOffsetCond1 1 1 CoplCRnCRdCPNumOp20CRraCond1 1 1 copi I

6、ICRnRdCPNumOp21CRmCond1111SWI NumberDaidprocessing / PSRTransieiHalfwoid tranfex Res:stex offset sub、sbc, rsbfiirsc 逻轲指令:and orr eor和bic比较指令:cmp、cmn、tst和teq2005博创科技2.1 数据处理指令的特点所自的操作数要么來自寄存器,要么來白立即数,不会來自内存。如果有结果,则结果 定是为 32 位宽,并且放在一个由心器中,不会写入内存(有一个例外:长乘沃猜令产生 64 位汕果)每 个操作数寄存器和结果寄存器都在指令中独丁指出,即:ARM 指令采用

7、 3 地 址模式: Rd, Rn, Rm博创料技博创科技嵌入互动博创科技嵌入互动博创料技lBlj lJP-TECH CC2005側创科技2.2 四种寻址方式和 S 后缀2.2.1 四种寻址方式的硬件支持寄存器,可能需要移位。如需移位,移位值叮为:5bit 的无符号整数(0-3I)在指令的最低字节指 足的另一寄存器立即数8 比特数Cond00XopcodeSRnRd第 2 操作数3128 27 25 24021 20 19 16 1512 II 8 7WUJUJ AXOperandOperand v-1 2 8 70II博创科技嵌入互动博创科技博创科技嵌入互动博创料技lBlj lJP-TECH

8、CC2005側创科技8 比特数循坏右移偶 数位右移位数由汇编器自 动计算博创科技嵌入互动博创料技1JUJ UP-TECH CC2005博创科技2.2.2 立即数寻址 ARM指令中的立即数,由一个8bit的常数循环右移偶数位得H立即数=(0-255)循环右移2N位例子:合法立即数:0 x3fC, 0X0, OxfOOOOOOO, OxfOOOOOOl 非法立即数:0 x1 fe, Oxffff, 0 x1010, OxfOOOOOlOf2005聘创科技博创科技1 i jD. TFf C,/博创科技嵌入互动2.2.2 立即数寻址(续)同一个立即数可能仃多个表示方法。如:0 x3f0 = 0 x3f

9、循环右移28位 0 x3f0 = Oxfc循环右移30位对立即数的编码规则: 如果立即数在0-Oxff之间,移位数为0。否则,就取决丁编译器了。指令“movr0,#0 x3f0”在ADS1.2中被 编译为0 xe3a00ffc,在arm-elf-gcc-2.95.3中被编译为0 xe3a00e3fo2005側创科技2.2.2 立即数寻址(续) 对于有互补操作的指令,编译器可以做智能的转换,比如:这样,些原木半法的&即数也川以正常编译通过。如果个工即数,上述转换丿 fl是合法的,那么它也町以用在数据操作指令屮。博创科技2005聘创科技博创科技嵌入互动LUUJU; UP-Tf2H (CM2.2.3

10、 寄存器移位寻址ASR 算术右移、LSL 逻辑左移A博创科技博创科技嵌入互动mvn r1, OxffffffOOadd r1, r1, #OxffffffOOadc r1, r1, #OxffffffOOand r1, r1 ,#OxffffffOOmovr1,Oxff-sub r1, r1, #0 x100-sbc r1, r1, #Oxff经过2005側创科技LSR 逻辑右移/ROR 循环右移/RRX 扩展的循环右移JLestiii2itionLogicalShift LeftI.jlcnlSliIfYKofiitr Ri=li tliruuvli y DestinationOF博创科技嵌

11、入互动用创科技IJHJUP-TECH CC2005购创科技2.2.3 寄存器移位寻址(续)如果移位的位数由立即数(5blt,取值范围 031)给出,就叫作 immediate specifiedshift:如果 iliRs 的低 5 位决定,就叫做 register specified shift。Register specified shift 的两点问题: 不能便川 pc:如果将 pc 宙存器川Rn, Rd, Rm 和 Rs 的位克 会产生不可预知的结果。额外代价(overhead):盂要更多的周期刀能完成指令,内为 ARM 没有能力一次读取 3 个寄存器。Immediate specif

12、ied shift 没何 I述问题。r12005帽创科技用创科技lip. TP CH tC#博创科技嵌入互动2.2.3 寄存器移位寻址(续)/(.register specified shift .Mil.方式卜便丿IJpc寄存器,编译器捉小如卜警告: 在ADS1.2种编译产生如下警告之一:G Warning A1477W:This register combi nation results in UNPREDICTABLEbehavior Warning : A1320E: Undefined effect (using PC as Rn or Rm in register specifie

13、dshift) Warning : A1319E: Undefined effect (using PC as Rs) 但是在arm-elf-gcc-2.95.3中没右报告错误。博创科技嵌入互动博创料技lMjUP-TE ZH CC2005博创科技2.2.4 后缀 s 数据处理指令町以选择 s 后缀,以影响状态标怎 c 但绘比较指令(cmp、cmn、tst 和 teq) 不需要后缀 s,它们总会血接滋响 cpsrp 的状态标志。 在数据操作抬令中.除了比较指令以外,其它的指令如果带有 s 后缀,同时又以 pc 为丨 I 标 壽存讎进行療祚,则療作的同时从 sps 似袞 cpsr。圧如:movs

14、pc, #Oxffrcpsr =spsr; pc =Oxff Tadds pc, r1, #OxffffffOO/*cpsr =spsr; pc =r1 + OxffffffOO */ands pc, r1, r2rcpsr =spsr; po =r1 & r2; T 如果/i:user 或者 system 模式卜使用带仃 s 后缀的数据慄作指令,同时以 pc 为 H 标寄存器, 乐么会矜虽不苛弱斗*J 结來。因刃 user 和 system 模犬卜汝彳 jspsr。2005博创科技2.3 数据传输指令语法s(vc on ds ss 伪代码 if ConditionPassed(cond) t

15、henRd=2.if s = 1 and Rd = pc then, #vimmed, , , LSL #, , LSL cpsr = spsrelse if s = 1 thenset NZCV flags in cpsr博创料技lfluu TE *H CC博创科技嵌入互动2005帽创科技博创科技嵌入互动憎创科技UP-Tt CH23 数据传输指令(续) 举例movrO, r1rr0 = r1.不修改 cpsr 7movrO, #0 x0rrO = 0,不修改 cpsr VmovsrO, #0 x0/* rO = 0,同时设置 cpsr 的 Z 位*/令movsrO, #-10/* rO =

16、0 xfffffff6,同时设賢 cpsr 的 N 位 */mvnrO, r2PrO = NOT r2.不修改 cpsr 7mvnrO, Oxffffffffrr0 = 0 x0,不修改 cpsr 7mvnsrO, Oxffffffff/* rO = 0 x0,同时设就 cpsr 的 Z 位 7 movrO, r1, LSL#1rrO = r1 1 T令movrO, r1, LSR r2rrO = r1 r2 */2005帽创科技博创科技嵌入互动博创科技*i itiMii 1TF H C2.3 数据传输指令(续)说明令 mvn 意为“取反传输”,它把卩存器的每一位取反,将得到的结果写入结果寄存

17、器。movs 和 mvns 抬令対 pc 寄“器赋位时仃待殊侖义,农小要求人赋值的同时从 spsr 中恢复 cpsr。 对于 mov 和 mvn 指令,编译器会进行智能的转化。比如指令“movrl, OxffffffOCT 屮的芒即数是非法的。在编译时,编译器将其转化为“mvn r1, Oxff*,这样就不违背立即数的要求。所以对于 mov 和 mvn 指令,町以认为: 合法的立即数反码也是合法的立即数。博创科技嵌入互动2005鮒创科技2.4 算术指令语法s , vRn, # s , , s , vRn, vRm, LSL #s , , , LSL 伪代码(以加法 add 为例)if Cond

18、iti on Passed(c ond) the nRd = R n +第 2 操作数if s = 1 and Rd = pc thencpsr = spsrelse if s = 1 thenset NZCV flags in cpsr2005博创科技f-博创料技SUU/UJUP-JtCHCC博创科技嵌入互动2.4 算术指令(续)addadcsubsbcrsbrscro.QQQQQQro,r2r2r2r2r2r2/ rO = r1rrO = r1+ r2 TrrO = r1+ r2 +carry */-r2 7/* rO =r1 - r2 4-carry -17/* rO =,LSL#31,

19、LSL r2博创科技嵌入互动2005鮒创科技adds 和 adcs 在进位时将 cpsr 的 C 标志胃 1:否则宜 0,subs 和 sbcs 在产生借位时将 cpsr 的 C 标志代0:否则世 1。博创科技嵌入互动博创科技lMjUP-Tf CC2005側创科技 andand orreor bicbicandandr0, r1, r2/* r0 = r1 AND r2 7r1, r1 ,#OxffffffOO /*r1 =r1 AND OxffffffOO 7rO, r1, r2/*r0 =r1 ORi2 72.5 逻辑指令语法s , , #面 , , 面 vRd, , LSL #s , ,

20、 LSL 伪代码(以 ana 为例)If ConditionPassed(cond) thenRd = Rn AND 第 2 操作数if s = 1 and Rd = pc thencpsr = spsrelse if s = 1 thenset NZCV flags in cpsrf2005側创科技博创料技UP-Tt ZH CCf/博创科技嵌入互动2.5 逻辑指令(续) 举例博创科技嵌入互动博创科技lajh UP-TECH CC2005叫创科技2.6 比较指令语法 , #vimmed , , , LSL # , , LSL 伪代码(以 cmp 为例)If ConditionPassed(co

21、nd) then alu_out = R n-第 2 操作数 set NZCV flags in cpsr2005叫创科技2.6 比较指令(续)举例cmp r1,r2/-根据 r1 - r2 的结果设留 cpsr,结果不写IHT/博创科技博创科技嵌入互动博创科技嵌入互动博创科技lajh UP-TECH CC2005叫创科技cmn r1,r2/a根据 H + r2 的结來设胃 cpsr,结果不写 I 叩/tstr1,r2/*根据 r1 AND r2 的结果设胃 cpsr,结来不写冋/teq r1,r2/*根据 r1 XOR r2 的结果设置 cpsr,纟占果不写叵广/cmp r2, #5 广根据

22、 r2 - 5 的结來设冒 cpsr,结果不写冋/ cmpr1, r2, LSL #5/* 根据 r1 - (r2 5)设置 cpsr*/cmpr1, r2, LSL r3/* 根据 r1 - (r2 r3)设彗 cpsr */ 说明 如果不考虑结果的写冋,cmp、cmn、1st 和 leq 分别等价 J subs, adds、ands 和 eors博创科技嵌入互动博创科技lMii UP-TECH CC2005聊创科技目录1.总体介绍:指令分类,特点,格式.条件码2.数据处理指令:数据传输折令,算术指令,逻轲指令,比较指令,乘法指令(略),前亍 零计数(略)3.程庁状态访问指令4.跳转指令5.

23、单数据访存指令6.多数据访存指令7.英它指令:信巧量操作指令,异常中断产生指令,协处理器指令(略)&伪指令(略)9. 基 J ARM 的编程2005聊创科技3 程序状态访问指令当需要修改cpsr/spsr的内容时,忤先要读収它的值到个通用寄存器,然 后修改某些位,最后将数据写回到状态寄存器。cpsr/spsr不是通川寄存器,不能使用movlfi令來渎写。在ARM处理器中, 只有mrs指令可以读取cpsr/spsr:貝有msr可以写cpsr/spsr。3.1 读指令 mrs 语法mrs , cpsr|spsr 伪代码if ConditionPassed(cond) then博创科技博创科技嵌入互

24、动博创科技嵌入互动博创料技1AL UP TEZH CC2005側创科技if R = 1 thenRd = spsrelseRd = cpsr2005聘创科技博创料技tlliiMIjTF*H fC,/博创科技嵌入互动3.1 读指令 mrs (续)举例 mrsrO, cpsr /*读取cpsr到rO */mrsr3, spsr /*读取spsr到r3 */说明user和system模式没有spsr,因此这些模式下不能读取spsr。博创科技嵌入互动博创科技IJUJUP-TFCH CC2005側创科技3.2 写指令 msr 的二进制格式3128 27 26 25 24 23 22 21 20 1916

25、 1512 1103.2.1 写指令 msr 的语法msr , #vimmedmsr _, 农示介法的卩数:8bit 循坏右移偶数位vpsr 代农 cpsr 或 spsr指定传送的区域,町进-步细分(只能小写) C控制域字节(psr7:0)0 X扩展域字节(psr15:8) S状态域字节(psr23:16 f标志域字节(psr31:24j)博创科技嵌入互动2005博创科技3.2.2 写指令 msr 的伪代码伪代码if CondrtionPassccKcond) thenf opcode(25 = 1operand = 81陈牧Rotate_Rght (#rot 2)else / opcode2

26、bj = 0 /operand = Rmit RN0 thenif fieW_mask(O) = 1 and InAPrivilegeModeO then cpsr(7X) = operand(7f)if field_mask1 = 1 and lnAPrivilegeMode() then cpsr(l5:8 = operand 15:8)if fiekl_mask2j = 1 and InAPrivilegcMode() then cpsr(23:l6 = operand(23:l6 if field_mask(3 = 1 then cpsr3l :24) = operand3l :24)

27、else / R = 1 7if tield_maskOJ = 1 and CurrentModeHasSPSRO then spsrt7:0) - operand(7:0if tieW_mask1)= 1 and CurrentModeHasSPSR() then &psr(l5:8) operand! 15:8 if tiekl_mask2) = 1 and CurrentModeHasSPSR() thenspsr(23:l6 = cperand23:l6 if tield_mask3 = 1 and CurrentModeHasSPSR() then &psr(3l :24) = op

28、erand3l :242005的创科技r博创科技jP-TECM CCf/博创科技嵌入互动3.2.3 msr 举例和说明 举例msrcpsr_c, #0 xd3msrcpsr_cxsf, r3user 和 system 模式没冇 spsr, I 片此这些模式卜不能对 spsr 操作。由 J权限问题,在 user 模式卜对 cpsr23:0修改无效。如果使用立即数,要使用合法的立即数。程序不能同过“msr 修改 cpsr 的 T 位”來完成 ARM/Thumb 态的切换。必须使 用 bx 指令,因为 bx 属于分支指令,它会打断流水线,实现处理器状态切换。 如果耍修改读出的值,仅修改必要的位,实它

29、位保持不变,这样保持了放人 兼容性。r切换到SVC 模式/说博创科技嵌入互动博创科技iHj UP-TFCH CC2005 Wl创科技1.总体介绍:指令分类,特点,格式.条件码2.数据处理折令:数据传输折令,算术指令,逻侏指令,比较指令,乘法指令(略),前亍 零计数(略)3.程庁状态访问描令4.跳转指令5.单数据访存指令6.多数据访存指令7.其它指令:信巧量操作指令,异常中断产生指令,协处理器指令(略)8.伪指令(略)9.基 J:ARM 的编程2005側创科技4 跳转指令语法 b label bl label 说明3 址范围32MB1 1 1Cond1 1 I I 1 11 1 1 1 111

30、1 1 11 1 1 1 1 1 1 1 1 1 1101| L|Offset3122 2725 24 23博创科技博创科技嵌入互动博创科技嵌入互动2005叫创科技- Condition field1- Link bit0 = Branch1 = Branch with link博创科技嵌入互动2005叫创科技4 跳转指令(续)当转移指令执行时,处理器将指令中的 offset(24bit)左移 2bit,变成 26bit,衣示土 32M 的范围。pc 从新的地址执行,流水线屯新填充。如果是“bl”指令,将返回地址写入 lr 寄存器 旷程序返冋时只需要用 1 够复 pc 就可 以:mov pc,

31、 lr“b”指令不影响 lr 寄存器2005聘创科技r博创料技博创科技嵌入互动博创科技嵌入互动2005叫创科技总体介绍:指令分类特点,格式.条件码数据处理指令:数据传输指令,算术指令,逻供折令,比较指令,乘法指令(略),前导 冬计数(略)程序状态访问指令跳转指令单数据访存指令名数据访存指令其它指令:信巧量操作指令,异常中断产生指令,协处理器指令(略)伪指令(略)基 J:ARM 的编程1 .23.4.博创科技嵌入互动博创科技1BJL HP-TF2H CC5 单数据访存指令第一 类:读写字:令读#符号第炎:令读写无符号半字:读有符号半字,博创科技嵌入互动博创科技lMij UP-TFCH CC2005博创科技读有符号字节:5.2 第

温馨提示

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

评论

0/150

提交评论