Pregunta

El semestre pasado en la universidad, mi maestro en la clase Lenguajes nos enseñó el lenguaje esotérico llamado espacios en blanco . Con el fin de aprender el idioma mejor con un horario muy ocupado (parciales), escribí un intérprete y ensamblador en Python . Un href="http://wapedia.mobi/en/Assembly_language" rel="nofollow noreferrer"> lenguaje de ensamblaje fue diseñado para facilitar la escritura de programas fácilmente, y un programa de ejemplo fue escrito con el dado montaje mnemónicos .

Ahora que es verano, un nuevo proyecto ha comenzado con el ser 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. Puesto que hay tanto más tiempo que antes para trabajar en su diseño, se le presenta aquí con un esquema que proporciona un conjunto revisado de mnemotécnicos para el lenguaje ensamblador. Este mensaje se marca como un wiki para su discusión.

¿Alguna vez ha tenido alguna experiencia con lenguajes ensambladores en el pasado? Hubo algunas instrucciones que usted pensó que debería haber sido renombrado a algo diferente? ¿Usted se encontró pensar fuera de la caja y con un paradigma diferente que en el que los mnemónicos fueron nombrados? Si usted puede responder sí a cualquiera de estas preguntas, son muy bienvenidos aquí. respuestas subjetivas son apreciados!


Pila Manipulación (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. Se considera que el primer elemento empujado a la izquierda 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 artículos para ser almacenados o recuperados. Para guardar un elemento, empujar la dirección entonces el valor y ejecute el comando tienda. Para recuperar un elemento, empujar la dirección y ejecutar la recuperación de comandos, lo que colocará el valor almacenado en la ubicación en la parte superior de la pila.

save         Store
load         Retrieve

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, mediante el cual se pueden implementar bucles. 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])

Por último, tenemos que ser capaces de interactuar con el usuario. Hay instrucciones IO para la lectura y números y caracteres individuales escritura. Con éstos, las rutinas de manipulación de cadenas pueden escribirse. Las instrucciones de lectura toman la dirección del montón en el que almacenar el resultado de 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 rediseñar, volver a grabar o cambiar el nombre de los mnemónicos anteriores y por qué motivos

¿Fue útil?

Solución

  • empuje #n, para dejar claro que n es un inmediata.
  • "intercambio" es a veces "exc" o "EXCH" creo.
  • "Guardar" suele ser "c" (tienda)
  • "carga" es por lo general "LD"
  • "llamada" también podría ser "JSR" o "bl".
  • "goto" es por lo general "JMP" o "sujetador"
  • "si = 0" es por lo general "beq"
  • "si <0" es por lo general "BLT"
  • "retorno" suele ser "ret" o "BLR"
  • "salida" suele ser "alto" / "Equipo de Alto Nivel" en el contexto de una CPU.
  • "chr de impresión" y "int print" podrían ser "print.c" y "print.i". Hay muchas maneras de especificar la instrucción variantes, pero por lo general no está en los operandos.

EDIT:

Si no le importa confundir códigos de operación y modos de direccionamiento, usando la sintaxis CISCy,

  • "empuje (sp)" en lugar de "copia"
  • "empujar N (sp)" en lugar de "copiar N" (módulo multiplicando por el tamaño de palabra)
  • "empuje * (sp)" en lugar de "carga" (salvo que lo hace un pop antes de empujar los valores cargados)
  • "POP * 1 (sp)" en lugar de "empuje" (salvo que en realidad aparece dos veces)

Por otra parte, el código basado en la pila por lo general trata de inserción y extracción como implícita. En ese caso, "imm n" (inmediato) en lugar de "empuje". A continuación, todas las operaciones de la pila son operaciones puramente pila, lo cual es bueno y consistente.

No estoy seguro de cómo me gustaría escribir "Drop N" - la descripción hace que suene como "gota 1" no es equivalente a "caída" que parece extraño

.

Otros consejos

Creo que el primer cambio me propongo está cambiando bodega y soltar para empujar y hacer estallar respectivamente.

A continuación, tal vez me cambio el nombre de copia a dup (creo que es el nombre más común para esta operación en lenguajes orientados a pila).

Estoy un poco desconcertado por qué frecuencia tiene breves explicaciones de una palabra que son diferente a la tecla de acceso. Por ejemplo mnemotécnica es Guardar, la explicación es tienda. Mnemotécnica es de carga, la explicación es Recuperar. Por cierto que esas son las dos mnemotécnicos que no se explican lo suficiente para mí. Guardar lo dónde? Cargar lo que de dónde? ( Editar la pregunta ha sido editada posteriormente para hacer estos significados claro)

Gracias por el interesante post.

No estoy seguro de entender completamente su pregunta, por lo que si estoy fuera de la base, perdóname.

Además de su pila, probablemente añadir un "registro de estado" que contiene una variedad de diferentes banderas (como Carry, de desbordamiento, y Zero) que son fijados por los operadores arithmatic.

Yo añadiría a continuación "si" las formas que ponen a prueba esas banderas.

Yo añadiría desplazamiento de bits y la rotación (derecha e izquierda) las instrucciones, así como AND / OR / XOR / NO operaciones que operan en los bits.

Lo más probable es que desee tener algún tipo de acceso a la memoria, a menos que pretenda las instrucciones de E / S a la memoria tratar como una corriente de valores para que el buen ol' moda sensación máquina de Turing.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top