|
82 | 82 | 2、指令译码:指令寄存器中的指令经过译码,决定该指令应进行何种操作(就是指令里的操作码)、操作数在哪里(操作数的地址)。
|
83 | 83 | 3、执行指令,分两个阶段"取操作数"和"进行运算"。
|
84 | 84 | 4、修改指令计数器,决定下一条指令的地址。
|
85 | | - -- 5000 * 0.2的运算过程:寄存器1中的5000和寄存器2中的0.2导入ALU,计算结果1000返回到寄存器3中 |
86 | | - -- 时钟:《为什么CPU需要时钟才能工作》https://www.zhihu.com/question/21981280/answer/126921197 |
| 85 | + -- 时钟: |
| 86 | + -- 时钟就是一个固定频率的方波发生器 |
| 87 | + -- 工作原理:时钟产生一个方波,低电平代表逻辑0,高电平时代表逻辑1。逻辑电路中专门有电路能侦测到时钟的跳变,也就是从0 到1或者从1到0的过程。当检测到这个跳变后,CPU就开始执行下一个指令。因此时钟越快,CPU运转越快。超频就是把时钟都加快,让CPU工作在一个更快的频率下。 |
| 88 | + -- Q&A: |
| 89 | + -- 5000 * 0.2的运算过程是怎样的?寄存器1中的5000和寄存器2中的0.2导入ALU,计算结果1000返回到寄存器3中 |
| 90 | + -- 《为什么CPU需要时钟才能工作》https://www.zhihu.com/question/21981280/answer/126921197 |
87 | 91 | ·cpu指令集:运算的抽象集合
|
88 | 92 | -- 指令:
|
89 | 93 | -- 计算机通过指令指挥计算机工作。
|
|
184 | 188 | -- 地址的两次转换,的确是非常麻烦而且没有必要的,因为直接可以把线性地址抽像给进程。之所以这样冗余,Intel完全是为了兼容而已(Intel为了兼容,将远古时代的段式内存管理方式保留了下来,x86体系的处理器刚开始时只有20根地址线,寻址寄存器是16位。我们知道16位的寄存器可以访问64K的地址空间,如果程序要想访问大于64K的内存,就需要把内存分段,每段64K,用段地址+偏移量的方式来访问,这样使20根地址线全用上,最大的寻址空间就可以到1M字节,这在当时已经是非常大的内存空间了。)。
|
185 | 189 | -- 文档:
|
186 | 190 | 《CPU是如何访问到内存的?--MMU最基本原理》:https://blog.csdn.net/jasonchen_gbd/article/details/79461771
|
| 191 | +·中断: |
| 192 | + -- 外界发生中断时,中断信号经过中断控制器,最终达到CPU的中断引脚上,当那个管脚电平变低(或者变高)的时候,cpu就会被打断,并从特定地址开始执行。 |
| 193 | + -- 中断的意义:中断是处理器对外开放的实时受控接口。一个没有中断的计算机体系是决定论的:得知某个时刻CPU和内存的全部数据状态,就可以推衍出未来的全部过程。这样的计算机无法交互,只是个加速器。添加中断后,计算机指定了会兼容哪些外部命令,并设定服务程序,这种服务可能打断当前任务。这使得CPU"正在执行的程序"与"随时可能发生的服务",二者形成了异步关系,外界输入的引入使得计算机程序不再是决定论。由人实时控制的中断输入,是无法预测的。再将中断响应规则化,推广开,非计算机科学人群就能控制计算机,发挥创造力。电竞鼠标微操,数码板绘,音频输入合成,影像后期数值调整,键盘点评天下大势,这些都不是定势流程,是需要人实时创造参与其中的事件,就由中断作为载体,与计算机结合了起来。 |
| 194 | + -- 提高工作效率 |
| 195 | + 例如如果没有中断,将产生如下代码,要监听打印机是否就绪就花费大量资源 |
| 196 | + while(!printer.ready()){ |
| 197 | + sleep(10ms) |
| 198 | + } |
| 199 | + doPrint() |
| 200 | + -- 故障恢复(异常处理,紧急事件等) |
| 201 | + -- 简化编程模型(try/catch,计时器等) |
| 202 | + -- 中断请求: |
| 203 | + -- 硬件设备发给主板(打印机、键盘、鼠标等) |
| 204 | + -- 硬件中断:CPU异常(除以0),时钟信号等 |
| 205 | + -- 软件中断:发出(异常、切换到内核态等) |
| 206 | + -- 中断向量表: |
| 207 | + -- (一般在内存中)一块区域,存储了中断类型和中断响应程序的对应关系。每一行叫做一个中断向量 |
| 208 | + -- 向量表实例: |
| 209 | + 中断类型 ISR地址 描述 |
| 210 | + 00 0x0000 除以0 |
| 211 | + 01 0x0004 调试单步 |
| 212 | + 09 0x0024 键盘 |
| 213 | + 18 0x0048 打印机 |
| 214 | + 100 0x0190 自定义 |
187 | 215 |
|
188 | 216 |
|
189 | 217 | *汇编语言:
|
|
0 commit comments