CPU是如何识别代码的?他的工作原理是怎样的?
从本质上来说,CPU根本不认识代码!它的工作是机械化执行这些人类给出的指令,然后完成指令动作。
大家好!我是叮当大数据,很高兴回答您的这个问题,今天抛砖引玉,和您探讨这个问题。
一、CPU的组成:
每片CPU中都会有最基础的两个部分,控制单元 CU和算术和逻辑单元 ALU。
1、控制单元 CU
CU指控制单元(Control Unit),控制单元是CPU第一个必备的组件,因为它是整个CPU的指挥控制中心。
它根据我们预先编好的机器语言,按照顺序从存储器中取出各条指令,放在指令寄存器IR中,再通过指令译码确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出控制信号。
它分为硬连线控制单元和微型可编程控制单元两种类型。区别是,硬连线控制单元速度更快,而微型可编程控制单元则是可以自己调节。
2、算术和逻辑单元 ALU
ALU非常容易理解,算术逻辑单元(arithmetic and logic unit) ,简称ALU.
它的任务是完成所有算术和逻辑计算。它是由执行逻辑电路或逻辑门组成。
3、寄存器和内存
大家知道,CPU的工作就是执行提供的指令,而处理这些指令时需要大量的数据。
这些数据包括了中间数据,或是输入数据,或是输出数据。
那么这些数据放在哪里了?
于是有了寄存器。你理解成CPU内小容量的存储数据的地方就可以了,寄存器可以存储指令,输出数据,存储地址或任何类型的数据。
而寄存器的基础就是触发器(锁存器),它是由电路构成的逻辑门的组合 。
一个基础锁存器有一个逻辑门单元和3根线构成,我们可以启通过写入线来更改存储的数据。而禁用写入线时,输出始终保持不变。
当然,集成在CPU内的寄存器的速度很快,但很昂贵。
所以,人们想出了一个好办法,于是速度很慢的RAM出现了,人们叫它随机存取存储器,通俗叫法内存。没错就是你电脑插的内存条。
其实RAM就是一片集成了大量寄存器的集合,它可以存储更多数据。而当RAM没有电源供给时,数据会丢失。
4、高速公路是总线
以上的CPU,寄存器,存储器和输入输出设备中,所有数据都必须通过总线进行传输。下图很容易看到电脑的三种总线的对应关系,篇幅原因,不多说,理解就行了。
二、CPU机器语言:
CPU执行的我们叫它机器语言程序,就是用硬件实现的机器指令。
它是由一条一条指令组成的。机器语言使用绝对地址和绝对操作码,每一条指令都对应一个CPU的一个基本操作,而这些操作看透了实际上非常简单。
一条机器指令绝对操作码必须包括操作码和地址码。
操作码就是该指令所要完成的操作(加、减、乘、除、数据传送等),其长度取决于指令系统中的指令条数。
而地址码用来指上面加、减、乘、除的操作对象是谁?或者直接给出操作数,或者指出操作数的存储器地址或寄存器地址,它是确定的一个地址,所以叫绝对地址。
简单理解一条机器语言指令,请CPU同学将寄存器中第三排第二行数据加上第三排第三行数据相加,结果输出告诉我答案后,你就可以休息了。
基本内容:
- 算术,例如 加法、减法
- 逻辑指令,例如 和, 或,而 不是
- 数据指令,例如 移动、输入、输出、 加载、存储
- 控制流指令,例如 goto, 如果... goto,则 调用并 返回
- 通知程序已经结束,CPU 暂停。
三、汇编语言
看上去简单,但要实现用机器语言编写的程序的兼容,对计算机体系结构有非常苛刻的要求,且不说每家计算机其指令的数量与功能、指令格式、寻址方式、数据格式是差别的。
光是开发者的计算机的体系结构和普通用户程序接口必须完全相同,就很难达成。
并且机器语言灵活性较差,可阅读性也很差,编写程序员要求太高了,于是直接拿机器语言来编写成为不可能完成的任务。
怎么办?
于是汇编语言出现了,而与机器语言对应的语言我们叫统称汇编语言,它可以完美的改写成机器语言,这样就达到直接指挥CPU工作。
汇编语言使用了助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。
由于汇编更接近机器语言,能够直接对硬件进行操作,生成的程序与其他的语言相比具有更高的运行速度,占用更小的内存。
因此在一些对于时效性要求很高的程序、许多大型程序的核心模块以及工业控制方面大量应用。
以上从CPU的组成、工作流程、机器语言、汇编语言简单阐述了CPU为什么能够执行指令。
希望对您有所启发!