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

arm汇编编程(示例)

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

8位中,Rd的高24位设置为0;

然后将寄存器op1的低8位数据存储到同一内存地址中。

例:SWPBR0,R1,[R2];将R2所表示的内存单元中的一个字节数据装载到R0的低8位,然后将R1中的低8位字节

数据保存到R2所表示的内存单元中

//^^^^^^^^^^^^^^^^^^^^^^^^^^下午^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

(五)、协处理指令

1)CDP协处理器操作指令

格式:CDP{}

,,,,,;

功能:用于传递指令给协处理器p,要求其在寄存器CRn和CRm上,进行操作opcode1,并把结果存放到CRd中,

可以使用opcode2提供与操作有关的补充信息。指令中的所有寄存器均为协处理器的寄存器,操作由协处理器完成。

指令中:

P为协处理器编号;

CRd为目的寄存器的协处理器寄存器;

CRm和CRn为存放操作数的协处理器寄存器;

Opcode1和opcode2为协处理器即将执行的操作。

例:CDPp5,5,c0,c1,c2,9;该指令用于通知协处理器p5,在c1和c2上执行操作5和9,并将结果存放到c0中。

2)LDC协处理器数据读取指令

格式:LDC{}{L}

,,;

功能:将addr表示的内存地址中的连续数据传送到目的寄存器CRd中。

L表示指令为长读取操作,比如用于双精度数据的传输;

目的寄存器CRd为协处理器的寄存器;

addr的寻址方式同LDR指令,其寄存器为ARM处理器的寄存器。

例:LDCp5,c1,[R1+5]:该指令用于将R1+5所对应的存储单元中的数据,传送到协处理器p5的寄存器c1中。

3)STC协处理器数据存储指令

格式:STC{}{L}

,,;

功能:将寄存器CRd的值传送到addr表示的内存地址中。指令中各参数用法同LDC。

例如:STCp5,c1,[R1+5];该指令用于将协处理器p5中寄存器c1的数据传送到R1+5所对应的存储单元中。

4)MCRARM寄存器到协处理器寄存器的数据传送指令

格式:MCR{}

,,,,{,op2};

功能:将ARM处理器的寄存器Rd中的数据传送到协处理器p的寄存器CRn,CRm中;op1,op2为协处理器将要执行的操作。

例:MCRp5,5,R1,C1,C2,9;该指令将R1中的数据传送到协处理器p5的寄存器C1,C2中,协处理器执行操作5和9。

MRC协处理器寄存器到ARM寄存器的数据传送指令

格式:MRC{}

,,,,{,op2};

功能:将协处理器p的寄存器CRn,CRm的数据传送到ARM处理器的寄存器Rd中;op1,op2为协处理器将要执行的操作。

例:MRCp5,5,R1,C1,C2,9;该指令将寄存器C1,C2中的数据传送到R1中,协处理器p5协处理器执行操作5和9。

(六)、异常中断指令

异常中断产生指令:用于系统调用和调试。

1)SWI软件中断指令

格式:SWI{}24位的立即数;

功能:用于产生软件中断,以使用户程序调用操作系统的系统例程。

指令中24位的立即数指定用户程序调用系统例程的类型,其参数通过通用寄存器传递。当24位的立即数

被忽略时,系统例程类型由寄存器R0指定,其参数通过其他通用寄存器传递。

例:SWI0X05;调用编号为05的系统例程。

2)BKPT断点中断指令

格式:BKPT16位的立即数;

功能:用于产生软件断点中断,以便软件调试时使用。16位的立即数用于保存软件调试中额外的断点信息。

指令操作的伪代码:

(七)、信号量操作指令

信号量操作指令:用于进程间的同步互斥,提供对信号量的原子操作。

(八)、ARM程序常见结构

1.子函数和主函数

使用BL指令进行调用,该指令会把返回的PC值保存在LR

AREAExample,CODE,READONLY;声明代码段Example

ENTRY;程序入口

Start

MOVR0,#0;设置实参,将传递给子程骗子的实参存放在r0和r1内

MOVR1,#10

BLADD_SUM;调用子程序ADD_SUM

BOVER;跳转到OVER标号处,进入结尾

ADD_SUM

ADDR0,R0,R1;实现两数相加

MOVPC,LR;子程序返回,R0内为返回的结果

OVER

END

运行过程

(1)程序从ENTRY后面指令处开始运行(即主函数)

R0和R1先准备好数据令子函数运算时使用

(2)BL为跳转指令,用于调用子函数后面为函数标号。

在调用函数的过程中,自动将PC内的值保存到LR(R14)内备份,PC内当前的值为下一条要执行的指令地址

(即BOVER指令地址),在子函数结束前将该地址恢复到PC内

(3)B为跳转指令,用于跳转到指定的标号后,此处跳转到程序结尾

(4)MOVPC,LR是子函数内的最后一条语句,用于将LR内保存的地址恢复到PC内

PC(R15)程序计数器存储要执行的指令在内存中的地址

PC的值=当前正在执行指令在内存中的地址+8

2.条件跳转语句

AREAExample,CODE,READONLY;声明代码段Example

ENTRY;程序入口

Start

MOVR0,#2;将R0赋初值2

MOVR1,#5;将R1赋初值5

ADDR5,R0,R1;将R0和R1内的值相加并存入R5

CMPR5,#10

BEQDOEQUAL;若R5为10,则跳转到DOEQUAL标签处

WAIT

CMPR0,R1

ADDHIR2,R0,#10;若R0>R1则R2=R0+10

ADDLSR2,R1,#5;若R1<=R2则R2=R1+5

DOEQUAL

ANDSR1,R1,#0x80;R1=R1&0x80,并设置相应标志位

BNEWAIT;若R1的d7位为1则跳转到WAIT标签

OVER

END

运行

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

网站地图

Top