Вы находитесь на странице: 1из 14

UNIVERSIDAD DE LAS FUERZAS ARMADAS

“ESPE”

DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA

MICROPROCESADORES

DIVISION DE DOS NUMEROS EN ENSAMBLADOR Z80


SIMULATOR

DOCENTE:
ING. MIROSLAVA ZAPATA

NOMBRE:
MIKAEL MOTENEGRO

NRC: 2085

SANGOLQUI, 2018
1. TEMA

Operación división en ensamblador Z80 Simulator.

2. OBJETIVOS

2.1. OBJETIVO GENERAL

Resolver una división de dos números enteros utilizando un software de ensamblador


Z80 Simulator.

2.2.OBJETIVOS ESPECÍFICOS

 Mostrar el resultado de la división tanto como su cociente y residuo.


 Realizar la resta usando el método de restas sucesivas.
 Comprobar el resultado realizando pruebas de escritorio con la ejecución de
software.

3. PROBLEMA

Desarrollar una división de 2 números naturales utilizando el lenguaje de ensamblador


(Z80 Simulator) mostrando su resultado, es decir su cociente y residuo. El orden de la
división se debe considerar tanto cuando el divisor es mayor o menor al dividendo y
cuando es cero, el resultado se debe mostrar en decimal ya que ensamblador Z80 muestra
en hexadecimal.

Primer Caso: Segundo Caso: Tercer caso:

Dividendo > Divisor Dividendo < Divisor Dividendo = Divisor

Cuarto caso Quinto caso

Dividendo = 0 Divisor = 0

4. RESOLUCION DEL PROBLEMA

4.1.Interpretación del problema

Para el proceso de la división de 2 números se debe realizar solo con el método de


restas sucesivas ya que en ensamblador del Z80 solo realiza las operaciones
aritméticas suma y resta, se establece el orden de ingreso de los datos, primero será el
del divisor, y después del dividendo, donde se realiza un proceso para los diferentes
casos que se pueden dar:

Primer Caso:

Dividendo > Divisor

En este caso se realiza la operación normal de la división, realizando las restas


sucesivas, es decir cuando se ingrese el dividendo y el divisor, el dividendo restara al
divisor n veces hasta que ese resultado sea menor al divisor o igual a 0, en donde una
variable se guarda el número de veces que se resta y en otra el residuo en caso de que
la resta final o resta ultima sea diferente de cero. Ejemplo:

19 ÷ 4=4R=3
19 - 4 = 15 A=1

15 - 4 = 11 A=2

11 - 4 = 7 A=3

7-4=3 A=4 3<4 R3

Donde A es el número de veces que se resta (acumulador) y R es residuo que se


obtiene una vez cuando el resultado de la resta sucesiva es menor al divisor.

Segundo Caso:

Dividendo < Divisor

Este caso es especial, porque el método de restas sucesivas solo funciona siempre
cuando el dividendo es mayor que el divisor, ya que este no tendría sentido, por lo
que sus restas serian negativa y no habría condición alguna. Para nuestro aplicativo
cuando se dé este caso el cociente asumirá el valor de 0 y el residuo EE (estos valor
son arbitrarios, pero se considera 0 el cociente, porque se supone que el cociente
siempre será menor a 0, es decir decimal). Ejemplo:

5 ÷ 8 = 0  R = EE
Tercer Caso:

Dividendo = Divisor

Este es caso es simple, ya al que ser iguales siempre el cociente será 1 y el residuo 0,
por lo cual esos valores se asignan. Ejemplo:
27 ÷ 27 = 1  R = 0

Cuarto Caso

Dividendo = 0

Este caso es igualmente sencillo ya que cualquier división cuando el dividendo es 0


su resultado es 0, entonces asignamos de respuesta 0 tanto para el cociente como el
residuo. Ejemplo:

0 ÷ 13 = 0  R = 0
Quinto Caso:

Divisor = 0

Este caso se produce una inconsistencia o indeterminación ya que el divisor nunca


puede ser 0, el cual asignamos de respuesta FF, es decir el cociente y el residuo se
mostraran con ese valor. Ejemplo:

27 ÷ 0 = FF  R = FF
4.2.Diagrama de bloques

Programación
Numero1 Software
Dividendo
Z80 Simulator
Resultado
Numero2
Divisor

Residuo Cociente

4.3. Programación (Código)

Para realizar la Programación debemos realizar el siguiente proceso.

- Abrimos el Programa z80 Simulator


- Seleccionamos la pestaña Assembler y I/0 Ports Editor

- En la venta Assemble se procede a realizar el codigo


*Esta Parte se Explica el código paso paso antes de continuar con el proceso

Explicación del código


Explicación teórica de los comandos utilizados:

- IN: Permite la lectura de datos en un puerto en específico.


- LD: Carga el dato de un registro o espacio de memoria ubicado en la derecha, sobre el
que se encuentre ubicado a la izquierda.
- CP: “Valor”: Se compara un valor guardado en el acumulador, con el “valor” que se
ingrese. Si los valores son iguales, “JP Z, SALTO”, se declara de la forma como se puede
apreciar, realiza un salto a la subrutina SALTO. Si el acumulador es mayor al “valor”
ingresado, “JP NC, SALTO1”, se salta a la subrutina SALTO1. Por último si el
acumulador es menor al “valor” ingresado, “JP C, SALTO2”, se salta a la subrutina
SALTO2.
- JP: Salto condicionado a lo que se presenten o no en las banderas del microprocesador,
salta a la respectiva subrutina que se le asigne.
- SUB “Valor”: Resta un “valor” al registro A y se guarda el resultado en el mismo A.
- INC “Valor”: Se incrementa una unidad a un determinado “valor”.
- OUT: Imprime un dato de un registro o espacio de memoria ubicado en la derecha, sobre
el que se encuentre ubicado a la izquierda..
- DEC: “Valor”: Se decrementa una unidad a un determinado “valor”.
- ADD: “Valor”: Suma un “valor” al registro A y se guarda el resultado en el mismo A.
- DDA: Ajuste decimal del Acumlador A
- .END: Finaliza el programa.

4.4.Ejecución del Software


- Una vez explicado el código se realiza la ejecución del software
- Primero se deber seleccionar la opción (Assemble & Load)

Des pues en la ventana de Registerde Copy en la pestaña Simulation,


seleccionamos la opción 1. Start
Y se ejecutara el programa

En la ventana de I/O Ports Editor aclaramos cuáles serán las repuestas


Dividendo Divisor
Residuo Cociente

En donde la ventana de ingreso se establece el dividendo y divisor y se selecciona la operación


(primero se ingresa el dividendo y después el divisor).

5. Comprobación de Funcionamiento:

1) 13 ÷ 4=3R=1
Prueba de escritorio

Dividendo Divisor D=d D>d D<d Contador Residuo


de restas
13 4 NO SI NO 1 9
9 4 NO SI NO 2 5
5 4 NO SI NO 3 1
1 3 NO NO SI 3 1

Simulación
2) 6 ÷ 8 = 0  R = EE
Prueba de escritorio

Dividendo Divisor D=d D>d D<d Contador Residuo


de restas
6 8 NO NO SI 0 0

Simulacion

3) 15 ÷ 5=3R=0
Prueba de escritorio

Dividendo Divisor D=d D>d D<d Contador Residuo


de restas
15 5 NO SI NO 1 10
10 5 NO SI NO 2 5
5 5 SI NO NO 3 0

Simulación

4) 26 ÷ 0 = FF  R = FF
Prueba de escritorio

Dividendo Divisor d=0 D>d D<d Contador Residuo


de restas
26 0 SI NO NO 0 0

Simulación
5) 0 ÷ 4=0R=0
Prueba de escritorio

Dividendo Divisor d=0 D>d D<d Contador Residuo


de restas
0 4 NO NO SI 0 0

Simulación
6. CONCLUSIONES:

 Al hacer la división por el método de las restas sucesivas solo funciona para cuando el
valor del dividendo es mayor al divisor, ya que en los otros casos uno puedo asignar el
valor arbitrariamente al que corresponda.
 El z80 simulator maneja todos los datos en forma hexadecimal por lo que se debe realizar
una trasformación a binaria o también utilizar el comando DDA que viene dada por el
simulador, esto dependerá de requerimientos o funciones que desea aplicar, este caso se
utilizó ambas cosas.
 Este simulador posee funciones muy restringidas y escasas para realizar operaciones
sencillas, en este caso como la división, ya que solo opera con operaciones aritméticas
básicas como la suma y resta.

7. RECOMENDACIONES:

 Se necesita tener el conocimiento de los comandos del z80 Simulator para poder resolver
aplicativos, suma, resta, comparaciones, subrutinas etc.
 Al tener un problema o error en la simulación de ejecutar con la opción rate, ya que esta
permite realizar el proceso paso por paso permitiendo ver cómo está funcionando y como
está estructurado.
 Se recomienda utilizar subrutinas como el CALL, ya que permite trabajar de una manera
estructura y ordenada.

Вам также может понравиться