机器代码在运行时实际上是什么样的?


21

当机器代码实际上由硬件和CPU执行时,它看起来像什么?

它看起来像是二进制,如指令由1和0表示,还是由十六进制数字组成,其中操作码是表示为十六进制数字的字节,可以分解为二进制数字,例如字节码?


24
您将看到导线,门和寄存器在硅片上闪烁。例如,visual6502.org / JSSim
Nayuki

4
@Nayuki我认为这种可视化效果很棒,值得一试!
nalzok

2
在我看来,这看起来什么都不像
-Gaius

3
当它真正被“执行”时,它甚至根本不存在。它是由CPU上的(硬件!)设备“ JIT编译”成微码的,它实际上指示CPU!
xuq01

2
了解计算机翻译的一种快速方法是从逻辑门构建计算机,我真的很喜欢观看Ben Eater制作的计算机youtube.com/playlist?list=PLowKtXNTBypGqImE405J2565dvjafglHU
Ferrybig

Answers:


38

我能给出的最佳答案是,它实际上并没有像任何东西一样“看起来”。CPU当前正在执行的指令由一系列导线表示,其中一些具有高电压,其中一些具有低电压。

您可以将高电压和低电压解释为零和一,但是您也可以将高电压和低电压解释为十六进制数字或类似汇编指令ADD $0 $1(与CPU的解释最接近)。这些数字和助记符本身就是人类阅读的便利。在内部,它只是电线上的电压。

在这些选项中,二进制是“最接近金属的”,因为零和一直接映射到电线上的高电压和低电压。但是其他任何一个都不是不正确的,并且它们通常更有用:有一个原因人们只看可执行文件的十六进制转储,而几乎不看二进制转储。


因此,您可以在十六进制编辑器中打开一个程序,并将十六进制表示的那些字节转换为可以由分配为零的电压和分配为一的电压运行的机器代码二进制吗?
蒂姆·哈德利

4
@TimHardly是!十六进制只是更易于阅读。同样,汇编甚至更易于阅读,但可以机械地转换为零和一。这就是为什么汇编程序比编译程序更容易编写的原因。
Draconis

谢谢,这整个问题扩展了我的知识,并消除了我的困惑。
蒂姆·哈德利

1
@TimHardly汇编程序一遍又一遍地将字符序列(例如“ NOP”)映射到一系列位(例如“ 10010000”),以将汇编文件转换为机器代码。操作码由CPU确定,因为它实际上是将要使用它们的部分。实际上,所有可以运行相同可执行文件的计算机都具有相同的操作码集。x86套件是最常见的套件,如今已在几乎所有PC中使用。另一个常见的是在许多游戏机中使用的MIPS。
Draconis

1
@TimHardly如果您的问题是,汇编程序可以询问CPU其NOP指令的操作码是什么,答案是否定的。汇编程序必须先知道要为该指令输出的字节,然后它才能工作。实际上,汇编程序可以为一个处理器输出程序,而其本身运行在不同的处理器类型上。
李斯特先生

11

“看起来”暗示一个隐喻。如果我们从字面上看“看起来像什么”,它将看起来像是一块花哨的蚀刻硅片,位于其主板上。目标显然是隐喻。为了建立这个比喻,我们首先要看看它到底是什么。然后我们可以建立一个可以接受的隐喻。这有点长,但幸运的是,它以一个视频隐喻结尾。

机器代码实际上以位的形式存储在内存中。存储器芯片通常是DRAM,它将那些位存储为电容器和电子两端的电压。两者相连-很难谈论没有电子的电压。有时谈论一个或另一个很方便,但要了解一个去哪里,另一个会跟随。

机器代码的旅程始于“获取”。将特定的电压模式施加到RAM芯片的导线,指示应将这组特定的位发送到CPU。为什么?不知道不在乎。通常,发送该信号是因为CPU完成了最后一条指令,并正在请求一条新指令作为本能响应,就像一条狗在您给它第一条指令之后要求第二种对待。此过程始于CPU自然不稳定造成的裤子原始踢动。当电源对芯片施加恒定电压时,电压的升高最终导致CPU在RAM芯片上施加正确的电压以获取第一条指令(我在手动调整BIOS层,因为它并不重要故事)。

现代内存并行地传输数据。这意味着组成机器代码的位被分成“通道”(32或64通用),这是说从RAM到CPU的32/64线的逻辑方法。这些线上的电压会根据需要升高和降低,以将其传输到CPU。

一旦进入CPU,就可以开始工作。这是微体系结构的领域,并且可能变得复杂,因为这实际上是一个十亿美元的产业。这些电压会影响晶体管,晶体管会影响其他电压,我们可以将其描述为“加位”或“乘法”。它们实际上只是代表这些位的电压,就像我们可以在一张纸上写下5个字符串“ 2 + 2 = 4”并说我们做数学一样。铅笔状石墨不是第二。这只是我们用于该数字的物理表示。

因此,这就是真实系统的最高水平。我已经很好地跳过了...几乎所有内容...但是它足够体面,能够回到您的实际问题上。它会(比喻)是什么样?

碰巧的是,我认为马丁·莫林(Martin Molin)可能用他的大理石机器(Marble Machine)构建了最好的隐喻。机器代码被(手动)编码为中间的一些Lego Technics带状钉,而不是电容器上的电压。这比DRAM 更像EPROM,但两者都保存数据。弹子就像电子一样,通过电压(或引力,对于弹子)移动。随着电子的移动,它们将力施加到做事的门上。

与现代CPU相比,他的机器很简单,但就隐喻而言,还算不错。而且很吸引人!


1
在视频中,大理石加工机太简单了。CPU需要状态。
托尔比约恩Ravn的安德森

@ThorbjørnRavnAndersen对。我想如果大理石机器有几个门可以让它自动抛出杠杆,而不是让Marin翻转杠杆,那它会更近一些。
Cort Ammon-恢复莫妮卡

谢谢!与我在上面的答复中提出的问题类似,汇编的汇编代码是否被视为转换为电压和事物的机器代码?
蒂姆·哈德利

@TimHardly使用“ assembled”,“ Assembly”和“ Machine Code”的唯一含义,将Assembly的乘积定义为机器代码(因此,可以认为是=))。可能有帮助的是,汇编代码和机器代码都被视为“逻辑”概念,更接近于“ 2 + 2 = 4”的数学概念,并且与书写该方程的纸张上的石墨相距甚远。汇编/机器代码是汇编/机器代码,无论它是存储在磁盘上,写在纸上还是存储在DRAM中的电容器中。
Cort Ammon-恢复莫妮卡

1
如果我喜欢哲学,那么机器代码就是机器代码,因为我们将其视为机器代码。我们将其视为机器代码。我可以将CPU指向描述.wav格式的声音的字节,它确实会将它们作为机器代码执行。最终的执行不可能做任何有用的事情(因为声音不是构造为机器代码),并且可能会暂停,但可以执行。
Cort Ammon-恢复莫妮卡

10

看看这个视频,尤其是下午1:00到1:17。这就是程序在计算机上运行时的样子。两行指示灯显示地址寄存器和数据寄存器的当前内容。PDP-11没有指令寄存器,但是如果前面有一个指令寄存器,并且前面有灯可以显示其内容,则外观几乎相同。16盏灯-其中有些点亮,有些熄灭。

如果您真的喜欢闪烁的灯,则可以有更多的灯来显示六个寄存器的当前内容,堆栈指针,程序计数器...对于另外的32768灯,您可以为高速缓存的每个位发光。您甚至可以为每个内存位打开一个灯...但是那确实是很多灯。

这是运行在15.2 MHz上的PDP11-70,每条指令大约需要1.5微秒才能执行。人眼可以检测到低至1/10秒的变化,到那时PDP-11可以执行60,000条指令。基本上,一切都是模糊的。


哇,这是一个很好的例子,我看过其他人喜欢的东西,沿着这些线条可以看到灯光和其他东西。youtube.com/watch?v=yOyaJXpAYZQ
蒂姆·哈德利


6

实施和测试(以及测试和测试)处理器的硬件设计人员实际上确实使用视觉模型来查看其设计在做什么。大多数(如果不是全部)HDL仿真工具会输出所有寄存器和接线的波形图,以便于调试。下面的屏幕截图(从此处获取)显示了来自VCS模拟器的RISC-V处理器运行一些指令的这些波形。

RISC-V的DVE Waves

这是一个非常简单的示例,显示了完整处理器设计中涉及的一小部分逻辑。您可以为整个处理器打开这些视图,并观察数据是否通过逻辑传播。如前所述,如果要查看机器代码正在运行,可以查看指令寄存器或处理器用来从内存中读取指令的总线的波形。大多数wave查看器对于总线和寄存器都有灵活的查看选项,使您可以将它们的值显示为二进制,十六进制,八进制甚至枚举标签。在某些情况下,您甚至可以定义自己的映射位模式的函数来显示值。

值得注意的是,这只是处理器仿真的一种表示。对于已经制造的处理器芯片,无法获得这些视图。


2

想象一下一个瞎子绊倒正在建设的小巷。到处都是孔和裂痕,所以他自然应该跌倒。不是这个盲人,因为他有纸质卷轴,上面有指示,何时等待,何时移动,哪里移动以及如何操纵自己的环境以达到道路的尽头。这就是汇编,是盲目跟随的指令列表,它们仅对这个小巷和这个盲人有意义。从理论上讲,您甚至可以仅从指令中重建3D模型(反编译)。

对平台的每次更改,都必须为盲人重新编译说明。您需要了解硬件(建筑工地的布局),人工输入的意图说明(高级代码),例如“我希望您跳过连续遇到的所有栅栏,直到身后有12个栅栏”,盲人的能力(CPU)。他是否有短期记忆,能够一次做几件事?

获取所有这些信息并构建连贯的指令滚动是编译器的工作。

那我可以描述一下程序的外观吗?否。但是我们能描述一下执行它的感觉吗?是的,遵循精确的说明列表,无论走到哪里,都感觉像是在跳跃和奔跑,就像在镜子边缘看不见东西一样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.