CPU 怎么识别我们写的代码?

出处:网络整理 发布于:2026-08-19 15:28:06

  在计算机领域,CPU 如何识别我们编写的代码是一个基础且关键的问题。下面,我们将从底层硬件角度出发,深入剖析 CPU 对代码的识别和读取过程。
  首先,我们要了解半导体的特性。半导体是介于导体和绝缘体之间的一类物质,以二极管为例,它具有独特的导电特性。电流可以从 A 端流向 C 端,但反向则不行,可将其理解为防止电流逆流的器件。当 C 端为 10V,A 端为 0V 时,二极管可视为断开;当 C 端为 0V,A 端为 10V 时,二极管可视为导线,终会使 A 端和 C 端电压都变为 10V。这一特性可用于制作一些有趣的电路,如 “与门”。在 “与门” 电路中,A 端和 B 端只要有一个是 0V,Y 端就会和 0V 端直接导通,导致 Y 端也变为 0V;只有当 A、B 两端都是 10V 时,Y 和 A、B 之间才没有电流流动,Y 端才是 10V。我们将有电压的地方计为 1,0 电压的地方计为 0,这样就形成了逻辑关系:AB 必须同时输入 1,输出端 Y 才是 1;AB 有一个是 0,输出端 Y 就是 0。除了 “与门”,还有 “或门”“非门” 和 “异或门” 等逻辑门电路,它们的工作原理与 “与门” 类似,都可以通过半导体器件实现。在实际应用中,由于二极管和三极管功耗较大,通常会用场效应管(MOS 管)来构建这些逻辑门电路。

  利用这些逻辑门电路,我们可以构建更复杂的电路,如加法器。简单的加法器输入只能是 0 或者 1,可计算 0 + 0、1 + 0 或者 1 + 1。输出端 S 是结果,C 代表是否发生进位,例如二进制 1 + 1 = 10,此时 C = 1,S = 0。为了计算更复杂的加法,我们还需要设计全加法器,它有三个输入和两个输出,分别输入要相加的两个数和上一位的进位,输出结果和是否进位。将多个全加法器串联起来,就可以得到多位加法器,如 4 位加法器可计算 4 位数的加法,达到了一定的计算能力。

  乘法器的实现相对复杂一些。对于简单的乘 2 操作,我们可以通过将二进制数左移一位并在位补零来实现。而对于其他乘法,通常是通过位移和加法的组合来实现。在早期,简单的 CPU 可能没有专门的乘法指令,乘法是通过软件编程实现的。
  接下来,我们要让 CPU 能够根据指令进行计算。为此,引入了两个重要的模块:触发器(flip - flop,简称 FF)和选择器(MUX)。触发器可以存储 1bit 数据,多个触发器并联可以组成寄存器(Register),用于保存计算的中间数据或状态。选择器则可以根据输入信号选择输出不同的数据。通过为加法器和乘 2 模块(位移)设计激活针脚,我们可以控制数据流入不同的模块。为 CPU 设计了 8 个输入针脚,包括 4 位指令和 4 位数据,并定义了 3 个指令:0100 表示数据读入寄存器,0001 表示数据与寄存器相加并将结果保存到寄存器,0010 表示寄存器数据向左位移一位(乘 2)。当输入相应的指令时,就像开关一样激活 CPU 内指定的模块并改变其连通方式,从而得出计算结果。

  这里可能会有人问,CPU 里面有成千上万个小模块,一个 32 位 / 64 位的指令能控制那么多吗?实际上,真正的 CPU 会有一个解码器(decoder),将指令翻译成需要的形式。如果输入未设计的指令,可能会导致不可预料的后果,比如 CPU 崩溃,但实际的 CPU 会有各种保护性设计。
  执行一个指令通常需要多个步骤。我们设计的简易 CPU 执行一个指令大概需要三步:读取指令、执行指令、写寄存器。而经典的 RISC 设计则分五步:读取指令(IF)、解码指令(ID)、执行指令(EX)、内存操作(MEM)、写寄存器(WB)。现代的 x86 CPU 有些指令可能要分将近 20 个步骤。CPU 通过类似开关的机制按步骤执行指令,但提高执行速度可能会导致功耗增加、发热上升和稳定性下降,这就是所谓的 “超频”,新手不建议尝试。
  CPU 通过触发器保存中间状态来知道自己执行到哪一步,具体涉及到有限状态机理论(FSM)。有了这些指令和模块,我们就可以编写程序进行计算,例如计算(1 + 4)×2 + 3。
  0100 0001 ;寄存器存入1
  0001 0100 ;寄存器的数字加4
  0010 0000 ;乘2
  0001 0011 ;再加三
  早期计算机编程是通过插线实现的,效率极低。后来,为了提高编程效率,人们发明了不同的编程语言。只有 0 和 1 组成的语言被称为机器语言(机器码),是 CPU 能理解的语言,但它对人类来说难以阅读和编写。于是,人们将机器语言改写成汇编语言,汇编语言与机器语言一一对应,增强了可读性和开发效率。例如:
  MOV 1 ;寄存器存入1
  ADD 4 ;寄存器的数字加4
  SHL 0 ;乘2(介于我们设计的乘法器暂时只能乘2,这个0是占位的)
  ADD 3 ;再加三
  然而,汇编语言对于人类来说仍然晦涩难懂,因此又发明了语言,如很多语言可以这样写:
  a=(1 + 4)*2 + 3;
  但计算机无法直接识别语言,需要通过编译器将其翻译成汇编语言或机器语言。编译过程较为复杂,例如将语言表达式转换为后缀表示法(逆波兰表示法),再转换为汇编语言。
  (1 + 4)*2 + 3 转换成 1,4,+,2,*,3,+
  从头处理后缀表示法,依次将数字存入寄存器、进行加法和乘法运算,终将翻译好的汇编语言转换为机器语言即可在 CPU 上运行。
  ,我们再谈谈栈与硬件的关系。栈是一种常用的数据结构,为了让 CPU 能更好地支持栈操作,我们为其增加了一组寄存器和几个指令,如 RDA/RDB 和 WRA/WRB,分别用于将指定内存地址的数据读到寄存器 A/B,以及将寄存器 A/B 的内容写到指定地址。同时,为了处理更多指令,增加了解码器。通过解码器,我们可以更灵活地控制 CPU 的各个模块。例如,用第二个位作为是否选择寄存器的针脚,用位控制是否进行内存操作等。

  

  使用栈时,先进行栈地址初始化,然后进行入栈和出栈操作。为了进一步提高栈操作的效率,我们可以给 CPU 再加一个寄存器 SP,并定义 PUSH 和 POP 指令,这样可以减少指令消耗,提高程序运行效率。但编译参数不同,编译出来的程序在不同硬件上的运行效率也会有所不同。开源程序在重新编译时较为方便,而闭源程序则需要开发者的支持。
关键词:CPU

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

90年代就被淘汰的CPU Mos6502真的不行了么?
广告
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:
技术客服:

0571-85317607

网站客服电话

0571-85317606

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!