1.实际上计算机只会实现输入、运算、输出
这三大模块缺一不可,缺少输入意味着没有用户能使用,缺少运算相当于一条电线毫无意义,缺少输出相当于一直堆积信息的垃圾箱
因此计算机的硬件是由大量的IC(Integrated Circuit 集成电路)组成,每块IC上都带有很多引脚,相当于电线,这些引脚都是服务于输入输出,运算可能有点难理解,但简单来时在IC里面实际上变化的是电流变化(具体的变化慢慢了解),人类的对电流的定义,就是数字,而且只有两个数字0和1,这样看来计算机其实有点笨,但是怎么能变化出万种功能呢?
2.程序是指令和数据的集合,无论哪个程序,内容都是数值的罗列,每个数值要么是指令要么是数据。
一组指令操作一段数据,形成最基本的程序
这一组指令统一推荐描述的文字是“函数”
一段数据我们可以分为两类,一类是输入的数据,一类是输出的数据
在编程的时候数据可以赋予名字为“变量”
y=f(x)
3.计算机的处理方式有时候与人类的思维习惯不同
当人描述颜色的时候会形成画面 红色蓝色绿色
当计算机描述颜色的时候会形成颜色的数字信息 例如“255,0,0”表示红色
4.计算机在一直进化
计算机的思维方式一直在改变且趋向于人类的思考方式,大家应该由衷地欢迎技术的进化,没有人会稀罕一成不变的好代码
编程方法也一直在进化一种是组件编程(将程序的零部件组装到一起完成程序),一种是面向对象编程(先对你脑海中的东西建模,例如建一个车的模型,然后再对模型进行私人订制,称为你创造的独一无二的玛莎拉蒂)
5.计算机内部主要是IC的元件组成
只需记住三种:
CPU(中央进程处理器):可以对数据执行运算并控制内存和I/O
内存(CPU内的数据寄存器):看看你电脑是多少位的,32位64位86位,是由寄存器的容量和传输进CPU的数据总线的条数共同决定,前者相当于水龙头,后者相当于水管,水管是32位的,水龙头也必须是32位的
I/O(Input/Output):接受用户设备的输入输出
除了以上,还需要若干辅助元件
晶振(是时钟发生器的主要部件):晶体振荡器,由于晶体有压电效应,当在晶片的两面上加交变电压时,晶片会反复的机械变形而产生振动,而这种机械振动又会反过来产生交变电压,晶振产生振荡必须附加外部时钟电路,一般是一个放大反馈电路,只有一片晶振是不能实现震荡的.晶振为了辅助CPU的运转速度,会根据自身通电后振动的频率产生时钟信号频率用来衡量CPU的运转速度
IC的引脚:所谓的引脚就是IC边缘裸露出的像腿一样的部分,按照逆时针方向依次带有一个从1开始递增的序号
6. 比特是作为信息的收发单位
通常将1个二进制数称为1比特。将8个二进制数称为1字节
比特是信息的最小单位,字节是信息的基本单位
例如32位的计算机就是一32比特为一个单位收发信息的
7. 连接电源、地址总线和数据总线:
首先连接电源
为了指定输入输出数据时的源头或目的地(存取数据的地址),CPU上备有“地址总线引脚”,例如引脚有16个,用代号A0~A15表示,其中A表示Address(地址),后面的0~15表示一个16位二进制数中各数字的位置,0对应最后一位,15对应第一位,用而二进制表示就是0000000000000000~1111111111111111,所能提供的65536个数据存取单元(内存存储单元或者I/O地址),进行信息的输入输出。
一旦指定了存取数据的地址,就可以使用“数据总线引脚”进行数据的输入输出了,数据总线引脚和地址总线引脚类似,用代号D0~D15表示。
8.连接I/O:
下面开始连接I/O,大家知道寄存器这个词吗?寄存器是位于CPU和I/O中的“数据存储器”,速度很快,和CPU直接交互,假设一个并行PIO设备上有4个寄存器,2个是用于PIO本身的功能,2个是用于存储与外部设备进行输入输出的数据
9.连接时钟信号:
将CPU的CLK(Clock时钟)引脚、PIO的CLK引脚分别与时钟发生器的引脚相连,在时钟发生器的作用下,它们随着滴答滴答的时钟同步做动作,然后连上其它的引脚(这里简单带过)
10.CPU工作原理:
CPU 在时钟信号的控制下解释、执行内存中存储的程序,按照程序中的指令从内存或 I/O 中把数据输入到 CPU 中,在 CPU 内部进行运算,再把运算结果输出到内存或 I/O 中
11.机器语言和汇编语言
机器语言就是0和1的各种组合,不同种类的CPU对各种组合的解析也不同,例如man有的人理解为“男人”,有的人理解为“慢”
汇编语言就是把操作码(指令)和操作数(指令的对象)并排写在一行上,仅此而已
标签的作用是为该行代码对应的内存地址起一个名字。
编程时如果总要考虑“这一行的内存地址是什么来着?”就会很不方便,所以在汇编语言中用标签来代替地址。用汇编语言编程时可以在任何需要标签的地方“贴上”名称任意的标签,如图,使用了名称“LOOP:”的标签
操作码就是助记符,用来告诉计算机“做什么”的指令,汇编语言中提供多少种助记符,CPU就有多少种功能
操作数就是指令执行的对象
汇编语言和英语的祈使句很像,可以看成是英语的祈使句中开头放置了一个表示“做什么”的动词, 动词后面放一个宾语表示“作用到什么上”动词就相当于操作码,宾语就相当于操作数,程序的作用是向CPU发出指令。
12.寄存器的结构:
I/O寄存器只能作为临时存放周边设备进行输入输出的数据
CPU的的寄存器不仅能存储数据,还具备对数据进行运算的能力
举个栗子:以下是Z80的CPU所带有的寄存器ABCD等字母是寄存器的名字
举例来说:
A 寄存器也叫作“累加器”,是运算的核心。所以连接 到它上面的导线也一定会比其他寄存器的多。
F 寄存器也叫作“标志寄存器”,用于存储运算结果的状态,比如是否发生了进位,数字大小的比较结果等。
PC 寄存器也叫作“程序指针”,存储着指向 CPU 接下来要执行的指令的地址。
PC 寄存器的值会随着滴答滴答的时钟信号自动更新,可以说程序就是依靠不断变化的 PC 寄存器的值运行起来的。
SP 寄存器也叫作“栈顶指针”,用于在内存中创建出一块称为“栈”的临时数据存储区域
CPU 中有各种各样的各司其职的寄存器。其中有一个被称为 PC (Program Counter,程序计数器)的寄存器,负责存储内存地址,该地 址指向下一条即将执行的指令。每解释执行完一条指令,PC 寄存器的 值就会自动被更新为下一条指令的地址。
13.程序像河水一样流动着:
顺序执行是按照指令记录在内存中的先后顺序依 次执行的一种流程。而循环则是在程序的特定范围内反复执行若干次 的一种流程。条件分支是根据若干个条件的成立与否,在程序的流程 中产生若干个分支的一种流程。无论规模多么大多么复杂的程序,都 是通过把以上三种流程组合起来实现的
程序的三种流程正像是河流本身。从高山的泉眼中涌出的清泉形 成了河流的源头(程序执行的起点)。水流从山中缓缓流下,有时向着 63 4.1 程序的流程分为三种 一个方向流淌(顺序执行),有时中途分出了支流(条件分支),还有时 由于地势卷起了漩涡(循环)
这就意味着我们专业的程序员在编写程序之前,会通过画流程图来思考程序的流程
下面是剪刀石头布的程序流程图
思考算法时的要点是要分两步走,先从整体上考虑程序的粗略流 程,再考虑程序各个部分细节的流程
用户是怎样使用程序的呢?首先,用户启动了程序(程序 执行初始化处理)。接下来用户根据自己的需求操作程序(程序进入循 环处理阶段)。最后用户关闭了程序(程序执行收尾处理)。这样的使用 方法就可以直接作为程序的整体流程。
特殊的程序流程——中断处理:
中断处理是指计算机使程序的流程突然跳转到程序中的特定地方, 这 样 的 地 方 被 称 为 中 断 处 理 例 程(Routine)或 是 中 断 处 理 程 序 (Handler),而这种跳转是通过 CPU 所具备的硬件功能实现的
在CPU中有特定的中断引脚,可以接受从I/O设备发出的中断请求信号,中断处理以从硬件发出的请求为条件,使程序的流程产生分支, 因此可以说它是一种特殊的条件分支
编写的程序中并不需要编写有关中断处理的代码。
因为处理中断请求的程序,或是内置于被烧录在计算机 ROM 中的 BIOS 系统(Basic Input Output System, 基本输入输出系统)中,或是内置于 Windows 等操作系统中。只需要先记住以下两点即可:计算机具有硬件上处理中断的能力;中断一词的英文是 Interrupt。
特殊的程序流程——事件驱动
程序员们经常用事件驱动的方式编写那些工作在 GUI(Graphical User Inteface,图形用户界面)环境中的应用程序
通常把用户在应用程序中点击鼠标或者敲击键盘这样的操作称作 “事件”(Event)。负责检测事件的是 Windows。Windows 通过调用应 用程序的 WndProc() 函数通知应用程序事件的发生。而应用程序则根 据事件的类型做出相应的处理。这种机制就是事件驱动。可以说事件 驱动也是一种特殊的条件分支,它以从 Windows 送来的通知为条件, 根据通知的内容决定程序下一步的流程
事件驱动的“状态转化图”
的计算器应用程序就可以看作包含三个 状态:“显示计算结果”“显示第一个输入的数”以及“显示第二个输入的 数”。随着用户按下不同种类的按键,状态也会发生转变。在状态转化图 中,在矩形中写上状态的名称,用箭头表示状态转化的方向,并且在箭 头上标注引起状态转化的原因(事件)
程序的流程还是只有顺序执行、条件分支和循环这三种,这 一点是没有改变的。
其中的顺序执行是最基本的程序流程,这是因为 CPU 中的 PC 寄存器的值会自动更新。条件分支和循环,在高级语言 中用程序块表示,在机器语言和汇编语言中用跳转指令表示,在硬件 上是通过把 PC 寄存器的值设为要跳转到的目的地的内存地址来实现
未完,看书