以ARM处理器来说明C语言的内部机制

以ARM处理器来说明C语言的内部机制:

1、ARM中有r0~r15共16个寄存器,如下图:

其中,r0~r3用作传递参数,r12~r15分别对应为:r12--ip、r13--sp(stack point)栈、

r14--lr(link Register)返回地址、r15--pc(pragram Counter)=当前指令地址+8。

如:

(地址0x1c刚好对应值0x56000050)

 

备注:ARM处理器是以流水线的方式处理指令的,即为:

a、当前执行地址A的指令。

b、已经在对地址A+4的指令进行译码。

c、已经在读取地址A+8的指令。

 

2、以led.c文件和led.c的反汇编文件led.dis说明。

led.c:

led.c的反汇编文件led.dis如下:

start.S启动文件:

 

led.c内部机制分析:

a、start.S的作用:(1)设置栈。(2)调用main并把返回地址保存在lr中。

b、led.c:main函数作用:(1)定义2个局部变量。(2)设置变量。(3)return 0。

 

思考:(1)为何要设置栈?因为C函数要用。

          (2)怎么使用栈?a、保存局部变量。b、保存lr等寄存器。

          (3)调用者如何传参数给被调用者?通过r0~r3传递

          (4)被调用者如何传返回值给调用者?通过r0~r3传递

          (5)怎么从栈中恢复那些寄存器?在函数中,r4~r11可能被使用,所以在入口保存它们,在出口恢复它们。

注意:在程序中,栈要指向一个内存,这块内存要可读可写,并且这块内存跟程序不能冲突,所以,将sp设在4096即顶部(NAND启动时)。

如图,已知ARM内部存储为4k,且nand上前4k的内容会被完完全全复制到SRAM中,对应上面的反汇编码可得:

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值