ARM7TDMI指令系统
arm嵌入式技术原理与应用答案

arm嵌入式技术原理与应用答案【篇一:嵌入式系统原理与开发课后答案】章嵌入式系统概述:1、什么是嵌入式系统?是简单列举一些生活中常见的嵌入式系统的实例。
p3嵌入式系统是用于检测、控制、辅助、操作机械设备的装置。
以应用为中心,一计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积和功耗等严格要求的专用计算机系统。
3、是比较嵌入式系统与通用pc的区别。
p3(1)嵌入式系统是专用的计算机系统,而pc是通用的计算机系统。
(2)技术要求不同,通用pc追求高速、海量的数据运算;嵌入式要求对象体系的智能化控制。
(3)发展方向不同,pc追求总线速度的不断提升,存储容量不断扩大;嵌入式追求特定对象系统的智能性,嵌入式,专用性。
4、嵌入式体统有哪些部分组成?简单说明各部分的功能与作用。
p6(1)硬件层是整个核心控制模块(由嵌入式微处理器、存储系统、通信模块、人机接口、其他i/o接口以及电源组成),嵌入式系统的硬件层以嵌入式微处理器为核心,在嵌入式微处理器基础上增加电源电路、时钟电路、和存储器电路(ram和rom等),这就构成了一个嵌入式核心控制模块,操作系统和应用程序都可以固化在rom 中。
(2)中间层把系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关。
一般包括硬件抽象层(hardware abstract layer,hal)和板级支持包(board support package,bsp)。
(3)软件层由实时操作系统(real time operating system,rtos)、文件系统、图形用户接口(graphical user interfaces,gui)、网络组件组成。
(4)功能层是面向被控对象和用户的,当需要用户操作是往往需要提供一个友好的人际界面。
5、嵌入式系统是怎么分类的?p7按照嵌入式微处理器的位数分类(4位、8位、16位、32位、64位);按照是实时性分类(硬实时系统式之系统对响应时间有严格的要求;软实时系统是对响应时间有一定要求);按照嵌入式软件结构分类(循环轮询系统、前后台系统、多任务系统);按照应用领域分类。
ARM嵌入式系统基础教程第二版课后习题答案

第1章嵌入式系统概述(1)举出3个本书中未提到的嵌入式系统的例子。
答:键盘、鼠标、扫描仪。
(2)什么叫嵌入式系统?答:嵌入到对象体系中的专用计算机应用系统。
(3)什么叫嵌入式处理器?嵌入式处理器分为哪几类?答:嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。
分为3类:1.注重尺寸、能耗和价格;2.关注性能;3.关注全部4个需求——性能、尺寸、能耗和价格。
(4)什么是嵌入式操作系统?为何要使用嵌入式操作系统?答:嵌入式操作系统是操作系统的一种类型,是在传统操作系统的基础上加入符合嵌入式系统要求的元素发展而来的。
原因:1.提高了系统的可靠性;2.提高了开发效率,缩短了开发周期。
3.充分发挥了32位CPU的多任务潜力。
第2章 ARM7体系结构1.基础知识(1)ARM7TDMI中的T、D、M、I的含义是什么?答:T:高密度16位Thumb指令集扩展;D:支持片上调试;M:64位乘法指令;I:Embedded ICE硬件仿真功能模块。
(2)ARM7TDMI采用几级流水线?使用何种存储器编址方式?答:3级;冯·诺依曼结构。
(3)ARM处理器模式和ARM处理器状态有何区别?答:ARM处理器模式体现在不同寄存器的使用上;ARM处理器状态体现在不同指令的使用上。
(4)分别列举ARM的处理器模式和状态?答:ARM的处理器模式:用户模式、系统模式、管理模式、中止模式、未定义模式、中断模式、快速模式;ARM的处理器状态:ARM状态、Thumb状态。
(5)PC和LR分别使用哪个寄存器?答:PC:R15;LR:R14。
(6)R13寄存器的通用功能是什么?答:堆栈指针SP。
(7)CPSR寄存器中哪些位用来定义处理器状态?答:位31~28:N、Z、C、V,条件代码标志位;27~8:保留位;7~0:I、F、T、M4~0,控制标志位。
(8)描述一下如何禁止IRQ和FIQ的中断。
答:当控制位I置位时,IRQ中断被禁止,否则允许IRQ中断使能;当控制位F置位时,FIQ 中断被禁止,否则允许FIQ中断使能。
ARM7TDMI汇编语言程序设计

2012-6-3
西安邮电学院 计算机系
page
22
2.1 ARM 汇编器的伪操作
在汇编语言程序里,有一些特殊指令助记 符,这些助记符与指令系统的助记符不同, 其没有相对应的操作码,通常称这些特助指 令助记符为伪操作。伪操作仅在汇编过程中 起各种准备工作作用。 ARM汇编中伪操作: •符号定义伪操作 •数据定义伪操作 •汇编控制伪操作 •信息报告伪操作 •其它常用的伪操作
�
开头:标号是一个自行设计的标识符或名 称,语句标号可以是大小写字母混合, 通常 以字母开头,由字母、数字、下划线等组成。 要求:语句标号不能与寄存器名、指令助记 符、伪指令 (操作)助记符、变量名同名。 位置:语句标号必须在一行的开头书写,不 能留空格。
西安邮电学院 计算机系
�
�
2012-6-3
page
2012-6-3 西安邮电学院 计算机系
page
20
操作数域 (Operand): � 操作数域表示操作的对象,操作数可以是 常量、变量、标号、寄存器名或表达式,不 同对象之间必须用逗号 “,”分开。
2012-6-3
西安邮电学院 计算机系
page
21
课堂练习 判断指令格式正误 AREA EX3, CODE, READONLY GBLA DATA DATA SETA 0x20 ADD R0,R1,R2 ADD R0,R1,r2 add Add R0,R1,r2 R0,R1,r2
2012-6-3 西安邮电学院 计算机系
page
第二讲 嵌入式微处理器内核ARM7TDMI原理.ppt

指令长度应该为基本数据/地址宽度的 倍数!
典型的指令系统: ♣ 32位字 ♣ 基本操作数地址为32 位长 ♣ 基本操作数(例如,整数), 32位长 ♣ 通常, 指令可以涉及3 个操作数(A := B + C)
挑战: 用少量的位数,对操作进行编码!
2007
No. 13
嵌入式 数据库
多媒体 编解码库 其他中间件
启动代码
硬件抽象层(HAL),硬件驱动程序
嵌入式处理器为核心的硬件平台
嵌入式系统的硬件构成
TI Power Trend嵌入式电源方案 MAXIM 电源芯片 Liner 公司电源芯片 NS 公司电源芯片
怀特电子高可靠性存储器系列 IDT公司FIFO及双口RAM Cypress公司高速SRAM系列 现代电子公司SDRAM系列 Intel公司 大容量Flash系列
Version3
32位地址总线
增加了CPSR,SPSR寄存器
增加了处理器工作模式 (ABOUT和UNDef)
增加了MRS/MSR指令,以访问 新增的CPSR/SPSR寄存器
增加了从异常处理返回的指令 功能。
系统结构版本
Version4(ARM7,9) THUMB指令集 增加了特权模式 PC距离当前指令为2个字 ,三级流水线
. 核心思想:由于运行速度的提高,可以把硅片的复杂性转移到语言编译器中去,硬
件部分尽可能简单而快速;
2007
No. 20
处理器设计的优化
计算机是不是总在计算?
指令类型 动态使用率 数据移动 43% 控制流 23%
算术操作 15%
比较
13%
逻辑操作 5%
ARM7TDMI的存储器及其地址映射

ARM7TDMI的存储器及其地址映射1.ARM7TDMI的存储器ARM7TDMI的存储器可分为内部存储器和外部存储器。
(1)内部存储器:又可分为片内FLASH程序存储器和片内静态RAM。
@片内FLASH程序存储器LPC2000系列除了LPC2220/2210/2290(最后位为0的无片内Flash)外,其他都带有容量不等的片内Flash,片内Flash可用作代码和数据的存储。
片内Flash通过128位宽度的总线(局部总线)与ARM 内核相连,具有很高的速度,加上存储器加速功能,可以在Flash直接运行程序,而无需把程序复制到RAM中运行。
对片内FLASH编程有三种方法实现:a. 通过内置JTAG接口;b. 通过在系统编程(ISP),使用UART0通信;c. 通过在应用编程(IAP),使用此法可实现用户程序运行时对Flash进行擦除或编程,这样为数据存储和现场固件的升级带来了极大的灵活性。
@静态RAMLPC2000系列ARM的片内RAM为静态RAM(SRAM),芯片容量根据不同的芯片有所不同,它们主要用作代码或数据的存储。
(2)片外存储器在CPU外部扩展连续的存储器芯片称为片外存储器。
LPC2200系列ARM芯片具备符合ARM公司的PL090标准的外部存储器接口,通过它可连接8位,16位,32位的片外存储器。
最多可扩展4个 BANK的存储器组,每个存储器组的寻址范围最大为16M 字节。
而实际应用中使用16位总线宽度性价比最高。
LPC2100系列ARM芯片不具备这种总线接口,只能通过片内外设来模拟总线时序来操作片外存储器。
对于外扩的SRAM只需一条LDR(STR)指令即可进行数据的读(写)操作,而对于外扩的Flash(NOR型),可使用LDR指令读取数据,但不能使用STR指令直接写数据,需要根据Flash 芯片的写操作时序进行控制,实现FLASH的擦除编程。
而如果要进行程序的烧写的话,需要在CPU内运行一个装载程序(loader程序,由用户自行编写),把从串口接受的代码数据写入到片外Flash中。
ARM嵌入式系统习题课1

(6) CMP指令是如何执行的?写一程序,判断R1的值是否大于0x30,是则 将R1减去0x30。 答:CMP指令是将寄存器Rn的值减去operand2的值,根据操作的结果更新 CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是 否执行。 比如: CMP {cond} Rn,operand2 CMP R1,#0x30 ;将R1与常数0x30比较 LDRLE PC,LR;如果小于或等于0x30,则程序返回 SUB R1,R1,#0x30;大于0x30,则将R1减去0x30,结果存回 R1 (7)调用子程序是用B指令还是用BL指令?请写出返回子程序的指令。 答:调用子程序是用BL指令; MOV PC,LR 或 BX LR
• 2、定义R0 =0x12345678,假设使用存储指令将R0的值放在0x4000单元中。 如果存储器格式为大端格式,请写出在执行加载指令将存储器0x4000单元 内容取出存放到R2寄存器操作后所得R2的值。如果存储器改为小端格式, 所得的R2值又为多少?低地址0x4000单元的字节内容分别是多少?
PC,
第三章
ARM7TDMI(-S)指令系统
(1)ARM7TDMI(-S)有几种寻址方式?“LDR R1,[R0,#0x08]”属于哪种寻址 方式? 答:有8种寻址方式:1.寄存器寻址 2.立即寻址 3.寄存器移位寻址 4.寄存器 间接寻址 5.基址寻址 6.多寄存器寻址 7.堆栈寻址 8.相对寻址;“LDR R1,[R0,#0x08]”属于基址寻址。 (3) ARM指令中的第2个操作数有哪几种形式?列举5个8位图立即数。 答:a.常数表达式(8位图) b.寄存器方式 c.寄存器移位方式; 八位位图即常熟是由一个八位的常数循环移位偶数位得到的 0x3FC、0、0xF0000000、200、0xF0000001。 (5)请指出MOV指令与LDR加载指令的区别及用途? 答:MOV指令的源操作数是常数或(带偏移量的)寄存器,用于寄存器之 间的数据传送;LDR指令的源操作数是地址,用于存储器到寄存器的数据传 送。
不同CPU中断技术对比专题研究
不同CPU中断技术对比专题研究一.X86中断系统(1)中断源中断申请方式:按照产生中断的方法来分:1.外部中断(来自CPU外部,由外设的请求引起,通过外部硬件产生,也称为硬件中断)外部中断又分为非屏蔽中断NMI和可屏蔽中断INTR。
2.内部中断(来自CPU内部,由执行指令引起的)内部中断又分为微处理器内部中断和软件中断。
(2)中断优先级管理方式:优先级由高到低一次为:1.内部中断(除单步中断)2.NMI3.INTR (IRQ0, ... , IRQ7)4.单步中断(3)中断的处理过程:8086中断控制是由CPU与中断控制器共同完成的,其中断过程包括:1. 中断申请:当外设需要中断服务时,由硬件产生一个中断请求信号INTR发送给CPU;CPU 在当前指令结束时检测INTR引脚,判断是否有中断请求。
2. 中断响应:当检测到有中断请求且IF=1时,总线周期信号M/IO D/C W/R为000,通过总线控制逻辑发中断响应信号;INTA给中断请求设备表示应答;中断请求设备将中断号送上数据总线;系统自动进入中断响应周期,由硬件完成关中断、保存断点、取中断服务的入口地址(N*4)等一系列操作,而后转向中断服务程序执行中断处理。
3、中断处理:执行中断服务程序中规定的操作。
4、中断返回:将压栈的断点从堆栈中弹出,开中断,CPU转向被中断的主程序继续执行。
(4)中断向量:8086在内存的最低端开辟了1KB 的存贮区作为中断向量表。
该表以四字节为一组构造而成,共分为256组,按中断向量码的序号排列:I/O ADDRINT TYPE FUNCTION00 ~ 03 0 除法溢出中断04 ~ 07 1 单步(用于DEBUG)08 ~ 0B 2 非屏蔽中断(NMI)0C ~ 0F 3 断点中断(用于DEBUG)10 ~ 13 4 溢出中断14 ~ 17 5 打印屏幕18 ~ 1F 6,7 保留二.8051单片机中断系统51单片机的中断系统共有5个中断源,2个中断优先级,可以实现两级中断服务嵌套。
乘法其他指令
3.2 ARM指令系统 指令系统 • ARM指令——乘法指令
助记符 MUL MLA Rd,Rm,Rs Rd,Rm,Rs,Rn 说明 32位乘法指令 32位乘加指令 64位无符号乘法指令 64位无符号乘加指令 64位有符号乘法指令 64位有符号乘加指令 操作 Rd←Rm*Rs (Rd≠Rm) Rd←Rm*Rs+Rn (Rd≠Rm) (RdLo,RdHi) ←Rm*Rs (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) (RdLo,RdHi) ←Rm*Rs (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) 条件码位置 MUL{cond}{S} MLA{cond}{S} UMULL{cond}{S} UMLAL{cond}{S} SMULL{cond}{S} SMLAL{cond}{S}
<MTSE1.0>
3.2 ARM指令系统 指令系统 • ARM指令——乘法指令
助记符 MUL MLA Rd,Rm,Rs Rd,Rm,Rs,Rn 说明 32位乘法指令 32位乘加指令 64位无符号乘法指令 操作 Rd←Rm*Rs (Rd≠Rm) Rd←Rm*Rs+Rn (Rd≠Rm) (RdLo,RdHi) ←Rm*Rs (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) (RdLo,RdHi) ←Rm*Rs (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) 条件码位置 MUL{cond}{S} MLA{cond}{S} UMULL{cond}{S}
MUL MULS MLA 错例: MUL MLA R15,R0,R3 R1 ,R1,R6 R1,R2,R3 ;R1=R2×R3
R0,R3,R7 ;R0=R3×R7,同时影响CPSR中的N位和Z位 R1,R2,R3,R0 ;R1=R2×R3+R0
嵌入式重点
ARM命名格式如下:ARM{x}{y}{z}{T}{D}{M}{I}{E} {J}{F}{-S}x:系列号,例如ARM7中的“7”、ARM9中的“9”;y:内部存储管理/保护单元,例如ARM72中的“2”、ARM94中的“4”;z:内含有高速缓存Cache;T:支持16位的Thumb指令集;D:支持JTAG片上调试;M:支持长乘法操作(64位结果)的ARM指令,包含快速乘法器;I:带有嵌入式追踪宏单元ETM (Embedded Trace Macro),用来设置断点和观察点;E:增强型DSP指令(基于TDMI);J:含有Java加速器Jazelle,与Java虚拟机相比,Java加速器Jazelle使Java代码运行速度提高了8倍,功耗降低到原来的80%;F:向量浮点运算单元;S:可综合版本,意味着处理器内核是以源代码形式提供的。
CISC:复杂指令集(Complex Instruction Set Computer)具有大量的指令和寻址方式8/2原则:80%的程序只使用20%的指令大多数程序只使用少量的指令就能够运行。
RISC:精简指令集(Reduced Instruction Set Computer)在通道中只包含最有用的指令确保数据通道快速执行每一条指令使CPU硬件结构设计变得更为简单RISC的结构的特点如下:1简化指令集,只保留常用的基本指令;2设计大量的通用存储器,减少访存的次数;3采用装载/保存(load-store)结构,支持流水线技术,使每个周期时间相等;4采用简单的指令格式、规整的指令字长和简单的寻址方式。
5单机器周期指令,即大多数的指令都可以在一个机器周期内完成。
除以上特点之外,ARM增加:数据处理指令可同时包含ALU运算和移位处理功能;地址自增和自减功能;装载/保存指令中具有数据的批量传输;大多数指令提供条件执行。
ARM7系列简介该系列处理器提供Thumb 16位压缩指令集和EmbededICE软件调试方式,适用于更大规模的SoC设计中。
ARM7TDMI
ARM7TDMI介绍ARM7TDMI核,是从最早实现了32位地址空间编程模式的ARM6核发展而来的,可稳定地在低于5V的电源电压下可靠地工作。
增加了64位乘法指令、支持片上调试、Thumb指令集和EmbeddedICE片上断点和观察点。
ARM7TDMI是ARM公司最早为业界普遍认可且得到了广泛应用的核,特别是在手机和PDA应用中。
随着ARM技术的发展,它已是目前最低端的ARM 核。
ARM7TDMI处理器区别于其他ARM7处理器的一个重要特征是其独有的称之为Thumb的架构策略。
该策略为基本ARM 架构的扩展,由36种基于标准32位ARM指令集、但重新采用16位宽度优化编码的指令格式构成。
由于Thumb指令的宽度只为ARM指令的一半,因此能获得非常高的代码密度。
当Thumb指令被执行时,其16位的操作码被处理器解码为等效的32位标准ARM指令,然后ARM处理器核就如同执行32位的标准ARM指令一样执行16位的Thumb指令。
也即是Thumb架构为16位的系统提供了一条获得32位性能的途径。
ARM7TDMI内核既能执行32位的ARM指令集,又能执行16位的Thumb指令集,因此允许用户以子程序段为单位,在同一个地址空间使用Thumb指令集和ARM指令集混合编程,采用这种方式,用户可以在代码大小和系统性能上进行权衡,从而为特定的应用系统找到一个最佳的编程解决方案。
32位的ARM指令集由13种基本的指令类型组成,可分为如下四大类。
1)4类分支指令用于控制程序的执行流程、指令的特权等级可在ARM代码与Thumb代码之间进行切换。
2)3类数据处理指令用于操作片上的ALU、桶型移位器和乘法器,以完成在31个32位的通用寄存器之间的高速数据处理。
3)3类加载/存储指令用于控制在存储器和寄存器之间的数据传输。
一类为方便寻址进行了优化,另一类用于快速的上下文切换,第三类用于数据交换。
4)3类协处理器指令用于控制外部的协处理器,这些指令以开放统一的方式扩展用于片外功能指令集。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV R1, #3 MOV R2, #2 BL arithfunc #0 LAB cmd 1 #3LAB+4 注意: #2LAB+8 cmd 2
取指 译码
取指
此时重建 ; 其它指令 流水线
#num PC, LR arithfunc
cmd N CMP R0, #num MOVHS PC, LR cmd X 译码 取指 执行 译码 取指 取指
寻址方式分类——堆栈寻址
堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈; 堆栈指针指向下一个待压入数据的空位臵,称为空堆栈。
压栈 SP栈顶 SP栈顶 0x12345678 0x12345678 SP栈顶 SP栈顶 压栈 0x12345678
满堆栈 栈底 栈底
空堆栈
2013-8-11
计算机学院
page
程序控制指令 B
SYS FIQ IRQ SVC ABORT UND
3
目 录
1.ARM处理器寻址方式
2.指令集介绍
ARM指令集
Thumb指令集
2013-8-11
计算机学院
page
4
3.1 ARM处理器寻址方式
寻址方式分类
寻址方式:根据指令中给出的地址码字段来实现寻找真
实操作数地址的方式。
Rm,shift——寄存器移位方式;
2013-8-11
计算机学院
page
23
<opcode> {<cond>} {S} <Rd>, <Rn> {,<operand2>}
灵活的使用第2个操作数“operand2”能够提高 代码效率。它有如下的形式: #immed_8r——常数表达式; Rm——寄存器方式; Rm,shift——寄存器移位方式;
ADD_SUB
标号
ADDS MOV R0,R0,R1 PC,LR ;R0 = R0 + R1 ;子程序返回
END
2013-8-11
声明文件结束
计算机学院
;文件结束
page
19
目 录
1.ARM处理器寻址方式 2.指令集介绍 ARM指令集 1. 指令格式
2. 条件码
3. ARM指令
Thumb指令集
Thumb指令:集具有较高的代码密度,却仍然保持ARM的大
多数性能上的优势,它是ARM指令集的子集,指令集具有灵活、 小巧的特点。而Thumb指令仅有一条指令具备条件执行功能。
ARM程序和Thumb程序可相互调用,改变T可以改变状态,相互
之间的状态切换开销几乎为零。
2013-8-11 计算机学院
2013-8-11 计算机学院
page
12
3.1 ARM处理器寻址方式
寻址方式分类——堆栈寻址
堆栈压栈 0x12345678
SP栈顶
栈底
栈区
向上 增长
堆栈存 储区
向下 增长
栈区
栈底 0x12345678 堆栈压栈
栈顶SP
2013-8-11
计算机学院
page
13
3.1 ARM处理器寻址方式
2013-8-11 计算机学院
page
6
3.1 ARM处理器寻址方式
寻址方式分类——寄存器寻址
操作数的值在寄存器中,指令中的地址码字段指出的是 寄存器编号,指令执行时直接取出寄存器值来操作。寄存器 寻址指令举例如下:
MOV
SUB
R1,R2
;将R2的值存入R1
R0,R1,R2 ;将R1的值减去R2的值,结果保存到R0 R2 R1 0xAA 0xAA 0x55
LDR R2,[R3,#0x0C]
2013-8-11 计算机学院
page
10
•多寄存器寻址(块拷贝寻址)
多寄存器寻址就是在ARM处理器与存储器间用一条指令完 成多个寄存器值的传送,即允许用一条指令实现传送16个 R12 0x?? 0x12 0x40000018 0x12 R7 0x?? 0x06 0x40000014 寄存器的任何子集。 0x06 R6 0x?? 0x05 0x40000010 0x05 LDMIA R1!, {R2-R7, R12} ; 将R1所指向的存储器区域中的内容依次 R5 0x?? 0x04 0x4000000C 0x04 加载到R2~R7、R12(每传送一个寄存器值后,R1的值自动加4并保 R4 0x?? 0x03 0x40000008 0x03
2013-8-11 计算机学院
page
20
3.2 指令集介绍
3.2.1 ARM指令集——指令格式
ARM指令的基本格式如下:
<opcode> {<cond>} {S} <Rd> ,<Rn>{,<operand2>}
其中<>号内的项是必须的,{}号内的项是可选的。各项的 说明如下:
opcode:指令助记符;
MOV R1,R2
2013-8-11 计算机学院
page
7
3.1 ARM处理器寻址方式
寻址方式分类——寄存器移位寻址
寄存器移位寻址是ARM指令集特有的寻址方式。当第2个 操作数是寄存器移位方式时,第2个寄存器操作数在与第1个 操作数结合之前,选择进行移位操作。寄存器移位寻址指令 举例如下: MOV R0,R2,LSL #3;R2的值左移3位,结果放入R0, 逻辑左移3位 ;即是R0=R2×8 R2 0x01 0x08 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相 R0 0x08 0x55 “与”操作,结果放入R1. MOV R0,R2,LSL #3
最低地址。指令如LDMFD、STMFD等;
空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位 臵。指令如LDMED、STMED等。
2013-8-11 计算机学院
page
15
3.1 ARM处理器寻址方式
寻址方式分类——相对寻址
相对寻址是基址寻址的一种变通。由程序计数器PC提
供基准地址,指令中的地址码字段作为偏移量,两者相加 后得到的地址即为操作数的有效地址。 相对寻址指令举例如下:
存)
R3 0x?? 0x02 0x40000004 0x02 STMIA R0!, {R2-R7, R12} ; 将R2~R7、R12中的值依次保存到R0所 R2 0x?? 0x01 0x40000000 0x01 指向的存储器区域中(每传送一个寄存器值后,R0的值自动加4并保存) 存储器 R1 0x4000001C 0x40000000 LDMIA
SWP
R2 0x40000000 R1,R1,[R2];将寄存器R1的值和R2指定的存储 R0 0xAA 0x55 单元的内容交换 . LDR R0,[R2]
2013-8-11
计算机学院
page
9
3.1 ARM处理器寻址方式
寻址方式分类——基址寻址
基址寻址就是将基址寄存器的内容与指令中给出的偏 移量相加,形成操作数的有效地址。基址寻址用于访问基 址附近的存储单元,常用于查表、数组操作、功能部件寄 存器访问等。基址寻址指令举例如下:
;说明:使用ARMulate软件仿真调试
Example1,CODE,READONLY ;声明代码段Example1 ;标识程序入口 ;声明32位ARM指令 R0,#0 R1,#10 ADD_SUB LOOP ;调用子程序ADD_SUB ;设置参数
START
MOV MOV
LOOP
BL B
实际代码段
;跳转到LOOP
cond:执行条件;
S:是否影响CPSR寄存器的值; Rd:目标寄存器; Rn:第1个操作数的寄存器; operand2:第2个操作数;
2013-8-11 计算机学院
page
21
例:ADDEQS
条件码 域
R0, R1, #8
目标或源 寄存器Rd
其二进制代码形式为:
指令代码域
地址基址Rn
地址偏移或操作 寄存器、操作数 区
ARM处理器具有8种基本寻址方式:
1.寄存器寻址; 3.寄存器移位寻址; 5.基址寻址; 7.堆栈寻址;
2013-8-11
2.立即寻址; 4.寄存器间接寻址; 6.多寄存器寻址; 8.相对寻址。
计算机学院
page
5
3.1 ARM处理器寻址方式
寻址方式分类——立即寻址
立即寻址指令中的操作码字段后面的地址码部分即是操 作数本身,也就是说,数据就包含在指令当中,取出指令也 就取出了可以立即使用的操作数(这样的数称为立即数)。立 即寻址指令举例如下: SUBS R0,R0,#1程序存储 ;R0减1,结果放入R0,并且影响标志位 MOV R0,#0xFF00 MOV R0,#0xFF000 ;将立即数0xFF000装入R0寄存器 从代码中获得数据 R0 0xFF00 0x55 MOV R0,#0xFF00
page
22
2013-8-11
计算机学院
3.2 指令集介绍
ARM指令集——第2个操作数
ARM指令的基本格式如下:
<opcode> {<cond>} {S} <Rd> ,<Rn>{,<operand2>}
灵活的使用第2个操作数“operand2”能够提高代码效率。 它有如下的形式: #immed_8r——常数表达式; Rm——寄存器方式;
BL BEQ ... LOOP MOV ... SUBR1 ...
2013-8-11
SUBR1 LOOP R6,#1