体系结构与常用汇编编程_第1页
体系结构与常用汇编编程_第2页
体系结构与常用汇编编程_第3页
体系结构与常用汇编编程_第4页
体系结构与常用汇编编程_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARM处理器介绍ARM

处理器是一种低功耗、高性能的32位RISC(精简指令集)处理器。目前,采用

ARM技术知识

(IP)核的微处理器,就是通常所说的

ARM

微处理器已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于

ARM

技术的微处理器应用约占据了

32

RISC

微处理器

75%以上的市场份额,ARM

技术正在逐步渗入人们生活的各个方面。ARM处理器应用ARM处理器系列ARM处理器特点ARM处理器具有耗电少,功能强大,16位/32位双指令集等众多优点。主要有以下六个主要特点:①体积小、低功耗,低成本和高性能;②支持Thumb(16位)/ARM(32位)双指令集;③大量使用寄存器,指令执行速度快;④大多数数据操作都在寄存器中完成;⑤寻址方式灵活简单,执行效率高;⑥指令长度固定。ARM处理器工作状态从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:1)第一种为ARM状态,此时处理器执行32位的字对齐ARM指令,绝大部分工作在此状态;2)第二种为Thumb状态,此时处理器执行16位的半字对齐的Thumb指令。8种工作模式分类(通常是7种):ARM处理器工作模式小结:除用户模式之外,其他所有模式统称为

模式,它们具有对系统资源的完全

权限,并可随意更改模式其中:fiq、irq、svc、abt、und、mon称为异常模式,当特定的异常出现时进入相应的模式应用程序通常在用户模式下执行,有些机应用程序可完全运行在管理或系统模式下进入除用户模式之外的模式是为了处理异常或特许资源详细介绍请参考实验指导书32页将01-cpsr文件夹中的test.bin到实验箱中运行代码演示由下图可知当前实验箱运行在SVC管理模式代码演示ARM寄存器组织ARM处理器一般共有37个寄存器,其中包括:(1)31个通用寄存器,都是32位的寄存器。通用寄存器包括R0-R15,可以分为3类:

(1)未分组寄存器R0-R7分组寄存器R8-R14程序计数器PC(R15)(2)6个状态寄存器,都是 32位的寄存器。ARM体系结构的寄存器组织ARM体系结构的寄存器组织其中r0~r3

主要用于子程序间传递参数,r4~r11

主要用于保存局部变量,但在Thumb

程序中,通常只能使用r4~r7

来保存局部变量;r12

用作子程序间scratch

寄存器,即ip

寄存器;r13

通常用做栈指针,即sp;r14

寄存器又被称为连接寄存器(lr),用于保存子程序的返回地址;r15

用作程序计数器(pc),由于ARM采用了流水线机制,当正确了PC的值后,该值为当前正在运行指令地址加8个字节,即PC指向当前指令的下两条指令地址。ARM体系结构ARM微处理器的数据类型ARM基本数据类型有字、半字、字节其

格式要求如下:ARM体系结构可以用两种方法

数据,称之为大端格式和小端格式,可以通过配置协处理器进行大小端设置。大端格式(big-endian):字数据的高字节

在低地址中,而字数据的低字节则存放在高地址中。ARM有以下7种异常立即数寻址方式立即寻址就是数据包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。MOV

R0,#0xFF000

;将立即数0xFF000装入R0寄存器寄存器寻址方式操作数的值在寄存器中,指令中的地址码字段

的是寄存器

,指令执行时直接取出寄存器值来操作。MOV

R1,R2

;将R2的值存入R1ARM寻址方式ARM寻址方式寄存器移位寻址寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。MOV

R0,R2,LSL#3

;R2的值左移3位,结果放入R0,;即是R0=R2×8寄存器间接寻址寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的单元中,即寄存器为操作数的地址指针。LDR

R1,[R2];将R2指向的单元的数据读出;ARM寻址方式基址加变址寻址基址加变址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于单元,常用于查表、数组操作、功能部件寄存器基址附近的等。单元的内容LDR

R2,[R3,#0x0C];

R3+0x0C地址上的放入R2多寄存器寻址多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下:LDMIA

R1!,{R2-R4,R6};将R1指向的单元中的数据读出到R2~R4,R6中ARM寻址方式相对寻址相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。BL

SUBR1

;调用到SUBR1子程序SUBR1...ARM寻址方式堆栈寻址堆栈是一个按特定顺序进行存取的区,操作顺序为“后进先出”

。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈)指向一块

区域(堆栈),指针所指向的

单元。即是堆栈的栈顶。器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。四种类型的堆栈方式:满递增、空递增、满递减、空递减ARM汇编指令格式ARM汇编指令格式操作码条件助记符标志含义0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1无符号数大于或等于0011CC/LOC=0无符号数小于0100MIN=1负数0101PLN=0正数或零0110VSV=1溢出0111VCV=0没有溢出1000HIC=1,Z=0无符号数大于1001LSC=0,Z=1无符号数小于或等于1010GEN=V有符号数大于或等于1011LTN!=V有符号数小于1100GTZ=0,N=V有符号数大于1101LEZ=1,N!=V有符号数小于或等于1110AL任何无条件执行(指令默认条件)1111NV任何从不执行(不要使用)C代码:

if(a>b)elsea++;b++;对应的汇编代码:CMP

R0,R1;R0与R1比较ADDHI

R0,R0,#1;若R0>R1,则R0=R0+1ADDLS

R1,R1,#1;若R0≤R1,则R1=R1+1使用条件码"cond"可以实现高效的逻辑操作,提高代码效率传输数据指令MOV(MOVE)指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器MOV

R0,R1

;

把R1的值传到R0MOV

R3,#3

;把常数3传给R3,MOV中用#表示常数MVN(

MOVE

Negative)取反后再传值,比MOV多了一步取反MVN

R1,R2

;把R2的值取反传给R1算术逻辑运算指令部分算术运算符:ADD:加法运算ADC:带进位加法运算SUB:减法运算RSB:逆向减法运算SBC:带进位减法运算RSC:带进位逆向减法运算部分逻辑运算符:AND:逻辑“与”运算ORR

:逻辑“或”运算EOR:逻辑“异或”运算BIC:位清除运算AND R3,R1,

#0xFFORR R3,R1,

R2;R3=R1

&

0x000000FF;R3=R1|R2ARM汇编指令格式比较指令将两个数值进行的特定运算,根据运算结果影响CPSR的相关标志位,用于后面程序的条件执行,但是运算结果不予保存。CMP:数值比较。将寄存器的值减去操作数的值,结果为0,z=1;否则z=0;CMN:负数比较。将寄存器的值加上操作数的值。结果为0,z=1;否则z=0;TST:位测试。寄存器的值与操作数的值按位"与"操作。结果为0,z=1;否则z=0;TEQ:相等测试。寄存器的值与操作数的值按位"异或"操作。结果为0,z=1;否则z=0;跳转指令程序流程的跳转,在

ARM

程序中有两种方法可以实现程序流程的跳转指令用于实现使用专门的跳转指令

B和BL直接向程序计数器PC

写入跳转地址值如实现类似C语言的Return

语句,就是用MOVPC,LR这里可以在任意4G的空间进行跳转跳转指令B指令(Branch)表示无条件跳转.B

main

;跳转到标号为main地代码处BL指令(Branch

with

Link)表示带返回值的跳转.BL比B多做一步,在跳转前,BL会把当前位置保存在R14(即LR寄存器),当跳转代码结束后,用MOV

PC,LR指令跳回来,这实际上就是C语言执行函数的用法,汇编里调子程序都用BL,执行完子函数后,可以用MOV

PC,LR跳回来.跳转指令BL

LabelMOV

PC,LR程序代码Addr1Addr2LabelPCLRAddr2Addr2程序跳转到目标地址Label继续执行,当子程序执行结束后,将

LR寄存器内容存入PC,返回调用函数继续执行例如:BLDelayNS;调用子程序DelayNSLDR指令1LDR

r0,=name,像这种带等号的是伪指令,而不是ARM指令,LDR

伪指令用于加载立即数或一个地址值到指定寄存器.*如果name是立即数的话:LDR

R0,=0X123;//将0X123存入R0*如果name是个标识符:LDR

R0,=NAME;//将NAME的地址存入R02LDR

R1,[R0]

;如果没有等号,LDR

指令用于从内存中

数据放入寄存器中.该指令是

将R0

地址处的数据读出,保存到R1

中(零偏移)。MSR和MRS指令CPSR寄存器的值。该指令通常用于改

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论