Binary 可以用二进制语言编程吗?

Binary 可以用二进制语言编程吗?,binary,Binary,标题真的说明了一切。我的一个朋友告诉我,他认识一个能用二进制编程的人。我从来没有听说过有人用二进制编程,一些快速的谷歌搜索没有返回任何有用的东西。所以我想我应该转向So社区。是否有人有任何关于二进制编程的信息,如果可能的话,也许有一个快速的Hello World示例。提前谢谢。当然。它通常被称为。它基本上没有记忆装置。熟悉汇编程序的人可以通过额外的努力在机器代码中编程,根据需要参考操作码清单(例如) 我会这么做吗?不。即使是组装也只在极少数情况下有用,而且没有理由(除了展示你的技能)拒绝客户的帮

标题真的说明了一切。我的一个朋友告诉我,他认识一个能用二进制编程的人。我从来没有听说过有人用二进制编程,一些快速的谷歌搜索没有返回任何有用的东西。所以我想我应该转向So社区。是否有人有任何关于二进制编程的信息,如果可能的话,也许有一个快速的Hello World示例。提前谢谢。

当然。它通常被称为。它基本上没有记忆装置。熟悉汇编程序的人可以通过额外的努力在机器代码中编程,根据需要参考操作码清单(例如)

我会这么做吗?不。即使是组装也只在极少数情况下有用,而且没有理由(除了展示你的技能)拒绝客户的帮助


既然你问起了hello world,你应该退房。他展示了如何编写并优化x86 ELF程序来输出它。它最初是用十六进制编辑器编写的,后来在十六进制编辑器中进行了修改。

不再需要它了,但它已经完成了。曾经有一段时间,代码可以从前控制台以二进制形式输入到系统中。它容易出错


我曾经有一个用ASCII编码的非常短的uudecoe程序,它可以作为Uudeco编码文件的前缀。生成的文件将是自解压的,可以通过电子邮件发送。我希望机器代码是手工完成的。我找不到它,即使我能找到它也没有用。

当然,你可以为机器代码写二进制,然后通过十六进制键盘将机器代码输入计算机。我已经组装了一台基于TMS1100的计算机

在十六进制LED上显示5的一个简单程序将是000100000100000001,以二进制形式写入,转换为机器代码为851。然后,该程序将运行并在LED上显示5

对于使用TMS1100的更复杂的程序,您可以遵循此过程,我猜是用二进制编程


事实上,如果你对数学和编程感兴趣,我认为这是非常令人满意和有益的。

对于勇敢的人来说:你可以尝试获取一张MikeOS软盘图像并运行monitor.bin程序。它允许您手动输入十六进制操作码并执行它们。例如(如文件所述),输入以下说明:
BE0790 E8FD6F C3 4D00$
将在屏幕上生成一个
M

有一些深奥的编程语言。它们被用作实验,而且相当不切实际,但其中一个名为BrainF**k(是的,它实际上是一个真实的东西)使用八个不同的字符来修改字节值。这些类型的语言几乎是你能得到的最接近的语言。

记忆相当于汇编指令的机器代码是非常有可能的。实际上,在用汇编语言编写代码时,经常会通过s、s等看到十六进制代码。因此,随着时间的推移,一些指令可以以十六进制形式存储,而无需任何额外的努力

  • 图中显示了6502 ROM监视器,其中十六进制代码和汇编助记符并排显示
你们需要的第二项技能是将十六进制代码转换成二进制代码,这很容易,我将在稍后解释一个技巧

请考虑以下说明:

OPCODE       HEX
LDA #imm     0xA9 imm
STA adr      0x85 adr
STA (adr),Y  0x91 adr
LDY #imm     0xA0 imm
在只记忆上述操作码的情况下,我们可以只使用纸和笔编写以下机器码:

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
  • 上面的代码在assembler/emulator的屏幕左上角放置了一个白色像素,请继续尝试
现在,将十六进制转换为二进制(反之亦然)的诀窍是只计算半字节(4位值)

首先,记住如何将二进制转换为十进制。每次你看到1,乘以它的二进制幂。例如,
101
将是
4+0+1=5
。它可以这样可视化:

1   1   1   1 --> binary points
|   |   |   |               
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 -> 1010 1001 0000 0000
STA $01     -> 0x85 0x01 -> 1000 0101 0000 0001
LDA #02     -> 0xA9 0x02 -> 1010 1001 0000 0010
STA $02     -> 0x85 0x02 -> 1000 0101 0000 0010
LDY #00     -> 0xA0 0x00 -> 1010 0000 0000 0000
LDA #01     -> 0xA9 0x01 -> 1010 1001 0000 0001
STA ($01),Y -> 0x91 0x01 -> 1001 0001 0000 0001
有了一些复古计算的精神、动机和乐趣,我们实际上可以用二进制编写整个代码,而不必写下中间步骤


另一方面,保罗·艾伦(Paul Allen)在飞机上用纸和笔为Altair 8800编写了一个引导加载程序,可能还需要用纸和笔将其翻译成二进制:

当然可以。请一位朋友的这位朋友举个例子。;-)类似于[我可以直接用二进制写一个程序吗?我怎样才能让计算机执行它?]()。$ad xx yy$20$ff$d2或其他什么的。顺便说一句,这是我在lda$xxyy jsr$ffd2上的尝试,我想它会在c64或vic 20上打印一些东西。@time4tea那是汇编,不是二元的……我想我会称之为一种技能,就像我会称之为能够用舌头触摸鼻尖一样;有趣而且基本上没用。@Adam,是的。我本来打算写“除了炫耀”,但听起来有点刺耳。不管怎样,我们都喜欢偶尔炫耀一下是的,这更多的是一个“不感兴趣”的问题,而不是一个实际问题。我从来没有真正打算使用它。我只是想看看这是否可能,以及它会是什么样子。历史观点+1。显然,在早期的计算机上,有些情况下只能通过前面板输入代码。