当前位置: 首页 > news >正文

编译原理复习---目标代码生成

适用于电子科技大学编译原理期末考试复习。

1. 目标代码

是目标机器的汇编代码或机器码,在本课程中指的是类似于汇编代码的一种形式,由一条条的指令构成目标代码。

抽象机指令格式:OP  目的操作数,源操作数

我们要做的,就是将三地址码翻译为等价的一条条的指令。

考试时主要涉及三种指令:

  • MOV:将原操作数赋值给目的操作数。

  • ADD:将原操作数的值加给目的操作数。

  • SUB:目的操作数减去原操作数的值。

按照寻址方式,又有如下分类:

  • 寄存器型(R代表寄存器)

    OP   Ri , Rj		 /* (Ri) OP (Rj) => Ri */
  • 直接地址型

    OP   Ri , M			/* (Ri) OP (M) => Ri */
  • 变址型

    OP   Ri , C(Rj)		/* (Ri) OP ((Rj) + C) => Ri */
  • 间接型

    OP   Ri , *Rj	   /* (Ri) OP ((Rj)) => Ri */
    OP   Ri , *M	   /* (Ri) OP ((M)) => Ri */
    OP   Ri , *C(Rj)	 /* (Ri) OP (((Rj) + C)) => Ri */
    
  • 转移型

    J	X		       /* goto X */

2. 目标代码的生成方法

三地址码: x = y OP z
目标代码: MOV  Ri , yOP   Ri , zMOV  x , Ri
  • ADD和SUB的目的操作数一定是寄存器。

  • 条指令中都至少要有一个寄存器。

记住上面这两条就可以根据中间代码的含义,用三种指令来翻译了。

3. 循环中的寄存器分配

对于循环中频繁使用的变量,引用时需要从内存读入寄存器,修改后需要从寄存器保存回内存。

为这些频繁使用的寄存器分配固定的寄存器可以使访问内存的次数减少,进而提高效率。

但寄存器的数量是有限的,我们希望尽可能多的提高效率,就需要讨论寄存器分配的策略。

3.1 指令执行的代价

指一条指令访问内存的次数。

寄存器型    	op Ri, Rj  		  执行代价为1
直接地址型    op Ri, M		  执行代价为2
变址型      	op Ri, C(Rj)  	  执行代价为2
间接型      	op Ri, *Rj        执行代价为2op Ri, *M         执行代价为3op Ri, *C(Rj)     执行代价为3

 下面假设循环中的目标代码指令全部采用寄存器型。

3.2 被引用的变量

没有为变量 x 固定分配寄存器时,变量 x 每被引用一次,就需要访问内存一次。

  • USE(x, B):x在基本块B中的引用次数。

  • \sumUSE(x, B):在循环各基本块中的引用次数之和。

  • 寄存器固定分配给 x 后,可节省\sumUSE(x, B)

3.3 被赋值的变量

没有为变量 x 固定分配寄存器时,变量 x 每被赋值依次,就需要先从内存中读出来,运算之后保存回内存,共需访问两次内存。

  • LIVE(x, B):x在基本块B中的被赋值次数。

  • \sumLIVE(x, B):在循环各基本块中的被赋值次数之和。

  • 寄存器固定分配给 x 后,可节省2*\sumLIVE(x, B)

3.4 固定分配寄存器共可节省的效率\sum ( USE(x,B) + 2*LIVE(x,B) ) 

 

相关文章:

编译原理复习---目标代码生成

适用于电子科技大学编译原理期末考试复习。 1. 目标代码 是目标机器的汇编代码或机器码,在本课程中指的是类似于汇编代码的一种形式,由一条条的指令构成目标代码。 抽象机指令格式:OP 目的操作数,源操作数。 我们要做的&…...

Winnows基础(2)

Target 了解常见端口及服务,熟练cmd命令,编写简单的 .bat 病毒程序。 Trail 常见服务及端口 80 web 80-89 可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 mssql 1521 oracle 2082/2083 cpanel主机管理系统登陆(国外用的…...

酒蒙子骰子小程序系统

酒蒙子流量变现小程序小游戏 后端tp8 前端uniapp 会员变现 分销推广 流量主 …...

网络安全防范

实践内容 学习总结 PDR,$$P^2$$DR安全模型。 防火墙(Firewall): 网络访问控制机制,布置在网际间通信的唯一通道上。 不足:无法防护内部威胁,无法阻止非网络传播形式的病毒,安全策略…...

重拾设计模式--组合模式

文章目录 1 、组合模式(Composite Pattern)概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式(Composite Pattern)概述 定义:组合模式是一种结构型设计模式,它允许你将对象组合成…...

红米Note 9 Pro5G刷小米官方系统

前言 刷机有2种方式:线刷 和 卡刷。 线刷 线刷:需要用电脑刷机工具,例如:XiaoMiFlash.exe,通过电脑和数据线对设备进行刷机。 适用场景: 系统损坏无法开机。恢复官方出厂固件。刷机失败导致软砖、硬砖的…...

渗透测试-前端加密分析之RSA加密登录(密钥来源服务器)

本文是高级前端加解密与验签实战的第6篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过RSA加密来爆破登录。 分析 这里的代码跟上文的类似,但是加密的公钥是通过请求服务端获取的 http://127.0.0.1:8787/crypto/js/…...

踩准智能汽车+机器人两大风口,速腾聚创AI+机器人应用双线爆发

日前,RoboSense速腾聚创交出了一份亮眼的Q3财报。受到多重利好消息影响,其股价也应势连续大涨。截止12月9日发稿前,速腾聚创股价近一个月内累计涨幅已超88%。 财务数据方面,速腾聚创在今年前三季度实现总收入约11.3亿元&#xff0…...

YOLOv8全解析:高效、精准的目标检测新时代——创新架构与性能提升

目录 前言 一、模型介绍 二、网络结构 Backbone改进 特征增强网络(neck) 检测头(head) 其它部分 三、Loss计算 四、性能表现 五、YOLOv8使用详解 添加模型 其它部分 创建数据集 数据标注 模型训练 模型预测 六、YOLOv8总结 前言 YOLO(You Only Lo…...

【Python】使用Selenium 操作浏览器 自动化测试 记录

【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等-CSDN博客文章浏览阅读389次。【自动化】Python SeleniumUtil 工具。https://blog.csdn.net/G971005287W/article/details/144565691?spm1001.2014.3001.5501【学习记录】浏览器指纹相关学习记录&am…...

GDPU软件工程习题(挖空版)

答案: GDPU软件工程24期末复习-CSDN博客 1.8 练习题 一、填空题 软件工程是一门综合性的交叉学科,它涉及计算机学科、( )学科、( )学科和( )学科。软件工程研究的主要内容是 ( )、( )、( ) 三个方…...

【活动邀请·深圳】深圳COC社区 深圳 AWS UG 2024 re:Invent re:Cap

re:Invent 是全球云计算领域的顶级盛会,每年都会吸引来自世界各地的技术领袖、创新者和实践者汇聚一堂,分享最新的技术成果和创新实践,深圳 UG 作为亚马逊云科技技术社区的重要组成部分,将借助 re:Invent 的东风,举办此…...

Hutool工具包的常用工具类的使用介绍

前言 Hutool 是一个轻量级的 Java 工具类库,提供了非常丰富的工具方法,可以大大减少开发时的重复性工作。它的目标是让 Java 开发更简单、更高效。Hutool 提供了多种常用功能,以下是一些常用工具类的使用介绍: 1. StrUtil - 字符…...

C++简明教程(文章要求学过一点C语言)(2)

一、什么是代码文件(头文件和源文件) 想象你在写一篇很长的故事(这就好比是一个 C 程序),你可能会把故事分成不同的章节(类似于 C 中的文件)。 头文件(.h):它…...

防火墙技术与网络安全

网络已经成为了人类所构建的最丰富多彩的虚拟世界,网络的迅速发展,给我们的工作和学习生活带来了巨大的改变。我们通过网络获得信息,共享资源。如今,Internet遍布世界任何一个角落,并且欢迎任何一个人加入其中&#xf…...

html 中 表格和表单的关系与区别

在 HTML 中&#xff0c;表格 (<table>) 和表单 (<form>) 是两种常用于展示数据和收集用户输入的元素。它们具有不同的功能和结构。以下是关于这两者的详细介绍&#xff1a; 1. HTML 表格&#xff08;<table>&#xff09; 表格用于展示结构化的数据&#xf…...

基于Java的购物网站毕业论文

标题:基于 Java 的购物网站 内容:1.研究背景 1.1.国内研究进展 近年来&#xff0c;随着我国电子商务市场的不断发展&#xff0c;越来越多的企业开始涉足电子商务领域。其中&#xff0c;基于 Java 的购物网站成为了众多企业的首选。Java 语言具有跨平台、安全性高、稳定性好等优…...

Redis——缓存预热+缓存雪崩+缓存击穿+缓存穿透

文章目录 1、 缓存预热2、 缓存雪崩3、 缓存击穿4、 缓存穿透总结 1、 缓存预热 什么是预热&#xff1a; mysql加入新增100条记录&#xff0c;一般默认以mysql为准作为底单数据&#xff0c;如何同步给redis&#xff08;布隆过滤器&#xff09;这100条新数据。 为什么需要预热…...

wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势

开发CuteMySQL/CuteSqlite开源客户端的时候&#xff0c;需要使用Scintilla编辑器&#xff0c;来高亮显示SQL语句&#xff0c;作为C/C领域最成熟稳定又小巧的开源编辑器&#xff0c;Scintilla提供了强大的功能&#xff0c;wxWidgets对Scintilla进行包装后的是控件类&#xff1a;…...

【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?

要在 Windows 上编译 etcd 及 etcdctl 工具&#xff0c;并使用 bat 脚本启动 etcd 集群&#xff0c;首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤&#xff1a; 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…...

VisualCppRedist AIO:一站式解决Windows软件运行依赖问题的终极指南

VisualCppRedist AIO&#xff1a;一站式解决Windows软件运行依赖问题的终极指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况&…...

从分子动力学模拟到结合自由能分析:gmx_MMPBSA实战指南

从分子动力学模拟到结合自由能分析&#xff1a;gmx_MMPBSA实战指南 【免费下载链接】gmx_MMPBSA gmx_MMPBSA is a new tool based on AMBERs MMPBSA.py aiming to perform end-state free energy calculations with GROMACS files. 项目地址: https://gitcode.com/gh_mirrors…...

如何快速实现免费离线OCR:Umi-OCR完整使用指南

如何快速实现免费离线OCR&#xff1a;Umi-OCR完整使用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语言库。 …...

领导说我年终奖1.5万是全公司最高,让我别到处说,结果昨天发工资才知道:私下问了其他人,都比我多一倍,下个月我直接离职走人!

有个哥们说&#xff0c;领导拍着他肩膀跟他说&#xff1a;"你今年年终奖1.5万&#xff0c;全公司最高的&#xff0c;别到处说啊&#xff0c;影响不好。"哥们当时还挺感动&#xff0c;觉得自己被认可了&#xff0c;干了一年值了。结果昨天发工资&#xff0c;他私下一打…...

如何分析和改善网站的SEO效果

如何分析和改善网站的SEO效果 在当今互联网时代&#xff0c;一个优秀的网站不仅需要内容丰富&#xff0c;还需要有良好的搜索引擎优化&#xff08;SEO&#xff09;效果。SEO是提升网站在搜索引擎中排名的关键手段&#xff0c;本文将详细探讨如何分析和改善网站的SEO效果&#…...

sguard_limit:如何彻底解决腾讯游戏反作弊系统导致的电脑卡顿问题

sguard_limit&#xff1a;如何彻底解决腾讯游戏反作弊系统导致的电脑卡顿问题 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源&#xff0c;支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 你是否在玩腾讯游戏时遇到过…...

数字人形象哪里找?lite-avatar形象库150+角色免费使用体验

数字人形象哪里找&#xff1f;lite-avatar形象库150角色免费使用体验 1. 数字人形象获取的痛点与解决方案 在开发数字人应用时&#xff0c;寻找合适的数字人形象往往是第一个拦路虎。传统方式需要自己收集数据、训练模型&#xff0c;这个过程既耗时又耗力&#xff0c;对很多开…...

claude-code 深度解析:它为什么走红,以及值不值得开发者投入经理

# 从工具到方法论&#xff1a;claude-code 为什么值得开发者认真评估> 今日新增 ⭐ 10749 Stars | 总计 ⭐ 102012 Stars | 仓库&#xff1a;anthropics/claude-code## 一句话定位从命名和描述看&#xff0c;这不是单点功能脚本&#xff0c;而更像围绕 agent 工作流组织的开…...

TSMaster安全算法实战:如何用DLL快速实现SeedKey解锁(附常见错误排查)

TSMaster安全算法实战&#xff1a;如何用DLL快速实现Seed&Key解锁&#xff08;附常见错误排查&#xff09; 在汽车电子诊断领域&#xff0c;安全访问机制&#xff08;Seed&Key&#xff09;如同车辆的电子钥匙&#xff0c;是保护ECU数据安全的重要屏障。作为深耕诊断协议…...

OpenClaw+Qwen3.5-9B:技术文档翻译与本地化自动化

OpenClawQwen3.5-9B&#xff1a;技术文档翻译与本地化自动化 1. 为什么选择这个技术组合&#xff1f; 去年参与一个开源项目时&#xff0c;我遇到了文档本地化的难题。项目文档有300多页Markdown文件&#xff0c;需要翻译成5种语言。传统翻译工具要么破坏格式&#xff0c;要么…...