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.

Las 25 instrucciones
EmojiPalabra clave y operandosComportamientoLaboratorio
📥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: 42

Abrir el laboratorio →
💾STORE [valor] direcciónEscribe 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: 42, 255

Abrir el laboratorio →
📋COPY registro-origen registro-destinoCopia un registro en otro.
COPY · Probar una instrucción en el laboratorio →
LOAD 7 R1
COPY R1 R2
LOAD R2
PRINT
HALT

Salida esperada: 7

Abrir el laboratorio →
➕ADD valorSuma un valor a R0.
ADD · Probar una instrucción en el laboratorio →
LOAD 10
ADD 5
PRINT
HALT

Salida esperada: 15

Abrir el laboratorio →
➖SUB valorResta un valor de R0.
SUB · Probar una instrucción en el laboratorio →
LOAD 10
SUB 3
PRINT
HALT

Salida esperada: 7

Abrir el laboratorio →
✖️MUL valorMultiplica R0 por un valor.
MUL · Probar una instrucción en el laboratorio →
LOAD 6
MUL 7
PRINT
HALT

Salida esperada: 42

Abrir el laboratorio →
➗DIV valor-no-nuloDivide R0, redondeando hacia menos infinito.
DIV · Probar una instrucción en el laboratorio →
LOAD -9
DIV 4
PRINT
HALT

Salida esperada: -3

Abrir el laboratorio →
📊MOD valor-no-nuloObtiene el resto de R0 con su signo.
MOD · Probar una instrucción en el laboratorio →
LOAD -9
MOD 4
PRINT
HALT

Salida esperada: -1

Abrir el laboratorio →
🔀AND valorAplica 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: 5

Abrir el laboratorio →
🔃OR valorAplica 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: 7

Abrir el laboratorio →
❌NOTInvierte 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: -256

Abrir el laboratorio →
🔄XOR valorAplica 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: 44

Abrir el laboratorio →
⚖️CMP valorEstablece 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: 1

Abrir el laboratorio →
⏭️JUMP destinoSalta 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: 1

Abrir el laboratorio →
❓JUMP_IF_ZERO destinoSalta 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: 0

Abrir el laboratorio →
🔁LOOP repeticionesRepite 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: 1, 2, 3

Abrir el laboratorio →
🛑RETURNTermina 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: 8

Abrir el laboratorio →
📞CALL destinoLlama 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: 9, 16

Abrir el laboratorio →
🖨️PRINTAñade el valor actual de R0 a la salida.
PRINT · Probar una instrucción en el laboratorio →
LOAD 3
PRINT
PRINT
HALT

Salida esperada: 3, 3

Abrir el laboratorio →
📲INPUTLee un entero en R0; espera cuando no hay entrada.
INPUT · Probar una instrucción en el laboratorio →
INPUT
PRINT
HALT

Entrada de un entero: -5

Salida esperada: -5

Abrir el laboratorio →
⬆️PUSHApila R0 en la pila de datos.
PUSH · Probar una instrucción en el laboratorio →
LOAD 42
PUSH
LOAD 0
POP
PRINT
HALT

Salida esperada: 42

Abrir el laboratorio →
⬇️POPExtrae 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: 22, 11

Abrir el laboratorio →
⏹️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: 7

Abrir el laboratorio →
💤SLEEP milisegundosSolicita 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: 1, 2

Abrir el laboratorio →
⏸️NOPAvanza 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: 7

Abrir el laboratorio →

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 →