ARM 指令集指南规范.doc

ARM 指令集指南.txt人永远不知道谁哪次不经意的跟你说了再见之后就真的再也不见了。一分钟有多长?这要看你是蹲在厕所里面,还是等在厕所外面……ARM指令集2008-03-12 15:27跳转指令

跳转指令用于实现程序流程的跳转,在ARM 程序中有如下两种方法可以实现程序流程的跳转:

l 使用专门的跳转指令。 l 直接向程序计数器PC 写入跳转地址值。 通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用“MOV LR, PC”等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。

ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令:

l B 跳转指令。 l BL 带返回的跳转指令。 l BLX 带返回和状态切换的跳转指令。 l BX 带状态切换的跳转指令。 (1) B指令 B指令的格式为: B 目标地址 B指令是最简单的跳转指令。一旦遇到一个B指令, ARM处理器将立即跳转到给定的目标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是24位有符号数,左移两位后有符号扩展为32位,表示的有效偏移为26位(前后32MB的地址空间)。如下所示:

B Label; 程序无条件跳转到标号Label 处执行 CMP R1, #0; 当CPSR 寄存器中的Z 条件码置位时, 程序跳转到标号Label 处执行 BEQ Label (2) BL指令 BL指令的格式为: BL 目标地址 BL是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当前内容,因此,可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手段,如下所示:

BL Label; 当程序无条件跳转到标号Label 处执行时, 同时将当前的PC 值保存到R14 中 (3) BLX指令 BLX指令的格式为: BLX 目标地址 BLX指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器R14中。因此,当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态的切换。

同时,子程序的返回可以通过将寄存器R14值复制到PC中来完成。 (4) BX指令 BX指令的格式为: BX 目标地址 BX指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指令,也可以是Thumb指令。 2.14.2 数据处理指令

数据处理指令可分为数据传送指令、算术逻辑运算指令和比较指令等。 数据传送指令用于在寄存器和存储器之间进行数据的双向传输。 算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中的相应条件标志位。

比较指令不保存运算结果,只更新CPSR中相应的条件标志位。 数据处理指令包括: l MOV 数据传送指令。 l MVN 数据取反传送指令。 l CMP 比较指令。 l CMN 反值比较指令。 l TST 位测试指令。 l TEQ 相等测试指令。 l ADD 加法指令。 l ADC 带进位加法指令。 l SUB 减法指令。 l SBC 带借位减法指令。 l RSB 逆向减法指令。 l RSC 带借位的逆向减法指令。 l AND 逻辑与指令。 l ORR 逻辑或指令。 l EOR 逻辑异或指令。 l BIC 位清除指令。 (1) MOV指令 MOV指令的格式为: MOV{S} 目的寄存器, 源操作数 MOV指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。

指令示例如下: MOV R1, R0; 将寄存器R0 的值传送到寄存器R1 MOV PC, R14; 将寄存器R14 的值传送到PC, 常用于子程序返回 MOV R1, R0, LSL#3; 将寄存器R0 的值左移3 位后传送到R1 (2) MVN指令 MVN指令的格式为: MVN{S} 目的寄存器, 源操作数 MVN指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。与MOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值传送到目的寄存器中。其中S 定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。

指令示例如下: MVN R0, #0; 将立即数0 取反传送到寄存器R0 中, 完成后R0=-1 (3) CMP 指令 CMP指令的格式为: CMP 操作数1, 操作数2 CMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数1与操作数2 的关系(大、小、相等),例如,当操作数1大于操作数2,则此后的有GT后缀的指令将可以执行。

指令示例如下: CMP R1, R0; 将寄存器R1 的值与寄存器R0 的值相减, 并根据结果设置CPSR 的标志位 CMP R1, #100; 将寄存器R1 的值与立即数100 相减, 并根据结果设置CPSR 的标志位 (4) CMN指令 CMN指令的格式为: CMN 操作数1, 操作数2 CMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相加,并根据结果更改条件标志位。

指令示例如下: CMN R1, R0; 将寄存器R1 的值与寄存器R0 的值相加, 并根据结果设置CPSR 的标志位 CMN R1, #100; 将寄存器R1 的值与立即数100 相加, 并根据结果设置CPSR 的标志位 (5) TST指令 TST指令的格式为: TST 操作数1, 操作数2 TST指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。操作数1是要测试的数据,而操作数2是一个位掩码,该指令一般用来检测是否设置了特定的位。

指令示例如下: TST R1, #%1; 用于测试在寄存器R1 中是否设置了最低位(%表示二进制数) TST R1, #0xffe; 将寄存器R1 的值与立即数0xffe 按位与, 并根据结果设置CPSR 的标志位

(6) TEQ指令 TEQ指令的格式为: TEQ 操作数1, 操作数2 TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR 中条件标志位的值。该指令通常用于比较操作数1和操作数2是否相等。

指令示例如下: TEQ R1, R2; 将寄存器R1 的值与寄存器R2 的值按位异或, 并根据结果设置CPSR 的标志位 (7) ADD指令 ADD指令的格式为: ADD{S} 目的寄存器, 操作数1, 操作数2 ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。

指令示例如下: ADD R0, R1, R2; R0 = R1 + R2 ADD R0, R1, #256; R0 = R1 + 256 ADD R0, R2, R3, LSL#1; R0 = R2 + (R3 << 1) (8) ADC指令 ADC指令的格式为: ADC{S} 目的寄存器, 操作数1, 操作数2 ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的寄存器中。它使用一个进位标志位,这样就可以做比32位大的数的加法,注意不要忘记设置S后缀来更改进位标志。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。

以下指令序列完成两个128位数的加法,第一个数由高到低存放在寄存器R7~R4,第二个数由高到低存放在寄存器R11~R8,运算结果由高到低存放在寄存器R3~R0:

ADDS R0, R4, R8; 加低端的字 ADCS R1, R5, R9; 加第二个字, 带进位 ADCS R2, R6, R10; 加第三个字, 带进位 ADC R3, R7, R11; 加第四个字, 带进位 (9) SUB指令 SUB指令的格式为: SUB{S} 目的寄存器, 操作数1, 操作数2 SUB指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中。操作数1应是一个寄 存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。

指令示例如下: SUB R0, R1, R2; R0 = R1 - R2 SUB R0, R1, #256; R0 = R1 - 256 SUB R0, R2, R3, LSL#1; R0 = R2 - (R3 << 1) (10) SBC指令 SBC指令的格式为: SBC{S} 目的寄存器, 操作数1, 操作数2 SBC指令用于把操作数1减去操作数2,再减去 CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法 运算。

指令示例如下: SUBS R0, R1, R2; R0 = R1 - R2 - !C, 并根据结果设置CPSR 的进位标志位 (11) RSB指令 RSB指令的格式为: RSB{S} 目的寄存器, 操作数1, 操作数2 RSB指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。

指令示例如下: RSB R0, R1, R2; R0 = R2 – R1 RSB R0, R1, #256; R0 = 256 – R1 RSB R0, R2, R3, LSL#1; R0 = (R3 << 1) - R2

合集下载

04.1 ARM指令集

04.1 ARM指令集

Rm[32-shift_imm]的值。举例如下:
MOV MOV R3,#30 R4,R3,LSL #0x12
则寄存器R4的值为0x00780000。
Softeem Consultancy Service
(2)<Rm>,LSL <Rs> 指令的操作数shifter_operand为寄存器Rm的数值逻辑左移一定位数的值, 移位的位数由Rs寄存器的最低8位Rs[7:0]决定。当Rs[7:0]=0时, shifter_operand的值就是Rm的值,循环器的进位值(Carry-out)为CPSR 中的C标志位;当0<Rs[7:0]<32时,shifter_operand的值为Rm中值逻辑 左移Rs[7:0]位后的值,循环器的进位值为Rm寄存器中最后被移出的位
状态寄存器传送指令、Load/Store指令、协处理器指令和 异常产生指令。本章按指令系统的基本分类方法,分三大部
分(即运算、传送和控制)分ultancy Service
目录 寄存器的寻址方式
1 2 3 4 5 6 7 8 9 寄存器寻址 立即寻址 寄存器偏移寻址 寄存器间接寻址 基址寻址 多寄存器寻址 堆栈寻址 块拷贝寻址 相对寻址
Softeem Consultancy Service
(1)<Rm>,LSL #<shift_imm> 指令的操作数shifter_operand为寄存器Rm的数值逻辑左移shift_imm位。 这里shift_imm的范围为0~31。如果shift_imm为0,则shifter_operand的 值就是Rm的值,循环器的进位值(Carry-out)为CPSR中的C标志位; 如果shift_imm不为零,则shifter_operand 的值为Rm中值逻辑左移 shift_imm位后的值,循环器的进位值为Rm寄存器中最后被移出的位

ARM 微处理器的指令集指令系统

ARM 微处理器的指令集指令系统

...
LOOP MOV R6,#1
...
SUBR1
...
第16页/共70页
1 ARM指令集 —— 简单的ARM程序
;文件名:TEST1.S ;功能:实现两个寄存器相加
;说明使:用使用“A;RM”ul进at行e软注件释仿真调试
AREA Example1,CODE,READONLY
ENTRY
CODE32
基址寻址指令举例如下(前R3索0引x4寻000址00)0:0
LDR R2,将为[RR地33址+,0#装x00载Cx作数0C] R;2读取0Rx355+0x0C地址上的
据
;存储单元0x的AA内容,放入R2
STR R1,[R0,#-4]L!D;R先R20,=[RR03-,4#0,x0然C]后把R1的值
;寄存第到8页/保共70存页 到R0指定的存储单元
▪#immed_8r——常数表达式; ▪Rm——寄存器方式; ▪Rm,shift——寄存器移位方式;
第20页/共70页
1 ARM指令集介绍
ARM指令集——第2个操作数
▪#immed_8r——常数表达式
例如:
ADD R1,R2,#0x0F
说明: ➢ADD{条件}{S} <dest>, <op 1>, <op 2> ➢ dest = op_1 + op_2 ➢将把两个操作数加起来,把结果放置到目的寄存器中。 ➢操作数 1 是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存 器,或一个立即值:
LDMIA R1!,{R2-R7,R12} ;将R1指向的
单元中的数R6据读0出x0?到?4 R2~R7、0Rx1042中0(x4R0100自00动0C加4)

ARMCORTEX-M3指令集

ARMCORTEX-M3指令集

ARMCORTEX-M3指令集名字功能ADC带进位加法ADD加法AND 按位与(原文为逻辑与,有误——译注)。

这里的按位与和C 的”&” 功能相同ASR算术右移BIC 按位清0(把一个数跟另一个无符号数的反码按位与)CMN 负向比较(把一个数跟另一个数据的二进制补码相比较)CMP比较(比较两个数并且更新标志)CPY把一个寄存器的值拷贝到另一个寄存器中EOR近位异或LSL 逻辑左移(如无其它说明,所有移位操作都可以一次移动最多 31格——译注)LSR逻辑右移MOV 寄存器加载数据,既能用于寄存器间的传输,也能用于加载立即数MUL乘法MVN加载一个数的 NOT 值(取到逻辑反的值)NEG取二进制补码ORR按位或(原文为逻辑或,有误——译注)ROR圆圈右移SBC带借位的减法SUB减法TST 测试(执行按位与操作,并且根据结果更新 Z )REV在一个32位寄存器中反转字节序REVH 把一个32位寄存器分成两个16位数,在每个16位数中反转字节序REVSH 把一个32位寄存器的低 16位半字进行字节反转,然后带符号扩展到 32位SXTB带符号扩展一个字节到 32位SXTH带符号扩展一个半字到 32位UXTB无符号扩展一个字节到 32位UXTH无符号扩展一个半字到 32位16位转移指令B无条件转移B条件转移BL 转移并连接。

用于呼叫一个子程序,返回地址被存储在 LR 中BLX #im使用立即数的BLX不要在CM3 中使用CBZ 比较,如果结果为 0 就转移(只能跳到后面的指令——译注)CBNZ 比较,如果结果非0 就转移(只能跳到后面的指令——译注)ARM CORTEX M3指令集16位数据操作指令IT If - Then16位存储器数据传送指令LDR从存储器中加载字到一个寄存器中LDRH从存储器中加载半字到一个寄存器中LDRB从存储器中加载字节到一个寄存器中LDRSH 从存储器中加载半字,再经过带符号扩展后存储一个寄存器中LDRSB 从存储器中加载字节,再经过带符号扩展后存储一个寄存器中STR把一个寄存器按字存储到存储器中STRH 把一个寄存器存器的低半字存储到存储器中STRB把一个寄存器的低字节存储到存储器中LDMIA 加载多个字,并且在加载后自增基址寄存器STMIA 存储多个字,并且在存储后自增基址寄存器PUSH压入多个寄存器到栈中POP从栈中弹出多个值到寄存器中其它16位指令名字功能SVC系统服务调用BKPT 断点指令。

第三章 ARM指令集与编程

第三章 ARM指令集与编程

(2)ARM指令的条件码(续)
1000 1001 1010 1011 HI LS GE LT C置位且Z清0 C清0或Z置位 N等于V N不等于V 无符号高于 无符号低于或等于 有符号大于或等于 有符号小于
1100 1101 1110 1111
GT LE AL NV
Z清0且N等于V Z置位或N不等于V 任何状态 无
堆栈和块拷贝角度的多寄存器加载和存储指令映射堆栈用一般数据存取堆栈用一般数据存取l位存取位存取p位前变址位前变址后变址u位加位加减空向下生长型之前增量减空向下生长型之前增量ldmedldmib111满向下生长型之后增量ldmfdldmia101空向上生长型之前增量ldmealdmdb110满向上生长型之后增量ldmfaldmda100满向上生长型之前增量stmfastmib011空向上生长型之后增量stmeastmia001空向下生长型之前增量stmfdstmdb010满向下生长型之后增量stmedstmda000328相对寻址?相对寻址是变址寻址的一种变通由程序计数器pc提供基地址





(2) ARM指令的条件码
0000 EQ Z置位 相等/等于0
0001
0010
NE
CS/HS
Z清0
C置位
0011 0100 0101 0110 0111
CC/LO MI PL VS VC
C清0 N置位 N清0 V置位 V清0
不等 进位/无符号高于或 等于 无进位/无符号低于 负数 非负数 溢出 无溢出
逻辑移位





LSL:逻辑左移(Logical Shift Left)。寄存器中字的低 端空出的位补0。 · LSR:逻辑右移(Logical Shift Right)。寄存器中字的 高端空出的位补0。 · ASR:算术右移(Arithmetic Shift Right)。算术移位的 对象是带符号数,在移位过程中必须保持操作数的符号 不变。若源操作数为正数,则字的高端空出的位补0。若 源操作数为负数,则字的高端空出的位补1。 · ROR:循环右移(Rotate Right)。从字的最低端移出的 位填入字的高端空出的位。 · RRX:扩展为1的循环右移(Rotate Right Extended by 1 place)。操作数右移一位,空位(位[31])用原C标志 填充。

ARM指令集.ppt

ARM指令集.ppt

ADD 1*/
R0,R0,#1
/*R0←R0 +
ADD 0x3f*/
R0,R0,#0x3f
/*R0←R0 +
在以上两条指令中,第二个源操作数即为立 即数,要求以“#”为前缀,对于以十六进制表 示的立即数,还要求在“#”后加上“0x”。
3.2.2寄存器寻址
寄存器寻址就是利用寄存器中的数值作为操 作数,这种寻址方式是各类微处理器经常采用的 一种方式,也是一种执行效率较高的寻址方式。 以下指令:
ADD R2*/
R0,R1,R2
/*R0←R1+
该指令的执行效果是将寄存器R1和R2的内容 相加,其结果存放在寄存器R0中。
寄存器寻址
第二操作数为寄存器型的移位操作 在ARM指令的数据处理指令中参与操作的第二操作数
为寄存器型时,在执行寄存器寻址操作时,可以选择是 否对第二操作数进行移位,即Rm,{<shift>},其中Rm称 为第二操作数寄存器,<shift>用来指定移位类型(LSL, LSR,ASL,ASR,ROR或RRX)和移位位数。移位位 数可以是5位立即数(#<#shift>)或寄存器(Rs)。在指 令执行时将移位后的内容作为第二操作数参与运算。例 如指令:
3.2.1 3.2.2 3.2.3 3.2.4 3.2.5存器寻址 寄存器间接寻址 基址加偏址寻址 堆栈寻址 块拷贝寻址 相对寻址
3.2.1 立即寻址
立即寻址也叫立即数寻址,这是一种特殊的寻 址方式,操作数本身就在指令中给出,只要取出 指令也就取到了操作数,这个操作数被称为立即 数,对应的寻址方式也就叫做立即寻址。例如以 下指令:
寄存器R1的内容分别逻辑右移2位、R4位(亦 即R1÷4、R1÷2R4),再与寄存器R2的内容相加, 结果放入R3中。

ARM的指令集

ARM的指令集

堆栈寻址
SP 增长
堆栈存 储区
向下 增长 栈区
栈底
0x12345678
栈顶SP 堆栈压栈
堆栈寻址
堆栈指针指向最后压入的堆栈的有效数据项,称 为满堆栈;堆栈指针指向下一个待压入数据的空 位置,称为空堆栈。
压栈
SP栈顶 0x12345678 SP栈顶
满堆栈 栈底
; 读 取 R3+0x0C 地 址 上 的 存 储 ;单元的内容,放入R2
; 先 R0=R0-4 , 然 后 把 R1 的 值 寄 ;存到保存到R0指定的存储单元
基址变址寻址
0x4000000C 0xAA
将R3+0x0C作 为地址装载数
R3 0x40000000
据
R2 00xxA5A5
LDR R2,[R3,#0x0C]
寄存器间接寻址指令举例如下:
LDR
R1,[R2]
;将R2指向的存储单元的数据读 ;出保存在R1中
SWP
R1,R1,[R2] ;将寄存器R1的值和R2指定的存 ;储单元的内容交换
寄存器间接寻址
0x40000000 0xAA R2 0x40000000 R0 0x55
LDR R0,[R2]
寄存器偏移寻址
;到R1 。
MVN R0 ,# 0 ;将立即数 0 取反传送到寄存器 R0 中,完成后
;R0=-1。
MOVS R2,#0x10 ;R2= #0x10,并影响标志位。
MVNS R2,#0xFF ;R2=0Xffff00,并影响标志位。
37
数据处理指令
比较指令
助记符
说明
CMP Rn, operand2 比较指令
寄存器移位寻址是ARM指令集特有的寻址方式。当第2 个操作数是寄存器移位方式时,第2个寄存器操作数 在与第1个操作数结合之前,选择进行移位操作。

ARM指令大全

ARM指令集详解ARM可以用两套指令集:ARM指令集和Thumb指令集。

本文介绍ARM指令集。

在介绍ARM指令集之前,先介绍指令的格式。

1 指令格式(1)基本格式<opcode>{<cond>}{S} <Rd>,<Rn>{,<opcode2>}其中,<>内的项是必须的,{}内的项是可选的,如<opcode>是指令助记符,是必须的,而{<cond>}为指令执行条件,是可选的,如果不写则使用默认条件AL(无条件执行)。

opcode 指令助记符,如LDR,STR 等cond 执行条件,如EQ,NE 等S 是否影响CPSR 寄存器的值,书写时影响CPSR,否则不影响Rd 目标寄存器Rn 第一个操作数的寄存器operand2 第二个操作数指令格式举例如下:LDR R0,[R1] ;读取R1 地址上的存储器单元内容,执行条件ALBEQ DATAEVEN ;跳转指令,执行条件EQ,即相等跳转到DATAEVENADDS R1,R1,#1 ;加法指令,R1+1=R1 影响CPSR 寄存器,带有SSUBNES R1,R1,#0xD;条件执行减法运算(NE),R1-0xD=>R1,影响CPSR 寄存器,带有S(2)第2个操作数在ARM 指令中,灵活的使用第2个操作数能提高代码效率,第2个操作数的形式如下:#immed_8r常数表达式,该常数必须对应8 位位图,即常数是由一个8 位的常数循环移位偶数位得到。

合法常量0x3FC、0、0xF0000000、200、0xF0000001等都是合法常量。

非法常量0x1FE、511、0xFFFF、0x1010、0xF0000010等都是非法常量。

常数表达式应用举例如下:MOV R0,#1 ;R0=1AND R1,R2,#0x0F ;R2 与0x0F,结果保存在R1LDR R0,[R1],#-4 ;读取R1 地址上的存储器单元内容,且R1=R1-4Rm寄存器方式,在寄存器方式下操作数即为寄存器的数值。

arm架构指令集

arm架构指令集ARM架构是一种基于RISC(Reduced Instruction Set Computing)的计算机处理器架构,它被广泛应用于移动设备、嵌入式系统、网络设备等领域。

ARM指令集是ARM架构的核心部分,它定义了处理器如何执行指令以及如何访问内存和I/O设备。

一、ARM指令集概述1. ARM指令集分类ARM指令集可以分为三类:ARM指令集,Thumb指令集和Thumb-2指令集。

其中,ARM指令集是32位的,Thumb和Thumb-2是16位的。

2. ARM寄存器ARM架构有15个通用寄存器(R0-R14)和一个程序计数器(PC)。

通用寄存器可以用来存储数据或地址,程序计数器则用来存储下一条要执行的指令地址。

3. ARM指令格式ARM指令格式包括操作码、操作数和条件码。

操作码表示要执行的操作类型,操作数表示要进行操作的数据或地址,条件码表示在何种情况下执行该条指令。

4. ARM访问内存在ARM中,访问内存需要使用Load和Store指令。

Load用于将数据从内存中读取到寄存器中,Store用于将数据从寄存器中写入到内存中。

5. ARM流水线流水线是ARM处理器中的一种指令执行方式,它将指令执行过程分为若干个阶段,每个阶段可以同时执行不同的指令。

ARM流水线包括取指、译码、执行、访存和写回等阶段。

二、ARM指令集详解1. ARM指令集ARM指令集是32位的,它支持数据处理、分支跳转、访存和其他操作。

以下是一些常用的ARM指令:(1)MOV:将一个寄存器中的值移动到另一个寄存器中。

(2)ADD:将两个寄存器中的值相加,并将结果存储到另一个寄存器中。

(3)SUB:将两个寄存器中的值相减,并将结果存储到另一个寄存器中。

(4)MUL:将两个寄存器中的值相乘,并将结果存储到另一个寄存器中。

(5)CMP:比较两个寄存器中的值是否相等,并设置条件码。

2. Thumb指令集Thumb指令集是16位的,它可以减小程序大小和内存占用。

ARMCortexM3指令集

ARMCortexM3指令集⼀、跳转指令跳转指令⽤于实现程序流程的跳转,在ARM 程序中有两种⽅法可以实现程序流程的跳转:Ⅰ.使⽤专门的跳转指令。

Ⅱ.直接向程序计数器PC 写⼊跳转地址值。

通过向程序计数器PC 写⼊跳转地址值,可以实现在4GB 的地址空间中的任意跳转,在跳转之前结合使⽤ MOV LR,PC 等类似指令,可以保存将来的返回地址值,从⽽实现在4GB 连续的线性地址空间的⼦程序调⽤。

ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4 条指令:1、 B 指令B 指令的格式为:B{条件} ⽬标地址B 指令是最简单的跳转指令。

⼀旦遇到⼀个 B 指令,ARM 处理器将⽴即跳转到给定的⽬标地址,从那⾥继续执⾏。

注意存储在跳转指令中的实际值是相对当前PC 值的⼀个偏移量,⽽不是⼀个绝对地址,它的值由汇编器来计算(参考寻址⽅式中的相对寻址)。

它是 24 位有符号数,左移两位后有符号扩展为 32 位,表⽰的有效偏移为 26 位(前后32MB 的地址空间)。

以下指令:B Label ;程序⽆条件跳转到标号Label 处执⾏CMP R1,#0 ;当CPSR 寄存器中的Z 条件码置位时,程序跳转到标号Label 处执⾏BEQ Label2、 BL 指令BL 指令的格式为:BL{条件} ⽬标地址BL 是另⼀个跳转指令,但跳转之前,会在寄存器R14 中保存PC 的当前内容,因此,可以通过将R14 的内容重新加载到PC 中,来返回到跳转指令之后的那个指令处执⾏。

该指令是实现⼦程序调⽤的⼀个基本但常⽤的⼿段。

以下指令:BL Label ;当程序⽆条件跳转到标号Label 处执⾏时,同时将当前的PC 值保存到R14 中3、 BLX 指令BLX 指令的格式为:BLX ⽬标地址BLX 指令从ARM 指令集跳转到指令中所指定的⽬标地址,并将处理器的⼯作状态有ARM 状态切换到Thumb 状态,该指令同时将PC 的当前内容保存到寄存器R14 中。

ARM体系结构与指令集

令系统与ARM9、ARM9E和ARM10E系列兼容,
便于用户的产品升级换代。 ⑦ 主频最高可达130MIPS,高速的运算处理能力能胜
任绝大多数的复杂应用。
ARM体系结构与指令集
ARM处理器内核系列
ARM9系列微处理器在高性能和低功耗特性方面提 供最佳的性能,具有以下特点:
ARM体系结构与指令集
ARM体系结构的版本
为了精确表述在ARM体系结构和实现中所使用的指 令集,迄今为止,将其定义了7种主要版本,分别 用版本号1~7表示。
ARM体系结构与指令集
ARM体系结构的版本
表2-1体系结构版本和处理器内核的对应关系
ARM体系结构与指令集
ARM体系结构的版本
其中,版本v1、v2、v3主要是处于开发和试验阶段, 功能相对比较单一,并没有大规模占领市场。
ARM体系结构与指令集
ARM技术简介
采用RISC架构的ARM微处理器一般具有如下特点。 ① 体积小、低功耗、低成本、高性能。 ② 支持Thumb(16位)/ARM(32位)双指令集,
能很好的兼容8/16位器件。 ③ 大量使用寄存器,指令执行速度更快。 ④ 大多数数据操作都在寄存器中完成。 ⑤ 寻址方式灵活简单,执行效率高。 ⑥ 指令长度固定。
和数据处理能力。
ARM体系结构与指令集
ARM处理器内核系列
ARM9E系列微处理器的主要特点如下: ① 支持DSP指令集,适合于需要高速数字信号处理的
场合。 ② 5级整数流水线,指令执行效率更高。 ③ 支持32位ARM指令集和16位Thumb指令集。 ④ 支持32位的高速AMBA总线接口。 ⑤ 支持VFP9浮点处理协处理器。 ⑥ 全性能MMU,支持Windows CE、Linux、Palm
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档