我们使用的大多数编程语言都处于较高水平,因为在机器能够真正识别它们之前,它们被翻译了好几次。你的CPU实际上是执行非常简单的指令,用0和1编码,比如add,logical或者从存储器地址加载一个数字到寄存器(所以我们可以添加或操作数值)等。

那么这个翻译如何工作?那么假设你已经用C编写了一个简单的hello世界程序。它需要被翻译成机器代码,称为编译过程。在此阶段,您的代码将根据您的特定CPU(程序集)转换为中间语言。这应该是人类可读的机器指令(前面提到的添加,加载等)。然后机器指令被进一步转换为0和1。

例如,在MIPS CPU架构添加的样子:

0000 0000 0010 0010 0001 1000 0010 0000

这基本上说,添加存储在寄存器1和2的值,并把结果在寄存器3

事情很长,所以我们通常不是以二进制编写,而是以十六进制编写。四0和1的压缩成一个数字,我们得到:

00 22 19 20

所以,当你在一个十六进制编辑器打开一个可执行文件,所有这些值包括例如像上面的说明,静态数据,图书馆和。当你编辑这些值时,假设你知道你在做什么,你可以改变软件的行为。

但是,你不想用二进制编写程序。这是非常痛苦的。我建议看看汇编以及CPU的工作方式,如果你更感兴趣。

一些优点你可能会在机器内的代码比编写C:

你得到你可以做什么更多的灵活性。您可以在整个程序的基础上管理您的资源,以便优化一切。飞机上的一些时间敏感仪器是用汇编编写的。

您可以全面了解程序的每个部分是如何工作的。

而缺点:

这是非常难以保持这么多的事情记一次。这是非常容易出错的,而且很难调试。

这是非常耗时的。由于您需要查看操作代码翻译,因此在汇编中您的写作生产率约为十分之一,机器代码更差。

它不是平台独立的。机器代码是每个CPU架构,所以你的Windows代码(x86架构)不能在Mac上工作,而C程序可以重新编译并立即运行。