estoy utilizando esta herramienta:
http://mermaja.act.uji.es/index2.html que es una especie de emulador de procesador.
Bien el caso es que tengo la siguente instruccion:
Citar
Análisis del programa.
Las dos primeras instruciones cargan en d0 y d5 constantes necesiaras para la ejecución del programa. Las instrucciones 2 y 3 hacen referencia a los datos de entrada: la dirección del vector se carga en d1 y su tamaño en d3. Las dos instrucciones siguientes preparan otros tantos valores necesarios para la ejecución del algoritmo. En d2 se carga el número de iteraciones a realizar, que equivale a la mitad del tamaño del vector. Esta mitad se toma por defecto pues, en caso de tamaño impar, el elemento del centro del vector no debe ser movido. d3 constituye el puntero al final del vector, calculado sumando al puntero a su inicio, d1, el tamaño del vector menos 1.
El bucle de intercambio es muy sencillo. A partir de la instrucción 6 se cargan los valores a los que apuntan d1 y d3 en d4 y d5 respectivamente, y se escriben intercambiados a continuación. Aquí queda patente el funcionamiento del acceso indirecto de las instrucciones indlee e indesc. Por último el puntero al principio se incrementa mientras que el puntero al final y el contador de iteraciones (d2) se decrementan. La instrucción de salto final permite continuar en el bucle mientras el contador no llegue a cero.
Las dos primeras instruciones cargan en d0 y d5 constantes necesiaras para la ejecución del programa. Las instrucciones 2 y 3 hacen referencia a los datos de entrada: la dirección del vector se carga en d1 y su tamaño en d3. Las dos instrucciones siguientes preparan otros tantos valores necesarios para la ejecución del algoritmo. En d2 se carga el número de iteraciones a realizar, que equivale a la mitad del tamaño del vector. Esta mitad se toma por defecto pues, en caso de tamaño impar, el elemento del centro del vector no debe ser movido. d3 constituye el puntero al final del vector, calculado sumando al puntero a su inicio, d1, el tamaño del vector menos 1.
El bucle de intercambio es muy sencillo. A partir de la instrucción 6 se cargan los valores a los que apuntan d1 y d3 en d4 y d5 respectivamente, y se escriben intercambiados a continuación. Aquí queda patente el funcionamiento del acceso indirecto de las instrucciones indlee e indesc. Por último el puntero al principio se incrementa mientras que el puntero al final y el contador de iteraciones (d2) se decrementan. La instrucción de salto final permite continuar en el bucle mientras el contador no llegue a cero.
I000 movec d0, 0
I001 movec d2, 2
I002 movec d3, tam
I003 movec d1, vector
I004 divide d2, d3, d2
I005 sumac d3, d1, tam-1
I006 bucle: indlee d4, (d1)
I007 indlee d5, (d3)
I008 indesc (d3), d4
I009 indesc (d1), d5
I010 sumac d1, d1, 1
I011 restac d4, d4, 1
I012 restac d2, d2, 1
I013 salta> d2, d0, bucle
I014 fin
Por mucho que repaso y miro , no logro entender realmente el asunto, conozco las instrucciones y se lo que hace cada una pero no logro entender el programa en si.
Sabeis de algun tutorial o de algo parecido que pueda hacerme ver las cosas mejor? , estoy estudiando ASI y el profesor de SIMM la verdad es que se ha puesto a dar esto y voy bastante perdido.
Tengo que construir un programa similar que ordene un vector , pero la verdad que no se ni por donde empezar , solo se me ocurre ir picando codigo del ejemplo pero voy muy perdido porque hago cosas y no se el porque las hago.
Un saludo y gracias.