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

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

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

下面是我的阅读笔记,把重点进行归纳总结。

计算机的三大原则

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

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

其实计算机就是台简单的机器,因为它只能做这三件事。

程序是指令和数据的集合

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

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

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

计算机的处理方式有时与人的思维习惯不同

用数字表示所有信息,这就是一个很具有代表性的计算机式的处理方法,和人类思维习惯不一样。例如,人们会用蓝色之类的词语描述有关颜色,计算机会使用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),AJP LOOP复制代码

知识的范围

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

数据库和网络

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

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

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

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

计算机是怎样跑起来的相关推荐

  1. 《计算机是怎样跑起来的》学习笔记

    <计算机是怎样跑起来的>学习笔记 前言 1 计算机的三大原则 2 试着制造一台计算机吧 3 体验一次手工编程 4 程序像河水一样流动着 5 与算法成为好朋友的七个要点 5.1 算法中解决问 ...

  2. 计算机是如何跑起来的--读书笔记

    计算机是怎样跑起来的 1.首先要划出一个"知识的范围",精通一门学问必知必会的知识都在这个范围之内.其次是掌握该范围内每个知识点中"基础中的基础知识".最后是能 ...

  3. 《计算机是怎样跑起来的》优化使用VBScript语言编写的石头剪刀布游戏

    今天在看失泽久雄先生著写的<计算机是怎样跑起来的>时,其中有一段使用VBScript编写的石头剪刀布游戏.由于自己是个小白,从来没听说过这种不是特别热门的脚本语言,一看用windows系统 ...

  4. 计算机是怎样跑起来的笔记摘要

    文章摘抄于矢泽久雄的<计算机是怎样跑起来的>,用于个人学习,内容有不当或错误的地方请见谅.让我们一起学习,共同进步. 文章目录 第一章 计算机三大原则 1.1三个根本性基础 1.2计算机网 ...

  5. 计算机是怎样跑起来的(读书笔记)

    计算机是怎样跑起来的 计算机的三大原则 计算机的三个根本性基础 输入.运算.输出是硬件的基础 软件是指令和数据的集合 计算机的处理方式和人们的思维习惯不同,对计算机来说什么都是数字 只要理解了三大原则 ...

  6. 读书笔记 -- 《计算机是怎样跑起来的》

    推荐语 这本书用通俗的语言讲解计算机相关组成,内容比较浅显易懂,适合初级程序员学习,中级程序员查漏补缺,不适合高级程序员. 给个四星级推荐(满分五星). 关注公众号<嵌入式小散修>,回复 ...

  7. rw_《计算机是怎样跑起来的》4-11 章

    2016.07.15 - 08.19 <计算机是怎样跑起来的>4-11 章. - 矢泽久雄 / 著 - 胡屹 / 译 个人学习笔记. [知识的范围(编程)] 4 程序像河水一样流淌着 问题 ...

  8. 计算机是怎样跑起来在线看,计算机是怎样跑起来的

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  9. 计算机音乐奔跑,跑起来!100首最适合跑步的音乐

    原标题:跑起来!100首最适合跑步的音乐 喜爱跑步.健身的人,都喜欢一边听音乐一边运动,而且会比没有音乐时燃烧脂肪速度要快,提高新陈代谢的能力!小乐君今天给大家盘点100首全球最受欢迎的跑步音乐,让大 ...

最新文章

  1. 新思路!商汤开源利用无标注数据大幅提高精度的人脸识别算法
  2. String类为什么是final的
  3. python实现批量压缩文件夹
  4. Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学
  5. 微软工程院院长:1万多应聘者挑不出100人
  6. 计算机论文搜索技巧【一】
  7. python numpy逆_numpy.linalg.inv返回奇异矩阵的逆函数 - python
  8. spring提供的线程池
  9. 一道综合练习题实践list及dictionary集合类
  10. php简化URL路径,thinkphp框架实现路由重定义简化url访问地址的方法分析
  11. 《圈圈教你玩USB》 第三章 USB鼠标的实现——看书笔记( 3 )
  12. ask调制流程图_ASK调制及解调实验报告 - 范文中心
  13. Translation 翻译插件google
  14. c语言编写的车道线检测程序,opencv车道线检测的实现方法
  15. 【最小割】HDU 5294 Tricks Device
  16. 快速预警、高效疏通,ZBOX打造高速公路智慧通信站
  17. 微信公众号开发相关问题
  18. itext使用字体问题
  19. Oracle数据库实例之内存架构(一)
  20. 不加QQ好友而强制聊天(貌似现在出现了问题)

热门文章

  1. 企业运维经典面试题汇总(4)
  2. 49个Python的常见操作/技巧/例子
  3. 如何通过ngnix将网站访问改为https
  4. Zabbix添加网络设备
  5. 多机能同时制造时(对于发现的问题, 【使用】 并记入 【 问题一览 】)。
  6. 成功要掌握人生的每一次机会
  7. linux中ssh登录Permanently added (RSA) to the list of known hosts问题解决
  8. 在记事本++中删除重复的行
  9. 如何在Ruby on Rails迁移中重命名数据库列?
  10. linux查看绑定ipv6的端口号,[原创]如何在windows和linux绑定IPV6