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 寄存器的值设为要跳转到的目的地的内存地址来实现

未完,看书

计算机是怎么RUN起来的相关推荐

  1. 软件设计原则——依赖倒转原则

    依赖倒转原则 高层模块不应该依赖低层模块,两者都应该依赖其抽象: 抽象不应该依赖细节,细节应该依赖抽象. 简单的说就是要求对抽象进行编程,不要对实现进行编程, 这样就降低了客户与实现模块间的耦合. [ ...

  2. UML中类之间的几种关系

    类之间可能存在以下几种关系:关联(association).依赖(dependency).聚合(Aggregation,也有的称聚集).组合(Composition).泛化(generalizatio ...

  3. 《设计模式详解》软件设计原则

    <设计模式详解> 3.软件设计原则 3.1 开闭原则 示例 3.2 里式代换原则 反例 改进反例 3.3 依赖倒转原则 反例 改进反例 3.4 接口隔离原则 反例 改进反例 3.5 迪米特 ...

  4. 设计原则之依赖倒转原则

    依赖倒转原则(DIP): 高层模块不应该依赖低层模块,两者都应该依赖其抽象抽象不应该依赖细节,细节应该依赖抽象. 依赖倒置原则在Java语言中的表现: 模块间的依赖通过抽象发生,实现类之间不发生直接的 ...

  5. java设计模式(上)

    文章目录 23种设计模式精讲 第一章 设计模式概述 1.1 代码质量好坏如何评价? 1.2 编程方法论 1.3 设计模式概述 1.4 产生背景 1.5 设计模式分类 第二章 UML图 2.1 类图概述 ...

  6. 设计模式3-软件设计原则

    3,软件设计原则 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 3.1 开闭原 ...

  7. 2022 - 软件构造复习

    软件生命周期 一个软件产品或软件系统经历孕育.诞生.成长.成熟.衰亡等阶段,一般称为软件生存周期(软件生命周期). 根据软件所处的状态和特征,划分软件生存周期. 需求定义.软件设计.软件实现.软件维护 ...

  8. 设计模式-03(软件设计原则)

    软件设计原则                                                                                               ...

  9. 第十七章 Metasploit Framework

    渗透测试者的困扰 ▪ 需要掌握数百个工具软件,上千个命令参数,实在记不住 ▪ 新出现的漏洞PoC/EXP有不同的运行环境要求,准备工作繁琐 ▪ 大部分时间都在学习使用不同工具的使用习惯,如果能统一就好 ...

最新文章

  1. 2_Selenium对象识别
  2. 用Visual C#来清空回收站(1)
  3. golang用户认证
  4. python strip函数用法_python strip()函数 介绍
  5. nyist -- 组队赛(一)
  6. #1093 : 最短路径·三:SPFA算法(邻接表)
  7. 【NOIP2017】【Luogu3955】图书管理员(枚举,取模得后缀)
  8. .NET中GC的运行机制
  9. x265码率控制-VBV更新过程
  10. 淘宝卖家过劳死VS跳楼死
  11. 正则表达式驼峰转中(下)划线
  12. MBP远程控制Windows NUC
  13. Confluence 文档协作平台安装部署笔记
  14. hypermesh 连接单元_基于HYPERMESH的抗扭拉杆悬置自由模态分析研究
  15. 智慧工地无线覆盖重点产品人员定位和移动考勤
  16. TextRCNN、TextCNN、RNN
  17. sports.php什么意思,使用Yahoo Fantasy Sports API的PHP和JSON
  18. 【李刚-21天通关Python】第一章:Python入门与字符串
  19. 系统学习金融数据挖掘 之爬虫技术基础(附源代码)(网页结构基础)
  20. Day15 --框架集合 Collection集合 和 List 集合

热门文章

  1. vc++深入详解学习-NO.3
  2. 周鸿祎VS马化腾 360VS腾讯工资待遇盘点
  3. Bmp格式与编程读取解析
  4. php jquery 源码,最新版jQuery 2.1.0完整
  5. python 去除不可见字符\x00
  6. php7 字符串,php7 参数、整形及字符串处理机制修改实例分析
  7. java简单小项目_Java简易抽奖系统小项目
  8. c语言编程求连续几日的温差最大 最小值,数控维修理论题库(含答案)X2份..doc
  9. python程序打包时出现lib not found_pyinstaller打包py脚本Warning:lib not found等相关问题...
  10. mongodb和mysql的对比_MongoDB和MySQL的区别