当前课程知识点:Compilers Techniques >  7 Code Generation >  7.2 Target Machine >  7.2 Target Machine

返回《Compilers Techniques》慕课在线视频课程列表

7.2 Target Machine在线视频

下一节:7.3 Basic Blocks and Flow Graphs

返回《Compilers Techniques》慕课在线视频列表

7.2 Target Machine课程教案、知识点、字幕

各位同学大家好

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

我们来讨论一下

目标机器的指令系统

首先我们选择

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

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

这一小节就到这

谢谢大家

Compilers Techniques课程列表:

1 Overview of Compilers Techniques

-1.1 Overview of Compilers Techniques

--Chapter 1 Overview of Compilers Techniques

--Overview of Compilers Techniques

2 Lexical Analysis

-2.1  Lexical Tokens, Strings and Language

--2.1  Lexical Tokens, Strings and Language

--2.1 Lexical Tokens, Strings and Language

-2.2  Regular form

--2.2 Regular form

--2.2 Regular form

-2.3  Finite automata

--2.3 Finite automata

--2.3 Finite automata

-2.4  DFA construction, Subset construction, Simpleset DFA

--2.4  DFA construction, Subset construction, Simpleset DFA

-2.5 Lex

--2.5 Lex

3 Syntax Analysis

-3.1 Context-free Grammars

--3.1.1 The Role of the Parser

--3.1.2 The Formal Definition of a Context-free Grammar

--3.1.3 Derivations

--3.1.4 Ambiguity

-3.2 Writing a Grammar

--3.2.1 Elimination of Left Recursion

--3.2.2 Left Factoring

--3.2 Top-Down Parsing

-3.3 Languages and Grammars

--3.3 Languages and Grammars

--3.3 Language and Grammars

-3.4 Top-Down Parsing

--3.4.1 First and Follow

--3.4.2 LL(1) Grammers

--3.4.3 Recursive Descent Analysis

--3.4.4 Nonrecursive Descent Analysis

-3.5 Bottom-up Parsing

--3.5.1 Reductions and Handle

--3.5.2 Shift- Reduce Parsing

--Bottom-up Parsing

-3.6 LR Parsing

--3.6.1 LR Parsing

--3.6.2 Viable Prefixes

--3.6.3 Simple LR

--3.6.4 LR(1)

--3.6.5 LALR

--3.6.6 Characteristics of LR Parsing

--3.6.7 Non Ambiguous and Not LR Context-Free Grammars

4 Syntax-Directed Translation

-4.1 Syntax-Directed Definitions

--4.1.1 Attribute Grammars

--4.1.2 Attribute Dependency Graphs and Ordering the Evaluation of Attributes

--Syntax-Directed Definitions

-4.2 Bottom-Up Calculation of S Attribute

--4.2.1 Bottom-Up Calculation of S-Attributed

--4.2.2 Stack Code

-4.3 L-Attributed Definitions

--4.3.1 L-Attributed Definitions

--4.3.2 Translation Schemes

--4.3.3 Design of Predictive Translator

--L-Attributed Definitions

-4.4 Bottom-Up Parsing of L-Attributed Translation

--4.4.1 Bottom-Up Parsing of L-Attributed Translation

--4.4.2 Simulate the Parsing of Inherited Properties

--Bottom-Up Parsing of L-Attributed Translation

5 Organization and Management of Run-Time Storage Space

-5.1 Overview

--5.1 Overview

--Overview

-5.2 Global Stack Storage

--5.2 Global Stack Storage

-5.3 Calling Sequences

--5.3 Calling Sequences

-5.4 Non Local Names

--5.4 Non Local Names and dynamic scope

--Non Local Name

6 Intermediate Code Generation

-6.1 Overview of Intermediate Code Generation

--6.1 Overview of Intermediate Code Generation

-6.2 Declaration Statements

--6.2 Declaration Statements

7 Code Generation

-7.1 Issues in the Design of Code Generator

--7.1 Issues in the Design of Code Generator

-7.2 Target Machine

--7.2 Target Machine

--Target Machine

-7.3 Basic Blocks and Flow Graphs

--7.3 Basic Blocks and Flow Graphs

-7.4 A Simple Code Generator

--7.4 A Simple Code Generator

8 Design and Implementation of a Simple Compiler

-8.1 Demonstration of Compiler Framework based on Python

--8.1 Demonstration of Compiler Framework based on Python

-8.2 Basic

--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 Target Machine笔记与讨论

也许你还感兴趣的课程:

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