Chinaunix首页 | 论坛 | 博客
  • 博客访问: 998362
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 216
  • 用 户 组: 普通用户
  • 注册时间: 2018-11-27 17:55
文章分类
文章存档

2019年(21)

我的朋友

分类: C/C++

2019-06-28 08:21:31


点击(此处)折叠或打开

  1. long exchange(long *xp, long y)
  2. {
  3.     long x = *xp;
  4.     *xp = y;
  5.     return x;
  6. }
 arm-linux-gcc -O2 load.c -S


点击(此处)折叠或打开

  1. exchange:
  2.     @ Function supports interworking.
  3.     @ args = 0, pretend = 0, frame = 0
  4.     @ frame_needed = 0, uses_anonymous_args = 0
  5.     @ link register save eliminated.
  6.     mov    r3, r0   #r0的值存入r3
  7.     ldr    r0, [r0, #0] #把r0地址指向的值存入r0,r0此时又作为函数的返回值
  8.     str    r1, [r3, #0]  #*x = y;
  9.     bx    lr  #函数返回

     1. 子程序通过寄存器R0~R3来传递参数. 这时寄存器可以记作: A0~A3 , 被调用的子程序在返回前无需恢复寄存器R0~R3的内容, 同时,R0也被用来传递函数的返回值
     2. 在子程序中,使用R4~R11来保存局部变量,这时寄存器R4~R11可以记作: V1~V8 .如果在子程序中使用到V1~V8的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值,对于子程序中没有用到的寄存器则不必执行这些操作.在THUMB程序中,通常只能使用寄存器R4~R7来保存局部变量.
     3.寄存器R12用作子程序间scratch寄存器,记作ip; 在子程序的连接代码段中经常会有这种使用规则.
     4. 寄存器R13用作数据栈指针,记做SP,在子程序中寄存器R13不能用做其他用途. 寄存器SP在进入子程序时的值和退出子程序时的值必须相等.
     5. 寄存器R14用作连接寄存器,记作lr ; 它用于保存子程序的返回地址,如果在子程序中保存了返回地址,则R14可用作其它的用途.
     6. 寄存器R15是程序计数器,记作PC ; 它不能用作其他用途.
     7. ATPCS中的各寄存器在ARM编译器和汇编器中都是预定义的.


阅读(279459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~