É possível programar em binário?

O título diz tudo. Um amigo meu disse-me que conhece alguém que pode programar em binário. Nunca ouvi falar de alguém programando em binário e algumas pesquisas rápidas no Google não devolveram nada útil. Então pensei em virar-me para a comunidade SO. Alguém tem alguma informação sobre a programação em binário e, se possível, talvez um exemplo rápido do mundo Hello. Obrigado antecipadamente.

 35
Author: Adam P, 2011-02-11

6 answers

Claro. É mais comumente chamado de código de máquina . É basicamente Linguagem de montagem sem os dispositivos mnemónicos. Alguém que sabe montagem muito bem poderia programar em código de máquina com esforço adicional, referindo-se a listas de opcode (por exemplo x86) conforme necessário. Eu faria isso? Não. Mesmo a montagem só é útil em circunstâncias raras, e não há razão (além de demonstrar suas habilidades) para rejeitar a montagem ' s ajudar.

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.
 41
Author: Matthew Flaschen, 2011-02-11 02:19:13

É 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.

Apple II 6502 ROM Monitor

  • na imagem um monitor de ROM 6502 is seen, where hex code and assembly mnemonics are shown side by side.
A segunda habilidade que vais precisar é traduzir o código hex para binário da mente, o que é muito fácil com um truque que vou explicar daqui a pouco. Mas é muito fácil memorizar o equivalente binário de todos os dígitos hex, dos quais há 16 deles, afinal (não muito, não é?). Vamos supor que estamos no ano de 1988, e passámos quase uma década a enviar jogos de vídeo de 8 bits para diferentes plataformas para um viver e, consequentemente, memorizar o seguinte 6502 Código hex instruções que correspondem às instruções de montagem:
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
Se tivesse memorizado cada dígito hexadecimal na sua forma binária, poderia ter escrito o código inteiro em binário.

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.

 8
Author: neuro_sys, 2017-11-15 23:04:09
É claro que pode escrever o código binário para o código da máquina e depois introduzir o código da máquina através da sua chave hexadecimal no seu computador. Criei um computador baseado no TMS1100.

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.
 6
Author: Winston Willow, 2013-03-09 21:49:12
Para o corajoso do coração, pode tentar obter uma imagem disforme do MikeOS e rodar o monitor.programa bin. Permite-lhe introduzir opcodes hexadecimal manualmente e executá-los. Por exemplo (conforme indicado nos documentos), introduzir as seguintes instruções: BE0790 E8FD6F C3 4D00$ irá produzir um único M no ecrã. Hexadecimal code
 6
Author: Zebrastorm, 2014-04-25 14:49:56
Já não há muita razão para isso, mas já foi feito. Houve uma época em que o código poderia ser introduzido em um sistema binário a partir da consola frontal. Era propenso a erros.

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.

 5
Author: BillThor, 2011-02-11 02:32:11
Existem algumas linguagens de programação Esotéricas. Eles são usados como experimentos, e são bastante impraticáveis, mas um, chamado BrainF**k (Sim, é realmente uma coisa real) usa oito caracteres diferentes para modificar valores de byte. Esse tipo de linguagem é o mais próximo possível.
 -3
Author: Anonymous, 2014-11-06 02:37:31