当前位置:首页 > 技术学院 > 技术前线
[导读]所有程序员都知道CPU只认识0和1的二进制,但是绝大多数人从来没有真正想明白:一块由硅晶管组成的硬件电路,到底是怎么理解这串抽象的0和1,最终完成复杂的加减乘除运算,把你写的代码变成屏幕上的画面、音箱里的声音的。CPU根本没有“理解”这个概念,它本质上就是一个由几十亿个微小开关组成的巨型状态机,0和1根本不是什么抽象的数字符号,而是对应电路里两种最基础的物理状态。彻底理清整个底层链路,你就能看透计算机世界最底层的运行真相。

所有程序员都知道CPU只认识0和1的二进制,但是绝大多数人从来没有真正想明白:一块由硅晶管组成的硬件电路,到底是怎么理解这串抽象的0和1,最终完成复杂的加减乘除运算,把你写的代码变成屏幕上的画面、音箱里的声音的。CPU根本没有“理解”这个概念,它本质上就是一个由几十亿个微小开关组成的巨型状态机,0和1根本不是什么抽象的数字符号,而是对应电路里两种最基础的物理状态。彻底理清整个底层链路,你就能看透计算机世界最底层的运行真相。

一、二进制的物理本质:从抽象符号到硬件可识别的电信号

CPU根本没有任何能力去识别我们人类定义的“数字”,它能感知到的只有电路里的电压高低。工程师把CPU电路里高于某个阈值的高电平状态抽象成数字1,把低于某个阈值的低电平状态抽象成数字0。所谓的二进制0和1,根本不是CPU内部存在的某种抽象数据,只是我们给电路的两种最基础物理状态起的人类能看懂的代号。

你写的所有程序里的二进制代码,在被加载到内存之后,每一个比特位都对应内存芯片里一个微小的电容的充电状态:电容充满电代表1,电容放电之后代表0。当CPU需要读取这些二进制数据的时候,内存芯片会把每一个比特的电容状态,转换成对应高低电平的电信号,通过主板上的总线线路传输到CPU的引脚,送入CPU的内部电路里。

从这一刻开始,所有的二进制数据都不再是存储介质里的静态状态,全部变成了CPU内部电路里流动的电信号。没有任何软件层面的“解释”过程,所有的信息全部以物理电信号的形态存在,CPU接下来所有的运算操作,本质上都是对这些电信号的流向和组合状态做物理层面的控制。

很多教程会把二进制描述成CPU的“母语”,这个说法其实是不准确的。CPU根本没有任何语言层面的理解能力,它只是一个完全由物理规则驱动的复杂电路,所有的运算行为全部是电路的物理特性自然决定的,没有任何智能识别或者翻译的过程。

二、逻辑门与运算电路:把01电信号转换成计算动作

CPU内部几十亿个晶体管,最基础的组成单元就是各种逻辑门。每一个逻辑门都是由几个晶体管搭建出来的简单电路,它可以接收几个输入的高低电平信号,根据固定的物理规则,输出一个对应的高低电平信号。比如与门电路,只有所有输入都是高电平1的时候,输出才会是高电平1;只要有一个输入是低电平0,输出就直接是低电平0。

工程师用这些最基础的与门、或门、非门、异或门做组合,就能搭建出可以完成任意复杂逻辑的运算电路。比如把几个异或门和与门组合起来,就能实现半加器,完成两个1比特二进制数的加法运算;再把多个半加器和或门组合起来,就能实现全加器,支持低位进位的多比特加法运算。把多个全加器按照位宽串联起来,就能直接得到一个可以完成两个32位二进制数加法的加法器电路。

整个过程里完全没有任何软件层面的“计算”逻辑,当你把代表两个数字的01电信号输入加法器的输入端之后,电信号会在极短的时间里流过所有的逻辑门电路,在输出端直接得到加法运算结果对应的电信号组合。整个运算过程是电路的物理特性自然完成的,CPU根本不需要“理解”这两个数字代表什么,只要输入对应的电信号,输出端自然就会得到正确的运算结果。

所有的CPU指令,本质上都是用这些逻辑门组合出来的专用运算电路。乘法器、移位器、分支判断电路,全部都是由海量基础逻辑门搭建出来的专用硬件通路,不同的01指令电信号输入之后,会自动选通对应的运算通路,完成对应的硬件操作。

三、指令译码与执行:二进制指令流的全硬件执行流程

当CPU从内存里读取到一条二进制的机器指令之后,首先会把这串01电信号送入指令译码器电路。译码器本质上是一个极其复杂的组合逻辑电路,它会根据这串二进制电信号的不同组合,输出不同的控制电平信号,去选通CPU内部不同的硬件通路。

比如一条加法指令的二进制编码,经过译码之后,会输出控制信号把两个源操作数对应的寄存器选通,把里面的电信号送入算术逻辑单元的加法器输入端,同时选通加法器的输出通路,把运算结果写入目标寄存器。整个过程里,没有任何软件层面的解析步骤,全部是硬件电路通过电平信号的开关选通,自动完成所有的操作。

CPU的指令指针寄存器会自动不断指向下一条指令的内存地址,不断把新的二进制指令流加载进来,重复“取指-译码-执行”的硬件循环。整个过程完全不需要任何外部干预,只要给CPU接上稳定的时钟信号和电源,它就会按照电信号的物理规则,自动不断地执行下去,把你预先写好的二进制指令流全部跑完。

我们平时看到的游戏画面、播放的视频、运行的办公软件,所有这些复杂的上层功能,最终全部被拆解成了海量的二进制01指令和数据,通过电信号的形态在CPU的电路里流动,通过不同逻辑门的组合运算,一步步得到最终的运算结果。整个过程里CPU从来没有“理解”过任何一个二进制比特的含义,它只是忠实按照物理电路的规则,处理每一个高低电平信号,最终就涌现出了我们看到的所有复杂计算能力。

CPU理解二进制的真相,本质上就是用物理电路的两种稳定状态,去映射人类抽象出来的两个数字符号,再通过海量逻辑门的组合,把人类的计算需求,全部转换成电信号的流动和组合。没有任何神秘的智能过程,所有的复杂能力,都建立在最简单的物理规则之上。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭