




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Copyright 2012 杨词慧杨词慧. All rights reserved.杨词慧杨词慧2015.4嵌入式系统嵌入式系统ARM指令系统及程序设计基础指令系统及程序设计基础Copyright 2012 杨词慧杨词慧. All rights reserved.第第3章章 ARM指令系统及程序设计基础指令系统及程序设计基础3.1 ARM寻址方式寻址方式3.2 ARM指令集指令集3.3 Thumb指令集指令集3.4 ARM程序设计基础程序设计基础Copyright 2012 杨词慧杨词慧. All rights reserved.1)寻址方式寻址方式处理器根据指令中给出的地址信息寻找物理地址
2、处理器根据指令中给出的地址信息寻找物理地址的方式。的方式。寻找操作数或操作数地址的方式。寻找操作数或操作数地址的方式。3.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.1)寻址方式(续)寻址方式(续)3.1 ARM寻址方式寻址方式ARM寻址方式寻址方式立即寻址立即寻址寄存器寻址寄存器寻址寄存器间接寻址寄存器间接寻址基址变址寻址基址变址寻址多寄存器寻址多寄存器寻址寄存器移位寻址寄存器移位寻址相对寻址相对寻址堆栈寻址堆栈寻址Copyright 2012 杨词慧杨词慧. All rights reserved.立即寻址立即寻址也叫立即
3、数寻址,操作数本身在指令中给也叫立即数寻址,操作数本身在指令中给出,该操作数被称为立即数。出,该操作数被称为立即数。例如:例如:ADDR0, R0, #1; R0 R0+1立即数须以立即数须以“#”为前缀,对于十六进制表为前缀,对于十六进制表示的立即数,还需在示的立即数,还需在“#”后加上后加上“0 x”或或“&”。3.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.寄存器寻址寄存器寻址指令地址码中给出寄存器的编号,操作数指令地址码中给出寄存器的编号,操作数存在寄存器中。例如:存在寄存器中。例如:ADDR0, R1, R2
4、; R0 R1+R2寄存器间接寻址寄存器间接寻址以寄存器的值作为操作数地址。以寄存器的值作为操作数地址。例如:例如:ADDR0, R1, R2; R0 R1+R23.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.基址变址寻址基址变址寻址将将寄存器的内容与指令中给出的地址偏移量相加,寄存器的内容与指令中给出的地址偏移量相加,得到操作数的地址。得到操作数的地址。包括包括w基址加偏移量寻址方式基址加偏移量寻址方式w基址加索引寻址方式基址加索引寻址方式3.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All r
5、ights reserved.基址变址寻址基址变址寻址(续)续)基址加偏移基址加偏移量量寻址方式寻址方式w将寄存器内容与指令中给出的地址偏移量相加,得到操将寄存器内容与指令中给出的地址偏移量相加,得到操作数的有效地址作数的有效地址。如:如:LDRR0, R1, #4; R0 R1+4w前变址前变址:基址加变址作为操作数地址。:基址加变址作为操作数地址。后变址后变址:基址作为操作数的地址,传送后自动更新基址:基址作为操作数的地址,传送后自动更新基址寄存器的值。寄存器的值。3.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.基址变址寻
6、址基址变址寻址(续)续)3.1 ARM寻址方式寻址方式STR R0,R1, #12 ; R1+12R0前变址前变址Copyright 2012 杨词慧杨词慧. All rights reserved.基址变址寻址基址变址寻址(续)续)3.1 ARM寻址方式寻址方式STR R0,R1, #12; R1R0, R1R1+12后变址后变址Copyright 2012 杨词慧杨词慧. All rights reserved.基址变址寻址基址变址寻址(续)续)基址加基址加索引索引寻址方式寻址方式w将将基址寄存器的值与索引寄存器的值相加基址寄存器的值与索引寄存器的值相加,形成形成操作数操作数的有效地址。例
7、如:的有效地址。例如: LDRR0, R1, R2 ; R0 R1+R23.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.多寄存器寻址多寄存器寻址一次完成多个(最多一次完成多个(最多16)寄存器值的传送)寄存器值的传送例如:例如:LDMIA R0, R1, R2, R4; R1 R0; R2 R0+4; R4 R0+83.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.多寄存器寻址(续)多寄存器寻址(续)3.1 ARM寻址方式寻址方式IAr1地址地址增加增加r4r0
8、r1r4r0r1r4r0r1r4r0r10IBDADBSTMxx r10, r0,r1,r4基址寄存器基址寄存器 (Rn)地址递减,指针地址递减,指针最后位置最后位置地址递增,指地址递增,指针最后位置针最后位置Copyright 2012 杨词慧杨词慧. All rights reserved.寄存器移位寻址寄存器移位寻址操作数为寄存器中数做相应的移位而得到操作数为寄存器中数做相应的移位而得到例如:例如:ADD R0, R1, R2, LSL #3; R0 R1+8R23.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.寄存器移位
9、寻址(续)寄存器移位寻址(续)ARM中的移位或循环移位操作中的移位或循环移位操作wLSL:逻辑左移(:逻辑左移(Logical Shift Left)wLSR:逻辑右移(:逻辑右移(Logical Shift Right)3.1 ARM寻址方式寻址方式00Copyright 2012 杨词慧杨词慧. All rights reserved.寄存器移位寻址(续)寄存器移位寻址(续)wASR:算术右移(:算术右移(Arithmetic Shift Right)。)。移位移位过程过程中保持符号位不变,若源操作数为正数中保持符号位不变,若源操作数为正数,则字的高端空,则字的高端空出的位补出的位补0。若
10、源操作数为负数,则字的高端空出的位。若源操作数为负数,则字的高端空出的位补补1。3.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.寄存器移位寻址(续)寄存器移位寻址(续)wROR:循环右移(:循环右移(Rotate Right)。)。从字的最低端移出从字的最低端移出的位的位依次填入字的高端空出的位依次填入字的高端空出的位。3.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.寄存器移位寻址(续)寄存器移位寻址(续)wRRX:扩展的循环右移(:扩展的循环右移(Rotat
11、e Right Extended )。)。操作操作数向右移数向右移一位,左侧空位由状态寄存器一位,左侧空位由状态寄存器C位填充。位填充。w当移位的类型为当移位的类型为RRX时,无需指定移位的位数,其它时,无需指定移位的位数,其它的则须指定移位的位数。的则须指定移位的位数。3.1 ARM寻址方式寻址方式CCopyright 2012 杨词慧杨词慧. All rights reserved.相对寻址相对寻址以以PC当前值作为基地址,指令中的地址当前值作为基地址,指令中的地址标号作为位移量,两者相加后得到操作数标号作为位移量,两者相加后得到操作数的有效地址。例如:的有效地址。例如:BLNEXT ;
12、跳转至子程序跳转至子程序 NEXTNEXTMOVPC, LR ; 从子程序返回从子程序返回3.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.堆栈寻址堆栈寻址堆栈:按先进后出堆栈:按先进后出(FILO)的方式工作,使用堆栈的方式工作,使用堆栈指针指针(Stack Pointer, SP) 指示当前操作位置。指示当前操作位置。根据栈指针的指向位置可将堆栈分为根据栈指针的指向位置可将堆栈分为w满堆栈:满堆栈:SP指向最后压入堆栈的数据。指向最后压入堆栈的数据。w空堆栈:空堆栈:SP指向下个将放入数据空位置指向下个将放入数据空位置3.1
13、 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.堆栈寻址堆栈寻址3.1 ARM寻址方式寻址方式12SP满满12SP空空来源:王亮的来源:王亮的PPTCopyright 2012 杨词慧杨词慧. All rights reserved.堆栈寻址(续)堆栈寻址(续)根据堆栈的生成方式可将堆栈分为根据堆栈的生成方式可将堆栈分为w递增堆栈递增堆栈(Ascending Stack):堆栈由低地址向高地址生:堆栈由低地址向高地址生成。成。w递减堆栈递减堆栈(Descending Stack) :由高地址向低地址生成。:由高地址向低地址生成。3.
14、1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.堆栈寻址(续)堆栈寻址(续)3.1 ARM寻址方式寻址方式12SPBase,LowHigh递增堆栈递增堆栈SP12Base, HighLow递减堆栈递减堆栈来源:王亮的来源:王亮的PPTCopyright 2012 杨词慧杨词慧. All rights reserved.3.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.堆栈寻址(续)堆栈寻址(续)ARM支持四种类型堆栈工作方式支持四种类型堆栈工作方式w满递增堆栈:满递
15、增堆栈:SP指向最后压入的数据,且由低地址向高指向最后压入的数据,且由低地址向高地址生成。地址生成。w满递减堆栈:满递减堆栈:SP指向最后压入的数据,且由高地址向低指向最后压入的数据,且由高地址向低地址生产。地址生产。3.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.堆栈寻址(续)堆栈寻址(续)3.1 ARM寻址方式寻址方式12SPBase,LowHigh满递增堆栈满递增堆栈SP12Base, HighLow满递减堆栈满递减堆栈来源:王亮的来源:王亮的PPTCopyright 2012 杨词慧杨词慧. All rights re
16、served.堆栈寻址(续)堆栈寻址(续)堆栈工作方式堆栈工作方式w空递增堆栈:空递增堆栈:SP指向下个将放入数据的空位置,且由低指向下个将放入数据的空位置,且由低地址向高地址生成。地址向高地址生成。w空递减堆栈:空递减堆栈:SP指向下个将要放入数据的空位置,且由指向下个将要放入数据的空位置,且由高地址向低地址生成。高地址向低地址生成。3.1 ARM寻址方式寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.堆栈寻址(续)堆栈寻址(续)3.1 ARM寻址方式寻址方式来源:王亮的来源:王亮的PPT12SPBase,LowHigh空递增堆栈空递增堆栈12S
17、PBase, HighLow空递减堆栈空递减堆栈Copyright 2012 杨词慧杨词慧. All rights reserved.1)ARM指令集分类指令集分类加载加载/存储指令存储指令数据处理指令数据处理指令分支指令分支指令状态寄存器访问指令状态寄存器访问指令异常异常/中断指令中断指令协处理器指令协处理器指令3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.ARM指令的特点指令的特点所有指令都是所有指令都是32bit;大多数指令都在大多数指令都在单周期内完成单周期内完成;所有指令所有指令都可以条件执行都可以条件执行;load/
18、store体系结构体系结构;指令集指令集可以通过协处理器扩展可以通过协处理器扩展。3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.ARM指令的格式指令的格式3.2 ARM指令集指令集s , , Cond xxx Opcode SRnRdOperand2011121516192021242527283178条件码条件码指令操指令操作码作码操作是否影操作是否影响响CPSR第第1操作数操作数目标寄存器目标寄存器第第2操作数操作数Copyright 2012 杨词慧杨词慧. All rights reserved.3.2 ARM指令集指令
19、集ARM指令指令集集1 Datasheet P39Copyright 2012 杨词慧杨词慧. All rights reserved.3.2 ARM指令集指令集ARM指令指令集集2Copyright 2012 杨词慧杨词慧. All rights reserved.ARM指令的条件执行指令的条件执行所有所有ARM指令都可包含一个可选的条件码,指令都可包含一个可选的条件码,只有当只有当CPSR中条件标志位满足指定条件时,中条件标志位满足指定条件时,指令才会被执行。否则以指令才会被执行。否则以NOP指令通过流指令通过流水线。水线。3.2 ARM指令集指令集;R0, R1, R2, R3, R4
20、: a, b, c, d, eCMPR0, R1CMPEQR2, R3ADDEQR4, R4, #1if (a = b) & (c = d) e+;Copyright 2012 杨词慧杨词慧. All rights reserved.3.2 ARM指令集指令集条件码条件码助词符 条件标志位值含义0000EQZ置位相等/等于00001NEZ清0不等0010CS/HSC置位进位/无符号高于或等于0011CC/LOC清0无进位/无符号低于0100MIN置位负数0101PLN清0非负数0110VSV置位溢出0111VCV清0无溢出Copyright 2012 杨词慧杨词慧. All right
21、s reserved.3.2 ARM指令集指令集条件码条件码助词符条件标志位值含义1000HIC置位且Z清0无符号高于1001LSC清0或Z置位无符号低于或等于1010GEN等于V有符号大于或等于1011LTN不等于V有符号小于1100GTZ清0且N等于V有符号大于1101LEZ置位或N不等于V有符号小于或等于1110AL任何状态总是(always)1111NV无从不(never)Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令存储指令Load:将内存中数据装载到寄存器:将内存中数据装载到寄存器Store:将寄存器中的数据存入内存:将寄存
22、器中的数据存入内存3.2 ARM指令集指令集内存内存寄存器寄存器LoadStoreCopyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)单寄存器传输指令单寄存器传输指令w B Rd, addressing1w SB | H | SHRd, addressing2w B Rd, LABEL 3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)单寄存器传输指令(续)单寄存器传输指令(续)3.2 ARM指令集指令集Rn, # +/-
23、offset_8Rn, +/- Rmaddressing2Rn, # +/- offset_12Rn, +/- RmRn, +/- Rm, #shift_immaddressing1Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)单寄存器传输指令单寄存器传输指令wLDR B|SB|H|SH 目的寄存器目的寄存器, wSTR B|SB|H|SH 源寄存器源寄存器, 3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)单寄存器
24、传输指令(续)单寄存器传输指令(续)wLDR/STR:读:读/写一个写一个32bit字到字到/从一个从一个32位寄存器,要位寄存器,要求读求读/写地址字对齐。写地址字对齐。wLDRB:内存:内存8bit字节字节32bit寄存器;不要求地址对齐,寄存器;不要求地址对齐,寄存器高寄存器高24位清零。位清零。wSTRB:寄存器低:寄存器低8位位内存的某个地址;不要求地址内存的某个地址;不要求地址对齐。对齐。3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)单寄存器传输指令单寄存器传输指令wLDRH:1
25、6bit半字半字 32bit寄存器;要求地址半字对齐,寄存器;要求地址半字对齐,寄存器的高寄存器的高16bit清零。清零。wSTRH:寄存器低:寄存器低16bit内存;要求地址半字对齐。内存;要求地址半字对齐。3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)单寄存器传输指令单寄存器传输指令wLDRSH:有符号:有符号16bit半字半字32bit寄存器中;要求地址寄存器中;要求地址半字对齐,寄存器高半字对齐,寄存器高16bit根据符号位扩展。根据符号位扩展。wLDRSB:有符号:有符号8bit字
26、节字节32bit寄存器中;不要求地寄存器中;不要求地址对齐,寄存器高址对齐,寄存器高24bit根据符号位扩展。根据符号位扩展。3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)3.2 ARM指令集指令集助词符意义助词符意义LDR载入字STR存储字LDRH载入半字STRH存储半字LDRSH 载入有符号半字STRSH 存储有符号半字LDRB载入字节STRB存储字节单寄存器传输指令助词符单寄存器传输指令助词符Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载
27、/存储指令(续)存储指令(续)3.2 ARM指令集指令集变址模式数据基址寄存器指令举例回写前变址membase+offset基址寄存器加偏移量LDR R0, R1, #4!前变址membase+offset不变LDR R0, R1, #4后变址membase基址寄存器加偏移量LDR R0, R1, #4LDR/STR指令的变址模式指令的变址模式Copyright 2012 杨词慧杨词慧. All rights reserved.3.2 ARM指令集指令集Rn, # +-0 0 0 0 0 0 0 0 0 0Rm03411方式方式2:Rm例子:例子:LDR R0, R1, R2011#immed
28、_12方式方式1:#immed_12(取值范围(取值范围0 0 xfff)例子:例子:LDR R0, R1, #+0 xfffshiftRm03411#immed_567方式方式3:Rm LSL #immed_5(取值范围(取值范围0-31)例子:例子:LDR R0, R1, R2 LSL #41050/1 : STR/LDR0/1 : 无无/有有(!)0/1 : 后变址后变址/前变址前变址0/1 : 字字/无符号字节无符号字节condRnRd第第 2 操作数操作数07811121516192022012728312324U B W L2126PI250/1 : 减减/加加(第第2操作数操作数
29、)0/1 : 立即数立即数(方式方式1)/寄存器寄存器(方式方式2,3) Datasheet P193Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)多寄存器传输指令多寄存器传输指令w Rn!, wLDM / STM:从由基址寄存器指示的一片连续存储器从由基址寄存器指示的一片连续存储器到寄存器列表所指示的多个寄存器之间传送数据到寄存器列表所指示的多个寄存器之间传送数据。3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.w对于对于LDM操作,如恢复的寄存器中含
30、有操作,如恢复的寄存器中含有PC(R15)寄存器,寄存器,则指令执行的同时则指令执行的同时CPU自动将自动将SPSR拷贝到拷贝到CPSR中,例:中,例:LDMFD R0-R12, LR, PCw数据的传送发生在数据的传送发生在User用户模式下的寄存器,而非当前用户模式下的寄存器,而非当前模式寄存器,例如:模式寄存器,例如:LDMDB SP, R0 - LR3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)多寄存器传输指令多寄存器传输指令w例如:例如:STMIA R0!, R1-R5;以以R0为
31、地址指针,将为地址指针,将R1-R5保存到内存,指针向上移保存到内存,指针向上移动动3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)3.2 ARM指令集指令集IA 每次传送后地址加每次传送后地址加1IB 每次传送前地址加每次传送前地址加1DA 每次传送后地址减每次传送后地址减1DB 每次传送前地址减每次传送前地址减1FA 满递增堆栈满递增堆栈FD 满递减堆栈满递减堆栈EA 空递增堆栈空递增堆栈ED 空递减堆栈空递减堆栈寻址模式寻址模式Copyright 2012 杨词慧杨词慧. All rig
32、hts reserved.加载加载/存储指令(续)存储指令(续)3.2 ARM指令集指令集寻址模式变址描述起始地址结束地址选择!时Rn值改变方式IA执行后增加RnRn+4*N-4Rn+4*NIB执行前增加Rn+4Rn+4*NRn+4*NDA执行后减少Rn-4*N+4 RnRn-4*NDB执行前减少Rn-4*NRn-4Rn-4*N多寄存器传输指令多寄存器传输指令的寻址模式的寻址模式Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)3.2 ARM指令集指令集栈类型内存数据传至寄存器 寄存器数据传至内存寻址模式说明栈操作弹出块
33、操作加载栈操作压入块操作保存FA满递增LDMFALDMDASTMFASTMDAFB满递减LDMFDLDMIASTMFDSTMIA栈操作寻址方式栈操作寻址方式Copyright 2012 杨词慧杨词慧. All rights reserved.加载加载/存储指令(续)存储指令(续)交换指令交换指令wSWP B Rd, Rm, RnwSWP:字交换;:字交换;SWPB:字节交换:字节交换wTemp Rn, Rn Rm, Rd Temp, w例如:例如:SWP R1, R2, R3; R1R3,R3 R2SWP R1, R1, R2; R1与与R2内容互换内容互换3.2 ARM指令集指令集Copyr
34、ight 2012 杨词慧杨词慧. All rights reserved.数据处理指令数据处理指令3.2 ARM指令集指令集助词符意义助词符意义MOV数据传送指令MVN数据取反传送指令CMP比较指令CMN反值比较指令TST位测试指令TEQ相等测试指令ADD加法指令ADC带进位加法指令SUB减法指令SBC带借位减法指令RSB逆向减法指令RSC带借位的逆向减法指令AND逻辑与指令ORR逻辑或指令EOR逻辑异或指令BIC位清除指令MUL乘法指令MLA带累加的乘法UMULL64位无符号乘法UMLAL64位无符号乘加法SMULL64位有符号乘法SMLAL64位有符号乘加指令Copyright 2012
35、 杨词慧杨词慧. All rights reserved.3.2 ARM指令集指令集ADD R0, R1, #0 xffADD R0, R1, R2, LSL R3condSRnRdOperand2078111215161920opcode212400X25272831#immed_8#rot078110 0 0 0 0 0 0 0Rm03411方式方式1:#immed方式方式2:Rm0 0 0 0 Rm03411Rs78方式方式3:Rm LSL RsshiftRm03411#immed_567方式方式4:Rm LSL #immed_5(#immed_5取值范围取值范围0-31)ADD R0,
36、 R1, R1, LSL #41ADD R0, R1, R2 Datasheet P156Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)数据传送指令数据传送指令w数据传送指令数据传送指令MOV cond SRd, Operand例如:例如:MOVR1, R0MOVEQ PC, R14 ; 将将R14值传到值传到PC3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)数据传送指令(续)数据传送指令(续)w数据取反传送指令数据取
37、反传送指令MVN cond SRd, Operand例如:例如:MVN R1, #2; 将立即数将立即数2取反送至取反送至R1为什么有为什么有MVN?3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)算术运算指令算术运算指令wADD、ADCADD|ADC cond S Rd, Oper1, Oper23.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)w例如:例如:ADDSR0, R4, R8; 加低端
38、的字加低端的字ADCSR1, R5, R9; 带进位加第二字带进位加第二字ADCSR2, R6, R10; 带进位加第三字带进位加第三字ADCR3, R7, R11; 带进位加第四字带进位加第四字3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)算术运算指令(续)算术运算指令(续)wSUB:减法指令:减法指令SUB cond SRd, Oper1, Oper2wSBC:带借位减法指令:带借位减法指令SBC cond SRd, Oper1, Oper2例:例:SBCS R0, R1, R2 ; R0
39、=R1R2C3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)算术运算指令(续)算术运算指令(续)wRSB:反向减法指令:反向减法指令RSB cond SRd, Oper1, Oper2操作数操作数2减去操作数减去操作数1,例如:,例如:RSBR0, R1, R2; R0 = R2 R1wRSC:带借位的逆向减法指令:带借位的逆向减法指令RSC cond SRd, Oper1, Oper23.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved
40、.数据处理指令(续)数据处理指令(续)逻辑运算指令逻辑运算指令wAND:与:与AND cond SRd, Oper1, Oper2wORR:或:或ORR cond SRd, Oper1, Oper2wEOR:异或:异或EOR cond SRd, Oper1, Oper23.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)比较指令比较指令wCMPCMP condOperand1, Operand23.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserv
41、ed.数据处理指令(续)数据处理指令(续)比较指令(续)比较指令(续)wCMN:反值比较:反值比较CMN condOperand1, Operand2将第一个数与第二个数的反值进行比较,相当于完成两将第一个数与第二个数的反值进行比较,相当于完成两个数相加。例如:个数相加。例如:CMNR1, R0 ; R1+R0,并设置,并设置CPSR3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)测试指令测试指令wTSTTST condOperand1, Operand2 把两个操作数按位进行与运算,根据结果更
42、新把两个操作数按位进行与运算,根据结果更新CPSR。3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)测试指令(续)测试指令(续)wTEQTEQ condOperand1, Operand2把两个操作数按位进行异或运算,根据结果更新把两个操作数按位进行异或运算,根据结果更新CPSR3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)乘法指令乘法指令wMULMUL cond SRd, Oper1, Ope
43、r2RdOperand1Operand2。例如:。例如:MUL R0, R1, R2 ; R0 =R1R2 3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)乘法指令(续)乘法指令(续)wMLAMLA cond S Rd,Oper1,Oper2,Oper3 RdOperand1Operand2+Operand3例如:例如:MLA R0, R1, R2, R3; R0 = R1R2+R3 3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.
44、数据处理指令(续)数据处理指令(续)乘法指令(续)乘法指令(续)wUMULL:64位无符号数乘法指令位无符号数乘法指令UMULL cond S Rd_L, Rd_H, Operand1, Operand2Rd_H:Rd_L Operand1Operand23.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)乘法指令(续)乘法指令(续)w例如:例如:UMULLR0, R1, R2, R3; R0 = (R2R3) 的低的低32位位; R1 = (R2R3) 的高的高32位位3.2 ARM指令集指令集C
45、opyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)乘法指令(续)乘法指令(续)wUMLAL: 64位无符号数乘加指令位无符号数乘加指令UMLAL cond S Rd_L, Rd_H, Operand1, Operand2Rd_H:Rd_L+= Operand1Operand23.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)乘法指令(续)乘法指令(续)w例如:例如:UMLAL R0, R1, R2, R3; R0 = (R2R3
46、)的低的低32位位+R0; R1 = (R2R3)的高的高32位位+R13.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)乘法指令(续)乘法指令(续)wSMULL:64位有符号数乘法指令位有符号数乘法指令SMULL cond S Rn_L, Rn_H, Operand1, Operand2Rd_H:Rd_L Operand1Operand23.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.数据处理指令(续)数据处理指令(续)乘法指令(续
47、)乘法指令(续)wSMLAL: 64位有符号数乘加指令位有符号数乘加指令SMLAL cond S Rn_L, Rn_H, Operand1, Operand2Rd_H:Rd_L+= Operand1Operand23.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.分支指令分支指令B (分支指令分支指令)和和 BL (带链接分支指令带链接分支指令)wB cond LABELwBL cond LABELw允许向前或向后跳转最高允许向前或向后跳转最高32MB。wBL:带返回的分支指令,用于调用一个将其返回地址存:带返回的分支指令,用于调用
48、一个将其返回地址存入链接寄存器的函数入链接寄存器的函数。3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.分支指令分支指令3.2 ARM指令集指令集cond101 LSigned_immed_240232425272831B 和和 BL的指令编码的指令编码Copyright 2012 杨词慧杨词慧. All rights reserved.分支指令分支指令(续)(续)B 和和 BL (续)(续)3.2 ARM指令集指令集例如:例如:BLSUBPRGSUBPRG; MOVPC, LR; 返回返回Copyright 2012 杨词慧杨词
49、慧. All rights reserved.分支指令分支指令(续)(续)BX (分支并可选地交换指令集分支并可选地交换指令集)BLX(带链接分支并可选地交换指令集带链接分支并可选地交换指令集)wBX cond RmwBLX cond LABEL | RmwRm:转移地址,:转移地址,bit0为为0时,目标地址处为时,目标地址处为ARM指令,指令,否则为否则为Thumb指令。指令。3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.分支指令分支指令(续)(续)wBX 和和 BLX指令执行与指令执行与B和和BL指令相同的分支操作,并指令
50、相同的分支操作,并可从可从ARM指令集切换到指令集切换到THUMB指令集。指令集。3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.分支指令分支指令(续)(续)长跳转长跳转w通过向通过向PC寄存器中写目标地址值,可实现在寄存器中写目标地址值,可实现在4GB地址空地址空间中进行任意跳转。间中进行任意跳转。w例如:例如:MOVLR, PC; 保存返回地址保存返回地址MOVR15, #0 x00110000 ; 无条件转向无条件转向0 x1100003.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All right
51、s reserved.状态寄存器访问指令状态寄存器访问指令MRSwMRS Rd, w将状态寄存器的内容传送到通用寄存器中。例如:将状态寄存器的内容传送到通用寄存器中。例如:MRSR3, CPSR; CPSRR33.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.状态寄存器访问指令状态寄存器访问指令(续续)MSRwMSR _, RmwMSR _,#3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.状态寄存器访问指令状态寄存器访问指令(续续)w表示下列情况之一:表示下列情况之一
52、:c:控制域,即:控制域,即PSR7:0 x:扩展域,即:扩展域,即PSR15:8 s:状态域,即状态域,即PSR23:16 f:标志域,即:标志域,即PSR32:24wCPSR|SPSR 通用寄存器。例如:通用寄存器。例如:MSR CPSR_F, #&F00000000;设置所有标志位设置所有标志位3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.异常异常/中断指令中断指令(续)(续)SWIwSWI w产生产生SWI异常中断,以实现在用户模式下调用操作系统异常中断,以实现在用户模式下调用操作系统的监控功能程序的监控功能程序
53、 。它将处理器置于管理。它将处理器置于管理 (SVC) 模式。模式。例如:例如:SWI 0 x01 ;调用编号为调用编号为01的系统例程的系统例程3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.异常异常/中断指令中断指令(续)(续)BKPTwBKPT w产生软件断点中断,可用于程序调试。产生软件断点中断,可用于程序调试。w例如例如BKPT0 xF0103.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.协处理器指令协处理器指令CDPwCDP , , CRd, CRn, C
54、Rm ,w编号为编号为CP#的协处理器接受指令并执行。具体操作由的协处理器接受指令并执行。具体操作由Cop1和和Cop2定义,定义,CRn和和CRm为源操作数,结果为源操作数,结果CRd3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.协处理器指令协处理器指令(续)(续)CDP (续)(续)w例如:例如:CDP P6, 2, C5, C10, C3, 16; 激活协处理器激活协处理器P6的操作,操作码的操作,操作码1和操作码和操作码2值分别为值分别为2和和16,目标寄存器为,目标寄存器为C5,源操作数寄存器为,源操作数寄存器为C10
55、和和C33.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.协处理器指令协处理器指令(续)(续)MRC和和MCRwMRC | MCR , , CRd, CRn, CRm ,w在在ARM与协处理器寄存器间传数据。与协处理器寄存器间传数据。wMRC:ARM寄存器寄存器协处理器寄存器协处理器寄存器MCR:协处理器寄存器:协处理器寄存器ARM寄存器寄存器3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.协处理器指令协处理器指令(续)(续)MRC和和MCRw例如:例如:MCRP3,
56、3, R0, C4, C5, 6; ARM处理器处理器R0协处理器协处理器P3的寄存器的寄存器C4和和C53.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.协处理器指令协处理器指令(续)(续)LDC和和STCw在协处理器寄存器与存储器间传送数据在协处理器寄存器与存储器间传送数据wLDC:协处理器寄存器:协处理器寄存器存储器存储器 STC:存储器存储器协处理器寄存器协处理器寄存器3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.协处理器指令协处理器指令(续)(续)LDC和和
57、STCw前变址格式前变址格式LDC | STC L , CRd, Rn, !w后变址格式后变址格式LDC | STC L , CRd, Rn, 3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.协处理器指令协处理器指令(续)(续)LDC和和STCwLDCP3, C4, R0;将将ARM处理器的寄存器处理器的寄存器R0所指向的存储器中的字数据传送到协处理器所指向的存储器中的字数据传送到协处理器P3的寄的寄存器存器C4中中wSTC P3, C4, R0 ;将将P3的的C4 中的字数据传至中的字数据传至ARM的的R0所指向的存储器所指向的
58、存储器3.2 ARM指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.1)Thumb指令集的特点指令集的特点是是ARM指令集压缩形式的子集,所有指令集压缩形式的子集,所有Thumb指令均有对应的指令均有对应的ARM指令。指令。采用采用16位二进制编码,代码密度小。位二进制编码,代码密度小。执行执行Thumb指令时,指令时,先动态解压缩,然后先动态解压缩,然后作为标准的作为标准的ARM指令执行。指令执行。如何区分指令流取决于如何区分指令流取决于CPSR的位的位T。3.3 Thumb指令集指令集Copyright 2012 杨词慧杨词慧. All r
59、ights reserved.1)Thumb指令集的特点(续)指令集的特点(续)大多大多Thumb数据处理指令采用数据处理指令采用2地址格式。地址格式。移位操作变成单独指令。移位操作变成单独指令。没有协处理器指令、单寄存器交换指令、没有协处理器指令、单寄存器交换指令、乘加指令、乘加指令、64位乘法指令及程序寄存器处位乘法指令及程序寄存器处理指令。理指令。仅分支指令仅分支指令B有条件执行功能有条件执行功能。3.3 Thumb指令集指令集Copyright 2012 杨词慧杨词慧. All rights reserved.1)Thumb指令集的特点(续)指令集的特点(续)3.3 Thumb指令集指
60、令集015310ADDS r2,r2,#1ADD r2,#132-bit ARM 指令指令16-bit Thumb 指令指令Copyright 2012 杨词慧杨词慧. All rights reserved.Thumb状态切换状态切换ARM状态进入状态进入Thumb状态状态w执行带状态切换的转移指令执行带状态切换的转移指令BX。例如:。例如:BX R0 ; 若若R0最低位为最低位为1,则转,则转Thumb状态状态3.3 Thumb指令集指令集Rn3101ARM / Thumb 选择选择0 - ARM 状态状态1 - Thumb 状态状态Copyright 2012 杨词慧杨词慧. All rights reser
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 室内墙面防水施工方案
- 2024年三季度报湖南地区A股长期负债比率排名前十大上市公司
- 2024年三季度报湖南地区A股利息支付倍数排名前十大上市公司
- 堆土施工方案
- 钢桥梁施工方案
- 2025年餐厅经理考试试题及答案
- 2025年专业培训 测试题及答案
- 6年级上册数学第5单元
- 2025年消防入门考试题及答案
- close关闭文件的语法
- 口腔科急救预案培训课件
- 新教科版5年级科学下册第二单元《6设计我们的小船》课件
- 弗洛姆异化理论
- Q∕CR 9602-2015 高速铁路路基工程施工技术规程
- 园林喷灌工程施工方案(精编版)
- 碳纳米管_ppt课件
- 【课件】第2课如何鉴赏美术作品课件-高中美术人教版(2019)美术鉴赏
- [康熙字典9画五行属金的字加解释] 康熙字典五行属金的字
- 托盘操作评分表
- 关于老年痴呆症及其智能陪护设备的调查报告
- 椴木灵芝栽培技术
评论
0/150
提交评论