É possível programar em binário?
6 answers
Já que perguntaste sobre hello world, devias ver este artigo
. Ele mostra como ele escreveu, então otimizado, UM programa ELF x86 para produzi-lo. Foi originalmente escrito em nasm depois modificado em um editor hexadecimal.É muito possível memorizar o código da máquina equivalente a instruções de montagem. Na verdade, ao escrever um código em linguagem de montagem, muitas vezes acontece ver o código hex através de Monitor de código de máquinas, desmontadors, listas de montagem, etc. Como resultado, ao longo do tempo algumas instruções podem ser memorizadas em sua forma hexadecimal sem qualquer esforço extra.
- na imagem um monitor de ROM 6502 is seen, where hex code and assembly mnemonics are shown side by side.
OPCODE HEX
LDA #$44 0xA9 0x44
STA $44 0x85 0x44
STA ($44),Y 0x91 0x44
LDY #$44 0xA0 0x44
(Ou em outra vida, finja que é 1974, nosso nome é Paul Allen, estamos em um avião para Boston, e temos que escrever um bootloader para Altair 8800 com caneta e papel)
Com os opcodes acima memorizados apenas, podemos escrever o seguinte código da máquina usando apenas caneta e papel:
0xA9 0x00 0x85 0x01 0xA9 0x02 0x85 0x02 0xA0 0x00 0xA9 0x01 0x91 0x01
Na verdade, o acima é o seguinte código de montagem em forma mnemónica:
LDA #00
STA $01
LDA #02
STA $02
LDY #00
LDA #01
STA ($01), Y
- O código acima coloca um pixel branco no canto superior esquerdo do ecrã em 6502asm.com montador / emulador, experimente!
Mas se você não os memorizou, ou não sabe qual é a forma binária, é fácil convertê - los com o seguinte Truque:
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)
O que ajuda a escrever um código binário na altura:
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
Com algum espírito de computação retro, e motivação para nos divertirmos, poderíamos ter escrito o código inteiro em binário sem escrever os passos intermédios.
Um programa simples para apresentar 5 no hex LED seria 0001000 0000101 0000001 escrito em binário convertido para código de máquina que seria 8 5 1 . Este programa iria então executar e exibir 5 no LED.
Você poderia seguir este procedimento para programas muito mais complexos usando o TMS1100 e acho que Programação em binário.
Na verdade, acho que isso é muito gratificante e gratificante se você estiver interessado em matemática e programação.BE0790 E8FD6F C3 4D00$
irá produzir um único M
no ecrã.
Eu tinha um programa uudecoe muito curto codificado em ASCII que podia ser prefixado a um ficheiro UUEncoded. O arquivo resultante seria auto-extrair e poderia ser enviado por e-mail. Esperava que o código da máquina fosse feito à mão. Não consigo encontrá-lo e não tenho utilidade para ele, mesmo que pudesse.