|
1 | | -*计算机的工作原理: |
| 1 | + |
2 | 2 | ·阿兰·图灵:用机器代替人脑进行计算分析的可行性分析
|
3 | 3 | 1936年,图灵提出了一种抽象的计算模型——图灵机,即将人们使用纸笔进行数学运算的过程进行抽象,这样可以由一个虚拟的机器替代人类进行数学运算
|
| 4 | + |
4 | 5 | ·冯·诺依曼:图灵机的具体实现构想
|
5 | 6 | 他提出冯·诺依曼结构计算机模型,该模型是图灵机的具体实现,他确定当今计算机运行方式:
|
6 | 7 | -- 确定了计算机的体系结构——即"冯诺依曼结构":输入设备 → 主机[中央处理器[控制单元、算术逻辑单元]、内存] → 输出设备
|
7 | 8 | -- 提出计算机应采用二进制编码(之前采用十进制);
|
8 | | - -- 提出计算机需要存储程序、按照程序进行工作(这是软件编程的理论基础,而之前让计算机工作是通过插拔电线)。 |
| 9 | + -- 提出计算机需要存储程序、按照程序进行工作(这是软件编程的理论基础,而之前让计算机工作是通过插拔电线) |
| 10 | + |
9 | 11 | ·晶体管:从构想到计算机实现的硬件基础
|
10 | 12 | -- 晶体管的发明让人们可以实现冯·诺依曼结构计算机。
|
11 | 13 | -- 晶体管可以控制和存储高、低电平,而高、低电平可以表示二进制当中的"1"和"0"。
|
12 | 14 | -- 晶体管实现逻辑运算和存储简介文档:
|
13 | 15 | -- 《CPU是怎么实现运算的》:https://blog.csdn.net/qq_29025955/article/details/108476729
|
14 | 16 | -- 《CPU 是怎么认识代码的? - Zign的回答 - 知乎》:https://www.zhihu.com/question/348237008/answer/843382847
|
| 17 | + |
15 | 18 | ·逻辑门:从硬件到逻辑运算的桥梁
|
16 | 19 | -- 逻辑门是晶体管通往逻辑运算和数据存储的桥梁
|
17 | 20 | -- 《电工学》中详细介绍了不同的晶体管可以控制高低电平输出状态,从而实现逻辑门
|
|
59 | 62 | -- 为什么逻辑门能够存储数据?
|
60 | 63 | 有一种叫SR锁存器的晶体管组,本质就是两个"或非门",锁存器能够使电流通过互相博弈达到0或1的稳态,从而实现数据存储
|
61 | 64 | -- 寄存器的逻辑门组成:把SR锁存器的两个输入端捏合成一个D输入端,再加上一个由时钟信号控制端E,就得到一个更高级的"时序D锁存器",它是一个能在时钟开关E打开的情况下,记住D输入端进来的信号的装置。把两个相反的时序D锁存器组合在一起,就能构成一个 "D触发器(D Flip Flop)"。触发器和之前的锁存器的区别是,只有当时钟信号处在上升沿(从1V向5V跃迁)的一瞬间,D端的输入值才能写入触发器。并在随后的时间内,只要没有新的D输入写入,Q一直保持这个值。1bit肯定是不够的,不过我们可以并联嘛,用4个或者8个来保存4位或者8位数据。这种我们称之为寄存器(Register)。
|
62 | | -·cpu:多种逻辑门的复杂组合 |
| 65 | + |
| 66 | +·cpu:多种逻辑门的抽象组合 |
63 | 67 | -- 文档:
|
64 | 68 | -- 《cpu结构框图》:https://blog.csdn.net/chengchaonan/article/details/90742417
|
65 | 69 | -- cpu的结构:CPU从逻辑上可以划分成3个模块,分别是控制单元、运算单元和存储单元,这三部分由CPU内部总线连接起来,可参考:专题/cpu的工作原理.jpg。
|
|
88 | 92 | -- Q&A:
|
89 | 93 | -- 5000 * 0.2的运算过程是怎样的?寄存器1中的5000和寄存器2中的0.2导入ALU,计算结果1000返回到寄存器3中
|
90 | 94 | -- 《为什么CPU需要时钟才能工作》https://www.zhihu.com/question/21981280/answer/126921197
|
91 | | -·cpu指令集:运算的抽象集合 |
| 95 | + |
| 96 | +·cpu指令集:cpu运算的抽象集合 |
92 | 97 | -- 指令:
|
93 | 98 | -- 计算机通过指令指挥计算机工作。
|
94 | 99 | -- cpu被时钟驱动,不断读取PC指针指向的指令,并增加PC指针,从内存中读取指令并执行。如此周而复始。
|
|
131 | 136 | 取指阶段:同MOV指令
|
132 | 137 | 执行阶段:OC发出控制命令,打开IR输出三态门,将IR中的地址码101发送到DBus上,将DBus上的地址码101打入到程序计数器PC中,PC中原先的地址106被更换。于是下一条指令不是从106单元取出,而是转移到101单元取出。至此JMP指令执行周期结束。
|
133 | 138 | -- 指令集:指令集指的是一个CPU所能够处理的全部指令的集合
|
134 | | - -- 寻址:寻址方式分为指令寻址跟数据寻址两大类。寻找下一条要执行的指令地址,称为指令寻址。寻找操作数的地址称之为数据寻址。 |
135 | | - -- 指令的寻址模式:确定本条指令的数据地址和下条将要执行的指令地址的方法。文档:https://zhuanlan.zhihu.com/p/54200987 |
136 | | - -- 立即寻址方式:指令中有立即数的寻址方式,例如:MOV AX,1290H |
137 | | - -- 寄存器寻址方式:操作数在寄存器中的寻址方式,例如:MOV AX,BX |
138 | | - -- 直接寻址方式:操作数的有效地址直接放在指令中,例如:MOV AX,DS:[2000H] |
139 | | - -- 段超越:数据不在数据段中,需要在指令中用段超越前缀(段寄存器名加冒号)指出 |
140 | | - -- 寄存器间接寻址方式:EA是间接从寄存器得到,例如:MOV AX,[BX] |
141 | | - -- 寄存器相对寻址方式:EA是一个基址或变址寄存器内容再加上8或16位位移量之和,例如:MOV AX,[BX+1234H] |
142 | | - 注意:位移量可以为TOP[],TOP为符号地址,即位移量,或者在中括号里,也可以用小点连接 |
143 | | - -- 基址变址寻址方式:EA为一个基址寄存器加变址寄存器的内容,例如: MOV AX,[BX+DI] |
144 | | - -- 相对基址变址寻址方式:EA为一个基址寄存器加变址寄存器加位移量,例如:MOV AX,[MASK+BX+SI] |
145 | | -·数据表示方法: |
146 | | - -- Bit:"位"或"比特",是计算机运算的基础 |
147 | | - -- Byte:"字节",是计算机文件大小的基本计算单位 |
148 | | - -- 1byte=8bits |
149 | | -·数据的存储: |
150 | | - -- 种类:寄存器、缓存、RAM、ROM、硬盘等 |
151 | | - -- 离cpu越远,速度越慢,但通常容量越大 |
152 | | - -- 文档: |
153 | | - 《请问CPU,内核,寄存器,缓存,RAM,ROM的作用和他们之间的联系? - 罗成的回答 - 知乎》:https://www.zhihu.com/question/24565362/answer/54451597 |
154 | | -·cpu与内存: |
| 139 | + |
| 140 | +*汇编语言:指令集的语义化 |
| 141 | +·指令由操作码和操作数组成,操作码和操作数都是二进制码,导致的结果就是这种代码难以阅读,而汇编码是比机器码更容易被人理解的代码 |
| 142 | + 例如(1+4)*2+3的二进制计算为: |
| 143 | + 0100 0001 ;寄存器存入1 |
| 144 | + 0001 0100 ;寄存器的数字加4 |
| 145 | + 0010 0000 ;乘2 |
| 146 | + 0001 0011 ;再加三 |
| 147 | + 汇编码计算为: |
| 148 | + MOV 1 ;寄存器存入1 |
| 149 | + ADD 4 ;寄存器的数字加4 |
| 150 | + SHL 0 ;乘2(介于我们设计的乘法器暂时只能乘2,这个0是占位的) |
| 151 | + ADD 3 ;再加三 |
| 152 | +·机器指令和汇编码是一一对应的,汇编码可以通过汇编器转换为机器指令 |
| 153 | +·MARS(MIPS汇编程序和运行时模拟器):https://blog.csdn.net/y_universe/article/details/82875244 |
| 154 | + |
| 155 | +·内存:存储空间的抽象 |
| 156 | + -- 数据表示方法: |
| 157 | + -- Bit:"位"或"比特",是计算机运算的基础 |
| 158 | + -- Byte:"字节",是计算机文件大小的基本计算单位 |
| 159 | + -- 1byte=8bits |
| 160 | + -- 数据的存储: |
| 161 | + -- 种类:寄存器、缓存、RAM、ROM、硬盘等 |
| 162 | + -- 离cpu越远,速度越慢,但通常容量越大 |
| 163 | + -- 文档: |
| 164 | + -- 《请问CPU,内核,寄存器,缓存,RAM,ROM的作用和他们之间的联系? - 罗成的回答 - 知乎》:https://www.zhihu.com/question/24565362/answer/54451597 |
155 | 165 | -- 物理内存的特点:
|
156 | 166 | -- 内存按访问的方式来看,就像长方形的带子,地址依次升高
|
157 | 167 | -- 内存是一个随机读写设备,即可以访问内部任何一处,不需要从头开始找,只要直接给出地址即可,如访问内存0xc00,只要将该地址写入地址总线便可
|
|
217 | 227 | -- cpu中存在基地址寄存器和界限寄存器
|
218 | 228 | -- 基地址寄存器是该程序段的起始内存地址
|
219 | 229 | -- 界限寄存器是允许的访问的最大内存地址或者以基地址寄存器为基准的最大偏移量,应用程序进程访问超过界限的内存即被禁止
|
220 | | - -- 进程对内存具体规划: |
| 230 | + -- 进程对内存抽象规划: |
221 | 231 | -- 内存从低位到高位分别是:
|
222 | 232 | -- 代码段(文本段):函数编译成二进制后存到磁盘,运行时将二进制从磁盘加载到内存中
|
223 | 233 | -- 数据段(静态空间):全局变量、常量、静态变量存数据段
|
|
232 | 242 | -- 文档:
|
233 | 243 | 《内存寻址原理》:https://blog.csdn.net/fivedoumi/article/details/50493575
|
234 | 244 | 《CPU是如何访问到内存的?--MMU最基本原理》:https://blog.csdn.net/jasonchen_gbd/article/details/79461771
|
235 | | -·中断: |
| 245 | + |
| 246 | +·寻址:cpu对内存的访问 |
| 247 | + -- 存储单元中存放的数据信息大致可分为两大类,两类信息的寻址方式既有相同之处,又各有特点: |
| 248 | + -- 指令寻址:由于程序中的指令序列通常是顺序排列的,对于顺序推进的指令序列,采用程序计数器PC加1的方式自动形成下一条指令的地址。当程序发生转移时,就不能采用上述方式,此时把指令地址的形成转换为操作数地址的寻址。把指令不当指令信息,而当作操作数信息来处理、按操作数的寻址方式获得指令地址。 |
| 249 | + -- 操作数寻址:操作数地址的寻址方式比较复杂,主要原因是,操作数本身不能像指令那样顺序排列,很多操作数是公用的,集中放在某一划定的区域。有些操作数是原始值存放在存储器中,有些则是中间运算的结果或先前运算的结果。它们的来源并无规律,具有很大的随机性和浮动性,这样就增加了获得有效地址的难度。另一方面随着程序设计技巧的发展,为了提高程序的质量也提出了很多操作数设置方法,丰富了寻址的手段。 |
| 250 | + -- 一个指令系统具有哪几种寻址方式,能否为编制程序提供方便是指令系统设计的关键,也是一个技巧性极强的问题,它是初学者理解一个指令系统的难点。在不同的计算机中,寻址方式的分类和名称不很统一,但大多可以归纳为以下几种方式:立即寻址、直接寻址、间接寻址、变址寻址以及它们的变型与组合 |
| 251 | + -- 寻址的分类:根据指令和操作数在不同的位置可将寻址方式如下划分 |
| 252 | + -- 立即数寻址:操作数包含在指令中,即指令中直接给出了操作数,操作数紧跟在操作码的后面,在取出指令的同时,也就取出了操作数。立即有操作数可供操作之用,所以称为立即操作数,或立即寻址。立即寻址的指令执行起来很快,CPU将数据与指令一起从存储器取出,不必通过寻址计算就获得了操作数。立即寻址也便于程序员使用。但是,因为数据和地址都是固定的,所以这种寻址方式灵活性最差。立即寻址方式可用来提供常数,设置初始值等。例如:MOV AX,1290H //1290H这个地址移动到AX寄存器中,这样,给出的地址就是操作数本身 |
| 253 | + -- 寄存器寻址:当操作数不放在内存中,而是放在CPU的寄存器中时,从寄存器中取操作数的方式称为寄存器寻址。 |
| 254 | + -- 寄存器直接寻址:在指令中,直接给出操作数所在的寄存器编号,例如:MOV AX,BX |
| 255 | + -- 寄存器间接寻址:寄存器中给出的不是一个操作数,而是操作数所在的主存单元的地址,EA是间接从寄存器得到,例如:MOV AX,[BX] |
| 256 | + -- 寄存器相对寻址方式:EA是一个基址或变址寄存器内容再加上8或16位位移量之和,例如:MOV AX,[BX+1234H] |
| 257 | + 注意:位移量可以为TOP[],TOP为符号地址,即位移量,或者在中括号里,也可以用小点连接 |
| 258 | + -- 内存寻址: |
| 259 | + -- 直接寻址:即地址码字段直接给出操作数所在的内存地址,例如:MOV AX [200] //将地址为200处的数据,存放到AX中 |
| 260 | + -- 基址寻址:基址寻址就是在操作数中用基址寄存器(在实模式下只能用bp和bx寄存器)作为地址的起始,地址的变化以它为基础。就是将CPU中的基址寄存器的内容,加上变址寄存器的内容而形成操作数的有效地址。例如:add word[bx], 0x1234 //将0x1234加上内存地址ds:bx处的值后再存入内存地址ds:bx中 |
| 261 | + -- 变址寻址:变址寻址和基址寻址类似,只是寄存器由bx、bp换成了si、和di。例如:mov [di], ax //将寄存器ax的值存入ds:di指向的内存 |
| 262 | + -- 基址变址寻址方式:EA为一个基址寄存器加变址寄存器的内容,例如: MOV AX,[BX+DI] |
| 263 | + -- 相对基址变址寻址方式:EA为一个基址寄存器加变址寄存器加位移量,例如:MOV AX,[MASK+BX+SI] |
| 264 | + |
| 265 | +·中断:cpu与人的交互 |
236 | 266 | -- 外界发生中断时,中断信号经过中断控制器,最终达到CPU的中断引脚上,当那个管脚电平变低(或者变高)的时候,cpu就会被打断,并从特定地址开始执行。
|
237 | 267 | -- 中断的意义:中断是处理器对外开放的实时受控接口。一个没有中断的计算机体系是决定论的:得知某个时刻CPU和内存的全部数据状态,就可以推衍出未来的全部过程。这样的计算机无法交互,只是个加速器。添加中断后,计算机指定了会兼容哪些外部命令,并设定服务程序,这种服务可能打断当前任务。这使得CPU"正在执行的程序"与"随时可能发生的服务",二者形成了异步关系,外界输入的引入使得计算机程序不再是决定论。由人实时控制的中断输入,是无法预测的。再将中断响应规则化,推广开,非计算机科学人群就能控制计算机,发挥创造力。电竞鼠标微操,数码板绘,音频输入合成,影像后期数值调整,键盘点评天下大势,这些都不是定势流程,是需要人实时创造参与其中的事件,就由中断作为载体,与计算机结合了起来。
|
238 | 268 | -- 提高工作效率
|
|
256 | 286 | 09 0x0024 键盘
|
257 | 287 | 18 0x0048 打印机
|
258 | 288 | 100 0x0190 自定义
|
| 289 | + |
259 | 290 | ·思考:
|
260 | 291 | -- 从人脑计算到冯诺依曼机、从晶体管到高级语言,就是一个不断虚拟(抽象)的过程
|
261 | 292 |
|
262 | | -*汇编语言: |
263 | | -·MARS(MIPS汇编程序和运行时模拟器):https://blog.csdn.net/y_universe/article/details/82875244 |
264 | 293 |
|
265 | 294 |
|
266 | 295 |
|
|
0 commit comments