cpu是怎么认识代码的(cpu是从哪里获取信息和指令)
在生活中,很多人可能想了解和弄清楚CPU 是怎么认识代码的?的相关问题?那么关于cpu是怎么认识代码的的答案我来给大家详细解答下。
讲一下我的理解。从偏向于电路的角度,来讲讲CPU怎么认识二进制的数
首先,二进制数据储存在存储中,主存储器是DRAM,它由电容和一个门控开关组成,电容充满电荷时,代表存储的是1,因为如果你这时候打开门控开关,你用一个万用电表去读数,读到的就是电容板的电势,你自然读到了高电平。电容器放完电,不带电荷了,你用万用表读电压,读到的自然就是接地的电压,也就是低电平。
每个内存单元只能存1或0,换句话说就是1bit的二进制数据,内存动辄几个G,也就是有数十亿个这样的单元储存着0和1,把这些单元按矩阵排列起来。我们就可以通过特定的行数和列数,找到我们所需要的单元。打开它的门控开关,它就会向数据通路上持续地显示出高/低电平(1和0),直到处理器接受到它们。这就是内存寻址。
CPU这边就接受到了许多1和0,就是从内存传出的高低电平的信号。如何识别这些信号呢?人们就约定了一种规范,这种规范就叫做指令编码。人们在规范中,约定了指令的长度。指令的格式,这样,在设计CPU的时候,人们就会决定要有多少根信号线用来传输数据。一般情况下,人们会把指令的低位当作操作码,高位当做操作数,于是,低位的信号线就连接到了解码器。解码器一般的数字电路基础书都有,最简单的解码器是一种最小项输出电路。操作码是5位的。可以转化成32位的输出。这种输出有高有低,可以作为CPU内部各个工作电路的使能端,控制它们是否工作。高位的信号线就连接到了多路选择器,可以通过多路选择器在寄存器组中选择寄存器用来保存操作数(就是一对1和0)。或者读取操作数。寄存器是一种能够保存高低电平的电路。它可以是锁存器,也可以是D触发器。具体原理你可以去查相关数字电路的书籍
至于CPU要怎么去执行二进制数据的运算。许多数字电路的书籍里都会介绍半加器,全加器,超乘法器,除法器等。它们能够接受高低电平的输入,并相加相减形成输出。再把它们保存到寄存器里。
下面我们举个例子。一个最简单的二进制加法指令是这样执行的,首先,CPU要取指,指令的地址保存在程序计数器PC里,这是一个寄存器,保存着指定长度的高低电平。取指时。CPU通过信号线向内存控制器发送一个高电平,表示我要访问你了,内存控制器回应一个高电平,我已经做好准备了,于是,寄存器与地址信号线相连的门控开关被打开,寄存器里的高低电平信号就通过电线抵达内存,内存控制器把它分成两部分,一部分是行地址,一部分是列地址,各自通过两个多路选择器,得到了行和列,打开找到的门控开关,于是内存里保存的高低电平被读出,通过数据信号线送到了CPU。其中低位送去解码器,高位送去多路选择器,解码器解码,输出控制信号,让加法器开始工作。多路选择器找到了寄存器,打开门控开关,里面存储的高低电平输入进入加法器,输出被写入寄存器,加法运算就完毕了。
以上只是非常简单的例子,实际的计算机系统非常复杂。指令编码也复杂得多。可以说要好几本书都讲不完的。
全局变量,局部变量这些东西,可以看看汇编语言中的调用约定,所谓栈,其实就是一段内存空间,内存是怎么保存数据和读取数据的前面已经说过。出栈,入栈,其实就是指令的一种,即push指令和pop指令,变量,也就是一串高低电平,保存在寄存器中,CPU从内存中取到push指令的时候,就会把寄存器中保存的变量写入内存中的指定地址,这个地址由栈基址寄存器和偏移量指定。
温馨提示:通过以上关于CPU 是怎么认识代码的?内容介绍后,相信大家有新的了解,更希望可以对你有所帮助。