Esquema del efecto de la instrucción set name,data sobre la memoria de pares.
 
2- memoria de pares:

La estructura Jenoassembler-hax dispone de dos memorias principales muy diferentes (aunque ya veremos que en realidad son tres), una de ellas es la memoria del programa, donde contendremos el código que se va a ejecutar y que es capaz de localizar nativamente la dirección de etiquetas y de procedimientos. Ésta memoria apenas tenemos que administrarla una vez cargado el programa, tan sólo modificaremos el puntero con las instrucciones de flujo. La otra memoria es llamada memoria de pares, puesto que en realidad son dos memorias emparejadas, así podremos guardar parejas de "nombre"-"valor" que pueden ser accesadas usando su nombre como parámetro. El primer bloque de la memoria de pares, la que contiene los nombres es capáz de buscar automáticamente y devolver el valor contenido en el otro bloque. En síntesis es un sistema que funciona más o menos como las variables de toda la vida. Vamos a efectuar una operación compuesta de ejemplo usando la memoria de pares para los datos temporales:

(2+3) + (3-2)

o lo que es lo mismo en notación infija postasignación:

2+3[a]3-2[b]a+b[res]

// 1- efectuamos la primera operación y guardamos el resultado en la memoria de pares
//    su nombre será tmp01, usaremos el prefijo de literal puesto que tmp01 es un nombre, no un valor dinámico
mode #int
set0 #2
set1 #3
suma
set #tmp01,core_reg2

// 2- tenemos el valor contenido en tmp01
//    seguimos con la siguiente operación y la guardamos como tmp02:
set0 #3
set1 #2
resta
set #tmp02,core_reg2

// 3- ahora deberemos asignar los dos resultados a los dos registros principales para operar con ellos
//    los resultados intermedios están contenidos den tmp01 y tmp02:

set1 tmp02
set0 tmp01
suma

// 4- listo, ahora tenemos el resultado final en core_reg2, podemos escribirlo o usarlo:
busout #3,core_reg2

Cada vez que usamos la instrucción set hay que comprobar si el nombre de variable existe o no, y como es obvio, cada lectura de un valor de estos efectua otra búsqueda. No son especialmente lentas, en realidad depende del número de objetos contenidos en la memoria de pares, es decir, su coste es O(n) donde n es el número de nombres en memoria, así que el uso de registros en lugar de memoria de pares resulta más rápido siempre y cuando 




Abdab software