ARM汇编语言程序格式
扫描二维码
随时随地手机看文章
ARM汇编语言以段(分为代码段和数据段)为单位组织源文件。一个ARM源程序至少要有一个代码段,大的程序可以包含多个代码段和数据段。
代码段通常是只读的,
0个或者多个包含初始值的数据段。通常可读。
0个或者多个不包含初始值的数据段。这些数据段被初始化为0,通常可读。
如:
1、入口
AREA Init,CODE,READONLY
ENTRY
--------------------ENTRY伪操作标识了程序执行的第一条指令。一个ARM程序至少要有一个ENTRY,
END告诉汇编编译器编译源文件结束,每一个汇编必须包含一个END
2、子程序调用
BL 子程序调用名称
BL指令完成两个操作,将子程序返回地址放在LR寄存器中,同时将PC寄存器的值设置成目标子程序的第一条指令地址。子程序调用通常使用寄存器R0~R3来返回结果和传递参数。
在2440init.s中有大量的子程序调用例子
;===========================================================
ReadNandID
mov r7,#NFCONF
ldr r0,[r7,#4];NFChipEn();
bic r0,r0,#2
str r0,[r7,#4]
mov r0,#0x90;WrNFCmd(RdIDCMD);
strb r0,[r7,#8]
mov r4,#0;WrNFAddr(0);
strb r4,[r7,#0xc]
;===========================================================
1;while(NFIsBusy());
ldr r0,[r7,#0x20]
tst r0,#1
beq %B1
ldrb r0,[r7,#0x10];id = RdNFDat()<<8;
mov r0,r0,lsl #8
ldrb r1,[r7,#0x10];id |= RdNFDat();
orr r5,r1,r0
ldr r0,[r7,#4];NFChipDs();
orr r0,r0,#2
str r0,[r7,#4]
mov pc,lr
-----------------------------------看到上面两个例子,唯一区别就是后面这个有mov pc,lr,这个表明这个程序完了之后会返回到这个程序BL的下一句执行。