北航微机原理第6讲 ARM指令系统(3)


3.3.3 ARM指令
• ARM指令集——乘法指令
ARM7TDMI具有三种乘法指令,分别为: 32×32位乘法指令; 32× 32位乘加指令; 32× 32位结果为64位的乘/乘加指令。
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
24
3.3.3 ARM指令
• ARM指令集——乘法指令
19
3.3.3 ARM指令
• 比较指令
应用示例: CMP R3,R1 ;R3减R1并影响标志位
R1
0x00000005
减法
0x08
R3
无符号小于 条件标志
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
20
3.3.3 ARM指令
• 比较指令
应用示例: TST R3,#0x02 ;测试R3的第2位并影响标志位
部分逻辑运算符: AND:逻辑“与”运算
OpCode
ORR :逻辑“或”运算 EOR:逻辑“异或”运算 BIC:位清除运算
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
11
3.3.3 ARM指令
• 算术逻辑运算指令
应用示例: ADD R3,R1, #0x08 ;R3=R1+8
第二操作数 R1
应用示例: MUL R3,R2,R1 ; R3=R2×R1
R1
0x00000002
R3
乘法
0x00000008 R2
0x00000010 0x??
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
27
3.3.3 ARM指令
• ARM指令集——32×32位乘加法指令
MLA
目标寄存器,运算寄存器1,运算寄存器2,第二操作数
1.用R1寄存器的最低字节替换掉R2寄存器的 最低字节,并不影响条件标志位?
AND AND ORR R1,R1,#0x000000FF R2,R2,#0xFFFFFF00 R2,R2,R1
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
17
3.3.3 ARM指令
• 比较指令
比较指令将两个数值进行的特定运算,根据 运算结果影响CPSR的相关标志位,用于后面程序 的条件执行,但是运算结果不予保存。 OpCode
微机原理与接口技术(基于嵌入式芯片)
?
思考与练习
1.用R1寄存器的最低字节替换掉R2寄存器的 最低字节,并不影响条件标志位?
R1 BYTE3 BYTE2 BYTE1 BYTE0
R2
BYTE3 BYTE2 BYTE1 BYTE0
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
16
?
思考与练习
跳转目标
跳转指令 跳转目标 程序代码
2013/11/20 微机原理与接口技术(基于嵌入式芯片) 32
3.3.3 ARM指令
• ARM指令集—— 分支指令
OpCode
跳转目标
分支指令种类: 跳转指令 B:分支指令 BL :带链接的分支指令 跳转目标 BX:带状态切换的分支指令 程序代码
2013/11/20 微机原理与接口技术(基于嵌入式芯片) 33
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
8
3.3.3 ARM指令
• 算术逻辑运算指令
算术逻辑运算指令包括“加/减”以及“与/ 或/异或”等指令,它们的格式如下: OpCode
结果寄存器,运算寄存器,第二操作数 运算寄存器 运算符 第二操作数
结果寄存器
2013/11/20 微机原理与接口技术(基于嵌入式芯片) 9
• 数据传送指令
MOV指令将8位图立即数或寄存器传送到目 标寄存器(Rd),可用于移位运算等操作。
装载指令:
MOV
目标寄存器,操作数 目标寄存器 操作数
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
4
3.3.3 ARM指令
• 数据传送指令
MOV指令将8位图立即数或寄存器传送到目 标寄存器(Rd),可用于移位运算等操作。 同类型的指令还有MVN,它可以实现数据的 非传递,即把操作数取反后送至目标寄存器。 MVN
3.3.3 ARM指令
• 算术逻辑运算指令
部分算术运算符: ADD:加法运算 ADC:带进位加法运算
OpCode
SUB:减法运算 RSB:逆向减法运算 SBC:带进位减法运算 RSC:带进位逆向减法运算
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
10
3.3.3 ARM指令
• 算术逻辑运算指令
微机原理与接口技术
第6讲 ARM指令系统(3)
3.3.3 ARM指令
ARM指令种类
1.存储器访问指令 2.数据处理指令 3.乘法指令 4.ARM分支指令 5.协处理器指令 6.杂项指令 7.伪指令
2013/11/20 微机原理与接口技术(基于嵌入式芯片) 2
3.3.3 ARM指令
• ARM指令集——ARM数据处理指令
数据处理指令大致可分为3类: 数据传送指令; 算术逻辑运算指令; 比较指令。 数据处理指令只能对寄存器的内容进行操作, 而不能对内存中的数据进行操作。所有ARM数据处 理指令均可选择使用S后缀,并影响状态标志。
2013/11/20 微机原理与接口技术(基于嵌入式芯片) 3
3.3.3 ARM指令
0x00000005
R3
加法
0x08
0x0000000D 0x??
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
12
3.3.3 ARM指令
• 算术逻辑运算指令
应用示例: AND R3,R1, #0xFF ;R3=R1 & 0x000000FF
第二操作数 R1
0x12345678
R3
与
0x000000FF
运算寄存器1 第二操作数 加法
乘法
运算寄存器2
中间结果
目标寄存器
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
28
3.3.3 ARM指令
• ARM指令集——32×32位乘加法指令
应用示例: MLA R3,R2,R1,R0 ; R3=R2×R1 + R0 乘法 0x00000008 R1
R2 0x00000002 R0 0x00000005
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
25
3.3.3 ARM指令
• ARM指令集——32×32位乘法指令
MUL
目标寄存器,运算寄存器,第二操作数 运算寄存器 乘法 第二操作数
目标寄存器
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
26
3.3.3 ARM指令
• ARM指令集——32×32位乘法指令
2013/11/20 微机原理与接口技术(基于嵌入式芯片) 22
R3 0x000000AA
0x000000CC R2
3.3.3 ARM指令
ARM指令种类
1.存储器访问指令 2.数据处理指令 3.乘法指令 4.ARM分支指令 5.协处理器指令 6.杂项指令 7.伪指令
2013/11/20 微机原理与接口技术(基于嵌入式芯片) 23
目标寄存器,操作数 操作数取反
5
目标寄存器
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
3.3.3 ARM指令
• 数据传送指令
应用示例: MOV R3,R1,LSL #3 ;R3=R1×8
逻辑左移3位 R1 0x01 R3 0x08 0x55 0x08
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
0x00000078 0x??
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
13
3.3.3 ARM指令
• 算术逻辑运算指令
应用示例: ORR R3,R1, R2 ;R3=R1|R2
R1
0x00112233
R3
或
0xAA000000 R2
0xAA112233 0x??
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
助记符 MUL Rd,Rm,Rs MLA Rd,Rm,Rs,Rn UMULL RdLo,RdHi,Rm,Rs UMLAL RdLo,RdHi,Rm,Rs SMULL RdLo,RdHi,Rm,Rs SMLAL RdLo,RdHi,Rm,Rs 说明 32位乘法指令 32位乘加指令 64位无符号乘法指令 64位无符号乘加指令 64位有符号乘法指令 64位有符号乘加指令 操作 RdRm*Rs (Rd≠Rm) RdRm*Rs+Rn (Rd≠Rm) (RdLo,RdHi)Rm*Rs (RdLo,RdHi)Rm*Rs+(R dLo,RdHi) (RdLo,RdHi)Rm*Rs (RdLo,RdHi)Rm*Rs+(R dLo,RdHi) 条件码位置 MUL{cond}{S} MLA{cond}{S} UMULL{cond}{S} SMLAL{cond}{S} SMULL{cond}{S} SMLAL{cond}{S}
6
?
思考与练习
1.MOV指令与LDR指令都是往目标寄存器中 传送数据,但是它们有什么区别吗?
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
7
?
思考与练习
1.MOV指令与LDR指令都是往目标寄存器中 传送数据,但是它们有什么区别吗?
MOV 指令用于将数据从一个寄存器传送
到另一个寄存器中,或者将一个常数传送到 一个寄存器中,但是不能访问内存。LDR指 令用于从内存中读取数据放入寄存器中。
合集下载

第3章 ARM指令系统

第3章 ARM指令系统
嵌入式技术基础
嵌入式技术基础
陈长顺
第三章 ARM指令系统
嵌入式技术基础
第三章 ARM指令系统
第三章 ARM指令系统
嵌入式技术基础
复习引入
ARM寄存器是如何组织的? ARM程序状态寄存器是如何定义的? ARM储存器采用哪些存储格式?如何定义?
第三章 ARM指令系统
嵌入式技术基础
ARM状态下的寄存器组织
C
31
0 RRX移位操作
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_寄存器间接寻址
寄存器间接寻址是指操作数保存在存储器指定地址 的存储单元中,地址通过寄存器给出,寄存器为操 作数的地址指针。ARM的传送指令都是基于寄存 器的间接寻址,即通过Load/Store完成对数据的传 送操作。 实例
1
ARM指令概述
2
ARM指令寻址方式
3
ARM指令集
4 Thumb指令集 5 ARM汇编伪指令 6
ARM 汇编程序设计
第三章 ARM指令系统
嵌入式技术基础
ARM指令集
ARM指令集可以分为分支指令、数据处理指令、寄存 器访问指令、加载/存储指令、协处理器指令、异常产 生指令、伪指令七大类 。
第三章 ARM指令系统
第三章 ARM指令系统
嵌入式技术基础
ARM指令集_分支指令
带链接的跳转指令BL 指令格式
BL{cond} label
指令功能
将下一条指令的地址复制到R14(即LR)链接寄存器中, 然后跳转到指定地址运行程序。
实例
BL DELAY ;跳转到DELAY标号处,同时将 ; PC的值保存到LR寄存器中
ASR:算术右移,移位过程中保持符号位不变,即 若源操作数为正数,则字的高位空出位补0,否则 补1;

北航微机原理第6讲 ARM指令系统(3)

北航微机原理第6讲 ARM指令系统(3)

3.3.3 ARM指令
• ARM指令集——程序如何跳转
在ARM中有两种方式可以实现程序的跳转:
1.直接向PC寄存器赋值实现跳转;
例:
MOV
PC,R14
2.使用分支指令直接跳转。
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
31
3.3.3 ARM指令
• ARM指令集—— 分支指令
OpCode
操作数 R3
0x00000005
相与 为 条件标志 0
0x02
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
21
3.3.3 ARM指令
• 比较指令
应用示例: TEQ R3,R2 ; R3与R2是否相等并影响标志位 异或 不等 条件标志 与CMP的区别在于TEQ不影响C(进、借、扩展位)和V(溢出) 位,也就是只能判断是否相等,而不能判断是否大于,或小于。
运算寄存器,操作数 运算寄存器 运算符 操作数
影响标志位
2013/11/20 微机原理与接口技术(基于嵌入式芯片) 18
3.3.3 ARM指令
• 比较指令
比较运算符: CMP:数值比较 CMN:负数比较 TST:位测试 TEQ:相等测试
OpCode
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
3.3.3 ARM指令
• 算术逻辑运算指令
部分算术运算符: ADD:加法运算 ADC:带进位加法运算
OpCode
SUB:减法运算 RSB:逆向减法运算 SBC:带进位减法运算 RSC:带进位逆向减法运算
2013/11/20
微机原理与接口技术(基于嵌入式芯片)
10

6-arm3伪指令

6-arm3伪指令

例: short DCB 1 string DCB “string”,0
;为short分配了一个 为 分配了一个 ;字节 并初始化为 。 字节,并初始化为 字节 并初始化为1。 ;构造一个以 构造一个以0 构造一个以 ;结尾的字符串 结尾的字符串
4、DCD、分配一段字内存单元 、 、
(1)DCD ——分配一段字对齐的内存单元 ) 分配一段字对齐的内存单元 用于分配一段字对齐的内存单元,并初始化。 用于分配一段字对齐的内存单元,并初始化。 DCD也可以用符号”&”表示 也可以用符号” 表示 也可以用符号 语法格式: 语法格式: {label} DCD expr{,expr}……
3、DCB——也可以用符号”=”表示 、 也可以用符号” 表示 也可以用符号
用于定义并且初始化一个或者多个字节的 内存区域。 内存区域。 语法格式: 语法格式: {label} DCB expr{,expr}……
或 {label} = expr{,expr}
其中expr表示: 表示: 其中 表示
– -128到255之间的一个数值常量或者表达式。 之间的一个数值常量或者表达式。 到 之间的一个数值常量或者表达式 – 一个字符串。 一个字符串。 注意: 后面紧跟一个指令时, 注意:当DCB后面紧跟一个指令时,可能需要 后面紧跟一个指令时 使用ALIGN确保指令是字对齐的。 确保指令是字对齐的。 使用 确保指令是字对齐的
• • • • CODE:定义代码段。 :定义代码段。 DATA:定义数据段。 :定义数据段。 READONLY:指定本段为只读 代码段的默认属性。 代码段的默认属性。 :指定本段为只读,代码段的默认属性 READWRITE:指定本段为可读可写 数据段的默认 :指定本段为可读可写,数据段的默认 属性。 属性。

第三章 ARM指令集3

第三章 ARM指令集3
加载字数据 加载无符号字节数据 用户模式加载字数据
操作
Rd←[addr],addr索引 Rd←[addr],addr索引 Rd←[addr],addr索引
条件码位置
LDR{cond} LDR{cond}B LDR{cond}T LDR{cond}BT LDR{cond}H LDR{cond}SB LDR{cond}SH
•LDR和STR——字和无符号字节加载/存储指令 LDR指令用于从内存中读取单一字或字节数据存入寄存 器中,STR指令用于将寄存器中的单一字或字节数据保存到 内存。指令格式如下:
LDR{cond}{T} Rd,<地址> STR{cond}{T} Rd,<地址> ;将指定地址上的字数据读入Rd ;将Rd中的字数据存入指定地址
LDR{cond}B{T} Rd,<地址> ;将指定地址上的字节数据读入Rd
STR{cond}B{T} Rd,<地址> ;将Rd中的字节数据存入指定地址
其中,T为可选后缀
若指令有T,那么即使处理器是在特权模式下,存储系统也将访问 看成是在用户模式下进行的。T在用户模式下无效,不能与前索引 偏移一起使用T
ARM存储器访问指令——单寄存器存取
例:变量的访问
AddCount & 0x40003000 …… LDR R0, AddCount LDR R1, [R0] ADD R1, R1, #1 STR R1, [R0] ……
ARM存储器访问指令——多寄存器存取
助记符 说明 操作
reglist←[Rn...], Rn回写等 [Rn...]←reglist, Rn回写等
ARM存储器访问指令——单寄存器存取
•LDR和STR指令应用示例:

第三讲 ARM微处理器的指令系统

第三讲 ARM微处理器的指令系统

香港即时科研集团
即时科研 IT 精英 培训
25
ThizLinux
• • • • • •
6. TEQ指令 TEQ指令的格式为: TEQ{条件} 操作数1,操作数2 TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进 行按位的异或运算,并根据运算结果更新CPSR中条件标志位的值。该 指令通常用于比较操作数1和操作数2是否相等。 指令示例: TEQ R1,R2 ;将寄存器R1的值与寄存器R2的值按位异或, 并根据结果设置CPSR的标志位
香港即时科研集团
即时科研 IT 精英 培训
16
ThizLinux
8) ARM指令集 • 跳转指令 – 使用专门的跳转指令。 – 直接向程序计数器PC写入跳转地址值。 — B跳转指令 – BL 带返回的跳转指令 – BLX 带返回和状态切换的跳转指令 – BX 带状态切换的跳转指令
香港即时科研集团
即时科研 IT 精英 培训
10
ThizLinux
2)寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数 ; ADD R0,R1,R2 ;R0←R1+R2
香港即时科研集团
即时科研 IT 精英 培训
11
ThizLinux
3)寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址 ; • ADD R0,R1,[R2] ;R0←R1+[R2] • LDR R0,[R1] ;R0←[R1] • STR R0,[R1] ;[R1]←R0
香港即时科研集团
即时科研 IT 精英 培训
23
ThizLinux
• • • •
• • •
Hale Waihona Puke 4. CMN指令 CMN指令的格式为: CMN{条件} 操作数1,操作数2 CMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取 反后进行比较,同时更新CPSR中条件标志位的值。该指令实际完成 操作数1和操作数2相加,并根据结果更改条件标志位。 指令示例: CMN R1,R0 ;将寄存器R1的值与寄存器R0 的值相加,并根据结果设置CPSR的标志位 CMN R1,#100 ;将寄存器R1的值与立即数 100相加,并根据结果设置CPSR的标志位

第三章 ARM指令系统简介

第三章  ARM指令系统简介

(1).寄存器寻址
操作数的值在寄存器中,指令中的地址码字段指出
的是寄存器编号,指令执行时直接取出寄存器值来操
作。
寄存器寻址指令举例如下: R2 0xAA MOV R1,R2 ;将R2的值存入R1 R1 0xAA 0x55 SUB R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0 MOV R1,R2
第三章 ARM指令系统简介
3.1 ARM处理器寻址方式
寻址方式是根据指令中给出的地址码字段来实现寻 找真实操作数地址的方式。ARM处理器具有9种基本寻址 方式。
(1).寄存器寻址;
(2).立即寻址;
(3).寄存器偏移寻址; (4).寄存器间接寻址; (5).基址寻址; (7).堆栈寻址; (9).相对寻址。 (6).多寄存器寻址; (8).块拷贝寻址;
STMFD sp!,{r4-r7,lr} 满递减
9753 8420 1234 1010 8034 FFFF A0BE 16 1234 102E 8765 FF ABCD 100
LDMFA sp!,{r4-r7,pc}
高地址
满递增
9753 8420 1234 1010 8034 A0BE AOBE 1234 FF 100 pc lr 9020 8034 9048
operand2:第2个操作数;
指令格式举例如下:

LDR BEQ ADDS
R0,[R1] D1
;读取R1地址上的存储器单元内容, ;执行条件AL ;分支指令,执行条件EQ,即相等则跳转到D1 ;加法指令,R1+1=>R1,影响CPSR ;寄存器(S) ;条件执行减法运算(NE), ;R1-0x10=>R1,影响CPSR寄存器(S)

ARM体系结构详解 第3章


ARM指令的寻址方式
多寄存器寻址和堆栈寻址之间的关系 堆栈 之前 之后 之前 之后
LDMDA LDMFA
向上生长 满
STMIB STMFA STMIA STMEA LDMDB LDMEA
向下生长 满 空
LDMIB LDMED LDMIA LDMFD STMDB STMFD STMDA STMED
多寄存器 寻址
ARM指令的寻址ห้องสมุดไป่ตู้式
STMFA r13!, {r0-r5} ; Push onto a Full Ascending Stack LDMFA r13!, {r0-r5} ; Pop from a Full Ascending Stack STMFD r13!, {r0-r5} ; Push onto a Full Descending Stack LDMFD r13!, {r0-r5} ; Pop from a Full Descending Stack STMEA r13!, {r0-r5} ; Push onto an Empty Ascending Stack LDMEA r13!, {r0-r5} ; Pop from an Empty Ascending Stack STMED r13!, {r0-r5} ; Push onto Empty Descending Stack LDMED r13!, {r0-r5} ; Pop from an Empty Descending Stack
ARM指令的寻址方式
堆栈寻址 堆栈是一种数据结构,按先进后出( 堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的 , ) 方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆 方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置, 栈指针总是指向栈顶. 栈指针总是指向栈顶. 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈( 满堆栈 ), 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack), 而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈 空堆栈( 而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack). ) 同时,根据堆栈的生成方式,又可以分为递增堆栈( 同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending 递增堆栈 Stack)和递减堆栈(Decending Stack),当堆栈由低地址向高地址 ),当堆栈由低地址向高地址 ) 递减堆栈( ), 生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈. 生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈. 这样就有四种类型的堆栈工作方式, 这样就有四种类型的堆栈工作方式,ARM微处理器支持这四种类型的堆栈 微处理器支持这四种类型的堆栈 工作方式, 工作方式,即:

第三章 ARM指令系统


3.1 ARM指令系统概述
一、指令系统概念
指令:是规定计算机进行某种操作的命令。 指令系统:计算机能够执行的各种指令的集合。
二、ARM指令的特点
– – – – – – – 所有指令都是32位的。 大多数指令都在单周期内完成。 所有指令都可以条件执行。 ARM指令为load/store类型。 基本指令仅36条,分成五类。 有7种寻址方式。 指令集可以通过协处理器扩展。
指令条件码表
条件码
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100
助记符
EQ NE CS/HS CC/LO MI PI VS VC HI 志
Z=1 Z=0 C=1 C=0 N=1 N=0 V=1 V=0 C=1且Z=0 C=0或Z=1 N=V N!=V Z=0且N=V
0 0
下列命令中,汇编器把立即数转换为移位操作:
MOV R0,#4096 ; uses 0x40 ror 26 ADD R1,R2,#0xFF0000 ; uses 0xFF ror 16
带有立即数的MOV 指令的二进制编码为:
0xF200 =0xF2循环右移(2*C)
MOV R0,#0xF200
MOV R1,#0x110000 MOV R4,#0x12800
31 0 0
SUB R3,R2,R1,LSL #2 ;R3←R2-(R1左移2位) SUB R3,R2,R1,LSR R0 ;R3←R2-(R1右移R0位)
(3)ASL:算术左移,由于左移空出的有效 位用0填充,因此它与LSL同义。 (4)ASR:算术右移 (Arithmetic Shift Right) 。算术移位的对象是带符号数,移位过程 中必须保持操作数的符号不变。如果源操作数是 正数,空出的最高有效位用0 填充,如果是负 数用1填充。

第3章 ARM微处理器的指令系统


LOOP
;跳转到LOOP
R0,R0,R1 PC,LR
;R0 = R0 + R1 ;子程序返回
END
;文件结束
ARM处理器寻址方式小结
寻址方式是根据指令中给出的地址码字段来 实现寻找真实操作数地址的方式。ARM处理 器具有9种基本寻址方式。 1.寄存器寻址; 2.立即寻址;
3.寄存器移位寻址;
5.基址寻址;
3.1
ARM指令的寻址方式
Resources : /aalp/html/frames.html /assembler/
第3章 ARM 微处理器的指令集

ARM指令集与Thumb指令集的关系
LDR R2,[R3,#0x0C] R3 0x40000000 ;读取R3+0x0C地址上的 为地址装载数 ;存储单元的内容,放入R2
R2 0xAA 0x55
LDR R2,[R3,#0x0C] STR R1,[R0,#-4]!;先R0=R0-4,然后把R1的值
;寄存到保存到R0指定的存储单元
3.1 ARM处理器寻址方式
3.2 ARM指令集介绍

ARM指令集——第2个操作数
#immed_8r——常数表达式
该常数必须对应8位位图,即一个8位的常 数通过循环右移偶数位得到。
循环右移10位
00000000000000000000000000010010 0x00 0x00 0x00 0x12
8位常数
00000100100000000000000000000000 0x04 0x80 0x00 0x00

寻址方式分类——基址寻址
基址寻址指令举例如下:
LDR R0,[R1],#4;R0=[R1] , R1 = R1 + 4 ;后索引基址寻址 LDR R0,[R1,R2] ;R0=[R1+R2]

嵌入式系统6(ARM指令详细介绍)

数据传送指令( 数据传送指令(2条) 算术运算指令( 算术运算指令(6条) 逻辑运算指令( 逻辑运算指令(4条) 比较指令( 比较指令(2条) 测试指令( 测试指令(2条) 乘法指令(6条) 乘法指令(
西安电子科技大学计算机学院
4
6.1.1 数据传送指令
MOV指令 MOV指令
MOV指令的格式为: MOV{条件 条件}{S} 目的寄存器, MOV{条件}{S} 目的寄存器,源操作数 MOV指令可完成从另一个寄存器、被移位的寄存器或将一 个立即数加载到目的寄存器。其中S选项决定指令的操作 是否影响CPSR中条件标志位的值,当没有S时指令不更新 CPSR中条件标志位的值。指令示例:
EOR R0,R0,#3
西安电子科技大学计算机学院
15
6.1.3 逻辑运算指令
BIC指令 BIC指令
BIC指令的格式为:
BIC{条件}{S} 目的寄存器,操作数1 操作数2 BIC{条件}{S} 目的寄存器,操作数1,操作数2 条件
BIC指令用于清除操作数1的某些位,并把结果 放置到目的寄存器中。操作数1应是一个寄存器, 操作数2可以是一个寄存器,被移位的寄存器, 或一个立即数。操作数2为32位的掩码,如果在 掩码中设置了某一位,则清除这一位。未设置 的掩码位保持不变。例如:
TST TST R1,#1 R1,#0xffe
西安电子科技大学计算机学院
19
6.1.5 测试指令
TEQ指令 TEQ指令
TEQ指令的格式为: TEQ{条件} 操作数1,操作数2 TEQ{条件} 操作数1 操作数2 条件 TEQ指令用于把一个寄存器的内容和另一个寄 存器的内容或立即数进行按位的异或运算, 并根据运算结果无条件更新CPSR中条件标志 位的值。该指令通常用于比较操作数1和操作 数2是否相等。例如:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档