微处理器系统结构与嵌入式系统设计(第2版) chap9.ppt

微处理器系统结构与嵌入式系统设计(第2版) chap9.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微处理器系统结构与嵌入式系统设计(第2版) chap9

* Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long * Load ADdRess Load ADdRess long 基本ATPCS (1):寄存器使用规则 ①寄存器R0~R3(A1~A4 )用做子程序参数传递。被调用的子程序在返回前无需恢复其内容。 ②寄存器R4~R11(V1~V8 )用做子程序内的局部变量保存。如有使用则应进行保护和恢复。(Thumb程序通常只能使用R4~R7) ③ 寄存器R12(IP)用作临时(scratch)指针。 ④ 寄存器R13用作数据栈指针SP ,不能用于其他用途。SP在子程序进入和退出时的值必须相等。 ⑤ 寄存器R14用作连接寄存器LR。如果子程序中保存了返回地址,则R14可用于其他用途。 ⑥ 寄存器R15是程序计数器PC,不能用于其他用途。 ATPCS中的寄存器使用规则 寄存器 别名 用 法 R0~R3 A1~A4 入口参数 / 返回值 / 临时 (scratch)寄存器 R4~R11 V1~V8 子程序局部变量寄存器,其中: R7/V4也作为Thumb状态工作寄存器WR; R9/V6在支持可读写段位置无关的ATPCS中用作静态基址寄存器SB; R10/V7/在支持数据栈检查的ATPCS中为数据栈限制指针SL; R11/V8/在支持数据栈检查的ATPCS中为数据帧指针FP; R12 IP 临时(scratch)寄存器,用于过程链接胶合代码中(如连接器提供的veneers代码协助实现长跳转时会使用并修改其值) R13 SP 堆栈指针,不能用于其他用途 R14 LR 连接寄存器 R15 PC 程序计数器,不能用于其他用途 基本ATPCS (2):数据栈使用规则 ARM的数据栈可为FD(Full Descending),ED(Empty Descending),FA(Full Ascending)或EA(Empty Ascending) ,但ATPCS规定数据栈为FD类型,且8字节对齐的。 ? 数据栈指针(stack pointer)指向最后入栈的数据单元地址。 ? 数据栈基址(stack base)指向数据栈的最高地址。 ? 数据栈界限(stack limit)指向数据栈的最低地址。 ? 已占用的数据栈(used stack)指栈基址和SP之间的区域,其中包括栈指针对应的内存单元。 ? 数据栈中的数据帧(stack frame)指栈中为子程序分配的用来保存寄存器和局部变量的区域。 对于汇编代码来说,必须保证在进入该汇编代码后,直到调用外部代码之间,栈指针变化为偶数个字; 应使用PRESERVE8伪指令告诉连接器,本汇编代码是8字节对齐的; 应使用FRAME伪指令描述数据帧; 基本ATPCS(3):参数传递规则 1、子程序入口参数传递规则 参数不超过4个时使用寄存器R0~R3,依次将各字数据传送到寄存器; 参数超过4个时将剩余的字数据传送到数据栈,入栈的顺序与参数顺序相反,即最后一个参数先入栈。 2、子程序结果返回规则 当结果为一个32位的整数时通过寄存器R0返回子程序结果; 当结果为一个64位的整数时通过R0和R1返回子程序结果,以此类推; 当对于位数更多的子程序结果,需要通过调用内存来传递。 */52 C程序调用汇编函数 汇编程序的设置要遵循ATPCS 规则,保证程序调用时参数、寄存器和堆栈的正确使用。 在汇编程序中使用EXPORT 伪指令声明本子程序,

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档