编译二进制文件

Compiling Binary

我想感受一下计算机最初是如何工作的。我知道最初使用诸如 ENIAC 之类的计算机时,他们实际上必须以正确的顺序插入电线才能执行程序。他们后来使用穿孔卡片,最后想出了汇编语言。它只是用 FORTRAN、COBOL 等从那里向上构建。有什么方法可以在我的计算机上编译 0 和 1。如果我打开 textedit,并输入特定的零和一序列,那么我怎样才能使它成为一个二进制文件而不是具有一系列 ASCII 字符的文本?我对任何方法都持开放态度。 (免责声明:我知道用二进制做事需要很长时间,我只想学习如何做非常基本的事情。)

创建二进制数据流的方式在很大程度上取决于其用途。

二进制数据本身并没有什么神奇之处。您可以使用任何十六进制编辑器并开始键入所需的二进制输入。

但这不是现在计算机的编程方式。如果你真的想深入到最低层次,你可以看看汇编编程,它基本上允许你以更方便的方式告诉你的机器它应该执行的确切指令。

但即使在这里你也不会有太多乐趣。如果你希望能够实际执行你的程序并在你的显示器上看到一些结果,甚至可能是键盘输入之类的东西,那么代码会变得非常大并且难以为人类编写和理解。

这就是我们使用编译器的原因。编译器从高级语言生成此类代码,无需一遍又一遍地编写最小的指令块。

如果您真的只是想了解计算机的工作原理,请下载一些模拟器以获得简单的 CPU(可能带有漂亮的 GUI) 玩弄它。 Edumips 是用于教育目的的模拟器之一。

最简单的方法是从您选择的汇编程序开始,如果您愿意,可以在 IDE 中。使用某种调试器(例如 IDE),这样您就可以看到代码的效果,而无需写入控制台或文件。

与其只编写二进制作为文本数字,不如使用数据元素而不是指令编写完整的汇编程序源代码。

所以,而不是

.code
main proc
    mov eax,5               
    add eax,6               
main endp
end main

你可以这样写:

main proc
    db 10111000b, 00000101b, 00000000b, 00000000b, 00000000b
    db 10000011b, 11000000b, 00000110b
main endp
end main

db表示定义字节,b后缀表示二进制。

并且,有了这个,您就可以作弊了,但是在您提出要求之前我不会告诉您如何作弊,所以我不会破坏您的乐趣。

这是一个很好的 tutorial 开始使用 MASM 和 Visual Studio 2015 的 Windows。