0、汇编实例
P67:
例1:该例要求完成18+8,并保存结果到R7寄存器中,指令代码如下:
AREA example1,CODE, READONLY;指明一个代码段名称为examplel
ENTRY;指明程序的人口
start
MOV R7, #18;R7中赋值18,这是第1条运行指令
MOV R6, #8;R6中赋值8
ADD R7, R7, R6;R7=R7 + R6
;下面指令用于返回调试器
stop
MOV R0, # 0x18
LDR R1, = 0x20026
SWI 0xAB;软中断指令,将产生软中断异常,进入相应异常处理程序,执行编号为0xAB的例程
END;源程序结束标志
1、系统引导程序
P77:
;下而跳转到C语言的主函数
IMPORT __main
BL __main;转移到用户C语言的主函数,引导应用程序
B
;下面是初始化堆栈的子函数
TMPORT UserStack
IMPORT SVCStack
IMPORT UndefStack
IMPORT IRQStack
IMPORT AbortStack
IMPORT FIQStack
InitStacks
MRS R0,CPSR
BIC R0, R0, # MODEMASK
ORR,R1, R0, # UNDEFMODE|NOINT
MSR CPSR_cxsf, R1;设置工作模式为未定义模式
LDR SP, UndefStack
ORR R1, R0, # ABORTMODE| NOINT
MSR CPSR_cxsf, R1;设置工作模式为中止模式
LDR SP, = AbortStack
ORR R1, R0, # IRQMODE| NOINT
MSR CPSR_cxsf, R1;设置工作模式为IRQ模式
LDR SP, = IRQStack
ORR J R1, R0, # FIQMODE| NOINT
MSR CPSR_cxsf, R1;设置工作模式为FIQ模式
LDR SP, =FIQStack
ORR R1, RO, # SVCMODE| NOINT
MSR CPSR_ cxsf, R1;设置工作模式为管理模式
LDR SP, =SVCStack
MOV PC,LR;子程序返回
END;Stratup.s程序结束
2、GPIO端口(LED灯/蜂鸣器)
P175
#include”reg2440. h"
#include "isr. h"
——————————————————————————————————————————————————————————————————
#define beepon() {rGPEDAT=rGPEDAT|Ox0010;}
;0000 0000 0001 0000 改倒数第5位
#define beepoff() {rGPEDAT=rGPEDAT&0xffef;}
;1111 1111 1110 1111 改倒数第5位
#define ledlight() {rGPEDAT= rGPEDAT&0xfff7}
;1111 1111 1111 0111 改倒数第4位
#define ledclear() {rGPEDAT- rGPEDAT|0x0008;}
;0000 0000 0000 1000 改倒数第4位
——————————————————————————————————————————————————————————————————
void Main(Void)
{
INT16U termp;
INT8U oldportf= oxIf, newportf;
——————————————————————————————————————————————————————————————————
rGPECON=((rGPECON|0x00000140)&0xfffffd7f);
;00 01 01 00 0000
;11 01 01 11 1111
;除寄存器位01外其他位保留00|11
——————————————————————————————————————————————————————————————————
beepoff();
rGPFCON= rGPFCON&0x0000
while(1)
{
newportf=rGPFDAT
if(newportf!= oldportf)
{
ledlight