嵌入式系统基础实践教程-第3章v13

合集下载

嵌入式系统基础及应用 第三章3

嵌入式系统基础及应用 第三章3

试分析下面几段ARM汇编程序的执行结果: (1) AREA Example, CODE, READONLY EXPORT test IMPORT test1 ENTRY test LDR R1, =test LDR R0, [R1] ADD R0, R0, #1 STR R0, [R1] MOV PC, LR END
常用的伪操作
IMPORT 伪操作告诉编译器当前的符号不 是在本源文件中定义的,而是在其他源文 件中定义的,在本源文件中可能引用该符 号 IMPORT Main ;通知编译器当前文件要 引用标号Main,但Main在其他文件中定 义
宏定义
使用宏定义可以提高程序的可读性,简化程序代码和同 步修改。ARM宏定义与标准C的#define相似。 宏定义从MACRO伪指令开始,到MEND结束,并可以使 用参数。 宏要先定义,然后再使用,使用时直接书写宏名,并根 据对应的宏定义格式设置输入参数或书写标号等,当源 程序被汇编时,汇编编译器将展开每一个宏调用,用宏 定义体代替程序中的宏调用,并使用实际的参数值代替 宏定义时的形式参数。 MACRO {$label} macroname {$parameter{,$parameter}……} MEND
ARM汇编编程例子
C语言与汇编语言
在应用系统的程序设计中,若所有的编程 任务均用汇编语言来完成,其工作量是可 想而知的,同时不利于系统升级或应用软 件移植 ARM体系结构支持C/C++以及与汇编语 言的混合编程,在一个完整的程序设计中 ,除了初始部分用汇编语言完成以外,其 主要的编程任务一般都用C/C++完成
常用的伪操作
ENTRY和END
ENTRY用于指定汇编程序的入口 每一个汇编源程序都包含END为操作,以告 诉本源程序的结束 AREA Example1,CODE, READONLY ENTRY END

嵌入式系统设计与应用课件第3版第3章嵌入式Linux操作系统

嵌入式系统设计与应用课件第3版第3章嵌入式Linux操作系统
• 在minicom窗口中,按下Ctrl + A + S组件键,弹出选择 传输数据协议的对话框。
3.5.2 在VMware虚拟机中设置 Windows——Linux的数据共享
在VMware虚拟机中可以设置Windows与Linux 系统的共享。设Windows操作系统的VMware中 安装有Linux操作系统,通过Vmware虚拟机可以 设置Windows与Linux系统的共享。
(2)在Linux系统开发板端设置接收文件
在开发板端设置接收文件的操作很简单,只需要通过 minicom窗口,进入到准备接收数据文件的目录中, 等待发送来的文件。
(3)发送数据
在超级终端的串口通信窗口的【发送】菜单中,选择 【发送文件(S)…】项
• 在弹出的“发送文件”对话框中,单击【浏览(B)…】 按钮,选择需要传送的数据文件。然后在“协议(P)” 下拉列表框中,选择“Xmodem”协议。如图5.17所示。
3、Linux系统主机传输数据到Linux系统开发板
把在Linux系统主机上经过交叉编译后的文件 传输到Linux系统开发板运行,可以使用本方法 来实现传送文件。 (1)在开发板端设置接收文件
通过minicom窗口操作开发板端文件系统,进 入到准备接收数据文件的目录中,等待发送来的 文件。
• (2)从Linux系统主机端发送文件
2、ping
• (1)作用 • ping命令用于检测网络连接情况,从而判
断主机联网是否连接正常。 • (2)命令格式 • ping [IP地址]
3.3 Linux的文本编辑器
3.4.1 Vi文本编辑器
1、 Vi 的模式
命令行模式、 插入模式、 底行模式。
2、 Vi 的基本流程

《嵌入式系统基础》课程教学大纲

《嵌入式系统基础》课程教学大纲

嵌入式系统基础课程教学大纲(EmbeddedMicroprocessorSystem)学时数:32其中:实验学时:0课外学时:0学分数:2适用专业:计算机科学与技术一、课程的性质、目的和任务本课程是计算机科学与技术专业本科生的一门专业选修课程。

通过本课程的学习,使学生掌握嵌入式系统的基础知识,熟悉典型的嵌入式微处理器及嵌入式操作系统,掌握嵌入式系统的一般设计方法与开发过程,具备初步的嵌入式系统的软硬件设计开发能力,为嵌入式系统的实际应用打下基础。

二、课程教学的基本要求(一)掌握嵌入式系统的基本概念、基本组成及发展、嵌入式处理器及嵌入式操作系统分类(二)掌握ARM嵌入式微处理器体系结构、ARM指令系统及ARM汇编语言(H)掌握嵌入式1inUX 操作系统内核结构及文件系统(四)掌握嵌入式系统的一般设计流程、典型开发环境及开发工具(五)掌握基于ARM嵌入式微处理器的典型接口设计(六)初步掌握基于嵌入式1inUX操作系统的软件设计三、课程的教学内容、重点和难点第一章嵌入式系统基础知识一、嵌入式系统简介二、嵌入式处理器第二章嵌入式系统一般设计方法一、嵌入式系统的层次结构二、嵌入式系统的设计流程第三章ARM处理器体系结构及指令系统一、ARM微处理器的体系结构二、指令系统三、基于ARM体系的汇编语言程序设计第四章基于ARM处理器的硬件平台设计一、基于微处理器的嵌入式系统的硬件设计二、存储系统的分析与设计三、通用I/O接口的设计第五章嵌入式1inux操作系统一、1i1IUX及其应用二、嵌入式1inux内核三、嵌入式1inUX文件系统第六章嵌入式1inux系统的Boot1oader设计一、Boot1oader的基本概念二、Boot1oader的具体实现重点:Boot1oader的基本概念难点:BOOt1Oader的具体实现第七章嵌入式1inux程序设计基础一、嵌入式1inUX开发基础二、1inUX的常用工具三、嵌入式1inUX操作系统的开发工具四、交叉开发环境重点:嵌入式1inUX操作系统的开发工具、难点:交叉开发环境第八章嵌入式1inux系统的驱动开发一、1inUX下的设备驱动程序简介二、设备驱动程序的开发过程三、典型设备驱动程序设计分析第九章嵌入式网络程序设计一、嵌入式以太网基础知识二、以太网接口设计三、1in1IX网络编程实现重点:以太网接口设计、1inUX网络编程实现难点:1inUX网络编程实现第十章嵌入式1inux图形用户界面编程一、1inux图形开发基础二、嵌入式1inIIX图形用户界面简介四、课程各教学环节要求(一)作业根据课程学习需要,安排适当课外作业。

刘彦文-嵌入式系统实践教程-CH3 清华大学出版社

刘彦文-嵌入式系统实践教程-CH3 清华大学出版社

3.1.3 如何获取工具链 根据自己的开发环境,通过以下4种途径可以获 得工具链: 购买一个商业版的工具链。 网上下载一个免费的工具链。 购买目标板时,附带的光盘上通常会带有一个工 具链。 网上下载组成工具链的源代码,使用工具自行创 建一个工具链。 购买目标板所附带的工具链,是大多数用户最 常使用的工具链,使用时要安装到主机Linux系 统下。


工具链通常包含以下二进制(可执行文件)工具 程序:预处理器、链接器、汇编器、打包器 (archiver)、C(或其他语言的)编译器,以及 C程序库与它的头文件。 其中,C程序库与它的头文件是一种共享程序库, 其行为有如内含“原始Linux内核API”的打包程 序,而且在Linux系统中执行的任何应用程序几 乎都会用到它。
3.1.4 工具链的组件及GDB简介 ⒈ 工具链组件简介 ⑴ GCC编译器集 GCC(GNU Compiler Collection,GNU编译器集) 并不仅仅是个C编译器,它是一个GNU编译器集, 能够支持对C、C++、Objective C、Java、 Fortran(F77)以及Ada语言的编译。 可以对GCC进行配置,使GCC能够为不同的目标 处理器生成代码,使之成为一个交叉编译器。目 前GCC支持的处理器体系结构有40余种,常见的 有x86、ARM、PowerPC等。GCC除了能够在 Linux环境下运行,还可以在Windows下运行。
第3章 主机开发环境配置



虽然Linux编程环境能够支持众多编程语言, 例如C、C++、Java、Perl、Python、Ada、 Forth、Lisp、Fortran等等,但是目前最常用 的是C语言。 本章主要描述了使用C语言编程时,主机开发 环境的跨平台工具链的安装。 另外目标板在运行程序时,使用到网口和串行 端口,因此需要事先对主机Linux环境网络和 串行端口进行配置。

《嵌入式系统基础》课程.doc

《嵌入式系统基础》课程.doc

《嵌入式系统基础》课程教学大纲课程代码:课程名称:嵌入式系统基础/The Foundation of Embedded System课程类型:专业限选课学时学分:48学时/3学分适用专业:计算机科学与技术专业开课部门:灾害信息工程系一、课程的地位、目的和任务《嵌入式系统基础》是计算机科学与技术专业的一门专业限选课程。

本课程比较全面地介绍了嵌入式系统的概论与其组成部分,并从软件工程的角度出发阐述了嵌入式系统的开发流程和开发方法;着重讲述了嵌入式处理器、存储系统和嵌入式操作系统。

通过本课程的学习,可以使学生全面掌握嵌入式系统原理的知识,掌握嵌入式系统软件与通用软件设计的差异,具备硬件和软件两个方面设计与实现能力。

同时本课程结合具体实例以培养学生的动手能力和设计开发基于特定微处理器的特定应用系统的能力,特别是关于嵌入式系统分析、系统设计、系统架构等方面技能。

二、课程与相关课程的联系与分工《嵌入式系统基础》在《数字逻辑》、《》《计算机组成原理》课程的基础上讲授,本课程帮助学生全面掌握嵌入式系统原理的知识,掌握嵌入式系统软件与通用软件设计的差异,具备硬件和软件两个方面设计与实现能力,开拓学生的专业学术视野,并为今后的嵌入式系统开发相关课程的学习和专业发展奠定重要的基础。

三、教学内容与基本要求第一章嵌入式系统基础知识1、嵌入式系统的定义和组成2、嵌入式微处理器体系结构3、嵌入式微处理器的结构和类型本章重点:嵌入式系统的定义和组成本章难点:嵌入式微处理器体系结构基本要求:1、知识要求1)了解嵌入式微处理器的结构和类型。

2)理解掌握嵌入式系统的定义和组成。

2、能力要求通过本章的学习,学生能够理解嵌入式系统的定义和组成。

第二章ARM体系结构1、ARM微处理器结构2、ARM微处理器的寄存器结构3、ARM微处理器的异常处理4、ARM的存储器结构5、ARM微处理器指令系统6、ARM微处理器的接口本章重点:ARM微处理器结构、ARM微处理器指令系统本章难点:ARM微处理器指令系统基本要求:1、知识要求1)熟悉ARM微处理器结构。

嵌入式系统基础及应用 第三章.ppt

嵌入式系统基础及应用 第三章.ppt

LDMFD
R13, {R4, R5}
MOV R15, R14
END
EQU伪操作用于为程序中的常量、标号等 定义一个等效的字符名称
名称 EQU 表达式{,类型} abcd EQU 50;定义标号abcd的值为50 名称为EQU伪操作定义的字符名称,当表达
式为32位的常量时,可以指定表达式的数据类 型,可以有以下三种类型: CODE16 CODE32 DATA Addr EQU 0x54, CODE32; 定义Addr的值 为0x54,且该处为32位的ARM指令。
MACRO {$label} macroname
{$parameter{,$parameter}……} MEND
ARM汇编编程例子
AREA Add, CODE, READONLY ;程序起始定义
ENTRY
;第一条指令的标示符,只能有一个
;下面是程序主体
Start
MOV r0, #1
ARM体系结构支持C/C++以及与汇编语 言的混合编程,在一个完整的程序设计中 ,除了初始部分用汇编语言完成以外,其 主要的编程任务一般都用C/C++完成
从汇编程序中访问C变量
从C程序中调用汇编程序
Any Question?
习题与思考
ARM处理器有几种工作状态?各个状态 之间如何切换?
STMFD
R13, {R4, R5}
LDR R4, [R13]
LDR R5, [R13, #4]!
ADD R0, R0, R1
ADD R0, R0, R2
ADD R0, R0, R3
ADD R0, R0, R4
ADD R0, R0, R5

嵌入式技术应用教程——基于S3C2410第三章

嵌入式技术应用教程——基于S3C2410第三章

第三章汇编语言与C语言3.1 C语言与汇编语言的比较本课程全程使用C语言来开发S3C2410A。

目前很少有用汇编语言来开发ARM系统了。

相比较而言汇编语言的优势是执行效率高,但其劣势是代码效率较低,而C语言正好相反,其代码效率较高,执行效率较低。

什么是执行效率?什么是代码效率?在嵌入式设计领域,一般执行效率就是程序的执行时间可以精确控制,从而可以使程序高效率的运行。

采用汇编语言编写ARM程序,每一条指令的执行时间都是固定不变的(外部时钟确定),所以写出的程序每一步的执行时间都是可以精确控制的。

这是采用汇编语言的优势所在。

但是,相信有过用汇编语言进行程序设计经验的读者在读别人用汇编语言写的程序时都会觉得十分吃力,尤其在碰到一些编程习惯不好的coding,整个程序注释寥寥或者干脆没有,那么对于一般的设计人员来讲,这样的程序就是天书一卷了。

这也就是所谓的程序可读性不高,不便于维护和移植重用。

这也可以说是代码效率底下。

C语言编写的程序相对来说可读性高,便于移植重用,结构灵活。

一个注释完全,结构完整的C程序很容易就读懂了,而且我们还可以把一些常用的代码封装成函数,这样就可以根据需要来直接调用这些函数。

C语言有了这些性质,相对于汇编语言其代码效率就较高了。

C语言有其优点,必然在嵌入式领域内还有其不足的地方。

采用C语言编写的ARM驱动代码需要经过编译器编译而生成相对应的汇编代码,最后生成可下载执行的二进制文件。

在这个过程中,所生成的汇编代码完全由编译器所决定,这样一来对于一条C语句来讲预先不知道所生成的汇编代码有几多,所以也就无从精确判断程序执行的时间,这种特质也就是所谓的执行效率相对较低。

在嵌入式控制领域,有一些设计对于程序的执行时间需要精确的把握,大多数设计对于程序的时间要求没有那么精确。

故此,一般情况下C语言完全能够胜任开发任务。

如果在设计中碰到了需要严格把握程序执行时间的地方,可以根据需要采取C语言和汇编语言混合编程的方法来处理。

嵌入式系统实训教程

嵌入式系统实训教程

嵌入式系统实训教程马兴录2013-03-18目录第1章单片机实验教程 (1)1.1 单片机开发环境的搭建 (1)1.1.1 单片机开发环境介绍 (1)1.1.2 单片机开发环境的搭建 (1)1.1.3 联机调试 (3)1.1.4 练习 (4)1.2 单片机联机调试功能试验 (5)1.2.1 观察各类存储单元 (5)1.3 单片机定时器实验 (7)1.3.1 实验目的 (7)1.3.2 设计要求 (7)1.3.3 实验原理 (7)1.3.4 实验步骤 (7)1.3.5 常见问题 (8)1.3.6 练习 (8)1.4 单片机中断系统实验 (9)1.4.1 实验目的 (9)1.4.2 设计要求 (9)1.4.3 实验原理 (9)1.4.4 实验步骤 (10)1.4.5 练习 (13)1.5 简单交通灯控制系统的设计 (14)1.5.1 实验目的 (14)1.5.2 实验要求 (14)1.6 单片机串行通讯接口实验 (16)1.6.1 实验目的 (16)1.6.2 实验要求 (16)1.6.3 实验原理 (16)第1章单片机实验教程1.1 单片机开发环境的搭建本节目标:搭建Keil C51单片机编程开发环境,以及Proteus仿真环境,实现两者的联机调试。

1.1.1 单片机开发环境介绍目前,51单片机的开发大都使用C51编程语言,基本不再使用汇编语言。

这大大简化了单片机应用程序的开发。

当前使用最多的开发环境是Keil C51。

目前最高版本为uVision 4,除支持51系列单片机外,还可支持大多数的ARM芯片。

Keil开发环境本身带有模拟器,可以模拟调试单片机应用程序。

也可以与Proteusl联合实现软硬件联调,达到更好的仿真效果。

Protues是硬件线路板的设计开发软件,用来设计硬件线路连接原理图及印刷电路板图等,是常用的硬件线路版设计软件。

同时,它还具有较强的硬件仿真能力,可以形象直观地仿真硬件的运行情况,特别是它可以仿真多种常见的处理器,允许给处理器提供相应的程序并仿真运行。

嵌入式系统开发与应用教程第三讲

嵌入式系统开发与应用教程第三讲
数据处理指令-分类
数据处理指令根据指令实现处理功能可分为以下六类: 数据传送指令; 算术运算指令; 逻辑运算指令; 比较指令; 测试指令; 乘法指令。
数据处理指令
ARM数据处理指令的基本原则为 : 所有的操作数都是32位宽,或来自寄存器,或是在指令中定义的立即数(符号或0扩展); 如果数据操作有结果,则结果为32位宽,放在一个寄存器中。(有一个例外:长乘指令产生64位的结果); ARM指令中使用“3地址模式”,即每一个操作数寄存器和结果寄存器在指令中分别指定。
Z置位或(N不等于V)
带符号数小于或等于
1110
AL
总是
无条件执行
二、 ARM寻址方式
ARM指令系统支持如下几种常见的寻址方式: 立即寻址 寄存器寻址 寄存器间接寻址 基址加偏址寻址 堆栈寻址 块拷贝寻址 相对寻址
立即寻址
立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令: ADD R0,R0,#1 /*R0←R0+1*/ AND R0,R0,#0x3f /*R0←R0 AND 0x3f*/ 在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”。
例:
MOV R0, #0x0000F200 MOV R0, #0x00012800 MOV R0, #0x00041400 MOV R0, #0x00041800 MOV R0, #0xF000000F
寄存器寻址
寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令: ADD R0,R1,R2 /*R0←R1+R2*/ 该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。

嵌入式技术基础与实践(第3版)1-3章课后习题答案

嵌入式技术基础与实践(第3版)1-3章课后习题答案

第一章1.嵌入式系统的基本含义是什么?为什么说单片机是典型的嵌入式系统?答:即MCU的含义是:在一块芯片上集成了中央处理单元(CPU)、存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。

大部分嵌入式系统以MCU为核心进行设计。

MCU从体系结构到指令系统都是按照嵌入式系统的应用特点专门设计的,它能很好地满足应用系统的嵌入、面向测控对象、现场可靠运行等方面的要求。

因此以MCU为核心的系统是应用最广的嵌入式系统。

2.简述嵌入式系统的特点以及应用领域(举例)。

答:嵌入式系统属于计算机系统,但不单独以通用计算机的面目出现;嵌入式系统开发需要专用工具和特殊方法;使用MCU设计嵌入式系统,数据与程序空间采用不同存储介质;开发嵌入式系统涉及软件、硬件及应用领域的知识;嵌入式系统的其他特点,比如紧张的资源,较高稳定性要求,低功耗,低成本等。

一般用于工业控制,智能家电,日常电子等领域。

日常数码产品:手机,MP3,U盘,相机等。

日常工业类:冰箱,空调,微波炉,汽车等。

3.比较MCU与CPU的区别与联系。

答:CPU是一个单独的PC处理器。

而MCU,则有微处理器,存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。

所以可以这么说,MCU 是一个包含微处理器的嵌入式系统,而CPU紧紧是一个处理器而已。

4. 总结嵌入式系统常用术语。

硬件:封装,印刷电路板,动态可读写随机存储器与静态可读写随机存储器,只读存储器,闪速存储器,模拟量与开关量。

通信:并行通信,串行通信,串行外设接口,集成电路互连总线,通用串行总线,控制器局域网,背景调试模式,边界扫描测试协议,串行线调试技术。

功能模块及软件:通用输入/输出,A/D与D/A,脉冲宽度调制器,看门狗,液晶显示,发光二级管,键盘,实时操作系统。

5.C语言的那些特性使得它成为嵌入式系统中使用频率最高的高级语言。

《单片机与嵌入式系统基础与实训》第三章

《单片机与嵌入式系统基础与实训》第三章
● 3.3
表3-1 Keil C51扩展的关键字
3.3.2 C51数据类型 C51支持的数据类型有:1.基本数据类型 2.构造类型 3.指针类 型与空类型。 位型(bit)
字符型(char) 基本类型 整型(int) 浮点数(float) 双精度浮点数(double) 数组类型(array) 数据类型 构造类型 结构体类型(struct) 共用体(union) 枚举(enum) 指针类型 空类型
● 3.2 Keil C51程序的基本结构
美国KEIL公司对ANSI C做了扩展,以适应单片机硬件结构 的C语言,称为C51。
1.C51程序跟ANSI ห้องสมุดไป่ตู้一样,函数是其基本单位。一个C51 源程序至少包括一个函数,但有且只有一个主函数main()。 2.C51 程序也主要由4部分组成: (1)指定头文件(2)声明区(3)主程序(4)函数定义
存储器类型 data bdata idata pdata xdata code 描述
直接寻址片内数据存储区,128字节,0~7FH;访问速度快,存放常 用变量或临时性传递变量。
可位寻址片内数据存储区,16字节,128位;允许位与字节混合访问。 间接寻址片内数据存储区(RAM),128字节,0~7FH。
sfr SCON = 0x98; /* 串口控制寄存器地址98H */
2.特殊位(sbit) C51的扩充功能可以单独访问 SFR中的位,使用关键字“sbit” 可以访问位寻址对象。但也像SFR一样不与ANSI C兼容, 用关键字“sbit”定义某些特殊位,并接受任何符号名,“=”号后 有三种方法将绝对地址赋给变量名
图3-5 C51数据类型
C51编译器中int和short相同,float和double相同,不列出说 明了。具体如表3-2所示。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• ARM 处理器支持以下四种类型的堆栈工作方式: 满递增堆栈FA(Full Ascending):堆栈指针指向最 后压入的数据,且由低地址向高地址生成; 满递减堆栈FD(Full Descending):堆栈指针指向最 后压入的数据,且由高地址向低地址生成; 空递增堆栈EA(Empty Ascending):堆栈指针指向下 一个将要放入数据的空位置,且由低地址向高地 址生成; 空递减堆栈ED(Empty Descending):堆栈指针指向 下一个将要放入数据的空位置,且由高地址向低 地址生成。


使用条件比较指令 if (a==4 || CMP CMPNE MOVEQ
a==10) x=0; r0,#4 r0,#10 r1,#0
【例3-1】比较R0和10的大小,并进行相应的赋值 处理。
• CMP R0,#10 ;R0与10比较 • MOVHI R1,#1 ;若R0 > 10,则R1=1 • MOVLS R1,#0 ;若R0 ≤ 10,则R1=0
• LDR R0,[ R1,# 4] • LDR R0,[ R1,#4] ! ;R0 ←[R1+4] ;R0←[R1+4],R1=R1+4
注:“!”表示在完成数据传送后将更新基址寄存器。
2.后变址法 • 将基址寄存器中的值直接作为内存访问的地址进 行操作,内存访问完毕后基址寄存器中的值和地 址偏移量作加减运算,并更新基地址寄存器。 LDR R0,[ R1],# 4 ;R0 ←[R1],R1=R1 + 4
r9 r10 低地址

目的
拷贝 存储 地址
3.2.7 堆栈寻址
• 在ARM 中常用R13 作为栈指针(SP)。 根据堆栈指针的指向位置不同可将堆栈分为满堆栈和空堆栈。 满堆栈(Full Stack):当堆栈指针指向最后压入堆栈的数据时; 空堆栈(Empty Stack):当堆栈指针指向下一个将要放入数据的 空位置时。 根据堆栈的生成方式,又可以分为递增堆栈和递减堆栈。 递增堆栈(Ascending Stack):当堆栈由低地址向高地址生成时; 递减堆栈(Descending Stack):当堆栈由高地址向低地址生成时。
例子
寄存器 存储器
地址 0x00009000 0x00009004
r0
0x01010101 0x02020202
• PRE r0=0x00000000, r1=0x00009000, Mem32[0x00009000]=0x01010101 Mem32[0x00009004]=0x02020202 回写型前变址寻址: LDR r0, [r1, #0x4]! • POST r0=0x02020202, r1=0x00009004 前变址寻址: LDR r0, [r1,#0x4] • POST r0=0x02020202, r1=0x00009000 后变址寻址: LDR r0, [r1 ],#0x4 • POST r0=0x01010101, r1=0x00009004
3.2.5 基址加变址寻址
• 基址加变址寻址就是将寄存器(该寄存器一般称作基址 寄存器)的内容与指令中给出的地址偏移量相加,从而 得到一个操作数的有效地址。这种寻址方式常用来访问 某个基址附近的存储单元。
1.前变址法 • 基址寄存器中的值和地址偏移量先作加减运 算,生成的操作数作为内存访问的地址。
r3=0x00000000
r2=0x00000000 r1=0x00000000
例2:完成一个存储器数据块拷贝
• 注:r9——存放源数据的起始地址 r10——存放目标起始地址 r11——存放源结束地址 loop LDMIA r9!, {r0-r7} ;装载32字节并更新r9指针 STMIA r10!, {r0-r7} ;存储32字节并更新r10指针 CMP r9, r11 ;是否到达结束地址 高地址 BNE loop ;不相等跳转 r11
• 使用块拷贝寻址方式的指令时,寄存器组的顺序由小到大 排列,连续的寄存器可用“-”连接,或用“,”分隔。
例子
要求:保存r1~r3到内存地址0x9000~0x900c,并且更 新基址寄存器r4 PRE: r1=0x00000001, r2=0x00000002, r3=0x00000003, r4=0x9000 执行操作: STMIA r4!, {r1, r2, r3}(执行后增加) POST: mem32[0x9000]=0x00000001 mem32[0x9004]=0x00000002 mem32[0x9008]=0x00000003 r4=0x900c
3.1.2 ARM 指令集分类与格式
ARM 指令集总体可以分为六大类: • ������ 数据处理指令; • ������ Load/Store 指令; • ������ 分支指令; • ������ 程序状态寄存器访问指令; • ������ 协处理器操作指令; • ������ 异常产生指令。
第3章
ARM嵌入式微处理器指令集
本章内容
ARM指令集概述 ARM处理器的寻址方式
ARM指令集
ARM汇编伪指令与伪操作 ARM汇编语言程序设计实例
导入案例 启动代码的一般流程:
3.1
ARM指令集概述
3.1.1 ARM 指令的特点
ARM 处理器支持ARM 指令集、Thumb 指令集 和Thumb-2指令集。
• 合法的立即数由一个8 位的常数进行32 位循 环右移偶数位得到,其中循环右移的位数由一 个4 位二进制的两倍表示。如果立即数记作< immediate >,8 位常数记作immed_8, • 4 位循环右移值记作rotate_imm,则有
< immediate >=immed_8 进行32 位循环右移(2 *rotate_imm)
3.2
ARM 处理器的寻址方式
• 寻址方式是根据指令中给出的地址码字段来寻找 真实操作数地址的方式。 • ARM 处理器支持的基本寻址方式有以下8种:
3.2.1 立即寻址
• 操作数本身在指令中直接给出,取出指令也就取 出了操作数,这样的操作数被称为立即数。对应 的寻址方式被称为立即寻址方式。
MOV R1,#0x10 ;R1←0x10
SP
SP
SP
9753 8420 1234 1010 8034 AOBE A0BE 1234 FF 100
pc lr
3.2.2 寄存器寻址
在寄存器寻址方式下,寄存器中的数值即为 操作数。
• MOV R1,R2 • ADD R0,R1,R2 ;R1←R2 ;R0←R1+R2
3.2.3 寄存器间接寻址
• 在寄存器间接寻址方式下,寄存器中的数值作为操作数 的地址,而所需操作数是存放在该地址指定的存储单元 中。
• STR R0,[R1] ;将R0寄存器的值保存至R1指定的存储单元 • LDR R0,[R1] ;将R1指定的存储单元的内容读出,保存至R0 中
STMFD sp!,{r4-r7,lr}
9753 8420 1234 1010 FFFF 8034 A0BE 16 102E 1234 8765 FF ABCD 100
LDMFD sp!,{r4-r7,pc}
存储器顶
lr r7 r6 r5 r4
8034 Old SP SP A0BE 1234 FF 100
• PRE mem32[0x80018]=0x03, mem32[0x80014]=0x02, mem32[0x80010]=0x01, r0=0x00080010, r1=0x00000000, r2=0x00000000, r3=0x00000000 执行指令: LDMIA r0!, {r1-r3} 地址指针 存储地址 数据 • POST 0x80020 0x00000005 r0=0x0008001c, 0x8001c 0x00000004 r1=0x00000001, 0x80018 0x00000003 r2=0x00000002, r0=0x80010 0x80014 0x00000002 r3=0x00000003 0x80010 0x00000001 0x8000c 0x00000000
r1
3.2.6 块拷贝寻址
• 块拷贝寻址也叫多寄存器寻址,可以在存储器中的数据块 和寄存器组之间进行数据传递。允许一条指令最多完成传 送16 个寄存器的值。块拷贝寻址的地址变化方式有以下 四类型。 • 1) 后增IA(Increment After) :每次数据传送后地址加4。 • 2) 先增IB (Increment Before) :每次数据传送前地址 加4。 • 3) 后减DA(Decrement After) :每次数据传送后地址减4。 • 4) 先减DB (Decrement Before) :每次数据传送前地址 减4。
1018 16
STMIB r9!, {r0,r1,r5}
1018 16
r9 r9’
r5 r1 r0
100c 16
r9 r9’ r5 r1 r0
100c 16
1000 16
1000 16
STMDA r9!, {r0,r1,r5}
STMDB r9!, {r0,r1,r5}
例1:将存储器中的连续数据装载到寄存器
寄存器 存储器 地址 0x00009000 0x00009004 0x00009008 0x0000900c
r1 r2 r3 r4
多寄存器传送寻址模式
r9’
1018 16
r9’
r9
r5 r1 r0
r5 r1 r0
1018 16
100c 16
r9
100c 16
1000 16
1000 16
STMIA r9!, {r0,r1,r5}
ARM 指令字长为固定的32 位,一条典型 的ARM 指令的格式为:
相关文档
最新文档