第3章 ARM指令系统
第3章 ARM9汇编指令系统

第三章
例如
例如: LDR R8,[R10] ;R8←[R10] LDRNE R2,[R5,#960]! ;( 有 条 件 地 ) R2←[R5+960],R5←R5+960 LDR R0,localdata ;加载一个字到R0寄存 器,该字存 于localdata所指地址处 STR R5,[R7],#-8! ;R5→[R7],R7←R7-8 STRB R0,[R3,-R8 ASR #2] ;R0→[R3-R8/4], 存储R0的最低有效字节,R3和R8不变
其中:type 必须是下面所列的形式之一: SH 带符号半字(仅对LDR); H 无符号半字; SB 带符号字节(仅对LDR)。 label 程序相对偏移表达式。偏移量必须是在 当前指令的上下255字节范围内。 offset 加在Rn上的偏移量。其形式是下列两种 之一: ① #expr 是取值范围为-255~+255的整数, 经常是常量或常量表达式。 ② {-} Rm Rm是内含偏移量的寄存器,它不 能是R15。
第三章
存储器访问指令(续)
(3)LDR和STR ----双字:加载/存储两个相邻 的寄存器,64位双字。其句法有4种:
Op {cond} D Rd,[Rn] 零偏移 Op {cond} D Rd,[Rn,offset] {!} 前索引偏移 Op {cond} D Rd,label 程序相对偏移 Op {cond} D {T} Rd,[Rn],offset 后索引偏移
第三章
存储器访问指令(续)
(1) SWP:在寄存器和存储器之间 进行数据交换,其句法是: SWP {cond} {B} Rd,Rm,[Rn] 其中:B是可选后缀,若有B,则交换字 节,否则交换字。该指令作用是数据从 存储器加裁到Rd中,Rm中的内容存储 到存储器,需交换数据存储单元的首地 址在Rn中。在此,Rd和Rm可以相同, 但Rn必须与Rd、Rm不同。
ARM指令系统

ARM指令集介绍 指令集介绍
■ ARM指令集 指令集——第2个操作数 指令集 第 个操作数 #Rm,shift——寄存器移位方式 寄存器移位方式 将寄存器 寄存器的移位结果作为操作数(移位操作不消耗 寄存器 额外的时间),但寄存器 寄存器Rm值保持不变,移位方 寄存器 法如下:
操作码 ASR #n LSL #n LSR #n 算术右移n位 逻辑左移n位 逻辑右移n位 说明 操作码 ROR #n RRX Type Rs 循环右移n位 带扩展的循环右移1位 Type为移位的一种类型,Rs为偏移 量寄存器,低8位有效。 说明
0x00
0x00
0x7F
0x02
经检验0x7f00,0x02均为合法立即数 均为合法立即数 经检验
ARM指令集介绍 指令集介绍
■
放到寄存器R1中的步骤 中的步骤: 将0x7f02 放到寄存器 中的步骤:
1、MOV R3, #0x7F00 2、 ORR R1, R3, #2 、 、
立即 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0x00 0x00 0x7F 0x00 数
ARM指令长度概述 指令长度概述
– 指令集可以是以下任一种 32 bits 长 (ARM状态)
16 bits 长 (Thumb 状态)
– ARM7TDMI及以上版本 ARM7TDMI及以上版本
支持3 支持3种数据类型
字节 (8-bit) 半字 (16-bit) 字 (32-bit) – 字必须被排成4个字节边界对齐,半字必须被排列成 字必须被排成4个字节边界对齐, 2个字节边界对齐
00 R1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0xFF 0xFF 0xFF 0xFD 0xFE 0xFF 11111111111111111111111111111100 LSL #2 0xFF 0xFF 0xFF 0xFD MOV R3 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 0xXX 0xXX 0xXX 0xXX
第三章 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)
2021年4 ARM指令系统

MOV R0,R2,LSRL2 #3 0x0;1R2的值左移30位x0,8 结果放入R0, R0 0x;50即58是R0=R2×8
ANDS R1,RM1O,VR2R,0L,SRL2,RL3S).寄存器偏移寻址
◼ 第二操作数移位方式
(5).基址加偏址寻址
◼ 自动变址模式(修改基址寄存器): ◼ ——①先基址+偏移,生成操作数地址,做指令指
定的操作。②然后自动修改基址寄存器。
◼ 例如: LDR R0,[R1,#4]! ;R0←mem32 [R1+4] ;R1←R1+4
! ——表示更新基址寄存器。
(5).基址加偏址寻址
后变址模式(修改基址寄存器): ——①基址寄存器不加偏移作为操作数地址。
❑ LSL:逻辑左移,空出的最低有效位用0填充。
31
0
0
❑ LSR:逻辑右移,空出的最高有效位用0填充。
31 0
0
(3).寄存器偏移寻址
ASL:算术左移,由于左移空出的有效位用0填充,因 此它与LSL同义。
ASR:算术右移 (Arithmetic Shift Right) 。算术 移位的对象是带符号数,移位过程中必须保持操作数 的符号不变。如果源操作数是正数,空出的最高有效 位用0填充,如果是负数用1填充。
②完成指令操作后,用(基址+偏移)的值修改基 址寄存器。
◼ Post-indexed: STR r0,[r1],#12
更新
r1
基址寄存器 0x20c
原基址 寄存器
r1 0x200
偏移量 12
0x20c
0x200
0x5
r0 源寄存器
0x5 for STR
位
MOV R0,#0xFF00
第三章 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章 ARM920T指令系统

⑶ 对寄存器Rm内容进行移位,结果 作为Operand2的值
图3.3
37
桶形移位器
Rn 未 预 处 理 预 处 理 Rm
桶形移位器
结果N
ALU
Rd
38
① 使用指令中bit[11:7]指定的移位量对Rm移位
· 逻辑左移(LSL) 图3.4 逻辑左移(LSL #6)
39
· 逻辑右移(LSR)
26
3.2.3 数据处理指令
ARM数据处理指令可以分为三类:
1. 数据传送指令(如MOV和MVN)、 2. 算术逻辑操作指令(如ADD、SUB或AND等 ) 3. 比较指令(如CMP和TST等)。
数据处理指令只能对寄存器的内容进行 操作,不允许对存储器中的数据进行操作 ,也不允许指令直接使用存储器的数据或 在寄存器与存储器之间传送数据。 27
3
ARM920T支持指令长度为32位的ARM指 令集和指令长度为16位的Thumb指令集。 ARM920T处理器总是从ARM状态开始, 必须用BX指令明确地转换到Thumb状态 。
4
3.1 ARM指令集概述
3.1.1 ARM指令集概述 ⒈ ARM指令分组 ⑴ 分支指令 ⑵ 数据处理指令 ⑶ 状态寄存器访问指令 ⑷ 单个寄存器装入或存储指令 ⑸ 块数据装入或存储指令 ⑹ 协处理器指令
对于数据传送指令MOV和MVN,指令 中指定的目的寄存器内容被覆盖,如果 目的寄存器指定了PC,如MOV PC, R14,则可以实现程序的转移。 数据传送指令可以实现寄存器到寄存器 ,立即数到寄存器的传送。
28
算术逻辑操作指令通常对指定的两个寄存器 (或1个寄存器、1个立即数)进行操作,结果 存到第3个寄存器,允许选择修改或不修改 CPSR中的条件码标志。 比较指令TEQ、TST、CMP和CMN,通常对 指定的两个寄存器(或1个寄存器,1个立即数 )进行比较,比较结果不保存到寄存器,只影 响CPSR中的条件码标志。 上述指令通常允许对指定的操作数进行移位操 作。
ARM寻址方式及指令系统PPT课件

ADD R0,R0,#1
/*R0←R0+1*/
ADD R0,R0,#0x3f /*R0←R0+0x3f*/
立即数,要求以“#”为前缀,对于以十六进制表示的 立即数,还要求在“#”后加上“0x”,对于以二进制表 示的立即数,还要求在“#”后加上“0b” ,对于以十进 制表示的立即数,还要求在“#”后加上“0d”或者缺省 。
TMD7寄存器移位操作
在ARM数据处理指令中,第二操作数还有一种特有的 形式-寄存器移位操作,即允许第二个寄存器操作数 在同第一操作数运算之前完成移位操作,例如:
ADD r3, r2,r1,LSL #3 ;r3:=r2 + 8 × r1
设置条件码
ARM的任何数据处理指令都能通过增加“S”操作码 来设置条件码(N,Z,C和V)
带符号数大于
带符号数小于或等 于 无条件执行
条件执行
所有的ARM指令集都可以是有条件执行的。 ARM指令根据CPSR中的条件位自动判断是否执行指令,在 条件满足时,指令执行,否则指令被忽略。
在ARM的指令编码表中,统一占用编码的最高四位[31: 28]来表示“条件码”(即“cond”)。
条件转移
不加数据类型标识。如:
LDRB R0,[R1] ;R0←mem8[R1], 加载8位字节数据到 寄存器R0,零扩展到32位
LDRH R1,[R0,#20] ;R0←mem16[R0+0] 加载16 位半字到寄存器R1 ,零扩展到32位
这时,传送的地址可与任意字节、半字对齐,而不限于 4字节对齐。
ARM的数据传送指令都是基于寄存器间接寻址,即通过 Load/Store完成对数据的传送操作。
§3.2.4 基址加偏址寻址
基址变址寻址就是将寄存器(该寄存器一般称作基址 寄存器)的内容与指令中给出的地址偏移量(用12位表示, 不超过4KB)相加,从而得到一个操作数的有效地址。变址 寻址方式常用于访问某基地址附近的地址单元。
第3章体系结构与指令系统

西南林学院计算机系 贺金平
2.6 ARM寄存器组成
2.6.1ARM寄存器组成概述 2.6.2ARM状态下的寄存器组织 2.6.3Thumb状态下的寄存器组织
西南林学院计算机系 贺金平
2.6.1 ARM寄存器组成概述
ARM处理器总共有37个寄存器,可以分为以下两 类寄存器 : 1) 31个通用寄存器 :
3.3 Thumb技术介绍
3.4 ARM处理器工作状态
3.5 ARM处理器工作模式
3.6 ARM寄存器组成
3.7 ARM异常中断
西南林学院计算机系 贺金平
本章的主要内容为:
3.8 ARM组织结构简介
3.9 ARM存储器接口及存储器层次
3.10 ARM协处理器
3.11 ARM片上总线AMBA
3.12 ARM核综述
西南林学院计算机系 贺金平
2.3.1 Thumb的技术概述
Thumb是ARM体系结构的扩展。它有从标准32位 ARM指令集抽出来的36条指令格式,可以重新编成 16位的操作码。这能带来很高的代码密度 ARM7TDMI是第一个支持Thumb的核,支持 Thumb的核仅仅是ARM体系结构的一种发展的扩展, 所以编译器既可以编译Thumb代码,又可以编译 ARM代码 支持Thumb的ARM体系结构的处理器状态可以方 便的切换、运行到Thumb状态,在该状态下指令集 是16位的Thumb指令集 。
西南林学院计算机系 贺金平
ARM体系结构的基本版本
ARM体系结构总结
核 ARM1 ARM2 ARM2aS,ARM3 ARM6,ARM600,ARM610 ARM7,ARM700,ARM710 ARM7TDMI,ARM710T,ARM720T ARM740T Strong ARM,ARM8,ARM810 ARM9TDMI,ARM920T,ARM940T 体系结构 V1 V2 V2a V3 V3 V4T V4 V4T
ARM指令系统

BCS
LABEL2
ARM指令系统 ARM指令系统
跳转指令 跳转指令 – BL
• BL 指令的格式为 BL {条件} 目的地址 – BL 除 转移程序控制权外,同时也将程序顺序执行的下一个地址值 保存在链接寄存器(LR)中,可用于子程序的调用。 – 子程序距离当前 PC 的范围与指令B是一样:+ – 32MB – 当子程序执行完毕后,可将链接寄存器(LR)的值写回PC中,实现 子程序的返回。 BL SUB1 ; 无条件调用子程序SUB1,同时 将顺序执 ;行的下一地址值保存到R14中 . SUB1 ; 子程序入口点 . MOV PC, LR ; 子程序返回 7
ARM指令系统 ARM指令系统
ARM指令系统 ARM指令系统
1、ARM指令分类 ARM指令分类
分类指令 数据处理 数据传送 指令列举
ADD、ADC、SUB、RSB、SBC; MOV、MVN; AND、ORR、EOR、BIC;CMP、CMN;TST、TEQ; MUL、MLA、UMULL、UMLAL、SMULL、SMLAL
ARM指令系统 ARM指令系统
跳转指令 跳转指令 – BX
• BX 指令的格式为 BX {条件} 目的地址 – BX 将寄存器<Rm> 的数值复制至 PC 中,以达到转移程序控制权; – 根据寄存器 <Rm> 的最低位 <Rm>[0] 来变更指令集状态,<Rm>[0]为 1,则变更为THUMB 指令集状态。<Rm>[0] 为0,则变更为 ARM 指 令集状态。 – 此指令可将程序控制权转移到 4GB范围内的任意一地址上。 CODE 32 ; 从此处起程序以 ARM 指令集编译 . BX R0 ; ˆ R0[31:1] 为地址 LABEL1,R0[0]为1,跳转到 LABEL1处执行,并切换指令集状态为THUMB指令集 . CODE 16 ; 指示从此处起为THUMB 指令集状态 LABEL1 ;LABEL1程序入口点 . 8
《ARM嵌入式系统结构与编程》习题答案 邱铁编著

《ARM嵌入式系统结构与编程》邱铁编著. 清华大学出版社.年月第版 年月第二次印刷20093120108 《ARM嵌入式系统结构与编程》第1~4章思考与练习题答案 此答案仅供教师教学用 第1章绪论思考与练习题答案 1. 国内嵌入式系统行业对“嵌入式系统”的定义是什么 如何理解答 见教材1.1节。
2. 嵌入式系统是从何时产生的 简述其发展历程。
答 见教材1.1节。
3. 当前最常见的源码开放的嵌入式操作系统有哪些 请举出两例 并分析其特点。
答 见教材1.2.1节的嵌入式Linux和嵌入式实时操作内核μC /OS-II。
4. 举例说明嵌入式设备在工控设备中的应用。
答 见教材1.3节的“工业控制领域”。
5. 未来嵌入式技术的发展趋势有哪些 答 见教材1.4节的嵌入式技术的发展趋势。
第2章 ARM技术与ARM体系结构思考与练习题答案 1 简述ARM处理器内核调试结构原理。
答 对教材1.2节的图2-1进行描述。
2 分析ARM7TDMI-S各字母所代表的含义。
答 参考教材2 1 2 ARM核版本命名规则说明。
课后答案网《ARM嵌入式系统结构与编程》邱铁编著. 清华大学出版社. 年月第版 年月第二次印刷200931201083 ARM处理器的工作模式有哪几种 其中哪些为特权模式 哪些为异常模式并指出处理器在什么情况下进入相应的模式。
答 ARM处理器共有7种工作模式用户模式 非特权模式 也就是正常程序执行的模式 大部分任务在这种模式下执行。
在用户模式下 如果没异常发生 不允许应用程序自行改变处理器的工作模式 如果有异常发生 处理器会自动切换工作模式FIQ模式 也称为快速中断模式 支持高速数据传输和通道处理 当一个高优先级(fast)中断产生时将会进入这种模式。
IRQ模式 也称为普通中断模式 :当一个低优先级中断产生时将会进入这种模式。
在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。
通常的中断处理都在IRQ模式下进行。
第3章ARM汇编语言程序设计GNU汇编ppt课件

时将程序计数器PC指向子程序的入口点,当子程序执行完毕需要返回调用处时, 只需要将存放在LR中的返回地址重新复制给程序计数器PC即可。在调用子程序的 同时,也可以完成参数的传递和从子程序返回运算的结果,通常可以使用寄存器 R0~R3完成。 以下是使用BL指令调用子程序的汇编语言源程序的基本结构:
.string/.asciz/.ascii
语法格式 .string/.asciz/.ascii 表达式{,表达式}...
作用
.string/.asciz/.ascii定义多个字符串。 注意:ascii伪操作定义的字符串需要自动添加结尾字符'\0'
举例
.string "abcd","hello"
bne 1f @跳转到1标号去执行 局部标号代表它所在的地址,因此也可以当作变量或
者函数来使用。
Linux汇编程序中的分段
(1).section伪操作
用户可以通过.section伪操作来自定义一个段,格式如下 :
.section section_name [, "flags"[, %type[,flag_specif
地址表达式expr的取值范围如下:
当地址值是字节对齐时,其取指范围为−255B~255B;
当地址值是字对齐时,其取指范围为−1020B~1020B。
ARM伪指令——小范围的地址读取
ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的 地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被 编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB 指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错 误,编译失败。
第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为默认状态,不需要单独指出
3ARM指令寻址方式

第三章 ARM指令的特点和寻址方式所有计算机的操作都是按照指令的要求进行操作的。
指令应包含如下的信息:(1)指明计算机的有关部件执行什么操作;(2)指明参加操作的是什么数;(3)指明这些操作数存放的位置,以及通过什么方式才能找到它们;(4)指明后继指令从哪里取出。
一条指令通常由两部分组成:一部分是操作码,指明计算机应该执行操作的功能和性质;另一部分是地址码(也称为操作数)指出数据存放的位置,即操作数的地址。
一台计算机有许多条指令构成,计算机指令的集合称为计算机的指令系统。
计算机的体系结构决定指令系统的特点,也决定计算机的数据处理能力。
3.1 ARM指令特点ARM内核的处理器属于RISC结构,其指令长度固定,指令格式的种类少,寻址方式简单;ARM处理器采用固定长度的指令,因此处理器内部硬件设计能够被简化;指令译码采用硬布线逻辑,不使用微程序控制,以减少指令的译码时间,大部分指令在一个时钟周期内完成。
按指令的功能分,ARM指令集可分为六类:分支指令、数据处理指令、程序状态寄存器、LOAD/STORE指令、协处理器指令、异常中断指令。
其中,数据处理指令包括:数据传输、算术逻辑运算和比较;算术逻辑运算类又可以分为位逻辑、算术操作、寄存器传送。
按照操作数的特点,ARM指令可以分为无操作数指令、单操作数指令、双操作指令和三操作数指令。
每条指令由操作码域、条件码域、条件码设置域、目标操作数、第一操作数寄存器和第二操作数组成。
通常一条典型的ARM指令表示为:<opcode> {<cond>}{s}<Rd>,<Rn>,<shift_op2>主要作用是:(1)操作码域<opcode>是指令编码的助记符;(2)条件码域{ cond}是指令允许执行的条件编码。
ARM 处理器的一个非常重要的特征是它的条件执行。
每一条ARM指令的可选条件码域cond包含4位的条件码,共有16种,每种条件码用两个字符表示,这两个字符应添加在指令助记符的后面和指令同时使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式技术基础
陈长顺
第三章 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;
31 ASR移位操作
0
ROR:循环右移,有字的低位移出位填入字的高位 空出位;
31 ROR移位操作
0
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_寄存器移位寻址:5种位移方式
RRX:带扩展的循环右移,操作数右移一位,高位 空出位用原C标志值填充。
第三章 ARM指令系统
嵌入式技术基础
ARM体系结构
1
ARM指令概述
2
ARM指令寻址方式
3
ARM指令集
4 Thumb指令集 5 ARM汇编伪指令 6
ARM 汇编程序设计
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式
寻址方式就是处理器根据指令中给出的地址码字段来实现寻找 真实操作数地址的方式。ARM9处理器支持9种基本寻址方式。 ARM寻址方式共有九种: 立即数寻址 寄存器寻址 寄存器移位寻址 寄存器间接寻址 变址寻址 多寄存器寻址 堆栈寻址 相对寻址 块复制寻址
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_寄存器移位寻址:5种位移方式
LSL:逻辑左移,寄存器中字的低位空出位补0;
0
31
0
LSL移位操作
LSR:逻辑右移,寄存器中字的高位空出位补0;
0
31 LS
嵌入式技术基础
ARM寻址方式_寄存器移位寻址:5种位移方式
LDR R1,[R2] ;将R2中的值作为地址,并将该地址所指向的数据传送到R1 中
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_变址寻址
基址加偏移寻址也称为变址寻址,就是将基址寄存 器的内容与指令中给出的偏移量相加,形成操作数 的有效地址。基址寻址用于访问基址附近的存储单 元,常用于查表、数据操作及功能部件寄存器访问 等。 指令可以在系统存储器合理的范围内基址上加上不 超过4KB的偏移量来计算传送地址。变址寻址方式 可分为前变址、自动变址和后变址寻址方式。
嵌入式技术基础
ARM寻址方式_寄存器寻址
寄存器寻址方式,把寄存器中的数值作为操作数, 指令执行时直接取出寄存器值进行操作。这种寻址 方式是一种执行效率较高的寻址方式。 实例 MOV R1,R2 ADD R0,R1,R2
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_寄存器移位寻址
寄存器移位寻址的操作数由寄存器的值做相应移位 而得到,移位的方式在指令中以助记符的形式给出, 而移位的位数可用立即数或寄存器寻址方式表示。 实例 MOV R1,R2,LSL #3 ;将R2中的数值逻辑左移3位后,存放到寄存器R1中
MOV R5,R2 MOVS R3,R1, LSL#2
第三章 ARM指令系统
嵌入式技术基础
ARM指令集_数据处理指令
算术逻辑运算指令 指令格式 ADD {cond}{S} Rd,Rn,operand2 指令功能 加法运算指令,用寄存器Rn加operand2,结果保存到Rd 中。 说明 操作数1是寄存器,操作数2可以是寄存器,被移位的寄存 器,或一个立即数。 实例 ADD R3,R1,R2 ADD R3,R1,R2,LSL#2
第三章 ARM指令系统
嵌入式技术基础
ARM指令集_分支指令
带返回和状态切换的跳转指令BLX 指令格式
BLX{cond} Rm
指令功能 跳转到指令中所指定的目标地址,并实现状态的 切换,同时将PC的值保存至LR寄存器中 。 实例
BLX R0
第三章 ARM指令系统
嵌入式技术基础
;数据进栈,将R1~R7,LR入栈,满递减堆栈
LDMFD SP!,{R1-R7,LR}
;数据出栈,放入R1~R7,LR寄存器
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_相对寻址
相对寻址是基址寻址的一种变通方式,与基址寻址方 式基本相似。相对寻址以程序计数器PC的当前值为基 地址,指令中的地址标号作为偏移量,将两者相加之 后得到的操作数作为有效地址。
后变址模式 LDR R0,[R1],#4
;R0←mem32[R1] ,R1←R1+4
偏移地址模式 LDR R0,[R1,R2]
;R0←mem32[R1+R2]
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_多寄存器寻址
一条指令可以完成多个寄存器值的传送。这种寻址 方式可以用一条指令完成传送最多16个通用寄存器 的值。 实例 LDMIA R0!,{R1-R4}
;R1←[R0]、R2←[R0+4]、R3←[R0+8]、R4←[R0+12] ; 指令中后缀IA表示在每次完成加载操作后,R0按
字长度增加,因此可将连续存储单元的值传送到 R1-R4。
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_堆栈寻址
堆栈是一块用于保存数据的连续内存,是按后进先出 的原则存取数据的存储区。指向堆栈的地址寄存器称 为堆栈指针SP,堆栈的访问是通过堆栈指针控制的。 指针所指向的存储单元是栈顶。 在ARM指令中堆栈寻址通过Load/Store指令来实现。 实例 STMFD SP!,{R1-R7,LR}
第三章 ARM指令系统
嵌入式技术基础
ARM指令集_分支指令
带状态切换的跳转指令BX 指令格式
BX{cond} Rm
指令功能
跳转到Rm指定的地址执行程序,若Rm的位[0]为1,则跳 转时自动将CPSR中的标志T复位,即把目标地址的代码解 释为ARM代码。
实例
MOV R0,#0x11 BX R0
嵌入式技术基础
ARM指令集_分支指令
分支指令用于实现程序流程的跳转、改变程序执行流 程或调用子程序。 ARM有两种方式实现跳转: 使用跳转指令直接跳转 直接向PC寄存器赋值实现跳转 跳转指令种类: 立即跳转指令B 带链接的跳转指令BL 带状态切换的跳转指令BX 带返回的状态切换跳转指令BLX。
第三章 ARM指令系统
嵌入式技术基础
程序状态寄存器(CPSR/SPSR)
寄存器R16用作CPSR(当前程序状态寄存器),CPSR可在任何 运行模式下被访问,它包括条件标志位、中断禁止位、当前 处理器模式标志位,以及其他一些相关的控制和状态位。 每一种运行模式下又都有一个专用的物理状态寄存器,称 为SPSR(备份的程序状态寄存器),异常发生时,SPSR用 于保存CPSR的值,从异常退出时则可由SPSR来恢复CPSR。 由于用户模式和系统模式不属于异常模式,他们没有SPSR, 当在这两种模式下访问SPSR,结果是未知的。
实例
BL NEXT
… NEXT
;跳转到子程序NEXT处执行
…
MOV PC,LR
;从子程序返回
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_块复制寻址
块复制寻址可实现连续地址数据从存储器的某一位置 复制到另一位置 。
实例
STMIA R0!,{R1~R7}
;将R1~R7的数据保存到存储器中。存储指针在保存第一个 ;值后增加,增加方向为向上增长
ARM指令集_数据处理指令
数据处理指令大致可分为4类:数据传送指令、算术逻 辑运算指令、比较指令、乘法指令。数据处理指令只 能对寄存器的内容进行操作。 所有ARM数据处理指令均可选择使用S后缀,以影响 状态标志。 ARM指令中使用的是三地址模式 。 数据处理指令中所有的操作数都是32位宽。 在数据处理指令中,一般不采用R15作为寄存器。
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_立即数寻址
立即数寻址也称为立即寻址,指令中的操作码字段 后面的地址码就是操作数本身,数据包含在指令的 32位编码中,取出指令也就是取出了可以立即使用 的操作数。 实例 MOV R1,#0x01 SUBS R0,R0,#2