2011-05-25 100 views
3

只是出于兴趣,我想写一个机器码的小程序。我会用什么编译器来编写机器语言?

我目前正在学习寄存器,ALU,总线和内存,我略微着迷指令可以用二进制代替汇编语言编写。

是否需要使用编译器?

最好在OSX上运行。

+4

如果你正在写的“机器代码”,因为没有什么编译你并不需要一个编译器。 – geoffspear 2011-05-25 17:55:04

+2

@雷斯,你应该报告你的问题meta.stackoverflow.com ... – bdonlan 2011-05-25 17:55:11

+0

谢谢bdonlan。我现在正在报告。 – 2011-05-25 18:01:10

回答

5

您不会使用编译器来编写原始机器码。你会使用十六进制编辑器。不幸的是,我不使用OSX,所以我无法为您提供特定的链接。

如果你编写机器代码,你需要学习如何编写你的操作系统所需的二进制头文件。我会建议这样做,并首先用汇编器以原始输出格式进行测试;一旦你理解了二进制布局,这是一个纯粹的机械任务,将其手动组装到机器代码中。

+3

我使用HexFiend(http://ridiculousfish.com/hexfiend/),它在MacBook上为我完成这项工作。 – 2011-05-25 18:01:35

0

编译器将您的非机代码转换成机器代码......这样你就不会需要一个编译器...

+0

不,我的意思是机器码。在0和1中编码指令。 – 2011-05-25 17:59:37

+0

@雷斯霍尔德:是的,我读了剩下的部分,并删除了NASM的参考资料。不知道为什么你认为如果你正在编写机器代码,你会需要一个编译器... – 2011-05-25 18:00:35

+0

当我写这个问题时,我确实有疑问。 – 2011-05-25 18:02:36

3

你会使用十六进制编辑器。我建议不要那样做,首先要学习汇编程序。汇编程序基本上是一种在人类可读的助记符和机器可读的十六进制字节之间具有1:1对应关系的语言。为此,您可能想要查看http://ref.x86asm.net/并找到适用于x86 Mac的汇编程序。我相信yasm应该工作。

十六进制写什么,直接是非常困难的,和你的时间可能会花在学习汇编和汇编生成

+0

我目前正在学习汇编。我也在阅读“机器内部”。这让我有点兴趣。 – 2011-05-25 18:03:53

+0

@Riess好吧。我建议找到一个好的十六进制编辑器并查看生成的机器代码,并使用反汇编程序来测试自己在机器代码中的修改/创建。这可能是学习机器代码最简单的方法..我写了一个8086仿真器,我记忆的唯一机器代码是0xF4是hlt,0x90是nop – Earlz 2011-05-25 18:06:16

+0

这是个好主意。多年来,我听说过十六进制编辑,我已经和他们玩过,但我从来没有明白他们的真正目的。只是一个简单的问题,为什么约定使用十六进制而不是二进制?内存是2字节还是1个十六进制数字? – 2011-05-25 18:09:40

1

你需要一个汇编底层机器代码,你真的这么做了,其他的海报说写作二进制指令代码是非常令人头脑无聊的,并且必须如此正确,以至于只有一台机器才能做到这一点。在一个非平凡的操作系统上,如OSX。 Linix,Windows,必须提供正确的头信息来生成可执行文件。同样,最好通过汇编程序包完成,该程序包可以链接正确的头文件,以确保您的指令具有数据,堆栈和执行。然后,你的汇编程序会崩溃,并再次,并且再次,多年。

写入二进制指令通常被归类为酷刑。这样做违反了基本人权。如果你曾经被要求做,那么将它外包给Gitmo。

获得一个汇编程序。

RGDS, 马丁

相关问题