Competencia: Gestión en TI.
Descripción de la Actividad
Esta actividad posee 2 partes: realizar el calculo de área de una circunferencia con números reales y calcular el promedio de una lista de números dados.
El Código de 32 bits, que realice la siguiente acción:
Solicitar por teclado el diámetro de una circunferencia y calcular el área mostrando el resultado por pantalla.
También Se requiere , 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
Solución
Código circunferencia:
msg "ingrese ahora el diametro "; muestra el mensaje en la pantalla
in ax,1 ; Ingresa datos del teclado
stf 021 ; Guarda los numeros en la posicion de memoria 021
ldf 021 ; luego carga los numeros que se encontraban en la memoria 021
divf 089 ; Divide el que se encuentra en la memoria 089
stf 028 ; guarda el numero en 028
ldf 028 ; Carga el numero que anterior mente guardamos en 028
mulf 028 ; lo multiplica por si mismo
stf 010 ; luego lo guarda en la memoria 010
ldf 010 ; despues cara el numero que guardamos en 010
mulf 090 ; multiplica el numero de la posision 090
stf 011 ; y multiplica el numero de memoria 011
out 1,ax; Muestra resultado en pantalla
hlt ; fin del programa
#089
0100000000000000
0000000000000000
#90
0100000001001000
1111010111000010
Ciclos:
Leo en PC la proxima direccion a ejecutar :000
Envio al MAR la proxima direccion de mem a leer.
Llevo al MDR al contenido de dicha direccion de memoria.
Le entrego al IR el dato para que lo decodifique e incremento el PC.
Leo de la pos 089 de memoria el valor a copiar en CX
Escribo 101 en CX
Leo en PC la proxima direccion a ejecutar: 001
Envio al MAR la proxima direccion de mem a leer
Llevo al MDR el contenido de dicha direccion de memoria
Le entrego al IR el dato para que lo decodifique e incremento el PC
LDB: 094 a esta direccion le sumo el valor de BX: 50 posiciones
Llevo al MAR el contenido de la direccion 0C6
Cargo en AX el contenido de la direccin
Leo en PC la proxima direccion a ejecutar: 002
Envio al MAR la proxima direccion de mem a leer
Llevo al MAR el contenido de dicha direccion de memoria
Le entrego al IR el dato para que lo decodifique e incremento el PC
Llevo la pos de mem 050 a MAR de donde esta lo que voy a sumar con AX
Llevo al MDR el contenido de la direccion 050
Leo AX y MDR para ser llevados a la ALU y realizar la suma
Despues de realizada la SUMA, almaceno el resultado en AX
Leo en PC la proxima direccion a ejecutar: 003
Envio al MAR la proxima la proxima direccion de mem a leer
Llevo al MAR el contenido de dicha direccion de memoria
Le entrego al IR el dato para que lo decodifique e incremento el PC
Llevo la Pos de mem 050 a MAR que es de donde voy a guardar AX
Leo AX para ser llevado a MDR antes de ser escrito en memoria
Llevo a MDR el contenido de AX para luego escribirlo en 050
Escribo en la Pos 050 el valor 11111010
leo en PC la proxima direccion a ejecutar : 004
Envio al MAR la proxima direccion de mem a leer
Llevo al MAR el contenido de dicha direccion de memoria
Le entrego al IR el dato para que lo decodifique e incremento el PC
Leo BX (registro a incrementar) para llevarlo a la ALU Y sumarle 1
Escribo BX registro (registro ya incrementado)
También podemos decir que un ciclo del reloj tiene que ver con la velocidad del procesador incorporado
en la CPU del ordenador y se mide en megaherz (MHz) y a velocidad del reloj
corresponde al numero de pulsaciones por segundo.
Promedios
#SimuProc 1.4.3.0
MOV CX,089 ;Copia el contenido a CX
LDB 094 ; luego carga en AX el contenido
ADD 050 ; Lo ocupamos para poder sumar
STA 050 ; Guardamos el contenido AX en direccion de memoria 050
INC BX ; Incrementamos en 1 el valor del contenido de BX
LOOP 001 ; Repetimos la accion
DIV 089 ; Lo usamos para poder dividir
MSG "El promedio es = " ; Muestra en pantalla un mensaje correspondiente
EAP ;Nos permite mostrar en pantalla nuestro mensaje
XAB ; Intercambiamos los registros AX y BX
HLT ;fianl del programa
#089
101 ;cantidad de numeros a promediar
;Numeros a promediar
#094
1001101
1010101
1110
11110
101100
Reflexión
Encontré muy difícil poder ocupar lo que es el simuproc y ver como trabaja un procesador en tiempo real, pero practicando logre el objetivo.
No hay comentarios:
Publicar un comentario