2011-02-11 26 views
34

El título realmente lo dice todo. Un amigo mío me dijo que conoce a alguien que puede programar en binario. Nunca escuché que alguien programara en binario y algunas búsquedas rápidas de Google no arrojaron nada útil. Así que pensé que recurriría a la comunidad SO. ¿Alguien tiene información sobre programación en binario y, si es posible, quizás un ejemplo rápido de Hello World? Gracias por adelantado.¿Es posible programar en binario?

+4

Sí, por supuesto. Pídale a este amigo de un amigo que produzca el ejemplo. ;-) – Keith

+2

Similar a [¿Puedo escribir un programa en binario directamente? ¿Cómo puedo hacer que la computadora lo ejecute? ] (http://stackoverflow.com/questions/4197055/can-i-write-a-program-in-binary-directly-how-can-i-get-the-computer-to-execute). –

+1

$ ad xx yy $ 20 $ ff $ d2 o algo así ha sido un tiempo – time4tea

Respuesta

40

Por supuesto. Es más comúnmente llamado machine code. Básicamente es assembly language sin los dispositivos mnemotécnicos. Alguien que sepa ensamblar muy bien podría programar en código de máquina con un esfuerzo adicional, consultando las listas de códigos de operación (por ejemplo, x86) según sea necesario.

¿Lo haría? No. Incluso el montaje solo es útil en circunstancias excepcionales, y no hay motivo (además de demostrar tus habilidades) para rechazar la ayuda de assembler.

Como preguntaste sobre hello world, deberías echar un vistazo a this article. Muestra cómo escribió, y luego optimizó, un programa ELF x86 para emitirlo. Originalmente fue escrito en nasm y luego modificado en un editor hexadecimal.

+7

Creo que llamaría a eso una habilidad como llamaría poder tocar la punta de tu nariz con tu lengua; interesante y básicamente inútil. –

+0

@ Adam, sí. Originalmente iba a escribir "además de alardear", pero sonaba un poco duro. Y de todos modos, a todos nos gusta presumir ocasionalmente.:) –

+0

Sí, esto era más una pregunta "fuera de interés" que una pregunta práctica. Realmente nunca tuve la intención de usarlo. Solo quería ver si era posible y cómo se vería. –

5

Ya no hay mucha demanda, pero ya está hecho. Hubo un momento en que el código se podía ingresar en un sistema en binario desde la consola frontal. Fue un error propenso.

Solía ​​tener un programa uudecoe muy corto codificado en ASCII que podría estar prefijado en un archivo UUEncoded. El archivo resultante sería autoextraíble y podría enviarse por correo electrónico. Esperaría que el código de la máquina fuera hecho a mano. No puedo encontrarlo, y no lo uso, incluso si pudiera.

+1

+1 para perspectiva histórica. Aparentemente hubo algunas situaciones en las primeras computadoras donde el código podía ingresarse * solo * a través del panel frontal. – sleske

6

Bueno, por supuesto, puede escribir el código binario para el código de máquina y luego introducir el código de máquina a través de su teclado hexadecimal en su computadora. He creado una computadora basada en el TMS1100.

Un programa simple para mostrar 5 en el LED hexadecimal sería 0001000 0000101 0000001 escrito en código binario convertido a código de máquina que sería 8 5 1. Este programa se ejecutaría y mostraría 5 en el LED.

Puede seguir este procedimiento para programas mucho más complejos utilizando el TMS1100 y creo que la programación en binario.

En realidad, creo que esto es muy satisfactorio y gratificante si te interesan las matemáticas y la programación.

6

Para los más valientes: puede intentar obtener una imagen de disquete MikeOS y ejecutar el programa monitor.bin. Le permite ingresar códigos de operación hexadecimales a mano y ejecutarlos. Por ejemplo (como se indica en los documentos), ingrese las siguientes instrucciones: BE0790 E8FD6F C3 4D00$ producirá un solo M en la pantalla. Hexadecimal code

-3

Existen algunos lenguajes de programación esotéricos. Se usan como experimentos, y son bastante poco prácticos, pero uno, llamado BrainF ** k (sí, en realidad es una cosa real) utiliza ocho caracteres diferentes para modificar los valores de los bytes. Ese tipo de idiomas son lo más cercano que puede obtener.

7

Es muy posible memorizar código máquina equivalente a instrucciones de montaje. En realidad, cuando se escribe código en lenguaje ensamblador, a menudo se ve código hexadecimal a través de machine code monitor s, disassembler s, assembly listings, etc. Como resultado, con el tiempo algunas instrucciones se pueden memorizar en su forma hexadecimal sin ningún esfuerzo adicional.

Apple II 6502 ROM Monitor

  • En la imagen de un monitor 6502 ROM se ve, donde el código hexadecimal y montaje mnemónicos se muestran al lado del otro.

Segunda habilidad que vas a necesitar es traducir código hexadecimal a binario de la mente, que es muy fácil con un truco que explicaré en un momento. Pero es muy fácil memorizar el equivalente binario de todos los dígitos hexadecimales, de los cuales hay 16, después de todo (no mucho, ¿no?).

Supongamos que es el año 1988, y pasamos casi una década portar videojuegos de 8 bits a diferentes plataformas para ganarse la vida, y por lo tanto memorizado el código hexadecimal siguiente 6502instrucciones que corresponde a las instrucciones de montaje:

OPCODE  HEX 
LDA #$44  0xA9 0x44 
STA $44  0x85 0x44 
STA ($44),Y 0x91 0x44 
LDY #$44  0xA0 0x44 

(O en otra vida, pretend it is 1974, our name is Paul Allen, we are on a plane to Boston, and we have to write a bootloader for Altair 8800 with pen and paper)

Con códigos de operación por encima memoriza solamente, podemos escribir el código de máquina siguiente usando sólo lápiz y papel:

0xA9 0x00 0x85 0x01 0xA9 0x02 0x85 0x02 0xA0 0x00 0xA9 0x01 0x91 0x01 

En realidad, el anterior es el código de montaje siguiente en forma mnemónica:

LDA #00 
STA $01 
LDA #02 
STA $02 
LDY #00 
LDA #01 
STA ($01), Y 
  • El código anterior pone un pixel blanco en la esquina superior izquierda de la pantalla en 6502asm.com ensamblador/emulador ¡Adelante, pruébalo!

Si hubiera memorizado cada dígito hexadecimal en su forma binaria, podría haber escrito todo el código en binario.

Pero si usted no los ha aprendido de memoria, o no está seguro de cuál es la forma binaria es, es fácil de convertir con el siguiente truco:

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) 

que ayuda código de una escritura en binario sobre la marcha :

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 

con un poco de espíritu RETROINFORMÁTICA, y la motivación para divertirse, que podríamos haber escrito el código completo en binario sin escribir los pasos intermedios.

Cuestiones relacionadas