




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、arm体系结构与编程,2021/2/7,内容,arm概述和分类,arm指令集和汇编程序设计,arm体系结构和存储系统,arm中断和异常处理,第一章 arm概述和分类,2021/2/7,内容,arm简介,arm的分类,arm的命名规则,基于arm的嵌入式系统概述,2021/2/7,arm介绍,什么是arm,其实,人人都用arm,什么是arm,arm是一个公司的名字 arm代表一项技术,即advanced risc machine arm是一个内核,而不是我们看到的具体的芯片,arm发展的历程,第一片arm处理器是1983年10月到1985年4月间 在位于英国剑桥的acorn computer公司
2、开发 1990年,为广泛推广arm技术而成立了独立的公司 advance risc machine(arm) 主要设计arm系列risc处理器内核 授权arm内核给生产和销售半导体的合作伙伴 arm 公司不生产芯片 ip(intelligence property) 另外也提供基于arm架构的开发设计技术 软件工具, 评估板, 调试工具,应用软件, 总线架构, 外围设备单元,等等 20世纪90年代, arm快速进入世界市场,arm offices worldwide,800+ 雇员 全球,england cambridge, maidenhead, sheffield, blackburn g
3、ermany munich france paris, sophia antipolis korea seoul,us seattle, los gatos, walnut creek, austin, boston, san diego china taiwan and shanghai japan shin-yokohama (tokyo,arm partnership model,2021/2/7,arm的应用,2021/2/7,arm分类,基于指令集体系结构(构架isa)的分类 arm v1 体系是最初版本,只有26位的寻址空间,没有乘法指令,最终没有商业化 arm v2 体系与v1体
4、系同为26位寻址空间,具有乘法和加法指令,支持协处理器 arm v3 体系的寻址范围扩展到32位,具有乘法和加法指令,支持协处理器 arm v4 体系增加了半字存储操作,对调试的支持以及支持嵌入的ice arm v5 体系增加了dsp指令支持和对java指令的支持 arm v6 体系增加了媒体指令,armv6指令集合中加入了超过60条simd单指令多数据指令 arm v7 体系定义了三种独立的内核型a(应用领域), r(实时领域),m(控制领域,2021/2/7,arm系列处理器,基于处理器内核的分类 arm7 系列 arm9 系列 arm9e 系列 arm10e 系列 securcore 系
5、列 strongarm/xscale (intel) arm11,2021/2/7,arm命名举例,2021/2/7,arm体系的变种,1)thumb指令集(t变种) thumb指令集是把32位的arm指令集的一个子集重新编码后而 形成的一个特殊的16位的指令集 2)长乘指令(m变种) 长乘指令是一种生成64位相乘结果的乘法指令(此指令为arm指令), m变种增加了两条长乘指令 3)增强型dsp指令(e变种) e变种的arm体系增加了一些增强处理器对典型的dsp算法 处理能力的附加指令。 4)java加速器jazelle(j变种) arm的jazelle技术是java语言和先进的32位risc
6、芯片完美结合的产物 。 5)arm媒体功能扩展(simd变种,2021/2/7,arm的命名规则,arm的命名分成两类: 基于arm architecture的版本命名规则; 基于arm architecture版本的处理器系列命名规则。 举个例子,s3c2410采用armv4t架构版本,arm920t处理器系列,其中处理器核为arm9tdmi,2021/2/7,基于arm architecture的版本命名,规则:| armv| n| variants| x(variants)| 分成四个组成部分: armv - 固定字符,即arm version n - 指令集版本号。迄今为之,arm架构
7、版本发布了7个系列,所以n=1:7。其中最新的版本是第7版 variants - 变种。 x(variants) - 排除x后指定的变种 常见的变种有: t - thumb指令集 m - 长乘法指令 e - 增强型dsp指令 j - java加速器jazelle simd - arm媒体功能扩展 例如,armv5txm表示arm指令集版本为5,支持t变种,不支持m变种,2021/2/7,基于arm architecture版本的处理器系列命名,采用上述的架构,形成一系列的处理器。有时候还要区分处理器核和处理器系列。不过,在这里其实不用区分太细,毕竟这是功能的小部分的变化,核心是相同的。 规则:
8、armxyztdmiejf-s x - 处理器系列 y - 存储管理/保护单元 z - cache t - 支持thumb指令集 d - 支持片上调试 m - 支持快速乘法器 i - 支持embedded ice,支持嵌入式跟踪调试 e - 支持增强型dsp指令 j - 支持jazelle f - 具备向量浮点单元vfp -s - 可综合版本,2021/2/7,基于arm的嵌入式系统概述,1) risc设计思想 与cisc相比,有以下几个方面不同: a:设计重点不同,risc重点在于通过软件的灵活降低硬件执行指令的复杂度,即使得编译器更高的复杂性 b:指令集,risc减少了指令种类,操作也简单
9、,基本是一个周期执行一条指令,每一条指令长度是固定,而cisc指令长度不固定,执行也需要多个周期 c:寄存器,risc拥有更多寄存器,都可以存放数据或地址,而cisc都是用于特定目的的专用寄存器 d:load-store结构,即处理器只处理寄存器中的数据,独立的load-store指令完成数据在寄存器和外部存储器之间的传送,即数据处理与存储器访问分开,而cisc能够直接处理存取器中的数据 注:arm指令集属于risc指令集,但与单纯的risc有以下几方面不同,2021/2/7,基于arm的嵌入式系统概述,arm指令集属于risc指令集,但与单纯的risc有以下几方面不同: a:大部分arm指令
10、是单周期完成的,但也有不是的,如多寄存器的load-store指令的执行周期是不确定的,具体由被传送的寄存器个数决定。 b:内嵌桶型移位寄存器 c:thumb 16位指令集 d:条件执行 e:增强指令,如添加了强大的数字信号处理器(dsp)指令,以支持1616位乘法操作及饱和操作,2021/2/7,基于arm的嵌入式系统概述,2) 高速缓存(cache) 1、为什么采用高速缓存 微处理器的时钟频率比内存速度提高快得多,高速缓存可以提高内存的平均性能。 2、高速缓存的工作原理 高速缓存是一种小型、快速的存储器,它保存部分主存内容的拷贝,cpu,高速缓存控制器,cache,主存,数据,数据,地址,
11、2021/2/7,基于arm的嵌入式系统概述,3)嵌入式处理器分类,微处理器(micro processor unit, mpu) 微控制器(micro controller unit, mcu) 嵌入式dsp (digital signal processor, dsp) 片上系统(system on chip,嵌入式微处理器,嵌入式微处理器的基础是通用计算机中的cpu。在应用中,将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的母板功能,这样可以大幅度减小系统体积和功耗。为满嵌入式应用 的特殊要求,嵌入式微处理器虽然在功能上和标准微处理器基本是一样的,但在工作温度、抗电磁干扰、可
12、靠性等方面都做了各种增强,目前主要的嵌入式处理器类型有am186/88、386ex、sc-400、powerpc、68000、mips、arm/strongarm系列等,嵌入式微处理器,嵌入式微控制器,嵌入式微控制器又称单片机,顾名思义,就是将整个计算机系统集成到一块芯片中。嵌入式微控制器一般以某一种微处理器内核为核心,芯片内部集成rom/eprom、ram、总线、总线逻辑、定时/计数器、watchdog、i/o、串行口、脉宽调制输出、a/d、d/a、flash ram、eeprom等各种必要功能和外设。为适应不同的应用需求,一般一个系列的单片机具有多种衍生产品,每种衍生产品的处理器内核都是一
13、样的,不同的是存储器和外设的配置及封装。这样可以使单片机最大限度地和应用需求相匹配,功能不多不少,从而减少功耗和成本。 和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的主流。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制器,嵌入式微控制器,嵌入式微控制器目前的品种和数量最多,比较有代表性的通用系列包括8051、p51xa、mcs-251、mcs-96/196/296、c166/167、mc68hc05/11/12/16、68300等。另外还有许多半通用系列如:支持usb接口的mcu 8xc930/93
14、1、c540、c541;支持i2c、can-bus、lcd及众多专用mcu和兼容系列。目前mcu占嵌入式系统约70的市场份额,嵌入式dsp处理器,dsp处理器对系统结构和指令进行了特殊设计,使其适合于执行dsp算法,编译效率较高,指令执行速度也较高。在数字滤波、fft、谱分析等方面dsp算法正在大量进入嵌入式领域,dsp应用正从在通用单片机中以普通指令实现dsp功能,过渡到采用嵌入式dsp处理器。 嵌入式dsp处理器有两个发展来源,一是dsp处理器经过单片化、emc改造、增加片上外设成为嵌入式dsp处理器,ti的tms320c2000 /c5000等属于此范畴;二是在通用单片机或soc中增加d
15、sp协处理器,例如intel的mcs-296和infineon(siemens)的tricore。 推动嵌入式dsp处理器发展的另一个因素是嵌入式系统的智能化,例如各种带有智能逻辑的消费类产品,生物信息识别终端,带有加解密算法的键盘,adsl 接入、实时语音压解系统,虚拟现实显示等。这类智能化算法一般都是运算量较大,特别是向量运算、指针线性寻址等较多,而这些正是dsp 处理器的长处所在,嵌入式dsp处理器,有代表性的产品是texas instruments的 tms320系列和motorola的dsp56000系列。 tms320系列处理器包括用于控制的c2000系列,移动通信的c5000系列
16、,以及性能更高的c6000和c8000系列。 motorola公司的dsp56000已经发展成为dsp56000,dsp56100, dsp56200和dsp56300等几个不同系列的处理器。 philips公司也推出了基于可重置嵌入式dsp结构低成本、低功耗技术上制造的dsp处理器,特点是具备双harvard结构和双乘/累加器单元,应用目标是大批量消费类电子产品,随着edi的推广和vlsi设计的普及化,及半导体工艺的迅速发展,在一个硅片上实现一个更为复杂的系统的时代已来临,这就是system on chip(soc)。各种通用处理器内核将作为soc设计公司的标准库,和许多其它嵌入式系统外设一
17、样,成为 vlsi设计中一种标准的器件,用标准的 vhdl等语言描述,存储在器件库中。用户只需定义出其整个应用系统,仿真通过后就可以将设计图交给半导体工厂制作样品。这样除个别无法集成的器件以外,整个嵌入式系统大部分均可集成到一块或几块芯片中去,应用系统电路板将变得很简洁,对于减小体积和功耗、提高可靠性非常有利。 它结合了许多功能区块,将功能做在一个芯片上,arm risc、mips risc、dsp或是其他的微处理器核心,加上通信的接口单元,例如通用串行端口(usb)、tcp/ip通信单元、gprs通信接口、gsm通信接口、ieee1394、蓝牙模块接口等等,这些单元以往都是依照各单元的功能做
18、成一个个独立的处理芯片,嵌入式片上系统(soc,2021/2/7,基于arm的嵌入式系统概述,4) 嵌入式系统硬件,总线,4) 嵌入式系统硬件 微处理器(cpu)是嵌入式系统硬件平台的核心构件,但不是全部。按照冯诺依曼体系结构思想,计算机的硬件是由cpu、存储器和i/o设备三部分组成的。总线是把cpu与存储器、i/o设备相连接的信息通道,但总线并不仅仅指的是一束信号线,而应包含相应的通信协议。按照使用场合的不同,总线分成芯片级总线(cpu总线)、板卡级总线(内总线)和系统级总线(外总线,总线和总线桥,2021/2/7,基于arm的嵌入式系统概述,4) 嵌入式系统硬件 amba总线是一个多总线系
19、统。规范定义了三种可以组合使用的不同类型的总线:ahb(advanced high-performance bus)、asb(advanced system bus)和apb(advanced peripheral bus)。 ahb:cpu核、存储器控制器、中断控制器、lcd控制器、dma和usb主机模块等(可以包括多个主模块) apb:watchdog、iis、iic、pwm、adc、uart、gpio、rtc等(只有一个主模块) asb:连接高性能系统模块,在某些需高速且不必使用ahb总线的场合使用,2021/2/7,基于arm的嵌入式系统概述,5) 嵌入式存储器 大多数嵌入式产品的存储
20、器结构是分层的,即多种类型的存储器 在决定存储器层次、宽度、类型等特性时,需综合考虑产品的价格、性能、功耗等因素,存储器系统,寄存器,高速缓存sram,主存储器dram,本地存储器 flash、rom、磁盘,网络存储器 flash、rom、磁盘,时钟周期,0,110,50100,20000000,分层结构,存储器种类,ram:随机存取存储器 sram:静态随机存储器(高速存储器或cache)不需刷新电路即能保存内部存储数据。 dram:动态随机存储器,一般使用电容存储,需经常刷新 1)sram比dram快 2)sram比dram耗电多 3)dram存储密度比sram高得多 4)dram需要周期
21、性刷新 sdram:同步动态随机存储器,是dram中的一种,因与处理器总线同步,故能突发式地输出到总线 rom:只读存储器,闪速存储器(flash,prom:可编程rom eprom:可擦除、可编程rom eeprom:电可擦除、可编程rom flash:闪存 相对传统的eprom芯片,这种芯片可以用电气的方法快速地擦写 由于快擦写存储器不需要存储电容器,故其集成度更高,制造成本低于dram 它使用方便,既具有sram读写的灵活性和较快的访问速度,又具有rom在断电后可不丢失信息的特点,所以快擦写存储器技术发展十分迅速 flash的架构大致上可分为具程序执行能力的nor架构以及储存数据的nan
22、d架构,nor技术和nand技术,nor flash市场目前由intel和amd公司主导,其主要功能是程序的储存,如pc中的bios nor的特点是芯片内执行(xip, execute in place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统ram中。 nor的传输效率很高,在14mb的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。 nand flash相对上属于封闭的市场,专利权掌握在少数厂商手中,toshiba 和samsung公司为主,其主要功能是数据的储存,如小型存储卡、随身电子盘等都是 nand结构能提供极高的单元密度,可以达到高
23、存储密度,并且写入和擦除的速度也很快。应用nand的困难在于flash的管理需要特殊的系统接口,2021/2/7,基于arm的嵌入式系统概述,6) 初始化启动代码 (1)初始化硬件配置 (2)诊断 (3)引导 初始化硬件配置包括:设置堆栈指针、硬件工作时钟、存储器映射等等,i/o寄存器,快速sram,大块dram,启动rom,启动之前,i/o寄存器,快速sram,大块dram,启动rom,启动之后,2021/2/7,基于arm的嵌入式系统概述,6) 初始化启动代码 诊断硬件是否能正常工作,不能工作的是否隔离,即识别和隔离故障。 引导过程包括装载一个映像文件并将控制权交给它,装载可以包括拷贝整个
24、程序(代码和数据),也可以只拷贝易变(volatile)变量的数据到ram中,启动后,通过更改pc指向映像文件的起始地址,从而交出控制权,arm的特点,risc指令集 load/store体系结构 固定的32位指令 大多数指令单周期完成 thumb/dsp/jazeller功能扩展 低功耗,2021/2/7,小结,什么是arm arm的特点 arm的分类 arm的命名规则 嵌入式硬件体系结构 嵌入式存储器 存储器映射,第二章 arm体系结构和存储系统,2021/2/7,内容,流水线(pipeline,存储,模式(model,寄存器,2021/2/7,存储,地址空间,arm结构使用单个平面的23
25、2个8位字节地址空间。字节地址按照无符号数排列,从0到2321。地址空间可以看作是包含230个32位字 ,或231个16位半字。 32位地址线/数据线,支持如下数据类型: 字节(byte) 8bits 半字(half word) 16bits,半字必须对齐2字节边界 字(word) 32bits,字必须对齐4字节边界,2021/2/7,存储,arm处理器可以将存储器中的字以下列格式存储: 大端格式(big-endian):字数据的高字节存储在低地址中,而低字节存储在高地址中 小端格式(little-endian):与小端对齐相反,字数据的高字节存储在高地址中,低字节存储在低地址中,2021/2
26、/7,arm结构通常希望所有的存储器访问都合理的对齐。具体来说就是字访问的地址通常是字对齐的,而半字访问使用的地址是半字对齐的。不按这种方式对齐的存储器访问称为非对齐的存储器访问。 非对齐的取指 不可预知结果 arm状态忽略低2位;thumb状态忽略最低位 (忽略由存储器实现) 非对齐的数据访问 执行结果不可预测 忽略字单元地址的低2位;忽略半字单元地址的最低位(忽略可能由处理器或存储器完成,存储,非对齐的存储器访问,指令流水线,为增加处理器指令流的速度,arm7 系列使用3级流水线. 允许多个操作同时处理,比逐条指令执行要快。 pc指向正被取指的指令,而非正在执行的指令,fetch,deco
27、de,execute,从存储器中读取指令,解码指令,寄存器读(从寄存器bank) 移位及alu操作 寄存器写(到寄存器bank,pcpc,pc-4pc-2,pc - 8pc - 4,armthumb,2021/2/7,处理器状态,处理器状态,arm处理器包含32位arm指令集和16位thumb指令集。因此arm处理器有两种操作态: arm状态:32位,这种状态下执行的是字方式的arm指令; thumb状态:16位,这种状态下执行半字方式的thumb指令,注意:两个状态之间的切换并不影响处理器模式或寄存器内容,2021/2/7,处理器模式,简介,arm体系结构支持7种处理器模式,分别为:用户模式
28、、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式,如下表所示。这样的好处是可以更好的支持操作系统并提高工作效率。 特权模式:除用户模式外的6种模式 异常模式:除系统模式外的特权模式,2021/2/7,处理器模式,2021/2/7,内部寄存器,简介,在arm处理器内部有37个用户可见的寄存器: 30个通用寄存器 6个状态寄存器 1个专用于记录当前状态 5个专用于记录模式切换前的状态 1个程序计数器pc 在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同,2021/2/7,arm状态各模式下可以访问的寄存器,2021/2/7,内部寄存器,r0 r12:通用寄存器。当c
29、和汇编互相调用时,r0 r3用来传递函数参数,可记为a0 a3 r13:用于各种模式下的堆栈寄存器(sp) r14:用来保存程序返回地址的链接寄存器(lr) r15:程序计数器(pc) r8_fiq r12_fiq:允许快速中断处理 r8_user r12_user:除了fiq模式外各模式公用 除了user和system模式外,各种模式都有自己独立的r13和r14,2021/2/7,内部寄存器,r14寄存器与子程序调用,mov pc,lr,r14(地址a,1.程序a执行过程中调用程序b,操作流程,2.程序跳转至标号label,执行程序b。同时硬件将“bl label”指令的下一条指令所在地址存
30、入r14,3.程序b执行最后,将r14寄存器的内容放入pc,返回程序a,2021/2/7,内部寄存器,正常操作时,从r15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条arm指令的长度)。由于arm指令总是以字为单位,所以r15寄存器的最低两位总是为0,2021/2/7,程序状态寄存器,简介,arm内核包含1个cpsr和5个供异常处理程序使用的spsr。cpsr反映了当前处理器的状态,其包含: 4个条件代码标志(负(n)、零(z)、进位(c)和溢出(v) ); 2个中断禁止位,分别控制一种类型的中断; 5个对当前处理器模式进行编码的位; 1个用于指示当前执行指令(a
31、rm还是thumb)的位,2021/2/7,程序状态寄存器,简介,条件代码标志,保留,控制位,溢出标志,进位或借位扩展,零,负或小于,irq禁止,fiq禁止,状态位,模式位,n,z,c,v,i,t,f,cpsr寄存器的格式,cpsr模式位设置表,2021/2/7,程序状态寄存器,简介,每个异常模式还带有一个程序状态保存寄存器 (spsr),它用于保存在异常事件发生之前的cpsr。cpsr和spsr通过特殊指令进行访问。 注意:如果通过程序修改cpsr寄存器中的模式位进入异常模式,那么硬件将不会把cpsr保存至spsr中,2021/2/7,小结,arm处理器存储格式 指令流水线 arm处理器状态
32、 arm处理器模式 sp lr pc cpsr spsr,第三章 arm指令系统,2021/2/7,内容,arm指令集,arm汇编程序设计,arm处理器寻址,2021/2/7,arm处理器寻址方式,寻址方式分类,寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。arm处理器具有9种基本寻址方式。 1.寄存器寻址;2.立即寻址; 3.寄存器移位寻址;4.寄存器间接寻址; 5.基址寻址;6.多寄存器寻址; 7.堆栈寻址;8.块拷贝寻址; 9.相对寻址,2021/2/7,操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例
33、如下: mov r1,r2 ;将r2的值存入r1 sub r0,r1,r2 ;将r1的值减去r2的值,结果保存到r0,arm处理器寻址方式,寻址方式分类寄存器寻址,mov r1,r2,0 xaa,2021/2/7,立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下: subsr0,r0,#1 ;r0减1,结果放入r0,并且影响标志位 mov r0, #0 xff000 ;将立即数0 xff000装入r0寄存器,arm处理器寻址方式,寻址方式分类立即寻址,mov r0,#0
34、xff00,0 xff00,从代码中获得数据,2021/2/7,寄存器移位寻址是arm指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下: movr0,r2,lsl #3 ;r2的值左移3位,结果放入r0, ;即是r0=r28 andsr1,r1,r2,lsl r3 ;r2的值左移r3位,然后和r1相 ;“与”操作,结果放入r1,arm处理器寻址方式,寻址方式分类寄存器移位寻址,mov r0,r2,lsl #3,0 x08,0 x08,逻辑左移3位,2021/2/7,指令集介绍,arm指令集第2个操作
35、数,2021/2/7,寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下: ldrr1,r2;将r2指向的存储单元的数据读出 ;保存在r1中 swpr1,r1,r2;将寄存器r1的值和r2指定的存储 ;单元的内容交换,arm处理器寻址方式,寻址方式分类寄存器间接寻址,ldr r0,r2,0 xaa,2021/2/7,基址寻址就是将基址寄存器的内容与指令中给出的偏移量(4k)相加/减,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。寄存
36、器间接寻址是偏移量为0的基址加偏移寻址。 基址寻址指令举例如下(前索引寻址): ldrr2,r3,#0 x0c ;读取r3+0 x0c地址上的存储单元的内容,放入r2 strr1,r0,#-4! ;先r0=r0-4,然后把r0的值寄存 ;到保存到r1指定的存储单元,arm处理器寻址方式,寻址方式分类基址寻址,ldr r2,r3,#0 x0c,0 xaa,将r3+0 x0c作为地址装载数据,基址寻址指令举例如下: ldrr0,r1 ,#4 ;r0=r1,r1r14 ;后索引基址寻址 ;arm这种自动索引机制不消耗额外的时间 ldr r0,r1,r2 ;r0=r1+r2,arm处理器寻址方式,寻址
37、方式分类基址寻址,2021/2/7,多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下: ldmiar1!,r2-r7,r12 ;将r1指向的单元中的数据读出到 ;r2r7、r12中(r1自动加4) stmiar0!,r2-r7,r12 ;将寄存器r2r7、r12的值保 ;存到r0指向的存储, 单元中(r0自动加4,arm处理器寻址方式,寻址方式分类多寄存器寻址,ldmia r1!,r2-r4,r6,0 x40000010,堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈
38、指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种: 向上生长:向高地址方向生长,称为递增堆栈 向下生长:向低地址方向生长,称为递减堆栈,arm处理器寻址方式,寻址方式分类堆栈寻址,2021/2/7,arm处理器寻址方式,寻址方式分类堆栈寻址,0 x12345678,0 x12345678,2021/2/7,堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈(压栈时先修改sp,后数据压栈;出栈时先数据出栈,后修改sp) 堆栈指针指向下一个待压入数据的空位置,称为空堆栈。 (压栈时先数据压栈,后修改sp;出栈时先修改sp,后数据出栈,arm处理器寻址方式,寻
39、址方式分类堆栈寻址,0 x12345678,2021/2/7,所以可以组合出四种类型的堆栈方式: 满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如ldmfa、stmfa等; 空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如ldmea、stmea等; 满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如ldmfd、stmfd等; 空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如ldmed、stmed等,arm处理器寻址方式,寻址方式分类堆栈寻址,2021/2/7,多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。 如: st
40、miar0!,r1-r7;将r1r7的数据保存到存储器中。 ;存储指针r0在保存第一个值之后增加, ;增长方向为向上增长。 stmibr0!,r1-r7;将r1r7的数据保存到存储器中。 ;存储指针r0在保存第一个值之前增加, ;增长方向为向上增长,arm处理器寻址方式,寻址方式分类块拷贝寻址,2021/2/7,相对寻址是基址寻址的一种变通。由程序计数器pc提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下: blsubr1;调用到subr1子程序 beqloop;条件跳转到loop标号处 . loopmovr6,#1 . subr1,a
41、rm处理器寻址方式,寻址方式分类相对寻址,2021/2/7,arm指令小节目录,1.指令格式 2.数据处理指令 3.条件码 4.乘法指令 5.arm分支指令 6.存储器访问指令 7.杂项指令 8.伪指令,2021/2/7,指令集介绍,arm指令集指令格式,2021/2/7,arm是三地址指令格式,指令的基本格式如下,指令集介绍,arm指令集基本指令格式,s,其中号内的项是必须的,号内的项是可选的。 各项的说明如下,opcode:指令助记符;cond:执行条件; s:是否影响cpsr寄存器的值; rd:目标寄存器; rn:第1个操作数的寄存器; operand2:第2个操作数,例,2021/2/
42、7,arm指令的基本格式如下,指令集介绍,arm指令集第2个操作数,s,灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式: #immed_8r常数表达式; rm寄存器方式; rm,shift寄存器移位方式,2021/2/7,指令集介绍,arm指令集第2个操作数,immed_8r常数表达式 该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到,循环右移10位,8位常数,例如: addr1,r2,#0 x0f (0 x103)、(0 x104)(0 x102,2021/2/7,指令集介绍,arm指令集第2个操作数,rm寄存器方式 在寄存器方式下,操作数即为寄存器
43、的数值。 例如: subr1,r1,r2,2021/2/7,指令集介绍,arm指令集第2个操作数,rm,shift寄存器移位方式 将寄存器的移位结果作为操作数(移位操作不消耗额外的时间),但rm值保持不变,2021/2/7,指令集介绍,arm指令集第2个操作数,rm,shift寄存器移位方式 例如: addr1,r1,r1,lsl #3;r1=r1+r1r3,2021/2/7,arm指令小节目录,1.指令格式 2.数据处理指令 3.条件码 4.乘法指令 5.arm分支指令 6.存储器访问指令 7.杂项指令 8.伪指令,2021/2/7,简单的arm程序,文件名:test.s ;功能:实现两个寄
44、存器相加 ;说明:使用armulate软件仿真调试 areaexample1,code,readonly ;声明代码段example1 entry ;标识程序入口 code32 ;声明32位arm指令 start movr0,#0 ;设置参数 movr1,#10 loopbladd_sub ;调用子程序add_sub bloop ;跳转到loop add_sub addsr0,r0,r1 ;r0 = r0 + r1 movpc,lr ;子程序返回 end ;文件结束,2021/2/7,指令集介绍,arm指令集arm数据处理指令,数据处理指令大致可分为3类: 数据传送指令; 算术逻辑运算指令;
45、比较指令。 数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。所有arm数据传送或算术逻辑运算指令均可选择使用s后缀,以使指令影响cpsr中的标志,2021/2/7,arm数据处理指令数据传送,注:当后缀s时,这些指令根据结果更新标志n和z,在计算operand2时更新标志c,不影响标志v,2021/2/7,arm数据处理指令算术运算,注:这些指令影响n,z,c和v标志位,2021/2/7,arm数据处理指令逻辑运算指令,注:当后缀s时,这些指令根据结果更新标志n和z,在计算operand2时更新标志c,不影响标志v,2021/2/7,arm数据处理指令比较指令,注:这些指
46、令影响n,z,c和v标志位。 如: cmn r0,1 ;测试r0的值是否为1的补码,若是z置位,2021/2/7,arm指令小节目录,1.指令格式 2.数据处理指令 3.条件码 4.乘法指令 5.arm分支指令 6.存储器访问指令 7.杂项指令 8.伪指令,2021/2/7,arm指令的基本格式如下,指令集介绍,arm指令集条件码,s,使用条件码“cond”可以实现高效的逻辑操作(节省跳转和条件语句),提高代码效率,2021/2/7,指令条件码表,2021/2/7,指令集介绍,arm指令集条件码,c代码: if(a b) a+; else b,对应的汇编代码: cmpr0,r1 ;r0(a)与
47、r1(b)比较 addhir0,r0,#1 ;若r0r1,则r0=r0+1 addlsr1,r1,#1 ;若r0r1,则r1=r1+1,示例,2021/2/7,arm指令小节目录,1.指令格式 2.数据处理指令 3.条件码 4.乘法指令 5.arm分支指令 6.存储器访问指令 7.杂项指令 8.伪指令,2021/2/7,指令集介绍,arm指令集乘法指令,arm具有三种乘法指令,分别为: 3232位乘法指令; 32 32位乘加指令; 32 32位结果为64位的乘/乘加指令,2021/2/7,arm指令乘法指令,2021/2/7,arm指令小节目录,1.指令格式 2.数据处理指令 3.条件码 4.
48、乘法指令 5.arm分支指令 6.存储器访问指令 7.杂项指令 8.伪指令,2021/2/7,指令集介绍,arm指令集分支指令,在arm中有两种方式可以实现程序的跳转,一种是使用分支指令直接跳转,另一种则是直接向pc寄存器赋值实现跳转。 分支指令有以下三种: 分支指令b; 带链接的分支指令bl; 带状态切换的分支指令bx,2021/2/7,arm指令分支指令,2021/2/7,arm指令小节目录,1.指令格式 2.数据处理指令 3.条件码 4.乘法指令 5.arm分支指令 6.存储器访问指令 7.杂项指令 8.伪指令,2021/2/7,指令集介绍,arm指令集存储器访问指令,arm处理器是典型
49、的risc处理器,对存储器的访问只能使用加载和存储指令实现。 存储器访问指令分为: 单寄存器操作指令和多寄存器操作指令,2021/2/7,arm存储器访问指令单寄存器加载,2021/2/7,arm存储器访问指令单寄存器存储,2021/2/7,ldr和str字和无符号字节加载/存储指令 ldr指令用于从内存中读取单一字或字节数据存入寄存器中,str指令用于将寄存器中的单一字或字节数据保存到内存。指令格式如下,arm存储器访问指令单寄存器存储,ldrcondtrd, ;将指定地址上的字数据读入rd strcondtrd, ;将rd中的字数据存入指定地址 ldrcondbtrd, ;将指定地址上的字
50、节数据读入rd strcondbtrd, ;将rd中的字节数据存入指定地址,2021/2/7,arm存储器访问指令单寄存器存储,arm指令集提供了几种存储器寻址的不同方式,这些方式是以下几种变址模式的组合,注:”!”表示要把计算出的地址回写到基址寄存器,2021/2/7,ldr和str半字和有符号字节加载/存储指令 这类ldr/str指令可加载有符号半字或字节,可加载/存储无符号半字。偏移量格式、寻址方式与加载/存储字和无符号字节指令相同,arm存储器访问指令单寄存器存储,ldrcondsb rd, ;将指定地址上的有符号字节读入rd ldrcondsh rd, ;将指定地址上的有符号半字读入
51、rd ldrcondh rd, ;将指定地址上的半字数据读入rd strcondh rd, ;将rd中的半字数据存入指定地址,注意: 半字数据加载,寄存器高两个字节置零 ; 字节数据加载,寄存器高三个字节置零,2021/2/7,ldr和str指令应用示例: 1.加载/存储字和无符号字节指令 ldrr2,r5;将r5指向地址的字数据存入r2 strr1,r0,#0 x04;将r1的数据存储到r0+0 x04地址 ldrbr3,r2,#-1 ;将r2指向地址的字节数据存入r3,r2r21 strbr0,r3,-r8, asr 2 ;r0-r3-r8/4,存储r0的最低有效字节 2.加载/存储半字和
52、有符号字节指令 ldrsb r1,r0,r3;将r0+r3地址上的字节数据存入r1, ;高24位用符号扩展 ldrh r6,r2,#2;将r2指向地址的半字数据存入r6,高16位用0扩展 ;读出后,r2=r2+2 strh r1,r0,#2!;将r1的半字数据保存到r0+2地址, ;只修改低2字节数据,然后r0=r0+2,arm存储器访问指令单寄存器存储,2021/2/7,arm存储器访问指令多寄存器存取,多寄存器加载/存储指令可以实现在一组寄存器和一块连续的内存单元之间传输数据。ldm为加载多个寄存器;stm为存储多个寄存器。允许一条指令传送16个寄存器的任何子集或所有寄存器。它们主要用于现
53、场保护、数据复制、常数传递等,2021/2/7,arm存储器访问指令多寄存器存取,多寄存器加载/存储指令格式如下: ldmcond rn!,reglist stmcond rn!,reglist cond:指令执行的条件; 模式:控制地址的增长方式,一共有8种模式; !:表示在操作结束后,将最后的地址写回rn中; reglist :表示寄存器列表,可以包含多个寄存器,它们使用“,”隔开,如r1,r2,r6-r9,寄存器由小到大排列; :可选后缀。允许在用户模式或系统模式下使用。它有以下两个功能: 1)若op是ldm且寄存器列表包含r15时,那么除了正常的多寄存器传送外,还将spsr也复制到cp
54、sr中。这用于异常处理返回,仅在异常模式下使用。 2)数据传入或传出的是用户模式下的寄存器,而不是当前模式的寄存器,2021/2/7,arm存储器访问指令多寄存器存取,多寄存器加载/存储指令的8种模式如下表所示,右边四种为堆栈操作、左边四种为数据传送操作,进行数据复制时,先设置好源数据指针和目标指针,然后使用块拷贝寻址指令ldmia/stmia、ldmib/stmib、ldmda/stmda、ldmdb/stmdb进行读取和存储 。 进行堆栈操作操作时,要先设置堆栈指针(sp),然后使用堆栈寻址指令stmfd/ldmfd 、stmed/ldmed、stmfa/ldmfa和stmea/ldmea
55、实现堆栈操作,2021/2/7,arm存储器访问指令多寄存器存取,使用数据块传送指令进行堆栈操作 stmdar0!,r5-r6 . . . ldmibr0!,r5-r6,使用堆栈指令进行堆栈操作 stmedr13!,r5-r6 . . . ldmedr13!,r5-r6,两段代码的执行结果是一样的,但是使用堆栈指令的压栈和出栈操作编程很简单(只要前后一致即可),而使用数据块指令进行压栈和出栈操作则需要考虑空与满、加与减对应的问题,2021/2/7,arm存储器访问指令寄存器和存储器交换指令,swp指令用于将一个内存单元(该单元地址放在寄存器rn中)的内容读取到一个寄存器rd中,同时将另一个寄存
56、器rm的内容写入到该内存单元中。使用swp可实现信号量操作。指令格式如下: swpcondb rd,rm,rn 其中,b为可选后缀,若有b,则交换字节,否则交换32位字;rd用于保存从存储器中读入的数据;rm的数据用于存储到存储器中,若rm与rd相同,则为寄存器与存储器内容进行互换;rn为要进行数据交换的存储器地址。 注:rn不能与rd和rm相同,2021/2/7,arm指令小节目录,1.指令格式 2.数据处理指令 3.条件码 4.乘法指令 5.arm分支指令 6.存储器访问指令 7.杂项指令 8.伪指令,2021/2/7,指令集介绍,arm指令集杂项指令,arm指令集中有三条指令作为杂项指令
57、,在实际应用中这三条指令非常重要。它们如下所示,2021/2/7,arm杂项指令软中断指令,swi指令用于产生swi异常,使得cpu模式变换到管理模式,并且将cpsr保存到管理模式的spsr中,然后程序跳转到swi异常入口。不影响条件码标志。 该指令主要用于用户程序调用操作系统的系统服务,操作系统在swi异常处理程序中进行相应的系统服务,swicondimmed_24,swi指令格式,2021/2/7,arm杂项指令软中断指令,根据swi指令传递的参数swi异常处理程序可以作出相应的处理。swi指令传递参数有以下两种方法, 指令中的24位立即数指定了用户请求的服务类型,参数通过通用寄存器传递。
58、 mov r0,#34;设置子功能号为34 swi 12;调用12号软中断 指令中的24位立即数被忽略,用户请求的服务类型由寄存器r0的值决定,参数通过其它的通用寄存器传递。 mov r0,#12;调用12号软中断 mov r1,#34;设置子功能号为34 swi 0,2021/2/7,arm杂项指令软中断指令,本示例只有一级软中断,含有二级中断见异常处理,cmpr0,#maxswi ldrlspc,pc, r0, lsl #2 bswioutofrange switable dcddo_swi_0 ; 该服务对应的swi指令中立即数为0 dcddo_swi_1 ; 该服务对应的swi指令中立
59、即数为1 . do_swi_0 ; 服务程序do_swi_0的代码 . ldmfd sp!, r0-r3, r12, pc; 从do_swi_0异常中断返回 do_swi_1 ; 服务程序do_swi_0的代码,2021/2/7,1,2,3,4,arm杂项指令状态寄存器写指令,应用示例1: ;子程序:使能irq中断 enable_irq mrs r0, cpsr bic r0, r0,#0 x80 msr cpsr_c,r0 mov pc,lr,应用示例2: ;子程序:禁止irq中断 disable_irq mrs r0, cpsr orr r0, r0,#0 x80 msr cpsr_c,r
60、0 mov pc,lr,1.将cpsr寄存器内容读出到r0,2.修改对应于cpsr中的i控制位,3.将修改后的值写回 cpsr寄存器的对应控制域,4.返回上一层函数,2021/2/7,arm指令小节目录,1.指令格式 2.数据处理指令 3.条件码 4.乘法指令 5.arm分支指令 6.存储器访问指令 7.杂项指令 8.伪指令,2021/2/7,指令集介绍,arm伪指令,arm伪指令不属于arm指令集中的指令,是为了编程方便而定义的。伪指令可以像其它arm指令一样使用,但在编译时这些指令将被等效的一条或多条arm指令所代替。arm伪指令有四条,分别为adr伪指令、adrl伪指令、ldr伪指令、n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东“百万英才汇南粤”大亚湾开发区招聘公办学校教师358人模拟试卷及完整答案详解1套
- 2025国家统计局兴仁调查队招聘村级劳动保障协管员模拟试卷及答案详解(网校专用)
- 2025内蒙古锡林郭勒盟锡盟文体局招募公共服务文化人才志愿者1名考前自测高频考点模拟试题及答案详解(必刷)
- 2025广东广州航海学院广州交通大学(筹)招聘高层次人才(学科领军人才)15人模拟试卷及答案详解(必刷)
- 2025内蒙古民航机场集团有限公司招聘模拟试卷及完整答案详解1套
- 2025江苏常州经济开发区招聘村人员12人考前自测高频考点模拟试题附答案详解(典型题)
- 2025年文化创意园区项目发展计划
- 2025湖南岳阳市屈原管理区凤凰乡人民政府公益性岗位招聘模拟试卷有完整答案详解
- 2025年杭州拱墅区长庆潮鸣街道社区卫生服务中心招聘编外聘用人员1人考前自测高频考点模拟试题及1套参考答案详解
- 2025辽宁省检验检测认证中心招聘5人考前自测高频考点模拟试题附答案详解(突破训练)
- 湘潭钢铁集团有限公司2026届校园操作类招聘备考考试题库附答案解析
- 合肥市社会化工会工作者招聘考试真题2024
- 恐龙妈妈藏蛋课件
- 演讲与朗诵教学课件
- 《中国急性肾损伤临床实践指南(2023版)-》解读
- 弗洛伊德课件
- 《CSCO乳腺癌诊疗指南2025》更新要点解读
- 2025年教师师德师风考试题(附答案)
- 贵妃生态农业有限公司企业策划书
- 学堂在线 战场侦察监视技术与装备 章节测试答案
- 智慧产业园区AI大模型数字化平台建设方案
评论
0/150
提交评论