当前位置:首页 > 揭开编程的核心奥秘 - 图文
编程高手的素养 何勤
加工结果: 求100个数中的最大数的机器语言程序;(以二进制机器指令形式表现的程序)
第二阶段: 应用程序运行阶段
运行的二进制的机器语言程序: 求100个数中的最大数的机器语言程序;
原始数据: 待求最大数的100个数(这100个数在计算机内部是以二进制形式出现的); 加工结果: 100个数中的最大数;
注意:第一阶段的加工结果,在第二阶段摇身一变,成为运行的程序。这也正是冯.诺伊曼结构的计算机(注:还有其它类型结构的计算机,但目前只是占少数)将程序和数据都放在统一编址的內存中的真正目的——可以把数据转变成程序。 ...........
小知识 内存中存放的ASCII码形式的高级编程语言的程序片断: (假定C语言的源程序作为文字型数据存放在内存地址为0处开始 #include 以ASCII文本的形式存放在内存中,等待编译程序将其加工为机器指令形式的指令) 每个基本存储单 存储单元地址 元中存储的内容 (每一行右边的8个小格) 00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 0 0 1 0 0 0 1 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 1 0 0 1 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 0 0 0 1 1 0 1 1 0 0 1 0 1 ……. 表1.2部分内存结构示意图: 在ASCII码表(参见附录2)中我们可以查到:以下字符的ASCII码表示 字符 十进制表示 二进制表示 # 035 00100011 i 105 01101001 n 110 01101110 c 099 01100011 l 108 01101100 u 117 01110101 d 100 01100100 e 101 01100101 和表2.1相对照,可以证实内存中的存储情况,确实是将文本形式的C语言源程序(关于高级程序设计语言,本书后面会专门介绍)的开头一部分“#include”以二进制的ASCII码的方式存放在了内存中(对于字符的进一步介绍请参看第2章)。 位于内存(及硬盘文件)中的人们用C语言编写源程序,无非就是一串长长的(二进制形式的)ASCII码字符串的文本,其中并没有任何计算机可以直接执行的机器语言指令。
人们用高级语言编写的程序称为源程序(或称为源代码),源程序是不能直接在计算机
25
编程高手的素养 何勤
上运行的。
目前,比较常用的计算机高级语言有C/C++,Java,Pascal,Basic,C#,fortran等,由于英语目前是国际通用语,至今为止计算机的发明和不断改进,主要也来自美欧等国,所以各种计算机高级语言(的关键字)用的都是英文单词。常用的各种语言之间差别不大,学会其中了一种语言,就很容易掌握另一种(不过,Lisp,Forth这些函数式语言与以上所列这些命令型或面向对象型语言有较大的区别)。 小知识:解释程序 将高级语言翻译成机器语言的,还有一种解释程序。这种程序每次将高级语言编写的一条语句翻译成一条或多条机器语言的指令,然后马上运行这一段指令。然后接着翻译下一句...
4、 理想厨房的冰箱每一个格子中,可以放下一个加工步骤或一份原材料。但一个基本存储单元常常放不下一条指令或一个数据。目前的计算机,一个基本存储单元通常只能存储一个八位二进制的位串,也就是一个字节(Byte)。因此,可能一条指令需要两个或更多的字节才可以存放下(但由于任意一条指令中,可以包含有指令本身长度的信息,所以当CPU取到的一条指令的长度为2时,PC寄存器中的值就会增加2,而不是加1)。数据随着应用的不同,一般也需要两个、四个或更多的字节来存放。因此,即使是做同样的整数加法 ,对于占用了不同字节数的整数数据,需要编写的机器语言的程序指令也是不一样的。
5、 CPU一次只能做两个数(或一个数)的运算(这是由于算术逻辑单元ALU本身的结构特点所决定的,请看下图)。而厨师可以一次同时将几种原料倒入一个容器中加工。
1.13算术逻辑单元(ALU)的编程结构图:
6、理想厨房系统的传送带是一条条的传送皮带;而计算机中的总线是一组平行的细导线(比
26
编程高手的素养 何勤
如,在PC机的称为主板的印刷电路板表面上出现的铜导线)。每根导线传输一个二进制的位。
7、在计算机的指令本身中,可以包含少量要参与运算的小的常数值(这种情况被称为:指令中的操作数是立即数,而不是一个间接的存放该数值的内存单元的地址);这是很自然的,...因为两者在计算机内部都不过是二进制的数或码。而理想厨房的加工某道菜的指令中,是无法包括要加工的原材料(或调味料)的,因为两者的性质完全不同。
8、理想厨房系统停电后,所有(菜谱的)指令和原材料都依然在冰箱中;而电子计算机一旦停电,则内存中的所有数据和程序指令都消失了。
所以,人们常常需要在关闭某个程序前,把内存中程序运行得到的结果保存在硬盘、软盘或U盘这样一些速度比较慢、容量很大,但可以在停电时也能常久保存数据的二级存储设备(又称为外存)中。 注意:这里的“内存”指的仅仅是RAM内存芯片。只读的内存芯片ROM中的所有程序和数据在计算机关机(停电)后仍然存在。而且ROM内存芯片中的程序和数据都是不可更改的。所以,现代的PC计算机(即个人计算机),往往把那些几乎所有应用程序都要经常使用的各种公共的基本输入输出程序段存放在了各种ROM中。与基本输入输出有关的程序段称为BIOS——即基本输入输出系统,主要被存放在了一个主板上的ROM芯片中)。
1.2.15本章小结
计算机(系统)是一个通过顺序执行程序中的指令,把数据加工成信息的系统。除了运行程序外,计算机不能做任何别的有用的事。
计算机系统,是由硬件和软件组成的。硬件主要包括中央处理单元(CPU)、内存、总线和外围设备(外围设备,包括各种输入输出设备和外存)。软件就是各种程序。可执行的机器语言程序,是由二进制的指令序列顺序组成的。
内存(RAM)负责临时存放,将要运行的程序和程序要加工处理的数据(硬盘等外存和只读内存(ROM)负责长期保存程序和数据)。中央处理单元负责到内存中去取指令、对指令进行译码和通知各部件执行指令。总线负责各部件之间的通信和数据传输工作。 中央处理单元(CPU)主要由控制器、运算器和一些寄存器组成。控制器负责:取指令→对指令进行译码→根据指令通过总线发出命令(即发出要求计算机各部件进行工作的各种命令)。计算机的所有部件,都是在控制器(通过总线)发出的命令下协调工作,来完成执行一条指令的。控制器是计算机执行指令的核心部件。运算器负责进行指令所要求的运算工作;通用寄存器负责临时存放从内存中(或从输入设备中)取来的数据。运算器到寄存器中存取数据,通常要远远快于到内存中去存取数据。数据必须从内存或(输入设备)取到CPU的某个寄存器中,才能得到运算器的加工处理。
只要一开机,计算机就永远在进行循环往复的 取指令—>执行指令 的周期性工作。 内存是很多由大小相等的基本存储单元构成的。在一台计算机中,内存的每个基本存储单元的大小都是一样的,通常一个基本存储单元可以存放一个字节的二进制位串(例如:11010110)。每个基本存储单元都有一个唯一的编号(就象沿一条街道上的每一家都有一个顺序的唯一的门牌号),这个编号称为内存地址。CPU根据这个内存地址,才能到内存中取到要执行的指令。CPU(或其他部件)才能存取内存指定存储单元中的数据。
高级语言的源程序在内存(或外存)中,通常是由一串二进制的ASCII码的字符序列组成的。任何计算机都无法把它当作机器指令序列来执行。高级语言的源程序,必须通过运行相应的编译(或解释)程序来进行翻译,转变成机器语言的程序(即机器指令序列)后,才能够在计算机中得到运行。
从计算机的最底层硬件来看,计算机硬件只具备了以极快的速度,执行少量种类的二进
27
编程高手的素养 何勤
制形式的指令的潜在能力。指令分为运算类指令、取数指令、存数指令、输入指令、输出指令、跳转指令等为数不多的几大类。一台计算机大约一共有几十种到几百种指令。所有源程序翻译成机器语言的程序后,最终全都是由以上各类指令顺序排列而成的。换言之,从最底层来看,计算机所会作的全部工作都是极其低级的、有限的。就象从最底层看,人只不过是一个由很多个细胞构成的生物聚合体。每个细胞都只能够完成种类很有限的生物化学反应。 如果一台计算机只有一个单核的CPU,那么它在任意时刻,在它的CPU上只能运行一个程序。当前的单核CPU(目前已经不多了)的个人微机(PC机),表面上看起来好像可以同时运行多多个程序,这其实是计算机硬件和操作系统这个系统软件密切配合,给肉眼凡胎的我们制造出的一个假像(参见9.4)。
本章的进一步读物:
1.[美]Ron White 著 宋铁英 陈河南 等译 《计算机工作原理图示教程》清华大学出版社。此书生动有趣,插图很精美,适合初学者全面了解PC计算机的工作原理。
2.[美]Douglas E. Comer 著方存正译 《计算机系统结构精髓》清华大学出版社。本书通俗易懂、深入浅出、语言流畅、适合自学。
3.[美] 《计算机系统要素》电子工业出版社。在更高层次上,让你全面把握整个计算机系统的工作原理。但内容比较深,不太适合初学者。 4.王爽 著《汇编语言》(第2版)清华大学出版社。汇编语言中的一本入门级的好书。 5.[荷兰] Andrew S. Tanenbaum 著 刘卫东等译 《计算机组成——结构化方法》(第5版)人民邮电出版社这是一本名著。
6.何勤 著 《轻松学习C程序设计——揭开计算机与程序设计的奥秘》第1版 中国电力出版社 2008年8月
28
共分享92篇相关文档