MICROPROCESADORES Y CONTROLADORES
PRACTICAS DE LABORATORIO
TUTOR
HECTOR URIEL VILLAMIL GONZALEZ
De
NELSY SANCHEZ TORRES
40091533
YULBREY BAUTISTA ROJAS
1075233081
MARIA ASEBEL RUMIQUE ARIAS
30521356
ANGELICA SIERRA SERNA
38667452
ALEXANDER VAENCIA
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD
ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA
CEAD FLORENCIA
PUERTO RICO CAQUETA
CODIGIO DE CURSO 309696
2011.
1. DIAGRAMA DE FLUJO DE LA CALCULADORA
no
si
no
si
no
si
no
si
INICIOINICIO
Num, num 1, num2Resultado char
Lea numero 1Numerous 2
Lea numero 1Numerous 2
Lea la operacion
Lea la operacion
Operacion =”+”
Operacion =”+”
Resultado =n1+n2n1+n2
Resultado =n1+n2n1+n2
Operacion= “_”
Operacion= “_”
Operacion= “*”
Operacion= “*”
Resultado=N1-n2
Resultado=N1-n2
Resultado=N1*n2
Resultado=N1*n2
Operacion= “/”
Operacion= “/”
Resultado=N1/n2
Resultado=N1/n2
Escriba=El Resultado es:
Escriba=El Resultado es: finfin
CODIGO FUENTE EN SIMUPROC DE LA CALCULADORA
MSG -------------------MENU-------------------- *MSG 1 INTRODUCIR VALORES *MSG 2 SALIR DEL PROGRAMA *MSG -------------------------------------------------*LDT ELIJA UNA OPCIÓNCMP 102JMA 110JEQ 112CMP 101JEQ 114JME 0#100011011100101#110MSG SU NUMERO ES MAYORJMP 0MSG "ADIOS"HLTLDT INTRODUZCA EL PRIMER NUMEROSTA 50LDT INTRODUZCA EL SEGUNDO NUMEROSTA 51MSG *******************************MSG ---------MENU ARITMETICO-------MSG QUE DESEA HACERMSG 1 SUMARMSG 2 RESTARMSG 3 MULTIPLICARMSG 4 DIVIDIRMSG 5 VOLVER AL MENU
PRINCIPALMSG -------------------------------MSGMSGMSG SU OPCION ESLDTCMP 105JMA 112JEQ 0CMP 104JEQ 80CMP 103JEQ 150CMP 102JEQ 140
CMP 101
JEQ 130JME 118#80LDA 50DIV 51EAP LA DIVISION ESJMP 118HLT#150LDA 50MUL 51EAP LA MULTIPLICACIÓN ESJMP 118HLT#140LDA 50SUB 51EAP LA RESTA ESJMP 118HLT#130LDA 50
ADD 51EAP LA SUMA ES
JMP 118HLT
2. Diseñe un programa que represente la solución matemática a un problema. El algoritmo para hallar los números primos es el siguiente:
PROGRAMA
leo limitenum=1MQ num<=limite Haga Si num<=3 Imprima Num Sino Si num % 2 == 0 Break Sino x=3 raiz=RaizC(num) MQ x<=raiz Haga Si num % x ==0 break SI x= x+2 FinMQ imprima num FinSi FinSinum=num+1FinMQFIN PROGRAMA
//Programa Numeros Primos //Leo el limite o valor hasta donde quiero hallar números primos //inicializo num en 1 //Repito este bucle hasta que num > limite
//Si el modulo de num/2 = 0 es porque el numero es par.
//aca RaizC() es la funcion que se explica más adelante.
uncion RaizC() y=1 mq (y != raiz) ó (y != raiz+1) haga raiz = y y = ( y + ( num / y )) / 2 fin mq
Funcion para hallar la raiz cuadrada de un numero //inicializo y en 1 //Hago un Bucle que no termine hasta que "y" sea diferente de raiz o raiz+1
Ahora para escribirlo en assembler organizare la memoria del simulador asi:
Variable Dirección Memoria
Descripcion
limitenum
xraizy
2301
3435363738
3A3B3C3D
Limite hasta donde quiero que lleguen los primos empieza en 1 y termina cuando llega a limite variable usada para hallar si el numero es primo variable raiz, almacena la raiz de num variable usada en RaizC()
Constante numero 2 (en binario 10) Constante numero 3 (en binario 11) Constante numero 0 (en binario 0) Constante numero 1 (en binario 1)
Ahora pasemos ese Algoritmo a Assembler, al frente de cada instrucción esta comentado después del punto y coma que hace esta.El programa quedaria asi:
Dir Instrucción y Parámetros
Comentarios
00: 01: 02: 03: 04: 05: 06: 07: 08: 09: 0A: 0B: 0C: 0D: 0E: 0F: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 1A: 1B: 1C: 1D: 1E: 1F: 20: 21: 22: 23: 24: 25: 26: 27: 28:
NOPMOV 35,3DLDTMOV 34,AXMOV AX,34CMP 35JME 32MOV AX,35CMP 3BJMA DMOV AX,35EAPJMP 30MOV AX,35DIV 3AMOV AX,BXCMP 3CJMA 13JMP 30MOV 36,3BMOV 38,3DMOV AX,38CMP 37JEQ 23MOV AX,37INC AXCMP 38JEQ 23MOV 37,38MOV AX,35DIV 38ADD 38DIV 3AMOV 38,AXJMP 15MOV AX,37CMP 36JME 2EMOV AX,35DIV 36MOV AX,BX
;No operacion;num = 1;leo del teclado el Limite;almaceno limite en 34;cargo limite en AX (Comienzo MQ);comparo limite con num;Si limite es menor que num voy a fin de MQ;AX=num;comparo num con 3;si num > 3 voy a SINO;AX = num;Escribo num en pantalla;voy a FINSI;AX=num SINO;AX = AX/2 , BX = modulo;paso el modulo a AX;comparo mod con 0 ;salto si mod > 0;break;x=3;y=1;cargo Y en AX (COMIENZO MQ del raiz());comparo y con raiz;si y=raiz salgo del mq;AX=raiz;AX=AX+1;comparo raiz con y;si raiz=y salgo del mq;raiz = y;AX = num;AX = num/y;AX = AX + Y;AX = AX / 2;y = al valor del Registro AX;Salto a repetir el blucle MQ del raizC();FINMQraiz() y AX = raiz (COMIENZO MQ2);comparo raiz con y;si raiz < x voy a fin MQ2;AX = num;AX = AX / x;AX = residuo que está en BX
29: 2A: 2B: 2C: 2D: 2E: 2F: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 3A: 3B: 3C: 3D: 3E: 3F: 40:
CMP 3CJEQ 30INC 36INC 36JMP 23MOV AX,35EAPINC 35JMP 04HLT
10
10 11 0 1
;Comparo residuo con 0;si residuo = 0 salgo del SI;x= x+1;x= x+1;voy a MQ2;AX = num FIN MQ2;imprimo num en pantalla;FINSI;hago loop;FIN MQ y PROGRAMA
;Inicializo raiz en 2
;Con el editor de memoria del simulador almaceno las constantes ;Constante 2 ;Constante 3 ;Constante 0 ;Constante 1
CONCLUSIONES
Esta práctica nos permitió conocer un poco sobre el manejo del simulador, aunque nos causo mucha dificultad, este trabajo lo realizamos en grupo con los compañeros de nuestro municipio.