计算导论与程序设计课件-chap2 程序设计语言概述(2016)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
求d= b 2-4ac的汇编语言程序
操作码
用符号 或助记 符来表 示指令 中的操 作码和 和操作 数地址
1. 2. 3. 4. 5. 6. A B C D E
程序 注释(运算结果) MUL B B ; b 2送入B MUL A E ; 4a送入A MUL A C ;4ac送入A 2 SUB B A ; b -4ac送入B MOV D B ; b 2-4ac从B传送到D HLT ;停机 a 1~6为指令,MUL为乘法指令, b SUB为减法指令,MOV为传送指 c 令、HLT为停机指令; d A、B、C、D、E分别表示存储数a、 4 b、c、d以及常数4的寄存器。
高级语言与具体机器无关,在一种机器上运 行的高级语言程序有可能可以不经改动地移植 到另一种机器上运行,大大提高了程序的通用 性。
14
2.1
4、第四代语言
程序设计语言的演化
第四代语言(Fourth-Generation Language, 以下简称 4GL)是一种面向问题的程序设计语言,实现了在更高 一级层次上的抽象,可以极大地提高软件生产率,缩 短软件开发周期。4GL提供了功能强大的非过程化问 题定义手段,用户只需告知系统做什么,而无需说明 怎么做,程序就能够自动生成算法,自动进行处理。 典型的4GL语言有ADA,MODULA-2, SMALLTALK-80等。
18
提纲
2.1 程序设计语言的演化
2.2
2.3
构建和运行程序
程序设计语言分类
19
2.2 构建和运行程序
编译程序和解释程序
高级语言程序翻译成机器语言程序需要借助于翻译程 序。 翻译程序有编译程序和解释程序两种。 编译程序:将编写的源程序中全部语句一次性翻译成 机器语言程序后,再运行机器语言程序。编译和运行是 两个独立分开的阶段。若想多次运行同一个程序,只要 源程序不变,则不需要重新编译;源程序若有修改,则 需要重新编译。
第二章 程序设计语言概述
1
提纲
2.1 程序设计语言的演化
2.2
2.3
构建和运行程序
程序设计语言分类
2
2.1
程序设计语言的演化
• 程序:指令(操作)序列。 • 程序设计:设计求解问题的方法和步骤—算法 • 语言:是用于表达和描述的工具。语言的基础 是一组字符(单词)和一组规则(语法)。根 据规则由单词构成的字符串的总体就是语言。 • 程序设计语言:用于书写计算机程序的语言, 用于表达和描述要加工的数据以及求解问题的 步骤和过程。是根据预先定义的规则(语法)、 由一个有限字母表上的字符构成的字符串的总 体。
11111000
11101111 11110100 00000011 11101111 01111110 11111000 00000110 11101111
6
2.1
机器语言的缺陷
程序设计语言的演化-机器语言
非常晦涩难读;
书写工作量大,且容易出错,不易修改;
由于和具体的机器相关,要求开发人员对计算机 的硬件和指令系统要有很正确深入的理解,并且 有熟练的编程技巧,因此只有少数专家能达到此 要求; 移植性不好(在一台机器上编写的机器语言程序在 不同型号的另一台机器上可能不能运行);
0110100100101001
101101011
当程序由多个源文件组成时
23
stdlib.h
源文件 .c #include <stdio.h> #include “genlib.h” #define N 10 main()
genlib.h
…….. 2.2 构建和运行程序
……..
……..
24
2.2 构建和运行程序
源文件 .c
#include <stdio.h>
#include “genlib.h” #define N 10 main() {
文件stdio.h
和genlib.h的内容
预 处 理
main() { int i;
int i;
for(i=1;i<=N;i++) printf(“%d\n”,i); } }
20
2.2 构建和运行程序
解释程序:将源程序中的一条语句翻译成机器语 言后立即执行它(并且不再保存刚执行完的机器 语言程序),然后再翻译执行下一条语句。如此 重复,直到程序结束。如果一条语句要重复执行, 则每一次的重复执行都要重新翻译该语句,故效 率很低。 著名的解释程序有:BASIC语言解释程序、LISP 语言解释程序、UNIX命令语言(shell)解释程序、 数据库查询语言SQL解释程序等。 当前大部分语言如C、 C++、FORTRAN、 ALGOL等是用编译程序进行翻译的。 而BASIC、 PASCAL、LISP等既有编译程序、又有解释程序。
15
2.1
程序设计语言的演化
• 按照4GL的功能可以将其划分为查询语言和报表生成器、图形语 言、应用生成器、形式规格说明语言等几类。 • 查询语言:是数据库管理系统的主要工具,它提供用户对数据库进 行查询的功能。如SQL(Structured Quevy Language,结构化查询 语言) • 报表生成器:是为用户提供的自动产生报表的重要工具,它提供非 过程化的描述手段让用户很方便地根据数据库中的信息来生成报 表,如ADF 。 • 图形语言:用图形的方式来进行软件开发 。 • 应用生成器:是重要的一类综合的4GL工具,它用来生成完整的 应用系统。应用生成器让用户不必使用多个软件,而只用这样一 个综合工具来实现多种功能。 • 形式规格说明语言:形式化地对软件应满足的功能、性能及其它重 要方面的陈述,可避免自然语言的二义性,也是软件自动化的基 础 。
result = number1 * number2; //两数相乘 printf(“the result is : %d\n ”, result);//输出结果
return 0;
}
13
2.1
高级语言的优势
程序设计语言的演化-高级语言
高级语言程序易学、易懂、也易查错。
使程序员可以完全不用与计算机的硬件打交 道、不必了解机器的指令系统。
9
操作数地址
2.1
程序设计语言的演化-符号语言
• 汇编语言编写的程序需要翻译成机器语言(二 进制代码)才能运行,这个翻译过程由汇编程 序来实现。
10
2.1
程序设计语言的演化-符号语言
汇编语言的局限 汇编语言的语法、语义结构仍然和机器语言基 本一样,而与人的传统解题方法相差甚远。 汇编语言的大部分指令是和机器指令一一对应 的,因此代码量大。
7
2.1
2、符号语言
程序设计语言的演化-符号语言
20世纪50年代早期,数学家Grace Hopper发明 了符号语言,即用符号或助记符来表示不同的机 器语言指令(包括操作码和和操作数地址)。
程序员可用ADD、SUB、MUL、DIV等符号来 分别表示加法、减法、乘法、除法的操作码。
符号语言又称汇编语言。
16
2.1
5、自然语言
程序设计语言的演化
理想情况下,计算机能够理解自然语言(如英语、 汉语等)并立即执行请求。 大量关于自然语言的工作正在实验室中进行。 但迄今为止,自然语言的使用仍然是相当有限的 。
17
总结
程序设计语言:用于书写计算机程序的语言,用 于表达和描述要加工的数据以及求解问题的步 骤和过程。是根据预先定义的规则(语法)、 由一个有限字母表上的字符构成的字符串的总 体。
22
2.2 构建和运行程序
源文件1 .c 编译器 目标文件1 .obj
可执行文件.exe
0100100101011001 0001000010100011
源文件2 .c 编译器
目标文件2 .obj 链接器 库
1001011010110001
1010110110100111 1001011010110001 0110100100101001 0110110101101011
for(i=1;i<=10;i++)
printf(“%d\n”,i);
25
2.2 构建和运行程序
源文件 .c
#include <stdio.h> #include “genlib.h” 文件stdio.h 和genlib.h的内容
目标文件 .obj
目标文件 .obj 0100100101011001 0001000010100011 编译器
{
int i; for(i=1;i<=N;i++)
1010110110100111
printf(“%d\n”,i);
}
预处理程序+翻译程 序
预处理程序:通常是把其他文件包含到要编译的文件中、以及 用程序文本替换专门的符号。C语言中预处理指令都以#开头。 翻译程序:将预处理后的程序翻译成二进制代码。
1001011010110001
0110100100101001 0110110101101011
3. 链接程序 链接器
1010110110100111 1001011010110001 0110100100101001 0110110101101011
1. 编辑程序 C标准库:有丰富的函数集,可供程序员直接使用。
和具体的机器相关,人们终究还是要对计算机 的硬件和指令系统有很正确深入的理解,而且 还是要记住机器语言的符号(助记符)。移植性 不好。
11
2.1
3、高级语言
程序设计语言的演化-高级语言
由于汇编语言的局限性,后来出现了高级语言。
高级语言与自然语言(尤其是英语)很相似, 因此高级语言程序易学、易懂、也易查错。
可执行文件.exe
0100100101011001 0001000010100011
2. 编译程序
#define N 10 main() { int i; for(i=1;i<=N;i++) printf(“%d\n”,i); }
0001000010100011 1010110110100111
编译器 库
程序设计语言的演化-机器语言
00000100 00001100 11101111 11101111 101011101 01100010 00000010 10101101 10100010 00000010 11110100 101011110 10100010 00000010 00000100 00000100 11000010 00010110 10011110 11011111 11011111 11111011 11011111 11011111 11111011 10101101 11000101 11111011 11111011 00000100 00000100 0000000000000000 0000000000000010 0000000000000101 0000000000001011 0000000000010010 0000000000010101 0000000000010111 0000000000011110 0000000000100001 0000000000100100 0000000000101011 0000000000110001 0000000000110100 0000000000111101 0000000000111111
12
#include <stdio.h> main() { int number1; int number2; int result;
两数相乘的C语言程序
printf("please input the two numbers:\n");
scanf(“%d %d”,&number1,&number2); //读取乘数和被乘数
21
2.2构建和运行程序
源文件1 .c
#include <stdio.h> #include “genlib.h”
CPU
00011101 11010010 11011000 10100110 ...
4.运行程序
加载程序
目标文件1 .obj
0100100101011001
00011100 11100111 01011010
3
2.1
程序设计语言的演化
机器语言
符号语言
高级语言
第四代语言
4
2.1
1、机器语言
程序设计语言的演化
计算机发展早期使用的语言;
由“0”和“1”的二进制码组成 ,是计算 机唯一可以直接识别的语言;
与具体机器有关,不同的机器能识别的机 器语言也不同;
5
2.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 00000000 01011110