【问题标题】:Compiling Binary编译二进制
【发布时间】:2016-08-19 11:09:20
【问题描述】:

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

【问题讨论】:

  • 这可能对你来说很有趣:en.wikipedia.org/wiki/Executable
  • 是的!有很多有趣的方法可以做到这一点。但是二进制编码可能会毁了你的脸,让你放弃。我个人建议写一点汇编代码。这是关于 ASM 的一个很好的教程。这是一个与学习组装相关的问题(更多资源!)

标签: compilation compiler-construction binary


【解决方案1】:

最简单的方法是从您选择的汇编程序开始,如果您愿意,可以在 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,用于在 Windows 上开始使用 MASM 和 Visual Studio 2015。

【讨论】:

  • 这也是一个很好的答案,但当时它打破了我的想法。
【解决方案2】:

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

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

但这不是当今计算机的编程方式。如果你真的想去最低层,你可以看看汇编编程,它基本上可以让你告诉你的机器它应该以更方便的方式执行的确切指令。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 2021-04-22
    • 2013-01-03
    • 2017-07-29
    • 2019-04-10
    • 2013-01-08
    相关资源
    最近更新 更多