计算机是怎么将机器码转换成物理电路的逻辑的?

brybaby-avatar

brybaby

2024-11-04T16:21:53+00:00

最近看各种高级语言低级语言,最终都要编译成为二进制的0/1机器码,可是这离最终的物理执行还差了一步。关键就是比如MOV A B这种代码被编译成为了01机器码之后,是怎么产生物理层面的电路逻辑的?
难道一个无生命的电路逻辑能够“看懂”机器码的意义然后自行执行到物理电路上?如果不是,计算机是怎么理解01机器码并执行到物理层面的电路上的呢?

———————


我学过模拟电路和数字电路基础,也知道半导体逻辑门,也知道3.3V和1.7(0.7?V)代表的高低电平和0/1之间的对应关系……

我只是想有没有人能通俗的讲一下,计算机是怎么把机器码0100101001变成物理过程的……毕竟一堆01000101001是怎么样让计算机自主地实现了MOV A
B?这样的逻辑呢,为什么不是0100101是MOV A B呢?计算机是怎么知道一堆不同的01要来执行的不同物理过程的呢?有没有人可以简单的概括一下,我想不通……

—————

我现在甚至都不知道为什么我按下了Run/Debug这个按钮,计算机就会执行这条语句,为什么?它中间发生了什么?怎么从信息变成实际处理的物理过程的,中间发生了什么?
catfoosh-avatar

catfoosh

eda,你值的拥有
lemoncrypto-avatar

lemoncrypto

《计算机组成原理》
大一必修课
bumsniffer13-avatar

bumsniffer13

呆建议从与或非门学起
SpyderxProdigy-avatar

SpyderxProdigy

我自己大致的理解就是关键字替换,这个关键字的集合就是指令集。具体执行基本就是逻辑电路了,逻辑电路应该是死的
ꁝꋬ꒯ꏂꇙ-avatar

ꁝꋬ꒯ꏂꇙ

最根源是靠半导体高低电平区分的。
Mera-avatar

Mera

半导体这名字细想。
Tylor-avatar

Tylor

编码器,译码器,选择器,全加器,存储器,都是门电路实现的,建议玩玩steam上的图灵完备,自己手搓一个cpu试试
Toxxxic-avatar

Toxxxic

买本计组和计原解答你的所有疑问
有译码器的
上本科的时候实验设计cpu哭笑
chronix-avatar

chronix

数字电路基础,好像是大一学的
Debarshi-avatar

Debarshi

语言调用指令寄存器里面存好的指令,指令寄存器出来的电信号通过mos管控制电路
Chuckles-avatar

Chuckles

+ by [水瓶2016] (undefined)

最近看各种高级语言低级语言,最终都要编译成为二进制的0/1机器码,可是这离最终的物理执行还差了一步。关键就是比如MOV A B这种代码被编译成为了01机器码之后,是怎么产生物理层面的电路逻辑的?
难道一个无生命的电路逻辑能够“看懂”机器码的意义然后自行执行到物理电路上?如果不是,计算机是怎么理解01机器码比执行到物理层面的电路上的呢?

你不要认为计算机是通过理解你代码的逻辑来实现功能的,本质上是把你的代码抽象成一系列数学和逻辑运算,计算机只是完成加减乘除与或非这些功能算出一个结果,毕竟是“计算”机嘛,从这个角度讲其实也就是高级点的算盘。而如何实现数学及逻辑计算的电路,这个需要补充数字/模拟电路知识,更深入的还有集成电路方面的知识
raggyshakes-avatar

raggyshakes

用模拟电路做计算就明白了。

哭笑
brybaby-avatar

brybaby

+ by [色十字军] (undefined)

编码器,译码器,选择器,全加器,存储器,都是门电路实现的,建议玩玩steam上的图灵完备,自己手搓一个cpu试试

这是个游戏吗?我都没听说过哭笑
Noway630-avatar

Noway630

前端解码器会把这段机器码解码成后端解码器看得懂的东西。然后就有很多种做法了,像这种mov可以被转成addi x1, x2, 0, 或者add x1, x0, x2来节约后端解码器空间。至于add到了后端计算单元就很简单了,从寄存器读出来写回去就完了。
如果你想再优化一般是可以在renamer 直接把x1 rename到x2的同一个物理寄存器上。这样后端甚至什么都不需要执行。这个东西前面楼上的书如果没有讲到乱序执行应该是不会提的。
badkeyboard944-avatar

badkeyboard944

可以去学一下数字电路,然后在fpga上实现一个riscv cpu,你说的这些基本就都懂了(就是过程有亿点长,难度有亿点高)
BlackMustang-avatar

BlackMustang

在最初的CPU中,这个不需要转。它直接就是对应线路的开关信号。

当然现代CPU早就不这么干了。
Multi-avatar

Multi

看下ALU的实现逻辑,再看下PC寄存器
Noway630-avatar

Noway630

解码器在硬件语言层面上是一个巨大的 if -- 当然放到实际画图纸了一般会抽象成更直接的电路。简单来说这个if长得就像如果opcode = 114514abcd,告诉renamer src1 = x2, dest = x1,op = add, 然后再由renamer负责告诉后端具体是哪个物理寄存器。后端负责从物理寄存器读数据,运算,再写回去
brybaby-avatar

brybaby

+ by [Jason0037] (undefined)

用模拟电路做计算就明白了。

哭笑

是用直接用吧数字电路吧,但是对于数字电路我可以直接给输入高低电平来模拟,而计算机是机器码,那计算机怎么知道我那一堆机器码要怎么给电平?就是把信息变成物理过程是怎么实现的?一个是信息,一个是物理过程,难道计算机也是硅基生命,读懂了机器码的意义再自动给自己高低电平的?