Último semestre en la universidad, mi profesor en la clase de Lenguajes de Computación nos enseñó el lenguaje esotérico llamado Whitespace. Con el interés de aprender mejor el idioma con un horario muy ocupado (exámenes parciales), escribí un interpreter y assembler en Python. Un assembly language se diseñó para facilitar la escritura de programas fácilmente, y se escribió un sample program con el ensamblado dado mnemonics.¿Tiene alguna sugerencia para estos ensamblajes mnemotécnicos?
Ahora que es verano, un nuevo proyecto se ha iniciado con el objetivo de volver a escribir el intérprete y el ensamblador de espacios en blanco 0.3, con los nuevos acontecimientos que viene después. Dado que hay mucho más tiempo que antes para trabajar en su diseño, se le presenta aquí un esquema que proporciona un conjunto revisado de mnemónicos para el lenguaje ensamblador. Esta publicación está marcada como wiki para su discusión.
¿Alguna vez ha tenido alguna experiencia con los lenguajes de ensamblaje en el pasado? ¿Hubo algunas instrucciones que creías que deberían haber cambiado de nombre a algo diferente? ¿Te encuentras pensando fuera de la caja y con un paradigma diferente al de los nombres mnemotécnicos? Si puede responder afirmativamente a alguna de esas preguntas, es bienvenido aquí. ¡Las respuestas subjetivas son apreciadas!
Manipulación Stack (IMP: [Espacio])
manipulación Stack es una de las operaciones más comunes, de ahí la falta de la IMP [Espacio]. Hay cuatro instrucciones de pila.
hold N Push the number onto the stack
copy Duplicate the top item on the stack
copy N Copy the nth item on the stack (given by the argument) onto the top of the stack
swap Swap the top two items on the stack
drop Discard the top item on the stack
drop N Slide n items off the stack, keeping the top item
Aritmética (IMP: [Tab] [espacio])
comandos aritméticos operan en los dos últimos elementos en la pila, y sustituirlos por el resultado de la operación. El primer elemento empujado se considera que queda del operador.
add Addition
sub Subtraction
mul Multiplication
div Integer Division
mod Modulo
Montón de acceso (IMP: [Tab] [Tab])
comandos de acceso Montón miran a la pila para encontrar la dirección de temas que se almacene o se extraiga. Para almacenar un artículo, presione la dirección luego el valor y ejecute el comando de la tienda. Para recuperar un elemento, presione la dirección y ejecute el comando de recuperación, que colocará el valor almacenado en la ubicación en la parte superior de la pila.
save Store
load Retrieve
de control de flujo (IMP: [LF])
operaciones de control de flujo son también comunes. Subrutinas están marcadas por etiquetas, así como los objetivos de saltos condicionales e incondicionales, por el que las espirales se pueden implementar. Los programas deben ser terminados por medio de [LF] [LF] [LF] para que el intérprete pueda salir limpiamente.
L: Mark a location in the program
call L Call a subroutine
goto L Jump unconditionally to a label
if=0 L Jump to a label if the top of the stack is zero
if<0 L Jump to a label if the top of the stack is negative
return End a subroutine and transfer control back to the caller
halt End the program
I/O (IMP: [Tab] [LF])
Finalmente, necesitamos ser capaces de interactuar con el usuario. Hay instrucciones de IO para leer y escribir números y caracteres individuales. Con esto, se pueden escribir rutinas de manipulación de cadenas. Las instrucciones de lectura toman la dirección del montón para almacenar el resultado desde la parte superior de la pila.
print chr Output the character at the top of the stack
print int Output the number at the top of the stack
input chr Read a character and place it in the location given by the top of the stack
input int Read a number and place it in the location given by the top of the stack
Pregunta: ¿Cómo le rediseñar, volver a grabar o cambiar el nombre de los mnemónicos anteriores y por qué razones?
Holy crap, un ensamblador whitespace? ¡Creo que tu geek-o-meter acaba de llegar a once! – Martin