- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
子程序链接
See MIPS Run
翻译 Alan Yao
10 MIPS 上的C 语言编程 2
10.1 堆栈 子程序链接 参数传递 2
10.2 堆栈参数结构 3
10.3 使用寄存器传递参数 3
10.4 C 库范例 4
10.5 一个特殊的例子 传递数据结构 5
10.6 传递不定数量的参数 5
10.7 函数的返回值 6
10.8 扩展的寄存器使用标准 SGI n32 和n64 7
10.9 堆栈布局 堆栈帧 辅助调试器 9
10.9.1 leaf 函数11
10.9.2 nonleaf 函数11
10.9.3 复杂堆栈请求的堆栈帧指针 14
10.10 可变长度参数列表 17
10.11 不同线程间共享函数和共享库的问题 17
10.11.1 单一地址空间的代码共享 18
10.11.2 MIPS ABI 中的共享库代码 18
10.12 编译器优化简介 20
10.12.1 普通优化 20
10.12.2 优化不友好代码以及如何避免 22
10.12.3 优化的限制 23
10.13 C 对设备访问的隐含规则 23
10.13.1 使用volatile 避免被优化破坏 23
10.13.2 C 中不对齐的数据 24
10 MIPS 上的C 语言编程
本章主要讨论用C 语言建立完整的MIPS 系统可能需要具备的一些知识 因此 更多时
候本章讲述C 编译器产生的汇编语言代码 而不是 C 语言代码 为避免讨论过于繁琐 而
使本章膨胀到一本新书的规模 现假定读者您是第一次向MIPS 平台移植代码
一个高效的C 运行环境依赖于C 语言程序的寄存器使用约定 这一般由C 编译器强制
规定 因此对于汇编工程师来说 也是需要强制遵守的 参照2.2.1 部分对寄存器使用的全
部约定 本章内容涉及
l 堆栈 子程序链接 参数传递 关于MIPS 进程是如何实现的 以及如何为避免不
必要工作而支持的各种特性
l 共享库和非共享库 关于在复杂机器上支持共享库OS 的一点注解
l 介绍编译器的优化 可能对MIPS 上C 语言编程造成的影响
l C 语言访问设备的提示 关于如何写绝大多数设备驱动
即使你使用其他的高级语言而非C 语言 只要你想为MIPS 编译代码 并与标准库链接
那么本章的大多数内容 还是对你有所帮助的 在这儿 我并没有针对特定编程语言 是因
为我对他们了解不够 一直不知道如何恰当的点到为止
10.1 堆栈 子程序链接 参数传递
许多MIPS 程序使用混合语言编写的 对于嵌入式系统的程序员 这最可能是在C(或
C++) 中加入汇编语言
一开始 MIPS 社团建立了一套约定 用来规范如何传递参数给函数 在C 语言中 称
为 子例程 或 子程序 和从函数返回值 这个约定看起来很复杂 其实只是为了逻辑
上遵循文档规则 而使文档太过庞大而已
基本原则是所有参数在堆栈中的一个数据结构中分配空间 只有少数堆栈开始部分的内
容可以装入CPU 寄存器 相应的内存空间将变得是没有定义的 实际上 这意味着对于
大多数调用 参数全部传递到寄存器中 然而 堆栈数据结构是理解进程的最好切入口
自从1995 年Silicon Graphics 开始 已经为了提高性能而对调用约定作了修改 并对这
些修改作如下命名
l o32 传统的MIPS 约定 o 是old 简写 详细说明如下 这个约定 不包括SGI
为支持共享库而添加的一些特性 目前还是嵌入式工具相当常用的 不过过不了多
久 两个最新的约定将会被其他工具作为可选项加以支持
l n64 针对64 程序的约定 SGI 的64 模式意味着指针和 C 语言的long 整数类型都
您可能关注的文档
最近下载
- 人教版四年级上册数学期末总复习(课件)-.pptx VIP
- 心肺复苏教案.doc VIP
- 中医综合诊所污水、污物、粪便处理方案及周边环境情况说明.docx VIP
- 华南理工大学《嵌入式系统与设计》2022-2023学年期末试卷.doc VIP
- 2025年语言导论期末试题及答案.docx
- 三年级语文上册课件-《24.司马光》 (共34张PPT)部编版.ppt VIP
- 人教版二上语文 第7单元测试卷(附答案).docx VIP
- 沥青摊铺机安全操作规程.docx VIP
- 国开期末考试《中国现代文学专题》机考试题及答案(第2套).docx VIP
- 华南理工大学《嵌入式系统与设计》2021-2022学年期末试卷.doc VIP
原创力文档


文档评论(0)