北航微机原理第6讲 ARM指令系统(3)
合集下载
第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;
嵌入式技术基础
陈长顺
第三章 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)
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伪指令
例: 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
加载字数据 加载无符号字节数据 用户模式加载字数据
操作
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指令应用示例:
操作
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微处理器的指令系统
香港即时科研集团
即时科研 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指令系统简介
(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是否相等。例如:
西安电子科技大学计算机学院
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是否相等。例如:
2019年整理ARM指令系统
CPSR条件码
Rd:目标寄存器; Rn:第一操作数寄
存器
第2操作数
3
ARM指令系统
基本指令格式举例
• LDR R0,[R1] • BEQ DATAEVEN • ADDS R2,R1,#1
执响R条2行C件←P条条执S影R读R内件件执行1的响RA-取容加执0N2行减L标CxR←,(法E行2P条法1志,0R执地总指S分件:;位影1R行址是令支+E的1Q条上):指;标,件的令志, 即相等位则跳转
CODE 32
; 指示从此处起为ARM指令集状态
…
BLX R0
; 调用子程序SUB1,R0[0]为1,切换为 THUMB 指令接
…
CODE 16 ; 指示从此处起为 THUMB 指令集状态
SUB1
; SUB1 的程序入口点
…
BX R14
9
数据处理指令
ARM指令系统
• 数据处理指令可分为数据传送指令、算术逻辑运算指令和比 较指令。
– 子程序距离当前 PC 的范围与指令B是一样:+ – 32MB
– 当子程序执行完毕后,可将链接寄存器(LR)的值写回PC中,实现 子程序的返回。
������
BL
将顺序执
SUB1
; 无条件调用子程序SUB1,同时 ;行的下一地址值保存到R14中
������
.
������
SUB1
; 子程序入口点
������
LABEL1
;LABEL1程序入口点
.
8
跳转指令 – BLX
ARM指令系统
• BLX 指令的格式为
BLX {条件} 目的地址
– BLX 指令从ARM 指令集跳转到指令中所指定的目的地址址,并将处 理器的工作状态从ARM 状态切换到 THUMB 状态,该指令同时将顺 序执行的下一地址值保存到R14中。該指令同時將 PC 的目前內容保 存到暫存器 R14 中。
Rd:目标寄存器; Rn:第一操作数寄
存器
第2操作数
3
ARM指令系统
基本指令格式举例
• LDR R0,[R1] • BEQ DATAEVEN • ADDS R2,R1,#1
执响R条2行C件←P条条执S影R读R内件件执行1的响RA-取容加执0N2行减L标CxR←,(法E行2P条法1志,0R执地总指S分件:;位影1R行址是令支+E的1Q条上):指;标,件的令志, 即相等位则跳转
CODE 32
; 指示从此处起为ARM指令集状态
…
BLX R0
; 调用子程序SUB1,R0[0]为1,切换为 THUMB 指令接
…
CODE 16 ; 指示从此处起为 THUMB 指令集状态
SUB1
; SUB1 的程序入口点
…
BX R14
9
数据处理指令
ARM指令系统
• 数据处理指令可分为数据传送指令、算术逻辑运算指令和比 较指令。
– 子程序距离当前 PC 的范围与指令B是一样:+ – 32MB
– 当子程序执行完毕后,可将链接寄存器(LR)的值写回PC中,实现 子程序的返回。
������
BL
将顺序执
SUB1
; 无条件调用子程序SUB1,同时 ;行的下一地址值保存到R14中
������
.
������
SUB1
; 子程序入口点
������
LABEL1
;LABEL1程序入口点
.
8
跳转指令 – BLX
ARM指令系统
• BLX 指令的格式为
BLX {条件} 目的地址
– BLX 指令从ARM 指令集跳转到指令中所指定的目的地址址,并将处 理器的工作状态从ARM 状态切换到 THUMB 状态,该指令同时将顺 序执行的下一地址值保存到R14中。該指令同時將 PC 的目前內容保 存到暫存器 R14 中。
第3章ARM的指令系统PPT课件
指令进行存取
条件执行:所有指令都可条件执行 指令可以自己决定是否影响标志位
条件执行及标志位**
ARM指令可以通过添加适当的条件码后缀来达到条件 执行的目的。
这样可以提高代码密度,减少分支跳转指令数目,提高性能。
CMP r3,#0
CMP r3,#0
BEQ skip
ADDNE r0,r1,r2
ADD R2,R0,R1,LSR #5
MOV R1,R0,LSL #2
逻辑左移3位
R2 0x01
0x08
R0 0x5058
MOV R0,R2,LSL #311LSL移位操作:0
LSR移位操作:
0
ASR移位操作:
ROR移位操作:
RRX移位操作:
C
3.1 ARM处理器的寻址方式
3.1.2 内存访问指令寻址方式
;送0到R0
ADD R3,R3,#1 ;R3的值加1
CMP R7,#1000 ;R7的值和1000比较
9
3.1.1 数据处理指令寻址方式
2.寄存器寻址方式
寄存器的值可以被直接用于数据操作指令,这种寻址方 式是各类处理器经常采用的一种方式,也是一种执行效 率较高的寻址方式,如:
MOV R2,R0
后是否改变状态标志 状态标志位只有4位 有两种指令密度 无整数除法指令 大多数ARM指令都可以条件执
行 有适合DSP处理的乘加指令 Load/Store访存体系结构
x86指令集
非规整指令格式 即:非正交指令格式
二地址指令 指令隐含决定运算完毕后是否
改变状态标志 状态标志位有6位 单一指令密度 有整数除法指令 专用条件判断指令进行程序分
下表为所有可能的条件码:
注意:AL为默认状态,不需要单独指出
条件执行:所有指令都可条件执行 指令可以自己决定是否影响标志位
条件执行及标志位**
ARM指令可以通过添加适当的条件码后缀来达到条件 执行的目的。
这样可以提高代码密度,减少分支跳转指令数目,提高性能。
CMP r3,#0
CMP r3,#0
BEQ skip
ADDNE r0,r1,r2
ADD R2,R0,R1,LSR #5
MOV R1,R0,LSL #2
逻辑左移3位
R2 0x01
0x08
R0 0x5058
MOV R0,R2,LSL #311LSL移位操作:0
LSR移位操作:
0
ASR移位操作:
ROR移位操作:
RRX移位操作:
C
3.1 ARM处理器的寻址方式
3.1.2 内存访问指令寻址方式
;送0到R0
ADD R3,R3,#1 ;R3的值加1
CMP R7,#1000 ;R7的值和1000比较
9
3.1.1 数据处理指令寻址方式
2.寄存器寻址方式
寄存器的值可以被直接用于数据操作指令,这种寻址方 式是各类处理器经常采用的一种方式,也是一种执行效 率较高的寻址方式,如:
MOV R2,R0
后是否改变状态标志 状态标志位只有4位 有两种指令密度 无整数除法指令 大多数ARM指令都可以条件执
行 有适合DSP处理的乘加指令 Load/Store访存体系结构
x86指令集
非规整指令格式 即:非正交指令格式
二地址指令 指令隐含决定运算完毕后是否
改变状态标志 状态标志位有6位 单一指令密度 有整数除法指令 专用条件判断指令进行程序分
下表为所有可能的条件码:
注意:AL为默认状态,不需要单独指出
ARM的指令系统
操作码 操作数 ······ 操作数
操作码一般由指令助记符码、条件码等组成。操作数字段可以有 两个或者三个,第一个操作数为目的操作数,后面的操作数为源操作 数。
3
一、ARM指令格式
基本格式如下:
<opco<Rn>{,operand2}
其中:
opcode cond S Rd Rn operand2 指令助记符,如LDR. STR等。 执行条件,如EQ、NE等。 是否影响CPSR寄存器的值,书写时影响CPSR 目标寄存器。 第一个操作数的寄存器。 第二个操作数。
MOV R1, R2 ;将R2的值存入R1中
8
2.3 寄存器移位寻址
寄存器移位寻址是ARM指令集特有的寻址方式,只能对操作数使用。
MOV ANDS R0,R1,LSL #3 R1,R1,R2,LSL R3
;R1的值左移3位,结果放入R0,即R0=R1×8 ;R2的值左移R3位,然后和R1相“与”操作, ;结果放入R1中
11
2.5 基址寻址
基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形 成操作数的有效地址。
前索引基址寻址方式,基址寄存器的值不改变。 ① 前索引基址寻址方式,基址寄存器的值不改变。
LDR R2,[R3,#0x0C] R2 [R3 #0x0C] ; [R3 + 0x0C]→ R2 R2,基址寄存器R3的值保持不变 R3
ARM嵌入式体系结构与接口技术 嵌入式体系结构与接口技术
第3章 ARM的指令系统
1
目录
一、ARM指令格式 二、寻址方式 二、ARM指令后缀
2
一、ARM指令格式
汇编指令由操作码字段 操作数字段 操作码字段和操作数字段 操作码字段 操作数字段两部分组成。 操作码字段指示处理器所要执行的操作; 操作码字段 操作数字段指出在指令执行操作的过程中所需要的操作数。 操作数字段 指令的一般格式:
操作码一般由指令助记符码、条件码等组成。操作数字段可以有 两个或者三个,第一个操作数为目的操作数,后面的操作数为源操作 数。
3
一、ARM指令格式
基本格式如下:
<opco<Rn>{,operand2}
其中:
opcode cond S Rd Rn operand2 指令助记符,如LDR. STR等。 执行条件,如EQ、NE等。 是否影响CPSR寄存器的值,书写时影响CPSR 目标寄存器。 第一个操作数的寄存器。 第二个操作数。
MOV R1, R2 ;将R2的值存入R1中
8
2.3 寄存器移位寻址
寄存器移位寻址是ARM指令集特有的寻址方式,只能对操作数使用。
MOV ANDS R0,R1,LSL #3 R1,R1,R2,LSL R3
;R1的值左移3位,结果放入R0,即R0=R1×8 ;R2的值左移R3位,然后和R1相“与”操作, ;结果放入R1中
11
2.5 基址寻址
基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形 成操作数的有效地址。
前索引基址寻址方式,基址寄存器的值不改变。 ① 前索引基址寻址方式,基址寄存器的值不改变。
LDR R2,[R3,#0x0C] R2 [R3 #0x0C] ; [R3 + 0x0C]→ R2 R2,基址寄存器R3的值保持不变 R3
ARM嵌入式体系结构与接口技术 嵌入式体系结构与接口技术
第3章 ARM的指令系统
1
目录
一、ARM指令格式 二、寻址方式 二、ARM指令后缀
2
一、ARM指令格式
汇编指令由操作码字段 操作数字段 操作码字段和操作数字段 操作码字段 操作数字段两部分组成。 操作码字段指示处理器所要执行的操作; 操作码字段 操作数字段指出在指令执行操作的过程中所需要的操作数。 操作数字段 指令的一般格式:
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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指 令用于从内存中读取数据放入寄存器中。