关于机器代码到底是什么似乎有很多观点。我听有人说它是汇编、二进制或十六进制。
机器代码本质上是特定处理器的一组指令是否正确?如果是这样,我想这些可以用二进制或十六进制表示法或汇编来表示。但是未翻译的“实际”机器代码是什么样的呢?是基于架构的字长吗?或者十六进制是否是所有意图和目的的默认表示形式?
坐在硬盘上时是什么样子?坐在收银台上会是什么样子?那么当它被处理时,它只是当时的一组电压变化吗?
机器代码只是与特定处理器架构的 CPU 指令相对应的二进制数据。
我不会过多讨论它是如何存储的,因为这取决于它存储的位置。例如,在磁盘上,它通常存储为一系列磁化区域。机器码在存储方面与其他二进制数据没有什么不同。如果您的问题更多是关于数据如何在计算机上存储,您应该研究计算机中的各种数据存储设备,例如 HDD、RAM 和寄存器等。
可视化机器代码存储方式的最简单方法是在十六进制编辑器中查看一些代码。这显示了由十六进制数字表示的二进制数据。例如,采取指令:
0xEB 0xFE
这可以很容易地写成 1110101111111110 或 60414。这取决于您希望如何将二进制转换为人类可读的形式。
该指令代表无限循环。 (这是假设它在 x86 CPU 上运行。其他 CPU 可以按照自己的意愿解释它。)它可以像这样在汇编中编码:
j:
jmp j
当您运行汇编器时,它会将上面的代码转换为上面的二进制机器代码。
该指令实际上分为两部分。第一个是所谓的操作码,是0xEB
。当这段代码进入CPU时,意味着:从程序中读取一个字节,并跳过那么多字节的数据。然后CPU读取该字节0xFE
。由于它需要一个有符号整数,因此它将二进制数据解释为数字 -2。指令读取完毕,指令指针向前移动 2 个字节。然后执行该指令,导致指令指针向前移动 -2 (0xFE) 个字节,这实际上将指令指针设置为与指令启动时相同的值。
我希望这回答了你的问题。如果您想了解 CPU 的内部工作原理,请阅读微代码和电子逻辑门。基本上,它是一堆电压差,例如 1 位表示 5 伏电荷,0 位表示 0 位电荷。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)