计算机问题求解一论题1-7 不同的程序设计方法 2017年11月16日
计算机问题求解 – 论题1-7 - 不同的程序设计方法 2017年11月16日
问题1 0 我们常说“高级程序设计”,有没有与之对应的“低级”程序 设计? ·如果有,两者是什么区别? o抽象VS具体 口巨大的“细节”鸿沟
问题1 ◼ 我们常说“高级程序设计”,有没有与之对应的“低级”程序 设计? ◼ 如果有,两者是什么区别? ❑ 抽象 VS 具体 ❑ 巨大的“细节”鸿沟
Instruction pointer IP 10 *COPY AX,X 13 11*A0 x,Y· letch Instructons 12 *COPY GN1,AX· Instruction register 13 *COPY AX,CN1* *COPY 1,AX· 14@0pY2.AX· D&E Candition flag CF 20 作 (x1 21 (Y1 Data Computation register AX 22 0 (21 23 11 11 (CN1) 00 cule Central processing unit Memory 每个汇编语言的语句(大致)对应于一条机器能够 “理解”并“执行”的机器语言的“指令
每个汇编语言的语句(大致)对应于一条机器能够 “理解”并“执行”的机器语言的“指令
问题2: 程序设计语言的 “implementation (实现)”是什么意思?
问题2 任意给出一个用该语言书写的合法程序,将 其转换成可以在某台机器上可以运行的机器 语言程序
问题2 任意给出一个用该语言书写的合法程序,将 其转换成可以在某台机器上可以运行的机器 语言程序
问题3: 我们通常用什么手段 来“实现”一个程序 设计语言?
Algorithmic idea algorithm for y from I to N do (body-of-loop) Programmer programming end (human) program in high-level language MVCO.Y (move constantto location Y) LOOP:CMP N.Y (compare values at locations N and Y) Compiler compilation (software) JEQ REST (if equajumto statement labelledREST ADC 1.Y (addconstova 编译 program in A (aad-bdy-of-oop) Compilation assembly language JMP LOOP (jump back to statement labeled "LOOP") REST: (restofproram) machine code Computer execution
编译 Compilation
什么是编译器 ·一个编译器就是一个程序 Input::以某一种语言(源语言)编写的程序, Output:与input等价的、用另一种语言(目标语言)编写的程序。 源程序 编译器 目标程序 ·狭义:程序设计语言→机器代码 ▣广义:程序变换C++→C汇编 Pascal→C
什么是编译器 ◼ 一个编译器就是一个程序 ◼ Input:以某一种语言(源语言)编写的程序, ◼ Output:与input等价的、用另一种语言(目标语言)编写的程序。 ◼ 狭义: 程序设计语言 → 机器代码 ◼ 广义:程序变换 C++ → C →汇编 Pascal → C 源程序 编译器 目标程序
示例 ■程序的运行过程 口源程序 口汇编代码 口机器代码 L8B0_1: .loc 1175 cmpl s10,-20(erbp) jge LBB0_3 ##B8#2 .10d 1189 Ltmp6: while (i<10){ movl -24(%rbp),%eax a=a+1: 编译器 addl -20(srbp),%eax i++; movl %eax,-24(%rbp) .loc 1199 movl -20(%rbp),teax addl 51,,%ea× movl %eax,-20(%rbp】 .10c 1205 jmp LBB0_1
示例 ◼ 程序的运行过程 ❑ 源程序 ❑ 汇编代码 ❑ 机器代码 编译器
position initial rate 60 编译器工作流程 词法分析器 (id.1)(e)(id.2(+)id.3)()60 语法分析器 (id,1 + Void Compiler( (id,2) (id.3) 60 t 语义分析器 position (d,1 2 initial (id,2) 3 rate (id,3 inttofloat t 训 中间代玛生成器 符号表 t1 inttofloat(60) t2 id3 t1 t3 id2 t2 1d1=t3 代马优化器 t1=1d3·60.0 1识 代码生成器 LDF R2,id3 HULF2.R2,60.0 LDF R1,id2 ADDF RI.R1.R2 STF id1,R1
编译器工作流程 Void Compiler(){ LexicalAnalysis(); SyntaxAnalysis(); SemanticAnalysis(); InterCodeGen(); CodeOptimization(); AssemblyCodeGen(); }