domingo, 9 de octubre de 2011

Funcionamiento básico de la CPU

Autor: Cristian Lara
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