没有合适的资源?快使用搜索试试~ 我知道了~
ARM汇编程序规范.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 170 浏览量
2022-07-10
09:07:10
上传
评论
收藏 211KB PDF 举报
温馨提示
试读
2页
ARM汇编程序规范.pdf 学习资料 复习资料 教学资源
资源推荐
资源详情
资源评论
ARM 汇编程序规范
张立新
(北京信息职业技术学院)
摘 要:规定了一些子程序间调用的基本规则,这些规则包括子程序调用过程中寄存器的使用规
则,数据栈的使用规则,参数的传递规则。有了这些规则之后,单独编译的 C 语言程序就可以和汇编程
序相互调用。使用 ADS 的 C 语言编译器编译的 C 语言子程序满足用户指定的 ATPCS 类型。而对于汇编
语言来说,则需要用户来保证各个子程序满足 ATPCS 的要求。
关键词:寄存器;数据栈;参数传递;子程序
1. 基本概念
ATPCS (ARM-Thumb Procedure Call Standard)
规定了一些子程序间调用的基本规则,这些规则包括子程序调用过程中寄存器的使用规则,数据栈
的使用规则,参数的传递规则。有了这些规则之后,单独编译的 C 语言程序就可以和汇编程序相互调用。
使用 ADS 的 C 语言编译器编译的 C 语言子程序满足用户指定的 ATPCS 类型。而对于汇编语言来说,则
需要用户来保证各个子程序满足 ATPCS 的要求。
AAPCS (ARM Archtecture Procedure Call Standard)
2007 年 ARM 公司正式推出了 AAPCS 标准,AAPCS 是 ATPCS 的改进版,目前, AAPCS 和
ATPCS 都是可用的标准。
2. 寄存器使用规则
子程序间通过寄存器 R0~R3 来传递参数。这时,寄存器 R0~R3 可记作 a0~a3。被调用的子程序
在返回前无需恢复寄存器 R0~R3 的内容。
在子程序中,使用寄存器 R4~R11 来保存局部变量。这时,寄存器 R4~R11 可以记作 v1~v8。
如果在子程序中使用了寄存器 v1~v8 中的某些寄存器,则子程序进入时必须保存这些寄存器的值,在返
回前必须恢复这些寄存器的值。在 Thumb 程序中,通常只能使用寄存器 R4~R7 来保存局部变量。
寄存器 R12 用作过程调用中间临时寄存器,记作 IP。在子程序之间的连接代码段中常常有这种使用规则。
寄存器 R13 用作堆栈指针,记作 SP。在子程序中寄存器 R13 不能用作其他用途。寄存器 SP 在进入子程
序时的值和退出子程序时的值必须相等。
寄存器 R14 称为连接寄存器,记作 LR。它用于保存子程序的返回地址。如果在子程序中保存了返回
地址,寄存器 R14 则可以用作其他用途。
寄存器 R15 是程序计数器,记作 PC。它不能用作其它用途。
3. 堆栈使用规则
ATPCS 规定堆栈为 FD(Full Descending: sp 指向最后一个压入的值,数据栈由高地址向低地址生
长)类型,即满递减堆栈,并且对堆栈的操作是 8 字节对齐。所以经常使用的指令就有 STMFD 和
LDMFD。
对于汇编程序来说,如果目标文件中包含了外部调用,则必须满足下列条件:
(1)外部接口的堆栈必须是 8 字节对齐的。
(2)在汇编程序中使用 PRESERVE8 伪指令告诉连接器,本汇编程序数据是 8 字节对齐的。
4. 参数传递规则
根据参数个数是否固定,可以将子程序分为参数个数固定的子程序和参数个数可变化的子程序。这
两种子程序的参数传递规则是不一样的。
4.1 参数个数可变子程序参数传递规则
对于参数个数可变的子程序,当参数个数不超过 4 个时,可以使用寄存器 R0~R3 来传递参数;当
参数超过 4 个时,还可以使用堆栈来传递参数。
在传递参数时,将所有参数看作是存放在连续的内存字单元的字数据。然后,依次将各字数据传递
到寄存器 R0,R1,R2 和 R3 中。如果参数多于 4 个,则将剩余的字数据传递到堆栈中。入栈的顺序与
参数传递顺序相反,即最后一个字数据先入栈。
4.2 参数个数固定子程序参数传递规则
1 / 2
ARM 汇编程序规范
资源评论
努力搬砖的小王
- 粉丝: 16
- 资源: 7706
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功