计算机是怎样跑起来的

一直对「程序如何在计算机中跑起来的」很感兴趣,也看过一些相关的书籍和文章,前段时间在多看阅读上看到一本相关的书,用了几天时间看完后,以为很不错,用简单易懂的语言,围绕计算机是怎样跑起来的,把相关的知识串起来,虽然每块讲的都很浅,但使人印象深入。程序员

书的做者是日本的矢泽久雄,做者那个年代,计算机仍是8比特微型计算机,面对为数很少的技术,能够从容地把时间花在学习计算机基础上。但这些基础知识,即便到了今天也没有太大变化,即使是面对复杂的最新技术,一旦回归到计算机的基础知识,就会很好理解。算法

其实不只是计算机,其余学问亦是如此。首先要划出一个「知识范围」,精通一门学问所必知必会的知识都在这个范围内。其次是掌握该范围内每一个知识点中基础中的基础知识。最后是能独当一面的目标,即掌握了这些知识能够作什么。数据库

目录

下面是个人阅读笔记,把重点进行概括总结。编程

计算机的三大原则

计算机是执行输入、运算、输出的机器安全

计算机的硬件是由大量IC组成,每块IC上带有不少引脚,这些引脚有的用于输入,有的用于输出。IC会在其内部对外部输入的信息进行运算,把运算结果输出到外部。bash

其实计算机就是台简单的机器,由于它只能作这三件事。微信

程序是指令和数据的集合网络

不管程序多么复杂,内容都是指令和数据,学习过汇编的应该很清楚。数据结构

所谓指令,就是控制计算机进行输入、运算、输出的命令。把向计算机发出的指令一条条列出来,就获得了程序。学习

数据是指令的对象,编程时,程序员会为数据赋予名字,称其为变量。

计算机的处理方式有时与人的思惟习惯不一样

用数字表示全部信息,这就是一个很具备表明性的计算机式的处理方法,和人类思惟习惯不同。例如,人们会用蓝色之类的词语描述有关颜色,计算机会使用0,0,255表示蓝色。对文字也是同样,会把文字编码成相应的数字再作处理。

试着制造一台计算机

上面提到,计算机内部主要由被称做集成电路的元件组成,虽然有各类IC,最重要的三种是:CPU、内存、I/O,只要用电路把CPU、内存以及I/O上的引脚相互链接起来,为每块IC提供电源,再为CPU提供时钟信号,硬件上的计算机就组装起来了。

时钟信号带有一个时钟,滴答滴答地每隔必定时间就变换一次电压的高低,输出时钟信号的元件叫作「时钟发生器」,里面带有晶振,根据其自身的频率产生时钟信号。时钟信号的频率能够衡量CPU的运转速度。

书中选取Z80 CPU做为CPU,TC5517做为内存,Z80 PIO做为I/O为主要器件,一步一步教咱们如何制做一个微型计算机。书中提供了一个电路图,我跟着做者的逐步介绍,用彩色笔一步步描画相应的电路,印象深入。

电路图

具体步骤细节我就再也不赘述了,感兴趣的能够阅读原书,主要总结下令我印象深入的几个点。

IC与普通电器同样,只有接通电源才能工做,三大器件都分别带有Vcc引脚和GND引脚,这一对儿引脚用于为Vcc引脚供电,将+5V电源链接到各个IC的Vcc引脚,将0V电源链接到各个IC的GND引脚,时钟发生器也要链接上,这样接通电源后这些IC和时钟发生器就能够工做了。

微信计算机所使用的IC属于数字IC,每一个引脚上的电压要么是0V,要么是+5V,Vcc和GND引脚上的电压是恒定不变的,其余引脚上的电压,会随着计算机的操做在+5V和OV质检不断变化。

能够想成0V表示数字0、+5V表示数字1,那么数字IC就是在用二进制数的形式收发信息。

计算机以CPU为中心运转,要与内存和I/O进行数据的输入输出,为了指定输入输出数据时的源头或目的地,CPU上备有「地址总线引脚」。Z80 CPU 地址总线引脚共有16个,所能指定的地址共有2^16,能够指定65536个数据存取单元。

一旦指定了存取数据的地址,就可使用数据总线引脚进行数据的输入输出了。Z80的数据总线引脚有8个, 能够一次性地输入输出8比特的数据,意味着若是想要输入输出位数大于8比特的数据,就要以8比特为单位切分这个数据。

CPU的地址总线引脚和数据总线引脚要与I/O和内存对应的引脚相连。

有一个问题,从上面电路图能够看到,Z80 CPU 使用同一组地址总线引脚和数据总线引脚链接到了内存和I/O上,CPU如何区分访问的是内存存储单元,仍是I/O中的寄存器呢。Z80 CPU上的MREQ和IORQ引脚解决了这个问题,当和内存之间有数据输入输出时,MREQ引脚上的值是0,反之是1。

对内存和I/O而言,还要分清CPU是要输入数据仍是输出数据,须要用到CPU的RD引脚和WR引脚,与内存和IO对应的引脚链接起来。

介绍这么多,就是让你们对计算机硬件之间的交互方式有个直观的认识,程序在这种结构中就能够跑起来,看到想要的结果。

体验一次手工汇编

先来描述下实现场景:把由指拨开关输入的数据输入CPU,而后CPU再把这些数据原封不动地输出到LED,也就是说,能够经过拨动指拨开关控制LED的亮或灭。

使用汇编语言来编程,汇编语言是根据表示指令功能的英语单词起一个类似的昵称,并将这个昵称赋予给0和1的组合,这种英文单词叫作助记符。

汇编语言的语法很简单,即把标签、操做码、操做数并排写在一块儿,标签的做用为为该行代码对应的内存地址起一个名字,这样后面能够直接跳转到这个地方。操做码就是表示作什么,提供了多少操做码,CPU就有多少功能。操做数表示的是指令执行的对象,CPU的寄存器、内存地址、I/O地址或者直接给出的数字均可以做为操做数。若是某个指令须要多个操做数,用逗号分割,操做数的个数取决于指令类型。

经常使用指令

再来讲下寄存器。既然数据的运算是在CPU中进行的,那么CPU内部就应该有存储数据的地方,就是寄存器。CPU带有什么样的寄存器取决于CPU的种类。Z80 CPU 所带有的寄存器以下:

寄存器

好比,A寄存器叫作累加器,是运算的核心,F寄存器叫作标志寄存器,用于存储运算结果的状态,好比是否发生了进位,数字大小的比较结果等。PC寄存器存储着指向CPU接下来要执行的指令的地址。操做数必须是已存储在CPU寄存器中的数字。

好了,下面使用汇编语言实现上面说的场景,主要思路是:设定Z80 PIO,为每一个端口设定输入输出模式,而后与其进行输入输出。

// 设置端口(2)为输入模式,这样用括号括起来的数字,表示的是地址编号,207表示通知将要设置输入输出模式
LD A,207 //把207写入到寄存器A
OUT (2),A  //把寄存器A中的数据写入到IO地址对应的寄存器中
LD A,255 
OUT (2),A

// 设置端口(3)输入输出模式
LD A,207
OUT (3),A 
LD A,0
OUT (3),A

// 进入一段死循环,用于把指拨开关输入的数据输出到LED灯
LOOP: IN A,(0)
      OUT(1),A
      JP LOOP

复制代码

知识的范围

这块内容包括流程控制、数据结构、算法、面向对象,他们是现代编程的基础,熟练掌握这些知识,编写实际业务时就简单了。这些知识都包含的不少内容,你们也都了解,就再也不介绍了。

数据库和网络

这块也比较熟悉,数据库是数据的基地,方便数据的结构化存储和检索,网络解决了机器之间的数据传递,要约定好传输协议和数据格式,传输过程当中要考虑数据安全问题。

这块也不过多介绍了,涉及的知识包括MYSQL等数据库、TCP/IP等网络协议、数据加密和和签名、XML可扩展标记语言等。

你们平时工做时,要有意识的累积和思考这些知识,它们是比较稳定的,是其余知识的基础,是程序员的内功。

欢迎扫描下方二维码,关注个人我的微信公众号,查看更多文章 ~

情情说
相关文章
相关标签/搜索