El manual de la máquina
Referencia de instrucciones emoji
Escribe el emoji o su palabra clave. Los registros R0–R7 contienen enteros seguros; R0 es el acumulador. La memoria tiene 256 direcciones de un byte (0–255). La aritmética conserva enteros completos; las operaciones de bits usan 32 bits con signo.
Las etiquetas terminan en dos puntos. Los saltos usan etiquetas o índices de instrucción desde cero, sin contar líneas vacías ni comentarios. # inicia un comentario. LOAD [10] lee memoria; LOAD 10 carga el número literal 10.
| Emoji | Palabra clave y operandos | Comportamiento | Laboratorio |
|---|---|---|---|
| 📥 | LOAD valor [registro] | Carga un valor, un registro o un byte de memoria. | LOAD · Probar una instrucción en el laboratorio →LOAD 42 PRINT HALT Salida esperada: |
| 💾 | STORE [valor] dirección | Escribe en memoria el byte menos significativo de un valor. | STORE · Probar una instrucción en el laboratorio →LOAD 42 STORE 10 STORE 511 11 LOAD [10] PRINT LOAD [11] PRINT HALT Salida esperada: |
| 📋 | COPY registro-origen registro-destino | Copia un registro en otro. | COPY · Probar una instrucción en el laboratorio →LOAD 7 R1 COPY R1 R2 LOAD R2 PRINT HALT Salida esperada: |
| ➕ | ADD valor | Suma un valor a R0. | ADD · Probar una instrucción en el laboratorio →LOAD 10 ADD 5 PRINT HALT Salida esperada: |
| ➖ | SUB valor | Resta un valor de R0. | SUB · Probar una instrucción en el laboratorio →LOAD 10 SUB 3 PRINT HALT Salida esperada: |
| ✖️ | MUL valor | Multiplica R0 por un valor. | MUL · Probar una instrucción en el laboratorio →LOAD 6 MUL 7 PRINT HALT Salida esperada: |
| ➗ | DIV valor-no-nulo | Divide R0, redondeando hacia menos infinito. | DIV · Probar una instrucción en el laboratorio →LOAD -9 DIV 4 PRINT HALT Salida esperada: |
| 📊 | MOD valor-no-nulo | Obtiene el resto de R0 con su signo. | MOD · Probar una instrucción en el laboratorio →LOAD -9 MOD 4 PRINT HALT Salida esperada: |
| 🔀 | AND valor | Aplica AND bit a bit a R0 y un valor. | AND · Probar una instrucción en el laboratorio →LOAD 13 AND 5 PRINT HALT Salida esperada: |
| 🔃 | OR valor | Aplica OR bit a bit a R0 y un valor. | OR · Probar una instrucción en el laboratorio →LOAD 5 OR 2 PRINT HALT Salida esperada: |
| ❌ | NOT | Invierte los bits de R0 como entero de 32 bits con signo. | NOT · Probar una instrucción en el laboratorio →LOAD 255 NOT PRINT HALT Salida esperada: |
| 🔄 | XOR valor | Aplica XOR bit a bit a R0 y un valor. | XOR · Probar una instrucción en el laboratorio →LOAD 42 XOR 6 PRINT HALT Salida esperada: |
| ⚖️ | CMP valor | Establece los indicadores según R0 menos un valor; conserva R0. | CMP · Probar una instrucción en el laboratorio →LOAD 7 CMP 7 JUMP_IF_ZERO same LOAD 0 JUMP show same: LOAD 1 show: PRINT HALT Salida esperada: |
| ⏭️ | JUMP destino | Salta a una etiqueta o a un índice de instrucción que empieza en cero. | JUMP · Probar una instrucción en el laboratorio →LOAD 1 JUMP show LOAD 99 show: PRINT HALT Salida esperada: |
| ❓ | JUMP_IF_ZERO destino | Salta cuando el indicador de cero guardado es verdadero. | JUMP_IF_ZERO · Probar una instrucción en el laboratorio →LOAD 0 JUMP_IF_ZERO show LOAD 99 show: PRINT HALT Salida esperada: |
| 🔁 | LOOP repeticiones | Repite el bloque que termina en su RETURN correspondiente. | LOOP · Probar una instrucción en el laboratorio →LOOP 0 LOAD 99 PRINT RETURN LOAD 1 LOOP 3 PRINT ADD 1 RETURN HALT Salida esperada: |
| 🛑 | RETURN | Termina una iteración de un bucle o vuelve de una subrutina. | RETURN · Probar una instrucción en el laboratorio →LOAD 7 CALL increment PRINT HALT increment: ADD 1 RETURN Salida esperada: |
| 📞 | CALL destino | Llama a una subrutina y guarda la siguiente instrucción. | CALL · Probar una instrucción en el laboratorio →LOAD 3 CALL square PRINT LOAD 4 CALL square PRINT HALT square: MUL R0 RETURN Salida esperada: |
| 🖨️ | PRINT | Añade el valor actual de R0 a la salida. | PRINT · Probar una instrucción en el laboratorio →LOAD 3 PRINT PRINT HALT Salida esperada: |
| 📲 | INPUT | Lee un entero en R0; espera cuando no hay entrada. | INPUT · Probar una instrucción en el laboratorio →INPUT PRINT HALT Entrada de un entero: Salida esperada: |
| ⬆️ | PUSH | Apila R0 en la pila de datos. | PUSH · Probar una instrucción en el laboratorio →LOAD 42 PUSH LOAD 0 POP PRINT HALT Salida esperada: |
| ⬇️ | POP | Extrae el valor superior de la pila de datos y lo guarda en R0. | POP · Probar una instrucción en el laboratorio →LOAD 11 PUSH LOAD 22 PUSH POP PRINT POP PRINT HALT Salida esperada: |
| ⏹️ | HALT (o STOP) | Se detiene en la instrucción actual. | HALT · Probar una instrucción en el laboratorio →LOAD 7 PRINT HALT LOAD 99 PRINT Salida esperada: |
| 💤 | SLEEP milisegundos | Solicita a quien ejecuta la máquina una espera en milisegundos. | SLEEP · Probar una instrucción en el laboratorio →LOAD 1 PRINT SLEEP 100 LOAD 2 PRINT HALT Salida esperada: |
| ⏸️ | NOP | Avanza sin cambiar los valores ni los indicadores. | NOP · Probar una instrucción en el laboratorio →LOAD 7 CMP 7 NOP JUMP_IF_ZERO show LOAD 0 show: PRINT HALT Salida esperada: |
Indicadores, bucles y llamadas
Z indica que el último resultado es cero. N indica que es negativo y O que está fuera del intervalo de 32 bits con signo. LOAD en cualquier registro, COPY, aritmética, operaciones de bits, POP e INPUT actualizan indicadores. CMP los calcula desde R0 menos su operando sin cambiar R0. JUMP_IF_ZERO comprueba Z, incluido el resultado de una comparación.
LOOP captura su número de repeticiones al entrar y repite el bloque hasta su RETURN; cero omite el bloque. CALL usa una pila separada de direcciones de retorno. RETURN vuelve a quien llamó antes de continuar un bucle exterior. PUSH/POP usan otra pila de datos. SP empieza en 255 y disminuye según la profundidad conjunta, hasta 256 entradas.
DIV redondea hacia menos infinito; MOD devuelve el resto con signo. STORE escribe el byte menos significativo (−1 se convierte en 255). INPUT espera un entero seguro. SLEEP solicita una espera en el laboratorio; la máquina determinista no espera por sí misma. Los programas terminan con HALT o al llegar al final; un destino de salto inválido provoca error.
Probar una instrucción en el laboratorio →