Hace aproximadamente un par de semánas (estamos hablando de principio de marzo) publiqué el código fuente de una máquina virtual con un par de funciones.
Actualicé la máquina y tiene un juego de instrucciones como sigue:
halt Detener la máquina virtual
setr Establecer un valor inmediato en un registro
push Almacena en la pila el valor de un registro
pop Elimina el TOS (primer elemento de pila)
move Intercambia los valores entre el TOS y un registro
sum Suma el valor de un registro y otro, el valor se almacena en el primer registro
div Divide el valor de un registro y otro, el valor se almacena en el primer registro
mod Divide el valor de un registro y otro, el valor del resto de división se almacena en el primer registro
mult Multiplica el valor de un registro y otro, el valor se almacena en el primer registro
not Niega un elemento
xor Operación OR condicional con dos registros. El valor se almacena en el primer registro
shl Mueve los bits de un registro hacia la izquierda un numero de veces como marque el segundo registro.
shr Mueve los bits de un registro hacia la derecha un numero de veces como marque el segundo registro.
ife Si los dos registros especificados son iguales, ejecuta la siguiente accion. En caso contrario la salta.
goto Establece el 'ip' al valor inmediato dado.
El código fuente puede obtenerse de aquí
Unos ejemplos tambien pueden obtener desde aquí (con los opcodes correspondientes)
Un saludo, espero que les sirve de alguna utilidad. Un ejemplo de su uso podría ser por ejemplo para utilizar en algoritmo de cifrado, es mucho más difícil saber de donde sale un dato si este se está ejecutando virtualmente.
Puede obtener más información en: artículo