CPU的硬件结构和汇编语言

知乎用户、朱超然谭厶 等人赞同
是,这个解释起来有点长。Be patient
现代的CPU没拆过,我只在计算机组成原理实验课上用VHDL在某个实验平台上作过一个模拟的CPU。举个例子你可能比较好理解。
好比咱们设计一套指令集,其中确定有条加法指令。好比Add R1 R2 。咱们能够认为这条指令的意思是计算寄存器R1中的内容和R2的和,而后把结果存到R1寄存器中。
那么通过编译后这条指令会变成二进制,好比010100010010 。这条二进制指令一共12位。明显能够分为三大部分。最前面的0101表示这是条加法指令,后面0001说的是第一个操做数是寄存器1,最后0010说的是第二个数就是寄存器2(其实实际没有这么简单的指令,至少应该区分操做数是寄存器仍是直接的数据,但为了把这说的更容易理解做了简化)。咱们能够经过十二根导线把这条指令输入一个CPU中。导线通电就是1,不通电就是0 。为了叙述方便咱们从左到右用A0-A11给这12根导线编上号。
而后计算机会分析这条指令。步骤以下:
  1. 最开始的两根导线A0和A1,第一根有电第二根没电,就能知道这是一条运算指令(而非存储器操做或者跳转等指令)。那么指令将被送入逻辑运算单元(ALU)去进行计算。其实很简单。只要这两根线控制接下来那部分电路开关便可。
  2. 接下来的A2和A3,01表示加法,那么就走加法运算那部分电路,关闭减法等运算电路。
  3. A4-A7将被送入寄存器电路,从中读取寄存器保存的值。送到ALU的第一个数据接口电路上。
  4. 后面的A8-A11一样被送入寄存器选择电路,接通R2寄存器,而后R2就把值送出来,放到ALU的第二个数据接口上。
  5. ALU开始运算,把两个接口电路上的数据加起来,而后输出。
  6. 最后结果又被送回R1。
基本上简单的运算计算机就是这么操做的。他其实不知道你那些指令都是什么意思。具体的指令编程机器码后就会变成数字电路的开关信号。其中某几段会做为控制信号,控制其余部分的数据走不一样的电路以执行运算。他没有一个地方保存着如何翻译这些机器码的字典,全部机器码的意义都被体如今整个电路的设计中了。
固然,从汇编到机器码这步是汇编程序翻译的。汇编程序固然知道某条指令要翻译成什么样的机器码。

 
 
评分最高的(@Cascade )回答的应该是指令是如何执行的,对题主提的指令集存在CPU哪里,个人回答是:1. 指令集是在设计CPU时规定的,指令集规定了有哪些CPU可以“一条条”执行的“指令”是合法的。2. 指令集是一个集合,它的功能性体如今每条可以执行的“指令”上面。涉及到具体指令后,就涉及到谁是“操做对象”,和“如何找到操做对象”,“对操做对象进行什么操做”,这些问题上来。3. 指令的功能是经过CPU中功能逻辑电路来实现的,以前的“指令设计”决定了如何进行“逻辑电路设计”。而相同的指令能够采起不一样的逻辑电路设计。4. 由于“指令集”自己没有功能性,因此在CPU中你不能找到“指令集”这个实体,可是指令集中的指令与CPU的内部晶体管组成的逻辑电路是等价的(除了指令部分还有中断,外设等这些暂不考虑),那么非要化等价的话,就是实现指令集中各指令的总体晶体管逻辑电路。5. 若是你非要在没给出指令集的CPU来找到它的指令集的话,你能够经过修改PC指向的下一条指令的内容,并观察内存及各寄存器的变化,来试探每条指令编码的功能(这显然没有什么实际价值)(你能够用这种方法去理解指令的功能)。
相关文章
相关标签/搜索