标题真的说明了一切。我的一个朋友告诉我,他知道有人可以用二进制编程。我从来没有听说过有人用二进制编程,一些快速的谷歌搜索没有返回任何有用的东西。所以我想我会转向SO社区。有没有人有关于二进制编程的任何信息,如果可能的话可能是一个快速的Hello World示例。提前谢谢。
答案 0 :(得分:43)
当然。它通常被称为machine code。没有助记设备,它基本上是assembly language。非常了解装配的人可以通过额外的努力在机器代码中编程,根据需要参考操作码列表(例如x86)。
我会这样做吗?没有。即使是组装只在极少数情况下有用,并且没有理由(除了证明你的技能)拒绝assembler的帮助。
由于您询问了hello world,您应该查看this article。他展示了他如何编写,然后优化了x86 ELF程序来输出它。它最初是用nasm编写的,然后在十六进制编辑器中修改。
答案 1 :(得分:11)
很有可能记住机器代码相当于汇编指令。实际上,当用汇编语言编写代码时,经常会看到通过machine code monitor,disassembler s,assembly listings等的十六进制代码。结果,随着时间的推移,一些指令可以被记忆十六进制形式,没有任何额外的努力。
您需要的第二个技能是将十六进制代码从头脑中翻译成二进制代码,这很容易通过一些技巧解释一下。但是记住二进制等效的所有十六进制数字非常容易,毕竟其中有16个(不多,不是吗?)。
让我们假设它是1988年,我们花了将近十年的时间将8位视频游戏移植到不同的平台上,因此记住了以下6502十六进制代码指令对应于装配说明:
OPCODE HEX
LDA #$44 0xA9 0x44
STA $44 0x85 0x44
STA ($44),Y 0x91 0x44
LDY #$44 0xA0 0x44
如果仅记忆上述操作码,我们只需使用笔和纸即可编写以下机器代码:
0xA9 0x00 0x85 0x01 0xA9 0x02 0x85 0x02 0xA0 0x00 0xA9 0x01 0x91 0x01
实际上以上是以助记符形式的汇编代码:
LDA #00
STA $01
LDA #02
STA $02
LDY #00
LDA #01
STA ($01), Y
如果你以二进制形式记住每个十六进制数字,你可以用二进制编写整个代码。
但是如果你没有记住它们,或者不确定二进制形式是什么,那么很容易用以下技巧转换它们:
1 1 1 1
| | | |
v v v v
8 + 4 + 2 + 1
| | | +---> 2^0 * 1 Ex: 13 is 8 + 4 + 0 + 1
| | +-------> 2^1 * 1 1 1 0 1 -> 1101 (0xD)
| +-----------> 2^2 * 1 Ex: 7 is 0 + 4 + 2 + 1
+---------------> 2^3 * 1 0 1 1 1 -> 0111 (0x7)
这有助于人们动态地编写二进制代码:
LDA #00 -> 0xA9 0x00 -> 10101001 00000000
STA $01 -> 0x85 0x01 -> 10000101 00000001
LDA #02 -> 0xA9 0x02 -> 10101001 00000010
STA $02 -> 0x85 0x02 -> 10000101 00000010
LDY #00 -> 0xA0 0x00 -> 10100000 00000000
LDA #01 -> 0xA9 0x01 -> 10101001 00000001
STA ($01),Y -> 0x91 0x01 -> 10010001 00000001
凭借一些复古的计算精神,以及获得乐趣的动力,我们实际上可以用二进制编写整个代码,而无需写下中间步骤。
答案 2 :(得分:7)
不再需要它,但它已经完成了。曾经有一段时间可以从前端控制台将代码输入二进制系统。这很容易出错。
我曾经有一个用ASCII编码的非常短的uudecoe程序,它可以作为UUEncoded文件的前缀。生成的文件将是自解压缩的,可以通过电子邮件发送。我希望机器代码是手工完成的。我找不到它,即使我可以也没有用它。
答案 3 :(得分:7)
当然,您可以为机器代码编写二进制文件,然后通过六角键盘将机器代码输入计算机。我把一台基于TMS1100的计算机放在一起。
在六角形LED上显示5的简单程序将是以二进制形式写入的0001000 0000101 0000001转换为机器代码,即8 5 1。然后该程序将运行并在LED上显示5。
您可以使用TMS1100对更复杂的程序执行此过程,我想用二进制编程。
实际上,如果您对数学和编程感兴趣,我认为这是非常令人满意和有益的。
答案 4 :(得分:7)
对于勇敢的人:您可以尝试获取MikeOS软盘映像并运行monitor.bin程序。它允许您手动输入十六进制操作码并执行它们。例如(如文档中所述),输入以下说明:
BE0790 E8FD6F C3 4D00$
会在屏幕上生成一个M
。
答案 5 :(得分:-2)
有一些深奥的编程语言。它们被用作实验,并且相当不实用,但是一个名为BrainF ** k(是的,它实际上是一个真实的东西)使用八个不同的字符来修改字节值。这些语言尽可能接近。