今天,计算机正在以惊人的速度发展变化着,变得越来越复杂,而这期间产生了许多技术,但是人们并没有过多的时间去深入学习每一门技术,这就是问题的根源。稍微看了看技术手册,只学到了表层的使用方法,觉得自己“反正已经达到目的了”,这就是现状。如果仅仅把技术当作一个黑盒,只把时间花在学习其表面上,而并没有探索到其本质,就绝不应该认为自己已经“懂”了。不懂的话,做起来就会感到没意思,也就更不会产生想要深入学习的欲望了。
计算机的三个根本性基础
1. 计算机是执行输入、运算、输出的机器
2. 程序是指令和数据的集合
3. 计算机的处理方式有时与人们的思维习惯不同
试着制造一台计算机吧
只要用电路把CPU、内存以及I/O上的引脚相互连接起来,为每块IC提供电源,再为CPU提供时钟信号,硬件上的计算机就组装起来了。
其实计算机的工作原理非常简单。CPU在时钟信号的控制下解释、执行内存中存储的程序,按照程序中的指令从内存或I/O中把数据输入到CPU中,在CPU内部进行运算,再把运算结果输出到内存或I/O中。无论是小型的微型计算机,还是高性能的个人计算机,其工作原理都是相同的。
体验一次手工汇编
1.因为程序的作用是驱动硬件工作,所以在编写程序之前必须要先了解微型计算机的硬件信息。然而真正需要了解的硬件信息只有以下7种,所以没有必要在编程时还总是盯着详细的电路图看。
2.在CPU的资料中,明确写有所有可以使用的助记符,以及助记符转换成机器语言后的数值。只要查看这些资料,就可以把用汇编语言编写的程序手工转换成机器语言的程序,这样的工作称为“手工汇编”。进行手工汇编时,要一行一行地把用汇编语言编写的程序转换成机器语言。
3.内存地址:内存中有多个数据存储单元。计算机用从0开始的编号标识每个存储单元,这些编号就是地址(Address)。I/O中的寄存器也可以用地址来标识。哪个寄存器对应哪个地址,取决于CPU和I/O之间的布线方式。
4.尝试将下面的汇编指令翻译成机器语言,完成一次“手工汇编”
操作码 操作数
LD A, 207
OUT (2), A
LD A, 255
OUT (2), A
LD A, 207
OUT (3), A
LD A, 0
OUT (3), A
LOOP: IN A, (0)
OUT (1), A
JP LOOP
结果:
地址 操作码 操作数 机器语言
00000000 LD A, 207 00111110 11001111
00000010 OUT (2), A 11010011 00000010
00000100 LD A, 255 00111110 11111111
00000110 OUT (2), A 11010011 00000010
00001000 LD A, 207 00111110 11001111
00001010 OUT (3), A 11010011 00000011
00001100 LD A, 0 00111110 00000000
00001110 OUT (3), A 11010011 00000011
00010000 LOOP:IN A, (0) 11011011 00000000
00010010 OUT (1), A 11010011 00000001
00010100 JP LOOP 11000011 00010000 00000000
5.尝试估算程序的执行时间
从前面的图中看到每条汇编指令需要的时钟周期,把每条指令的时钟周期数累加起来,LOOP之前的指令:7+11+7+11+7+11+7+11=72个时钟周期;LOOP之后指令:11+11+10=32个时钟周期。因为微型计算机采用2.5MHz的晶振,1s可以产生2,500,000个时钟周期,每个时钟周期1s÷2,500,000=0.4μs。前72个时钟周期为28.8μs,后32个时钟周期为12.8μs,一秒钟可以执行LOOP 78125次,可见计算机的计算速度多么惊人。
程序流程
与河流的流动方式一样,程序的流程也分为三种。在程序中,把犹如水流向着一个方向流淌的流程称作“顺序执行”;把犹如水流流着流着产生了支流的流程称作“条件分支”;把犹如水流卷成漩涡的流程称作“循环”。
面向对象
在大型程序中需要用到大量的函数和变量。假设要用非面向对象的编程方法编写一个由10000个函数和20000个变量构成的程序,那么结果就很容易是代码凌乱不堪,开发效率低到令人吃惊,维护起来也十分困难。于是一种新的编程方法就被发明出来了,即把程序中有关联的函数和变量汇集到一起编成组。这里的组就是类。
为了拉近计算机和人的距离,使计算机成为更容易使用的机器,围绕着计算机的各种技术都在不断发展。在人的直觉中,大件物品都是由组件组装起来的。因此可以说面向对象编程方法把同样的直觉带给了计算机,创造了一种顺应人类思维习惯的先进的开发方法。
SE负责监管计算机系统的构建
笔者经常在面向立志成为SE的新员工培训会上问这样一个问题:“你认为作为SE,一上来应该向客户提什么问题?”多数的新员工都会回答:“您需要什么样的计算机系统?”这当然也没有错,但并不能算是最好的答案。因为客户最关心的是使用计算机解决眼前的问题,而并不是引进什么样的计算机系统。因此SE应该首先询问客户:“您遇到什么困难了吗?” 倾听客户的难处,给出解决对策即IT解决方案,这才是SE的职责。