北大计算机构造与组成课件MIPS.pptVIP

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北大计算机构造与组成课件MIPS,建筑构造课件,汽车构造课件,汽车构造ppt课件,建筑识图与构造课件,陈家瑞汽车构造课件,房屋建筑构造课件,发动机构造课件,经典汽车构造课件,汽车发动机构造课件

MIPS 代码生成 */23 编译实习 编译实习 MIPS 代码生成 MIPS 代码是一种汇编代码 主要汇编信息: .text //代码段(指令段) .data //数据段 .globl //全局符号声明 .align 0 //关闭所有的自动对齐 .asciiz //字符串(带终止符) MIPS的寄存器约定 a0 - a3:存放向子函数传递的参数 v0、v1:存放子函数调用返回结果 还可用于表达式求值 s0 - s7:存放局部变量 在发生函数调用时一般要保存它们的内容 t0 – t8:存放临时运算结果 在发生函数调用时不必保存它们的内容 sp: 栈(stack)指针 fp: 帧(frame)指针 ra: 返回地址(用于过程调用) MIPS指令 运算 addu, add subu, sub mul and neg 常数操作 li 数据传输 la lw sw move 比较 seq slt MIPS指令 控制指令 b label: 分支到 label beqz Rsrc, label:如果 Rsrc 为 0 就分支到 label bgeu Rsrc1, Src2, label:如果 Rsrc1 大于等于 Src2 就分支到 label j label: 无条件转移到 label jal label:(jump and link) 无条件转移到 label, 并将下一指令的地址写入 $ra jalr Rsrc: 使用寄存器的跳转指令 指令的跳转地址在 Rsrc 寄存器中 并将下一指令的地址写入 $ra 更多细节见:/homes/hosking/352/spim/raw.html 《体系结构》课程的相关资料 系统调用指令:syscall $v0 中包含调用号(共12个): 1:打印整数,数字在 $a0 中 4:打印字符串,字符串在 $a0 中 9:申请内存块,申请长度在 $a0 中, 所获得内存的地址在$v0中 MIPS指令 堆栈操作 对每个子例程堆栈空间排列可以参考:?* 高地址 ??--------??低地址? ????* -------------------------------------------------------------?*| ra | fp |?溢出TEMP |?保存用到的S寄存器|参数X|......| 参数4 | 下一帧?* ------------------------------------------------------------- ?fp指向上个sp,0($fp)可以取到入参数4,依次类推。 参数的个数是当前子例程调用其他例程时需传参数的最大数减去4. 子例程开始时:??1. 操作堆栈,分配空间。??2. 保存所有用到的S寄存器。??3. 将所有用到的入参拷贝到S寄存器或T寄存器或溢出空间里。?结束时:??恢复S寄存器和堆栈。 对出现在子例程中的所有TEMP:? ?如果它从来不活跃,例如(只写未读或未写未读),该TEMP只可能是MOVE或HLOAD目标,可以转化该语句为nop。 ??如果它的活性区间跨调用(出现在至少一个CALL语句的LiveOut中),分配s寄存器,或溢出。?? 如果它的活性区间不跨调用,优先分配t寄存器,其次s寄存器,或溢出。 可以用v0和v1存取溢出的TEMP。 MAIN [0][0][2] MOVE t0 HALLOCATE 4 MOVE t1 HALLOCATE 4 MOVE t2 Fac_ComputeFac HSTORE t0 0 t2 HSTORE t1 0 t0 MOVE t0 t1 HLOAD t1 t0 0 HLOAD t2 t1 0 MOVE t1 10 MOVE a0 t0 MOVE a1 t1 CALL t2 MOVE t3 v0 PRINT t3 END .text

文档评论(0)

xutiantian250 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档