当前位置:首页 > 单片机 > 单片机
[导读]ARM汇编语言以段(分为代码段和数据段)为单位组织源文件。一个ARM源程序至少要有一个代码段,大的程序可以包含多个代码段和数据段。 代码段通常是只读的, 0个或者多个包含初始值的数据段。通常可读。 0个或者多个不

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的下一句执行。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭