Si has intentado pasar un programa de ensamblador (.asm) instrucción por instrucción a hexadecimal para posteriormente cargarlo en una memoria (RAM, ROM) de Logisim, sabrás el tiempo que consume⏳, más aún si tienes que arreglar alguna línea del programa original y volver a repetir todo el proceso😴... MS-Translator viene a solucionar este problema.
MS-Translator es una aplicación creada para ayudar a transcribir automáticamente archivos .asm a un .txt que contiene todo el programa de ensamblador traducido a hexadecimal para cargar en una memoria (RAM, ROM) de Logisim.
Instalar el programa es muy fácil, simplemente ve a la categoría de Releases de GitHub y descargate la última versión. Aunque te agradecería que te lo descargaras por Wuolah para que aportes un granito de arena en mi café☕ de época de exámenes, gracias❤️.
¡Usarlo es extremadamente sencillo, simplemente arrastra tu archivo .asm sobre él .exe y el programa empezará la conversión!
Primero asegúrate de tener permisos de ejecución para ello abre en una consola y ejecuta ls -l verifica que en la columna de la izquierda tienes la letra x que indica permisos de ejecución, si no los tienes ejecuta chmod 777 MS-translator y verifica que ahora los tengas.
Después lanza el programa mediante terminal escribiendo ./MS-translator ejemplo.asm siendo el primer parámetro de ejecución la ruta relativa o absoluta al archivo .asm
Por ejemplo, este sería un archivo de .asm válido (puede haber comentarios, el programa los omite)
.data 63
vector: .ascii16 "HELLO WORLD."
cero: .dw 0
const: .dw 128
letra: .rw 1
.data 127
tty_out: .rw 1
.code
mov cero, tty_out
mov vector, letra
DOWHILE:mov letra, tty_out
add const, INST
INST: mov vector, letra
cmp 74, letra
beq PUNTO
cmp cero, cero
beq DOWHILE
PUNTO: mov letra, tty_out
HALT: cmp cero, cero
beq HALT
.end
Y este sería el archivo .txt que genera
v2.0 raw
a5ff 9fcd a6ff 2604 9fcd 654d c009 65cb
c002 a6ff 65cb c00a 51*0 48 45 4c
4c 4f 20 57 4f 52 4c 44
2e 0 80 0 49*0 0
Y si cargamos él .txt en Logisim
Modificando la configuración del programa es posible añadir nuevas instrucciones, instrucciones inmediatas y modificar los bits de la instrucción, primer operando y segundo operando.
El programa genera un .json de configuración la primera vez que se ejecuta.
Para modificar el tamaño deberemos abrir la configuración y cambiar los siguientes parámetros, por defectos configurados así:
Una vez cambiados guardar el archivo de configuración y lanzar el programa.
*Para algún despistado esto hace referencia a lo siguiente:
Para añadir/eliminar instrucciones deberemos abrir la configuración y añadir/borrar nuevos elementos en el parámetro instructions, las instrucciones por defecto son add (0), cmp (1), mov (2) y beq (3)
Name hace referencia al nombre de la instrucción
Value hace referencia al valor en decimal de la instrucción
Immediate hace referencia a si la instrucción es inmediata o no (si desconoces que es esto, déjalo en false, en el punto de abajo lo explico)
Si tenemos una instrucción que solo requiere de un operando (el segundo) y queremos usar los bits vacíos del primer operando para seleccionar una operación extra junto con los bits de la instrucción deberemos marcar el parámetro immediate como true y en value deberemos juntar los bits de instrucción más los del primer operando (empezando por el bit de mayor peso), es decir...
Si queréis contribuir para mejorar el proyecto siempre podéis hacerme un Pull Request o si, por el contrario, encontráis algún error podéis crear uno en Issues.
LICENCIA que utiliza este programa.