汇编向C语言函数传递参数

/* 重定位text, rodata, data段整个程序 */
mov r0, #0
ldr r1, =_start 	    /* 第1条指令运行时的地址 */
ldr r2, =__bss_start    /* bss段的起始地址 */
sub r2, r2, r1
bl copy2sdram  /* src, dest, len */    

这里的copy2sdram是C语言的一个带参的函数,里面有三个参数src、dest、 len,问题是我们应该如何在汇编里传递参数呢,我们用的是寄存器进行传参,通过寄存器r~ r3来传递参数当参数个数多于4个时,使用堆栈来传递参数。此时r0~r3可记作A1 ~A4。所以我们这里的例子种r0是第一个参数,r1为第二个参数,r2为第三个参数

至于其他寄存器的作用为:

  • 在子程序中,使用寄存器r4~ r11保存局部变量。因此当进行子程序调用时要注意对这些寄存器的保存和恢复。此时r4~ r11可记作V1~V8。
  • 寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作IP。
  • 寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。
  • 寄存器r15称为程序计数器,记作PC。

借鉴文章:https://blog.csdn.net/pplogic/article/details/84900803


版权声明:本文为weixin_43843155原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。