编译原理实用教程章目标代码生成.pdfVIP

编译原理实用教程章目标代码生成.pdf

  1. 1、本文档共17页,可阅读全部内容。
  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文档。上传文档
查看更多

㈠任务

将中间代码变换成目标代码,实现源程序的最后翻译。由于涉及到目标机器

的系统结构,此阶段的工作最复杂。

㈡目标代码的形式

①已定位的机器语言代码

编译后可立即执行。

②待装配的机器语言代码模块

目前大多数编译系统所产生的目标代码均为可重定位的机器指令。在执行前,

将它和系统函数(源程序中使用)的机器指令连接成一个程序,对未确定的地

址进行定位(假设起始地址为0),形成可执行的机器语言代码程序。

在执行时,操作系统可将目标代码装入内存的任意位置。

③汇编语言代码

需经汇编程序翻译,将其转换成可执行的机器语言代码。

由于硬件厂商提供机器的汇编程序,所以编译程序的目标代码通常为汇编语

言。

㈢目标代码生成要求

①目标代码数与中间代码数的比值尽可能小(即目标代码尽可能少)。

②充分利用寄存器,减少内存的次数。

③删除不必要的临时变量。2

7.1汇编语言虚拟计算机模型

㈠内存

①共有64k个字,1个字有16个二进制位(2Byte),内存地址标

识为0-65535。

②划分为256页,页号0-255,每页的长度为256个字,页内位移

为0-255。

③地址计算:页号*256+页内位移。

④255页用作系统堆栈区。

㈡寄存器

①通用寄存器(2字节)

共有4个,分别标记为R0、R1、R2、R3,用于存放操作数和

计算结果,R3还可用于变址寻址。

②标志寄存器FlagReg

保存CMP指令比较结果。

③堆栈寄存器TopReg(2字节)

TopReg用作系统栈顶指针。3

㈢指令系统

指令格式:

①操作码

Read从键盘读一个字到第一地址。

Write从第一地址写一个字到屏幕。

Load从第二地址将字装入第一地址。

Store将第一地址中的字存放到第二地址。

Call控制转移到第二地址指定的内存单元,断点保留在系统堆栈中。

Ret由系统堆栈获得断点,返回。

Add将第一地址中的字加上第二地址中的字,结果保留第一地址中。

Sub

Mul

Div

Cmp将第一地址中的字和第二地址中的字比较,由系统置位FlagReg。

➢FlagReg=-1,表示第一地址中的字小于第二地址中的字。

➢FlagReg=1,表示第一地址中的字大于第二地址中的字。

4

➢FlagReg=0,表示第一地址中的字等于第二地址中的字。

JMP无条件转移到第二地址指定的内存单元。

JMPNEG若FlagReg中的值<0,转移到第二地址指定的内存单元。

JMPPOS若FlagReg中的值>0,转移到第二地址指定的内存单元。

JMPZERO若FlagReg中的值=0,转移到第二地址指定的内存单元。

HALT终止程序执行。

②第一地址为寄存器(R0-R3)

③寻址方式和第二地址

➢直接地址寻址(M)

LoadRi,MXX(XX)→Ri

XX范围0-255(第0页),用16进制表示。

➢寄存器寻址(R)

LoadRi,Rj(Rj)→Ri

➢间址寄存器寻址(@R)

LoadRi,@Rj((Rj))→Ri

➢直接数(D)

LoadRi,XXXX→Ri

XX范围0-255,用16进制表示。

➢变址寻址(C[R3])

LoadRi,C[R3](C*256+(R3))→Ri

文档评论(0)

159****9610 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6044052142000020

1亿VIP精品文档

相关文档