第10章-目标代码生成(机械工业出版社)_第1页
第10章-目标代码生成(机械工业出版社)_第2页
第10章-目标代码生成(机械工业出版社)_第3页
第10章-目标代码生成(机械工业出版社)_第4页
第10章-目标代码生成(机械工业出版社)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、| 虚拟目标代码:虚拟目标代码:虚拟机上的目标程序。虚拟机上的目标程序。 在本地机器上具备虚拟机的解释器。在本地机器上具备虚拟机的解释器。| 实际目标代码:实际目标代码:实际机器上的指令序列实际机器上的指令序列 绝对地址机器代码:绝对地址机器代码: 可重定位的机器代码:可重定位的机器代码: 汇编代码:汇编代码:| 指令格式:指令格式: Op R #C Op R #C (立即立即-寄存器)寄存器) Op R2 d(R1) Op R2 d(R1) (存储器存储器-寄存器)寄存器) Op R1 R2 Op R1 R2 (寄存器寄存器-寄存器)寄存器)| 几个常见指令的含义几个常见指令的含义 : LD

2、 R Source LD R Source 从从Source Source 读出送入读出送入R R Op R Source Op R Source Source op RSource op R结果结果 送入送入R R ST Target R ST Target R R R的内容送入的内容送入Target.Target.| 形如(形如(OpOp,A A,B B,T T):):LD R ALD R A;Op R BOp R B| 形如形如( (ASSIG,A,B)ASSIG,A,B):LD R ALD R A;ST B RST B R| 例:例:Z:= XZ:= X* *(a+b)(a+b)* *

3、 Y Y* * (a+b) (a+b) ( (, ,a,b,t1)a,b,t1)LD R a; Add R bLD R a; Add R b( (* *, ,X,t1,t2)X,t1,t2)ST R t1; Mult R XST R t1; Mult R X( (* *, ,t2,Y,t3)t2,Y,t3)Mult R YMult R Y( (* *, ,t3,t1,t4)t3,t1,t4) Mult R t1Mult R t1l输入语句:(READ, A )IN R ST A , Rl输出语句:(WRITE,A )LD R , AOUT R l(THEN, t,_ , _THEN, t,_

4、, _)生成的目标代码为)生成的目标代码为:LD R , tJUMP0 R , _l(ELSE,_,_,_ELSE,_,_,_)生成的目标代码为)生成的目标代码为:JMP _ 同时回填JUMP0指令的目的地址l(ENDIF,_,_,_)不产生目标代码,只负责完成ELSE子句的地址回填工作 。l(WHILE,_,_,_WHILE,_,_,_)不产生目标代码,只用来标记不产生目标代码,只用来标记whilewhile语句的入口地址。语句的入口地址。l(DO , t ,_ ,_)产生的目标代码为:产生的目标代码为:LD R , tJUMP0 R , _l(ENDWHILE, _, _, _)产生的目标

5、代码:产生的目标代码:JMP A 回填前面回填前面DO四元式所产生的半条指令四元式所产生的半条指令 l(LABEL, _, _,L)不产生目标代码,只向不产生目标代码,只向L所所分配到的存储单元写入转向地址。分配到的存储单元写入转向地址。 l(GOTO, _, _, L)生成的目标代码为生成的目标代码为JMP *Ll( ENTRY, Q, , ) 不产生目标代码,只需将当前不产生目标代码,只需将当前指令地址指令地址A填入填入Q的相应语义信息中。的相应语义信息中。l(ENDPROC, ,)或或(ENDFUNC,) 1. 将本层活动记录中保存的机器状态恢复过来,对应一组读指令。2. 删除本层活动记

6、录,使动态外层的活动记录成为当前活动记录;3. 按1(top)中记载的返回地址返回。目标代码为: ST top, sp LD sp , 0(top) / 作废当前活动记录 JMP 1(top) /按返回地址返回 l值参情形值参情形 (ValACT , t , Offset , size )a. 若若t为间接变量,则生成的目标代码为:为间接变量,则生成的目标代码为:LD R , * tST offset(sp) , Rb. 若若t 为直接变量为直接变量 ,则生成的目标代码为:,则生成的目标代码为: LD R ,t ST offset(sp) , R c. 若若t 为数组,则生成的目标代码为:为数

7、组,则生成的目标代码为:moveB t , offset(sp) , size l 变参情形变参情形 (VarACT , t, Offset , size )a. 若若t为直接变量,则生成的目标代码为:为直接变量,则生成的目标代码为:LEA R , tST offset(sp) , Rb. 若若t为间接变量为间接变量,,则生成的目标代码为:,则生成的目标代码为:LD R , t ST offset(sp) , R l过程、函数调用语句过程、函数调用语句 (CALL , f , , t ) 1. 生成填写变量访问环境指令生成填写变量访问环境指令2. 把机器状态把机器状态(寄存器内容寄存器内容)保存到活动记录的机器保存到活动记录的机器状态区中状态区中,一般应生成一组存的指令一般应生成一组存的指令3. 要填写管理信息要填写管理信息.首先填写过程层数首先填写过程层数.从过程从过程f的的语义信息中取其层数语义信息中取其层数,填入到填入到2(top)中)中,生成指令生成指令为为LD R , semf.levelST 2(top), R4. 填写动态链指针填写动态链指针ST 0(top), sp5. 填写返回地址填写返回地址LD R, A+5 / AST 1(top), R / A+1 6. 生成过程活动记录生成过程活动记录ST sp, top / A +2ST top, top + se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论