微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > arm汇编编程(示例)

arm汇编编程(示例)

时间:11-09 来源:互联网 点击:

flash闪存内运行,不必再把代码读到系统RAM中。

NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。

2.主板

电源

并口线

复位

RTC电源

RS232电平转换DB9插座

音频IIS,AC97

按键、PS/2与IC接口

数码管

触摸屏

以太网

主USBHUB1转4

3.寄存器

见图:ARM模块和内核框图

寄存器是中央处理器内的组成部份。

寄存器是有限存贮容量的高速存贮部件,用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。

IR用于存储指令

PC用于存储程序运行的地址(即当前指令在内存中的位置)

寄存器是由一个指令的输出或输入可以直接索引到的暂存器群组。所有的计算机指令都是进入寄存器后被直接读取

ARM的汇编编程,本质上就是针对CPU寄存器的编程。

//*重点需要背讼*

ARM寄存器分为2类:普通寄存器和状态寄存器

(1)通用寄存器和计数器:共32个,15个通用寄存器

R0-R7未备份寄存器

R0(a1)R1(a1)R2(a3)R3(a4)R4(v1)R5(v2)R6(v3)R7(v4)

R8-R12备份寄存器

R8(v5)R9(SB,v6)R10(SL,v7)R11(EP,v8)R12(IP)数据寄存器

R15(PC)程序计数器它的值是当前正在执行的指令在内存中的位置。

当指令执行结束后,CPU会自动将PC值加上一个单位,PC值指向下一条即将执行的指令的地址

如果通过汇编指令对PC寄存器赋值,就会完成一次程序的跳转(如从子函数跳转回主函数内)

R14(LR)链接寄存器存放子程序的返回地址

例如:在主函数内,如果调用子函数,程序会进入到子函数内执行。当子函数执行完毕后,需要回到

主函数内,所以,在子函数调用前需要将这个地址先保存起来,否则无法找到这个地址。

LR用于保存这个地址,这个地址也称为子程序返回地址。当子函数结束后,再将LR内的地址赋给PC即可。

如果子程序再调用孙程序,LR如何保存地址呢?

先把当前LR内的值压入内存的栈区,然后LR再保存孙程序的返回地址。当孙程序执行完后通过PC跳转到

子程序内,此时将栈区内的子程序返回地址取出保存在LR内。当子程序执行完后,再通过PC跳转到主函数内。

R13(SP)栈指针寄存器用于存放堆栈的栈顶地址。

SP相当于指针变量,保存的是栈顶的地址,出栈时,从SP指向的内存中取出数据,入栈时将新的内存地址

压入栈顶,而SP相当于链表的头指针(head)。

原则上说R0-R12可以保存任何数据。其中R0-R7用来临时存储数据,R8-R12系统没有用来做任何特殊用途,常用于中断

而在汇编与C语言的交互中,定制了ATPCS标准

寄存器:R4-R11用来保存局部变量

参数:参数小于等于4,用R0-R3保存参数,参数多于4,剩余的传入堆栈

函数返回:结果为32位整数,通过R0返回

结果为64位整数,通过R0,R1返回

对于位数更多的结果,通过内存传递

(2)状态寄存器:

状态寄存器用于保存程序的当前状态

CPSR当前程序状态寄存器

一个寄存器为32位,每一位数据代表不同的状态。分为三个部分(条件代码标志位、控制位、保留区位)

31322928....76543210

NZCVIFTM4M3M2M1M0

其中NZCV称为条件标志位(即保存的是条件的运算结果,真和假)

N=1表示运算结果为负数,N=0表示运算结果为正数。

Z=1表示运算结果为0,Z=0表示运算结果为非零。

C=1表示运算结果产生了进位。

V=1运算结果的符号位发生了溢出。

这4个位的组合,代表了各种条件,如下:

0000 EQ Z置位相等/等于0

0001 NE Z清0不等

0010 CS/HS C置位进位/无符号高于或等于

0011 CC/LO C清0无进位/无符号低于

0100 MI N置位负数

0101 PL N清0非负数

0110 VS V置位溢出

0111 VC V清0无溢出

1000 HI C置位且Z清0无符号高于

1001 LS C清0或Z置位无符号低于或等于

1010 GE N等于V有符号大于或等于

1011 LT N不等于V有符号小于

1100 GT Z清0且N等于V有符号大于

1101 LE Z置位或N不等于V有符号小于或等于

1110 AL 任何状态 总是(always)

1111 NV 无 从不(never)

IFT称为控制位

II=1禁用IRO中断

FF=1禁用FIQ中断

T表示CPU当前的状态,1代表正在Thumb指令集状态,0表示正在ARM指令集状态。

M0至M4表示中断类型(控制位内的模式位)

0b10000User用户中断

0b10001FIQ快速中断

0b10010IRQ声卡、调制解调器等外部设备产生的中断

0b10011Supervisor管理程序或监控程序产生的中断

0b10111Abort异常中断

0b11011Undefined未定义中断

0b11111System系统中断

SPSR保存的程序状态寄存器,结构与CPSR完全一样,用来保存CPSR的值。以便出现异常时恢复CPSR的值

(3)流水线对pc值的影响

CPU内部的组成部分:指令寄存器,指令译码器,指令执行单元(包括ALU和通用寄存器组)

CPU执行指令的步骤:取指->译码->CPU执行指令的步骤

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top