学习目标代生成.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 目标代码生成 7.1 汇编语言虚拟计算机模型 7.2 从四元式到汇编语言的翻译 7.3 一个简单目标代码生成器 7.4 静态地址分配 7.1 汇编语言虚拟计算机模型 7.2 从四元式到汇编语言的翻译 * ㈠任务 将中间代码变换成目标代码,实现源程序的最后翻译。由于涉及到目标机器的系统结构,此阶段的工作最复杂。 ㈡目标代码的形式 ①已定位的机器语言代码 编译后可立即执行。 ②待装配的机器语言代码模块 目前大多数编译系统所产生的目标代码均为可重定位的机器指令。在执行前,将它和系统函数(源程序中使用)的机器指令连接成一个程序,对未确定的地址进行定位(用户程序为0地址空间),形成可执行的机器语言程序。 在执行时,操作系统可将目标代码装入内存的任意位置。 ③汇编语言代码 需经汇编程序翻译,将其转换成可执行的机器语言代码。 由于硬件厂商提供机器的汇编程序,所以编译程序的目标代码通常为汇编语言形式。 ㈢目标代码生成要求 ①目标代码数与中间代码数的比值尽可能小(即目标代码数尽可能少)。 ②充分利用寄存器,减少访问内存的次数。 ③删除不必要的临时变量。 ㈠内存 ①共有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用作系统堆栈栈顶指针。 ㈢指令系统(简单指令系统) 指令格式: (定长、2字节) ①操作码 Read 从键盘读一个字到第一地址。 Write 从第一地址写一个字到屏幕。 Load 从第二地址将字装入第一地址。 Store 将第一地址中的字存放到第二地址。 Call 控制转移到第二地址指定的内存单元,断点保留在系统堆栈中。 Ret 由系统堆栈获得断点,返回。 Add 将第一地址中的字加上第二地址中的字,结果保留第一地址中。 Sub Mul Div Cmp 将第一地址中的字和第二地址中的字比较,由系统置位FlagReg。 FlagReg=-1,表示第一地址中的字小于第二地址中的字。 FlagReg=1,表示第一地址中的字大于第二地址中的字。 FlagReg=0,表示第一地址中的字等于第二地址中的字。 低8位用于第二地址的补充定义 JMP 无条件转移到第二地址指定的内存单元。 JMPNEG 若FlagReg中的值<0,转移到第二地址指定的内存单元。 JMPPOS 若FlagReg中的值>0,转移到第二地址指定的内存单元。 JMPZERO 若FlagReg中的值=0,转移到第二地址指定的内存单元。 HALT 终止程序执行。 ②第一地址只能是寄存器(R0-R3) ③第二地址有四种寻址方式 直接地址寻址(M) Load Ri , MXX Ri←(XX) XX范围00-FF(第0页),用16进制表示。 寄存器寻址(R) Load Ri , Rj Ri←(Rj) 寄存器(间址)寻址(@R) Load Ri , @Rj Ri←((Rj)) 直接数寻址(D) Load Ri , XX Ri←XX XX范围00-FF,用16进制表示。 变址寻址(C [R3]) Load Ri , C[R3] Ri←(C*256+(R3)) C为常数(范围00-FF),用16进制表示。 ④指令分类 零地址指令 Ret、Halt A型一地址指令(无第二地址) Write、Read 例:Read R0 //从键盘输入一个数,将其存放在R0中。 B型一地址指令(无第一地址) Call、Jmp、JmpNeg、JmpZero、JmpPos 例:Jmp 2[R3] //无条件转移至地址2*256+(R3)单元 二地址指令 Load、Store、Add、Sub、Mul、Div、Cmp 例:Add R3,1 //R3的内容加1 程序举例 用汇编程序编写程序,求5的阶乘。 Load R0,1 //R0的范围1..5 Load R1,1 //初值为1,存放5!。 Add R0,1 Mul R1,R0 Cmp R0,5 JmpNeg M2 Write R1 Halt ㈠符号表、常数表和临时变量表的内存位置 四元式中含有变量在

文档评论(0)

jiqingyong1 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档