当前课程知识点:编译技术 >  第七章 代码生成 >  7.2 目标机器 >  7.2 目标机器

返回《编译技术》慕课在线视频课程列表

7.2 目标机器在线视频

下一节:7.3 基本块和流图

返回《编译技术》慕课在线视频列表

7.2 目标机器课程教案、知识点、字幕

各位同学大家好

这节课我们继续来学习代码生成

我们来讨论一下

目标机器的指令系统

首先我们选择

可作为几种微机代表的寄存器机器

4个字节组成1个字

我们有n个寄存器

我们使用的指令

是op 源, 目的 这样的形式

比如说

MOV 源传到目的

ADD表示源加到目的

SUB表示目的减去源

我们再来讨论一下地址模式

以及它们汇编语言形式

和它们的附加代价

它们的基本模式

有如下的这几种

首先是绝对地址

我们把它写为M

它表示的地址就是M

访问一个绝对地址需要用的代价是1

第二个是寄存器

我们把它写为R

其中的地址就是R

访问寄存器的速度非常快

所以我们认为它的代价

和一般的绝对地址代价相比

是0

第三行是变址

我们把它写为c(R)

表示的是

从R中取出对应的内容再偏移c的地址

需要的代价是1

下一行是间接寄存器

*R'表示的是取出R当中的内容

花费的代价仍然是0

再下一行是间接变址

*c(R)

表示的是从R中取出内容

偏移c位之后,

再取出对应地址的内容

需要的代价是1

最后对于直接量来说

我们的形式写为#c

表示的地址是c,需要的代价是1

第一行指令

MOV R0, M

我们将R0移动到M中

第二行指令

MOV 4(R0), M

我们将4(R0)中的内容移动到M中

4(R0)的值

表示的是contents(4+contents(R0))

contents(R0)表示R0其中的内容

也就是

我们将R0中的内容取出来

加上偏移的4位之后

再取出对应的内容

第三个指令

MOV *4(R0), M

我们将*4(R0)当中的值移动到M中

*4(R0)它的值表示的是

从R0中取出内容偏移4位之后

作为一个地址

再取出对应的内容

这个内容仍然作为一个地址

再取出对应的内容

最后一条指令

MOV #1, R0

我们取出直接变量1存入到R0中

下面我们来讨论一下指令的代价

指令的代价

我们可以将它计算为

1加上指令的源和

目的地址模式的附加代价

比如说对于第一行指令

MOV R0, R1 它的代价就是1

因为访问R0和R1

这两个寄存器消耗的代价是0

所以整条语句的代价

就是MOV这个指令所需要的代价,也就是1

第二个指令

MOV R5, M 需要的代价是2

第三个语句

ADD #1, R3 需要的代价是2

最后一个指令

SUB 4(R0), *12(R1)

花费的代价是3

接下来我们来讨论一下

多条指令的代价

假设我们有一个计算的式子

a=b+c

假设a、b、c都存放在静态分配的内存单元

那么我们可以将a=b+c生成对应的指令

MOV b, R0

这条指令它的代价是2

ADD c, R0 代价是2

MOV R0, a 代价是2

所以这三条语句的代价是6

当然我们也可以将它写为

MOV b, a

这条指令的代价是3

ADD c, a

这条指定的代价也是3

所以这两行指令合在一起

代价仍然为6

接下来假设R0、R1、R2

包含abc的地址

那么我们就可以将它写为

MOV *R1, *R0

这条语句的代价是1

下边 ADD *R2, *R0

这条指令的代价是1

所以这两个指令合在一起

整个的代价是2

当然如果R1和R2分别含有 b和c的值

并且b的值

在这次赋值之后不再使用了

那么

我们也可以写成如下的形式

ADD R2, R1

MOV R1, a

这两条语句的代价是3

这一小节就到这

谢谢大家

编译技术课程列表:

第一章 绪论

-1.1 编译技术绪论

--1.1 编译技术绪论

--编译原理介绍--作业

第二章 词法分析

-2.1  词法记号 串和语言

--2.1 词法记号 串和语言

--2.1  词法记号 串和语言--作业

-2.2  正规式 状态转换图

--2.2 正规式 状态转换图

--2.2  正规式 状态转换图--作业

-2.3  有限自动机

--2.3 有限自动机

--2.3  有限自动机--作业

-2.4  DFA构建 子集构造法 DAF化简

--2.4 DFA构建

-2.5 Lex

--2.5 词法分析工具Lex

第三章 语法分析

-3.1 上下文无关文法

--3.1.1 语法分析概述

--3.1.2 上下文无关文法定义

--3.1.3 推导

--3.1.4 二义性

-3.2 自上而分析中的文法

--3.2.1 消除左递归

--3.2.2 提取左因子

--3.2 上下文无关文法--作业

--3.2.3 语言和文法

--3.2.3 语言和文法--作业

-3.3 自上而下分析

--3.3.1 first follow

--3.3.2 LL(1)文法

--3.3.3 递归下降分析

--3.3.4 非递归下降分析的预测分析器

-3.4 自下而上分析

--3.4.1 归约句柄

--3.4.2 移进归约分析过程

--3.4 自下而上分析--作业

-3.5 LR分析器

--3.5.1 LR分析器

--3.5.2 活前缀

--3.5.3 SLR分析方法

--3.5.4 规范的LR分析方法

--3.5.5 LALR分析方法

--3.5.6 LR分析方法特点

--3.5.7 非二义且非LR的上下文无关文法

第四章 语法指导的翻译

-4.1 语法制导的定义

--4.1.1 属性文法

--4.1.2 属性依赖图和计算次序

--4.1 语法制导的定义--作业

-4.2 S属性的自下而上计算

--4.2.1 S属性的自下而上计算

--4.2.2 栈代码

-4.3 L属性定义

--4.3.1 L属性定义

--4.3.2 翻译方案

--4.3.3 预测翻译器的设计

--4.3 L属性定义--作业

-4.4 L属性的自下而上计算

--4.4.1 L属性的自下而上计算

--4.4.2 模拟继承属性的计算

--4.4 L属性的自下而上计算--作业

第五章 运行时存储空间的组织与管理

-5.1  概述

--5.1 概述

--概述-作业

-5.2  全局栈式存储分配

--5.2 全局栈式存储

-5.3  调用序列

--5.3 调用序列

-5.4 非局部名字的访问

--5.4 非局部名字

--5.4 非局部名字的访问--作业

第六章 中间代码生成

-6.1 中间代码生成

--6.1 中间代码生成概述

-6.2 作用域信息的保存

--6.2 声明语句-作用域信息的保存

第七章 代码生成

-7.1 代码生成器设计中的问题

--7.1 代码生成器的设计中的问题

-7.2 目标机器

--7.2 目标机器

--7.2  目标机器--作业

-7.3 基本块和流图

--7.3 基本块和流图

-7.4 一个简单的代码生成器

--7.4 一个简单的代码生成器

第八章 基于Python的编译器框架实现

-8.1 基于Python的编译器框架演示视频和代码

--8.1 基于Python的编译器框架演示

-8.2 代码介绍

--8.2.1 Scanner

--8.2.2 Parser -1LRItem

--8.2.3 Parser-2ActionGoto

--8.2.4 SA

-8.3 SimpleJava

--8.3 SimpleJava

7.2 目标机器笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。