Autor: Rodrigo Soto Parra
Competencia: Gestion en TI (Nivel 1)
Descripcion de la actividad
Recibirán por correo un ejerció que deben resolver con ensamblador de Simuproc este ejercicio es único para cada alumno y pose un archivo .asm base para realizar el mismo.
El presente problema consiste en realizar un codigo en ensamblador del Simuproc para calcular el promedio de una lista de numeros en memoria.
Descarga el archivo http://www.inf.uct.cl/~ amellado/problemas/rsotop2011. asm . En ese archivo encontraras 2 direcciones de memoria dadas, la primera contiene la cantidad de numeros para realizar el calculo del promedio y la segunda posee la lista de numeros a promediar.
Se requiere entonces, resolver el problema usando el simulador de CPU Simuproc, indicando ademas el funcionamiento de los ciclos de reloj para las primeras 4 instrucciones del codigo propuesto.
Ejemplo:
#056 <- primera direccion de memoria
110 ;cantidad de numeros a promediar
;numeros a promediar
#061 <- segunda direccion de memoria
10
100
111
101
100
+ 10
---------
11000 / 110 = 100 -> promedio = 4
La actividad sera evaluada, deben subir 2 archivos a la seccion de tareas del Educa Moodle. Un archivo que contenga la explicacion de los ciclos de reloj y el otro que contenga el archivo rsotop2011.asm con el codigo programado.
Descarga el archivo http://www.inf.uct.cl/~
Se requiere entonces, resolver el problema usando el simulador de CPU Simuproc, indicando ademas el funcionamiento de los ciclos de reloj para las primeras 4 instrucciones del codigo propuesto.
Ejemplo:
#056 <- primera direccion de memoria
110 ;cantidad de numeros a promediar
;numeros a promediar
#061 <- segunda direccion de memoria
10
100
111
101
100
+ 10
---------
11000 / 110 = 100 -> promedio = 4
La actividad sera evaluada, deben subir 2 archivos a la seccion de tareas del Educa Moodle. Un archivo que contenga la explicacion de los ciclos de reloj y el otro que contenga el archivo rsotop2011.asm con el codigo programado.
Introduccion
La siguiente actividad cumple la funcion de estar familiarizados con la maquina o CPU en lenguaje mas cercano al computador, Gracias al programa ensamblador simuproc que creamos un codigo simple y logramos ver los cilos de reloj que este produce.
Desarrollo.
#SimuProc 1.4.3.0
# AUTOR: Rodrigo Andres Soto Parra
mov cx,047 ;cx toma el valor de 047
#001
mov bx,020 ; bx toma el valor de 0120
ldb 053 ; 053 se carga en ax mas bx
add 018 ; suma ax el valor de 018
sta 018 ; guarda el valor de ax en 018
inc 020 ; incrementa en 1 el valor de 020
mov bx,020 ; copia en bx el valor de 015
loop 001 ; cx se decrementa y repite el ciclo
div 047 ; divide ax por el valor de 047
msg "El promedio es"
eap
hlt
#047
1000 ;cantidad de numeros a promediar
;numeros a promediar
#052
101
111111
110
1100000
110001
1001111
101
100000
# AUTOR: Rodrigo Andres Soto Parra
mov cx,047 ;cx toma el valor de 047
#001
mov bx,020 ; bx toma el valor de 0120
ldb 053 ; 053 se carga en ax mas bx
add 018 ; suma ax el valor de 018
sta 018 ; guarda el valor de ax en 018
inc 020 ; incrementa en 1 el valor de 020
mov bx,020 ; copia en bx el valor de 015
loop 001 ; cx se decrementa y repite el ciclo
div 047 ; divide ax por el valor de 047
msg "El promedio es"
eap
hlt
#047
1000 ;cantidad de numeros a promediar
;numeros a promediar
#052
101
111111
110
1100000
110001
1001111
101
100000
Ciclos De Reloj
1º 20
*Leo en pc la próxima dirección a ejecutar:000
*Envio al MAR la próxima dirección de mem a leer
*Llevo al MDR el contenido de dicha dirección de memoria
*Le entrego al ir el dato para que lo decodifique en incremento el pc
*Leo la POS 47 de memoria el valor a copiar en cx
*Escribo 1000 en cx
*Leo en pc la próxima dirección a ejecutar:001
*Envio al MAR la próxima dirección de mem a leer
*Llevo al mdr el contenido de dicha dirección de memoria
*Le entrego al ir el dato para que lo decoodifique en incremento el pc
*Leo la pos 020 de memoria el valor a copiar en BX
*Escribo en BX
*Leo en PC la próxima dirección a ejecutar :002
*Envio al MAR la próxima dirección de mem a leer
*Llevo al MDR el contenido de dicha dirección de memoria
*Le entrego al IR el dato para que lo decodifique en incremento el PC
*LDB: 053 a esta dirección le sumo el valor de BX:0 posiciones
*Llevo la MDR el contenido de la dirección 053
*Cargo en AX el contenido de la dirección 111111
*Leo en PC la próxima dirección a ejecutar : 003
*Envio al MAR la próxima dirección de mem a leer
*Llevo al MDR el contenido de dicha dirección de memoria
*Le entrego al IR el dato para que lo decodifique en incremento el PC
*Envio al MAR la próxima dirección de mem a leer
*Llevo al MDR el contenido de dicha dirección de memoria
*Le entrego al ir el dato para que lo decodifique en incremento el pc
*Leo la POS 47 de memoria el valor a copiar en cx
*Escribo 1000 en cx
*Leo en pc la próxima dirección a ejecutar:001
*Envio al MAR la próxima dirección de mem a leer
*Llevo al mdr el contenido de dicha dirección de memoria
*Le entrego al ir el dato para que lo decoodifique en incremento el pc
*Leo la pos 020 de memoria el valor a copiar en BX
*Escribo en BX
*Leo en PC la próxima dirección a ejecutar :002
*Envio al MAR la próxima dirección de mem a leer
*Llevo al MDR el contenido de dicha dirección de memoria
*Le entrego al IR el dato para que lo decodifique en incremento el PC
*LDB: 053 a esta dirección le sumo el valor de BX:0 posiciones
*Llevo la MDR el contenido de la dirección 053
*Cargo en AX el contenido de la dirección 111111
*Leo en PC la próxima dirección a ejecutar : 003
*Envio al MAR la próxima dirección de mem a leer
*Llevo al MDR el contenido de dicha dirección de memoria
*Le entrego al IR el dato para que lo decodifique en incremento el PC
Conclusion
En conclusion logramos familiarizarnos mas con el lenguaje de maquina con numeros binarios y ya estamos al nivel de simular una maquina virtual con simuproc. Gracias a la clase que tuvimos con el profesor Alejandro Mellado logramos completar los objetivos que se nos impusieron al principio de la actividad.
No hay comentarios:
Publicar un comentario