Título: Ayuda procesador basico Publicado por: Gargoris en 6 Octubre 2009, 19:08 pm Buenas , estoy un poco perdido , a ver si me podeis decir por donde van los tiros.
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. 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. Título: Re: Ayuda procesador basico Publicado por: Shrick en 6 Octubre 2009, 21:45 pm Por lo que veo tienes que aprender cada una de las instrucciones de esta máquina y crear programas en ensamblador de la máquina, primero antes que nada debes conocer cada una de las instrucciones, que cuentan con la ventaja de que solo emplea direccionamiento directo (aunque tiene dos instrucciones de direccionamiento indirecto), luego la propia instrucción da direcciones de entrada y salida, veo que no usa registros y que lee y escribe directamente en memoria.
Si no me equivoco (mirando las imágenes) usa arquitectura Harvard igual que los micro-controladores, la cual significa que tienes dos memorias una exclusiva para datos y otra exclusiva para instrucciones. Lo que te recomiendo es que cojas lápiz y papel e ir apuntando en lenguaje natural lo que hace cada instrucción. Lo primero es solo inicializar los datos: I000 d0 <- 0 Se mueve la constante 0 a la posición 0 del área de memoria de datos. I001 d2 <- 2 Se mueve la constante 2 a la posición d2 del área de memoria de datos I002 d3 <- tam Se mueve la constante tam a la posición d3 del área de memoria de datos, tienes que mirar cuanto vale tam, porque es simplemente un nº. I003 d1 <- vector Se mueve la constante tam a la posición d1 del área de memoria de datos, tienes que mirar cuanto vale tam, porque es simplemente un nº. Citar 3.1. Instrucciones de transferencia de constantes. Son instrucciones con dos operandos: una posición de memoria destino y una constante fuente. Sirven para cargar constantes en posiciones de memoria. Se justifican porque no existe un registro fijo a cero como en la mayor parte de procesadores RISC, por lo que sin ellas cualquier carga de constantes requeriría de dos intrucciones para verificarse. Solo existe una instrucción en este grupo: * movec mem, cte (ej. movec d7, 32 d7 = 32) Ahí viene muy clarito. Ahora se van haciendo operaciones. I004 d2 = d3 / d2 Simplemente guarda el resultado de la división de d3 /d2 y lo guarda en d2. I005 d3 = d1 + (tam-1) Se guarda en d3, la suma de d1 y (tam-1), usa el valor de d1 que es el valor de vector y le sumas la constante tam-1. I006 d4 <- (d1) Se guarda el contenido de d1 en d4, que coincide con el valor de vector. Tiene una etiqueta de salto. Atención esta y otra instrucción tiene direccionamiento indirecto, esto es que el el valor de lo que contiene el paréntesis es la dirección de lo que guardara el operando de la derecha es decir Imagina que tienes en memoria de datos: d0: ..... d1: 0x05 d2: ..... .... d4: 0xF5 d5: 0xFF Lo que haces es coger lo que tiene d1 que es 0x05, esto se convierte en una dirección, esto quiere decir que en esta instrucción es como si tuviera 0xFF, es decir d1 apunta a d5 y coge su valor en esa instrucción y luego se pasa el valor 0xFF a d4. La memoria quedaría así: d0: ..... d1: 0x05 d2: ..... .... d4: 0xFF d5: 0xFF I007 d5 <- (d3) Se guarda el contenido de d3 en d5, similar al anterior I008 (d3) <- d4 Esta es la otra instrucción que usa direccionamiento indirecto. Lo que hace es coger el lo que vale d4 y ponerlo en la dirección que pone d3. Por ejemplo: d0: ..... d1: 0x05 d2: ..... d3: 0x01 d4: 0x5A d5: 0xFF Seria lo inverso a lo hecho anteriormente: d0: ... d1: 0x5A d2: ..... d3: 0x01 d4: 0x5A d5: 0xFF I009 (d1) <- d5 Lo mismo que antes :P . I010 o I0x0A d1 = d1 + 1 Se incrementa d1 en 1. I011 o I0x0B d4 = d4 - 1 Se decrementa d4 en 1. I012 o I0x0C d2 = d2 - 1 Se decrementa d2 en 1. I013 o I0x0D salta a I006 si d2 > d0 I014 o I0x0E se detiene la ejecución. Con lo que te he puesto hazte una tabla con los valores de las variables y como van cambiando con cada instrucción que se ejecuta. Al principio es dificil de entender, pero luego ya le vas pillando el truquillo ;) . Lo siento si la explicación es confusa. Un Saludo. Título: Re: Ayuda procesador basico Publicado por: Gargoris en 6 Octubre 2009, 21:57 pm Uhm.. muchas gracias por la explicacion , me has aclarado algunas dudas , hare lo que dices con papel y boli .
Yo pensaba que era lenguaje ensamblador , pero resulta que es algo inventado no? osea que no sirve realmente para nada, salvo para aprender, no es asi?. Título: Re: Ayuda procesador basico Publicado por: Eternal Idol en 6 Octubre 2009, 22:06 pm Es ensamblador pero de ese procesador, no de una PC ;)
Título: Re: Ayuda procesador basico Publicado por: Shrick en 6 Octubre 2009, 22:23 pm Bueno puedes programar esa máquina en VHDL y simularlo en una CPLD o una FPGA. Así si puedes dar uso real :xD .
Nosotros en clase de prácticas tenemos que programar en VHDL un máquina sencilla de 4 instrucciones (turing completo o que es capaz de hacer cualquier cosa), y como proyecto final tenemos que simular la máquina+ que es un poco más compleja que esa máquina. |