第6章 C语言程序设计与混合编程(2)
C语言程序设计与混合编程
第6章 C语言程序设计与混合编程 (3) ARP 在函数进入和返回时,必须为0,即当前辅助寄 存器必须为AR0,而函数执行时则可以是其他值。
(4) OVM 在默认情况下,编译器总认为OVM是0。因此,若在汇编程序中将OVM置为1,则在返回C环境时,必须将其
恢复为0。(5) 其他状态位和寄存器可以任意使用,不必恢复。
2013年8月6日3时59分
C语言程序设计与混合编程
第6章 C语言程序设计与混合编程
2.函数调用规则(1) 参数传递 在函数调用前,将参数以逆序压入运行堆栈。 所谓逆序,即最右边的参数最先压入栈,然后自右向左将参数 依次压入栈,直至第二个参数入栈完毕。对第一个参数,则不 需压入堆栈,而是放入累加器A中,由A进行传递。若参数是长 整型和浮点数时,则低位字先压入栈,高位字后压入栈。若参 数中有结构,则调用函数先给结构分配空间,而该空间的地址 则通过累加器A传递给被调用函数。
一个典型的函数调用图如图6.1所示。在该例中,我们可以 看出,参数传递到函数,同时该函数使用了局部变量并调用另 一个函数。第一个参数不由堆栈传递,而是放入累加器A中传 递。(如图6.1(b)、图6.1(c)所示)。2013年8月6日3时59分 17
C语言程序设计与混合编程
第6章 C语言程序设计与混合编程另外,从这个例子中,我们看到了函数调用时局部帧的产生过程:函数
调用时,编
译器在运行堆栈中建立一个帧用以存储信息。当前函数帧成为局部帧,C环境利用局部帧来保护调用者的有关信息、传递参数和为局部变量分 配存储空间。每调用一个函数,就建立一个新的局部帧。局部帧空间的一部
分用于分配参数区(局部参数区),被传递的参数放入局部参数区,即压入堆栈,再传递到其他被调用的函数中。 (2) 被调用函数的执行过程 被调用函数依次执行以下几项任务: * 如果被调用函数修改了寄存器(如AR1、AR6、AR7),则必须将它们压 栈保护。 * 当被调用函数需分配内存来建立局部变量及参数区时,SP向低地址移 动一个常数(即SP减去一个常数),该常数的计算方法如下: 常数=局部变量长度+参数区中调用其他函数的参数长度2013年8月6日3时59分 18
C语言程序设计与混合编程
第6章 C语言程序设计与混合编程调用前 低 低 传递函数 调用函数 低 SP 局部 参数区 局部帧 SP 返回地址 调用者 参数区 高 调用者 局部变量 SP 参数2… 参数n 高 调用者 局部变量 参数1 累加器A 高 返回地址 参数2… 参数n 调用者 局部变量 参数1 累加器A 传递函数 调用函数
(a)
(b)
(c)
图6.1 函数调用时堆栈的使用2013年8月6日3时59分 19
C语言程序设计与混合编程
第6章 C语言程序设计与混合编程* 被调用函数执行程序。 * 如果被调用函数修改了寄存器ARl、AR6和AR7,则必须予以恢复。 将函数的返回值放入累加器A中。整数和指针在累加器A的低16位中返回, 浮点数和长整型数在累加器A的32位中返回。如果函数返回一个结构体,则 被调用函数将结构体的内容拷贝到累加器A所指向的存储器空间。如果函数 没有返回值,则将累加器A置0,撤销为局部帧开辟的存储空间。ARP在从函 数返回时,必须为0,即当前辅助寄存器为AR0。参数不是由被调用函数弹 出堆栈的,而是由调用函数弹出的。 * SP向高地址移动一个常数(即SP加上一个常数),该常数即为图6.1(b) 所确定的常数,这样就又恢复了帧和参数区。 * 被调用函数恢复所有保存的寄存器。 * 函数返回。 当C程序编译成汇编后, 上述过程如例6.2所示。2013年8月6日3时59分 20
C语言程序设计与混合编程
第6章 C语言程序设计与混合编程 【例6.2】 be_called: ;函数入口
pshm AR6pshn AR7 frame # -16
;保存AR6;保存AR7 ;分配帧和参数区
...frame #16 pshm AR7 pshm AR6 ret2013年8月6日3时59分
;函数主体;恢复原来的帧和参数区 ;恢复AR7 ;恢复AR6 ;函数返回21
…… 此处隐藏:53字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [专业资料]《蜜蜂之家》教学反思
- [专业资料]过去分词作定语和表语1
- [专业资料]苏州工业园区住房公积金贷款申请表
- [专业资料]保安管理制度及处罚条例细则
- [专业资料]2018年中国工程咨询市场发展现状调研及
- [专业资料]2015年电大本科《学前教育科研方法》期
- [专业资料]数字信号处理实验 matlab版 离散傅里叶
- [专业资料]“十三五”重点项目-虎杖白藜芦醇及功
- [专业资料]2015-2020年中国竹木工艺市场需求及投
- [专业资料]国际贸易理论与实务作业五:理论案例分
- [专业资料]财政部修订发布事业单位会计制度
- [专业资料]BCA蛋白浓度测定试剂盒(增强型)
- [专业资料]工程进度总计划横道图模板(通用版)
- [专业资料]七年级地理同步练习(天气与气候)
- [专业资料]X光安检机介绍火灾自动报警系统的组成
- [专业资料]衢州市人民政府办公室关于印发衢州市区
- [专业资料]经济全球化及其影响[1]
- [专业资料]质粒DNA限制性酶切图谱分析
- [专业资料]国家安全人民防线工作“六项”制度
- [专业资料]劳动力投入计划及保证措施
- 电子账册联网监管培训手册
- 人教版语文七年级上第1课《在山的那边
- 对我区担保行业发展现状的思考与建议
- 平面四边形网格自动生成方法研究
- 2016年党课学习心得体会范文
- 如何设置电脑定时关机
- 全球最美人妖排行榜新鲜出炉
- 社会实践调查报告及问卷
- Visual Basic习题集
- 《鱼我所欲也》课件2
- 浙江省会计从业资格考试试卷
- 全遥控数字音量控制的D 类功率放大器资
- 鞍钢宪法与后福特主义
- 电表的改装与校准实验报告(1)
- 2014年高考理科数学真题解析分类汇编:
- Windows 7 AIK 的使用
- 风电场全场停电事故应急处置方案
- 化工原理选填题题库(下)
- 关于产学研合作教育模式的学习与思考
- 西安先锋公馆项目前期定位报告




