Sie sind auf Seite 1von 11

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

INICIO

Num, num 1,
num2
Resultado char

Lea numero
1
Numerous 2

Lea la
operacion

no

Operacion si Resultado
=”+” =n1+n2
n1+n2
no

si Resultado=
Operacio
n= “_” N1-n2

no
Escriba=
El Resultado es: fin
Operacio Resultado=
si
n= “*” N1*n2

no

Operacio Resultado=
si
n= “/” N1/n2
CODIGO FUENTE EN SIMUPROC DE LA CALCULADORA

MSG MSG
-------------------MENU---------- MSG
---------- * MSG SU OPCION ES
MSG 1 INTRODUCIR VALORES * LDT
MSG 2 SALIR DEL PROGRAMA * CMP 105
MSG JMA 112
------------------------------------ JEQ 0
-------------* CMP 104
LDT ELIJA UNA OPCIÓN JEQ 80
CMP 102 CMP 103
JMA 110 JEQ 150
JEQ 112 CMP 102
CMP 101 JEQ 140
JEQ 114
JME 0
#100
0
1
10
CMP 101
11
100 JEQ 130
101 JME 118
#110 #80
MSG SU NUMERO ES MAYOR LDA 50
JMP 0 DIV 51
MSG "ADIOS" EAP LA DIVISION ES
HLT JMP 118
LDT INTRODUZCA EL PRIMER HLT
NUMERO #150
STA 50 LDA 50
LDT INTRODUZCA EL MUL 51
SEGUNDO NUMERO EAP LA MULTIPLICACIÓN ES
STA 51 JMP 118
MSG HLT
******************************* #140
MSG ---------MENU LDA 50
ARITMETICO------- SUB 51
MSG QUE DESEA HACER EAP LA RESTA ES
MSG 1 SUMAR JMP 118
MSG 2 RESTAR HLT
MSG 3 MULTIPLICAR #130
MSG 4 DIVIDIR LDA 50
MSG 5 VOLVER AL MENU ADD 51
PRINCIPAL EAP LA SUMA ES
MSG JMP 118
------------------------------- HLT
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 limite
num=1
MQ num<=limite Haga //aca RaizC() es la funcion que
    Si num<=3 se explica más adelante.
        Imprima Num
    Sino Si num % 2 == 0
                Break
            Sino
                x=3 uncion RaizC() 
                raiz=RaizC(num) y=1 
                MQ x<=raiz Haga
mq (y != raiz) ó (y != raiz+1)
                    Si num % x ==0 break SI
                    x= x+2 haga 
                FinMQ     raiz = y 
                imprima num
    y = ( y + ( num / y )) / 2 
            FinSi
    FinSi fin mq
num=num+1
FinMQ
FIN PROGRAMA

Funcion para hallar la raiz


//Programa Numeros Primos 
cuadrada de un numero 
//Leo el limite o valor hasta
//inicializo y en 1 
donde quiero hallar números
//Hago un Bucle que no termine
primos 
hasta que "y" sea diferente de
//inicializo num en 1 
raiz o raiz+1 
//Repito este bucle hasta que
num > limite 

//Si el modulo de num/2 = 0 es


porque el numero es par. 
Ahora para escribirlo en assembler organizare la memoria del
simulador asi:

Variable Dirección Descripcion


Memoria
limite 34 Limite hasta donde quiero que lleguen los primos 
num 35 empieza en 1 y termina cuando llega a limite 
x 36 variable usada para hallar si el numero es primo 
raiz 37 variable raiz, almacena la raiz de num 
y  38  variable usada en RaizC() 

2 3A Constante numero 2  (en binario 10) 


3 3B Constante numero 3  (en binario 11) 
0 3C Constante numero 0  (en binario 0) 
1 3D 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 Comentarios


Parámetros
00:  NOP ;No operacion
01:  MOV 35,3D ;num = 1
02:  LDT ;leo del teclado el Limite
03:  MOV 34,AX ;almaceno limite en 34
04:  MOV AX,34 ;cargo limite en AX (Comienzo MQ)
05:  CMP 35 ;comparo limite con num
06:  JME 32 ;Si limite es menor que num voy a fin de MQ
07:  MOV AX,35 ;AX=num
08:  CMP 3B ;comparo num con 3
09:  JMA D ;si num > 3 voy a SINO
0A:  MOV AX,35 ;AX = num
0B:  EAP ;Escribo num en pantalla
0C:  JMP 30 ;voy a FINSI
0D:  MOV AX,35 ;AX=num SINO
0E:  DIV 3A ;AX = AX/2 , BX = modulo
0F:  MOV AX,BX ;paso el modulo a AX
10:  CMP 3C ;comparo mod con 0 
11:  JMA 13 ;salto si mod > 0
12:  JMP 30 ;break
13:  MOV 36,3B ;x=3
14:  MOV 38,3D ;y=1
15:  MOV AX,38 ;cargo Y en AX (COMIENZO MQ del raiz())
16:  CMP 37 ;comparo y con raiz
17:  JEQ 23 ;si y=raiz salgo del mq
18:  MOV AX,37 ;AX=raiz
19:  INC AX ;AX=AX+1
1A:  CMP 38 ;comparo raiz con y
1B:  JEQ 23 ;si raiz=y salgo del mq
1C:  MOV 37,38 ;raiz = y
1D:  MOV AX,35 ;AX = num
1E:  DIV 38 ;AX = num/y
1F:  ADD 38 ;AX = AX + Y
20:  DIV 3A ;AX = AX / 2
21:  MOV 38,AX ;y = al valor del Registro AX
22:  JMP 15 ;Salto a repetir el blucle MQ del raizC()
23:  MOV AX,37 ;FINMQraiz()  y  AX = raiz     (COMIENZO MQ2)
24:  CMP 36 ;comparo raiz con y
25:  JME 2E ;si raiz < x voy a fin MQ2
26:  MOV AX,35 ;AX = num
27:  DIV 36 ;AX = AX / x
28:  MOV AX,BX ;AX = residuo que está en BX
29:  CMP 3C ;Comparo residuo con 0
2A:  JEQ 30 ;si residuo = 0 salgo del SI
2B:  INC 36 ;x= x+1
2C:  INC 36 ;x= x+1
2D:  JMP 23 ;voy a MQ2
2E:  MOV AX,35 ;AX = num       FIN MQ2
2F:  EAP ;imprimo num en pantalla
30:  INC 35 ;FINSI
31:  JMP 04 ;hago loop
32:  HLT  ;FIN MQ y PROGRAMA 
33: 
34: 
35: 
36: 
37:  ;Inicializo raiz en 2 
38:  10 
39:  ;Con el editor de memoria del simulador almaceno las constantes 
3A:  ;Constante 2 
3B:  10  ;Constante 3 
3C:  11  ;Constante 0 
3D:  0  ;Constante 1 
3E:  1
3F: 
40: 
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.

Das könnte Ihnen auch gefallen