Está en la página 1de 46

Escuela de Ciencias Básicas, Tecnología e Ingeniería

Universidad nacional abierta y a distancia UNAD

Franklin David Martínez Mendoza

Ingeniería de sistemas

1.065.824.953

Grupo: 301302_33

Arquitectura de computadores

Ciclo de la tarea 5 – Desarrollar un prototipo funcional

Tutor:

Anyelo Gerley Quintero

Valledupar cesar

2019
Introducción

En el siguiente trabajo se muestra la funcionalidad del prototipo en lenguaje


ensamblador, el cual se utilizó para este desarrollo el emulador 8086 (EMU8086).
La ejecución del prototipo nos permite mostrar los datos del autor, operaciones de
suma, resta, multiplicación, división de dos números y validar si un número es
positivo o negativo; las funciones mencionadas se encuentran ordenadas en un
menú el cual al ejecutar podrá escoger cual operación deseas realizar.
Objetivos

 Plantear diferentes operaciones matemáticas en el EMU8086.


 Comprender la funcionalidad del EMU8086.
 Crear y ejecutar un prototipo funcional en lenguaje ensamblador.
 Poner en práctica conocimientos adquiridos en actividades anteriores.
Desarrollo de la actividad

Realice el prototipo funcional en lenguaje Ensamblador, que incluya el siguiente


menú de opciones:

MENÚ

1. Datos del autor

2. Suma de dos números

3. Resta de dos números

4. Multiplicación de dos números

5. División de dos números

6. Validar si un número es positivo o negativo

7. Salir

Documentar todo el código

; Nombre del Autor: Franklin David Martinez Mendoza

; Codigo: 1.065.824.953

; Grupo No:301302_33

; Fecha: 05/12/2019

include 'EMU8086.INC'

data segment

text DB '------------MENU-----------' ;Muestra mensaje


text1 DB 'Seleccione una operacion del Menu $' ;Muestra mensaje

text2 DB '2. Suma de dos numeros $' ;Muestra mensaje

text3 DB '3. Resta de dos numeros $' ;Muestra mensaje

text4 DB '4. Multiplicacion de dos numeros $' ;Muestra mensaje

text5 DB '5. Division de dos numeros $' ;Muestra mensaje

text6 DB '7. Salir $'

text7 DB 'Ingrese una opcion del Menu $'

text8 DB 'Ingrese un numero $'

text9 DB 'El resultado es: $'

text10 DB 'Error $'

text11 DB 'Cociente $'

text12 DB 'Residuo $'

text13 DB '1. Datos del Autor $' ;Muestra mensaje

text14 DB '6. Validar si un numero es positivo o negativo $' ;Muestra mensaje

text15 DB 'Negativo $' ;Muestra mensaje

text16 DB 'Positivo $' ;Muestra mensaje

text17 DB 'Autor:Franklin David Martinez Mendoza ','$' ;Muestra mensaje

text18 DB 'Centro UNAD: Valledupar ','$' ;Muestra mensaje

text19 DB 'Fecha: 05/12/2019 ','$' ;Muestra mensaje

resultado DB 0
cociente DB 0

residuo DB 0

numero DB 0

signox DB 0

r2 DB ?

ac DB 0

NUM1 DB ?

autor db ' $'

unad db ' $'

fecha db ' $'

mensaje1 DB 'Digite un numero: $' ;Muestra mensaje

data ends

pila segment stack

DW 256 DUP (?)

pila ends

code segment

menu proc far ;Se inicial la codificacion del programa


assume cs:code, ds:data,ss:pila

push ds

xor ax, ax

push ax

mov ax, data

mov ds, ax

xor dx, dx

mov al, 0

mov resultado, al

mov ah, 02h ;interlineado

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h

mov dl, 13

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;interlineado

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h


mov dl, 13

int 21h

;imprime opciones del menu

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text1

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;interlineado

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h

mov dl, 13

int 21h

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text13

int 21h

mov ah, 02h ;interlineado


mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h

mov dl, 13

int 21h

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text2

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;interlineado

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h

mov dl, 13

int 21h

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text3

int 21h
mov ah, 02h ;interlineado

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h

mov dl, 13

int 21h

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text4

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;interlineado

mov dl, 10

int 21h

mov ah, 02h

mov dl, 13

int 21h

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h
mov dx, offset text5

int 21h

mov ah, 02h ;interlineado

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h

mov dl, 13

int 21h

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text14

int 21h

mov ah, 02h ;interlineado

mov dl, 10

int 21h

mov ah, 02h

mov dl, 13

int 21h
mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la
interrupcion 21h

mov dx, offset text6

int 21h

mov ah, 02h ;interlineado

mov dl, 10

int 21h

mov ah, 02h

mov dl, 13

int 21h

;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov ah, 09h

mov dx, offset text7

int 21h ;hasta que detecte el signo $ y termina de enviar

;lectura teclado

mov ah, 01h

int 21h

;ajuste al teclado

xor ah, ah
sub al, 30h ;Se resta el numero(30h) para obtener el numero

mov cx, 2

;se verifica la opcion

cmp al, 2

jz suma ;Se dirige al metodo de suma

cmp al, 3

jz resta ;Se dirige al metodo de resta

cmp al, 4

jz multiplicacion ;Se dirige al metodo de multiplicacion

cmp al, 5

jz division ;Se dirige al metodo de division

cmp al, 6
jz validar ;Se dirige al metodo de validar positivo o negativo

cmp al,7

jz fin

mov ah, 02h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h

mov dl, 13

int 21h

;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov ah, 09h

mov dx, offset text17 ; introduce el nombre del autor

int 21h

mov ah, 02h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h


mov dl, 13

int 21h

mov cx, 12

mov si, 0

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text18 ; Introducir nombre UNAD

int 21h

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h

mov dl, 13

int 21h

mov cx, 12

mov si, 0
;Despliega usando la funcion 9(valor cargado en ah)de la
interrupcion 21h

mov ah, 09h

mov dx, offset text19 ; Introducir fecha

int 21h

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h

mov dl, 13

int 21h

mov cx, 08

mov si, 0

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h


mov dl, 13

int 21h

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset[autor]

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 10

int 21h

mov ah, 02h

mov dl, 13

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset [fecha]

int 21h

jmp menu ;regresa nuevamente al menu


suma: ;funcion suma

mov ah, 02h

mov dl, 10

int 21h

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 13

int 21h

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text8

int 21h

;lee el teclado

mov ah, 01h ;Despliega usando la funcion 1)valor cargado en ah)de la


interrupcion 21h

int 21h

;verifica si es negativo
cmp al, 2dh

je signo

;ajusta el teclado

sub al, 30h ;Se resta el numero(30h) para obtener el numero

add resultado, al

jmp return1

signo:

mov ah, 01h ;Despliega usando la funcion 1(valor cargado en ah)de la


interrupcion 21h

int 21h ;hasta que detecte el signo $ y termina de enviar

sub al, 30h ;Se resta el numero(30h) para obtener el numero

neg al

add resultado, al ;resultado

je return1

return1: loop suma

imp1:

cmp resultado, 00

jl imp2
;interlineado

mov ah, 02h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h

mov dl, 13

int 21h

mov AH, 09H ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov DX, OFFSET text9

int 21h

jmp imprime

imp2:

neg resultado

;interlineado

mov ah, 02h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar


mov ah, 02h

mov dl, 13

int 21h

mov AH, 09H ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov DX, OFFSET text9

int 21h

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, '-'

int 21h ;hasta que detecte el signo $ y termina de enviar

jmp imprime

imprime: ;imprime resultado

MOV AH, 0

MOV AL, resultado

MOV CL, 10

DIV CL

ADD AL, 30H


ADD AH, 30H; convierte a decimal

MOV BL, AH

MOV DL, AL

MOV AH, 02H ; imprime la decena

INT 21H

MOV DL, BL

MOV AH, 02H ;imprime la unidad

INT 21H

mov cx, 2

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 13

int 21h
mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la
interrupcion 21

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21

mov dl, 13

int 21h

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset [autor] ;lee autor

int 21h

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21

mov dl, 10

int 21h

mov ah, 02h

mov dl, 13

int 21h ;hasta que detecte el signo $ y termina de enviar


mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la
interrupcion 21h

mov dx, offset [unad] ;lee unad

int 21h

mov ah, 02h

mov dl, 10

int 21h

mov ah, 02h

mov dl, 13

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset [fecha] ;lee fecha

int 21h

jmp menu ;muestra menu

resta: ;funcion resta

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21
mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21

mov dl, 13

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text8

int 21h

;lee teclado

mov ah, 01h ;Despliega usando la funcion 1(valor cargado en ah)de la


interrupcion 21

int 21h ;hasta que detecte el signo $ y termina de enviar

;verifica si es negativo

cmp al, 2dh

je signor

;ajusta el teclado

sub al, 30h ;Se resta el numero(30h) para obtener el numero


cmp cx, 2

je etiqueta1 ;resultado

sub resultado, al

jmp return2 ;retornar

etiqueta1: mov resultado, al

jmp return2

signor:

mov ah, 01h ;Despliega usando la funcion 1(valor cargado en ah)de la


interrupcion 21

int 21h ;hasta que detecte el signo $ y termina de enviar

sub al, 30h

neg al

cmp cx, 2

je etiqueta1

sub resultado, al

je return2

return2:loop resta

jmp imp1
multiplicacion: ;funcion multiplicacion

mov ah, 02h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 13

int 21h

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text8

int 21h

;lee teclado

mov ah, 01h ;Despliega usando la funcion 1(valor cargado en ah)de la


interrupcion 21h

int 21h ;hasta que detecte el signo $ y termina de enviar

;verifica si es negativo

cmp al, 2dh

je signom
sub al, 30h ;Se resta el numero(30h) para obtener el numero

cmp cx, 2

je etiqueta2

mov ah, 0

mul resultado ;resultado

jmp return3 ;retornar

etiqueta2:

mov resultado, al

jmp return3

signom:

mov ah, 01h ;Despliega usando la funcion 1(valor cargado en ah)de la


interrupcion 21h

int 21h

sub al, 30h ;Se resta el numero(30h) para obtener el numero

neg al

cmp cx, 2

je etiqueta2

mov ah, 0

mul resultado

jmp return3
return3: loop multiplicacion

mov resultado, al

jmp imp1

mov signox, 0

division:

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21

mov dl, 13

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 09h ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov dx, offset text8

int 21h

;lee teclado

mov ah, 01h


int 21h

;verifica si es negativo

cmp al, 2dh

je signod

sub al, 30h ;Se resta el numero(30h) para obtener el numero

cmp cx, 2

je etiqueta3

cmp al, 0

je falla

mov ah, 0

mov numero, al

mov al, resultado

div numero

jmp return4

etiqueta3:

mov resultado, al ;resultado

jmp return4 ;retornar

signod:
mov ah,01 ;;Despliega usando la funcion 1(valor cargado en ah)de la
interrupcion 21

int 21h

sub al, 30h

inc signox

cmp cx, 2

je etiqueta3

mov ah, 0

mov numero, al

mov al, resultado

div numero

jmp return4

return4: loop division

mov cociente, al

mov residuo, ah

mov resultado, al

jmp imp3

falla:

mov ah, 9 ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h
mov dx, offset text10

int 21h ;hasta que detecte el signo $ y termina de enviar

jmp division

imp3:

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21

mov dl, 13

int 21h ;hasta que detecte el signo $ y termina de enviar

mov AH, 09H ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

mov DX, OFFSET text9

int 21H

jmp imprimedivision

imprimedivision:

MOV AL, resultado


MOV CH, 30H

ADD AL, CH

ADD AH, CH

MOV BL, AH

MOV AH, 9

MOV DX, OFFSET text11

INT 21H

cmp signox, 1

jz cambio

jmp termina

cambio:

mov dl, '-'

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

int 21h

mov signox, 0

termina:

mov ah, 02h


MOV DX, 0

ADD cociente, 30H

MOV DL, cociente

MOV AH, 02H ; imprime el cociente

INT 21H

mov dl, 10

int 21h

mov ah, 02h

mov dl, 13

int 21h

MOV AH, 9 ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

MOV DX, OFFSET text12

INT 21H

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h


mov dl, 13

int 21h ;hasta que detecte el signo $ y termina de enviar

MOV DX, 0

ADD residuo, 30H

MOV DL, residuo

MOV AH, 02H ; imprime el residuo

INT 21H ;hasta que detecte el signo $ y termina de enviar

jmp menu

validar:

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 13

int 21h ;hasta que detecte el signo $ y termina de enviar

PRINT 'Ingrese un numero: '


CALL SCAN_NUM

MOV NUM1[0], cL

MOV AL, 00

CMP AL, NUM1[0]

JL POSITIVO

jG NEGATIVO

POSITIVO: ;salto si es positivo

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 13

int 21h ;hasta que detecte el signo $ y termina de enviar

MOV AH, 09H ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

LEA DX, Text16

INT 21H
jmp menu

NEGATIVO: ;salto si es negativo

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 10

int 21h ;hasta que detecte el signo $ y termina de enviar

mov ah, 02h ;Despliega usando la funcion 2(valor cargado en ah)de la


interrupcion 21h

mov dl, 13

int 21h

MOV AH, 09H ;Despliega usando la funcion 9(valor cargado en ah)de la


interrupcion 21h

LEA DX, text15

INT 21h

jmp menu

fin: ret

menu endp ;finaliza


code ends

DEFINE_PRINT_STRING

DEFINE_PRINT_NUM

DEFINE_PRINT_NUM_UNS

DEFINE_SCAN_NUM

end menu ;finaliza

Generar capturas por pantalla de la ejecución del programa.


1. Datos del autor
2. Suma de dos números

3. Resta de dos números


4. Multiplicación de dos números

5. División de dos números


6. Validar si un número es positivo o negativo

Numero positivo

Numero negativo
7. Salir
Conclusión

Se puede concluir que a través de los conocimientos adquiridos en el curso nos


permite realizar un prototipo en lenguaje ensamblando, con un menú organizado
como se plantea en la guía.
Referencias Bibliográficas

Quintero Reyes, A. ( 28,11,2016). Registros de un procesador 8086. [Archivo de


video]. Recuperado de: http://hdl.handle.net/10596/9475

http://galia.fc.uaslp.mx/~cantocar/ARQUI_COM_II/LIBRO%20IBM-PC/05.htm

https://www.alpertron.com.ar/INST8088.HTM

Blum, R. (2005). Professional Assembly Language. Indianapolis, IN: Wrox. (págs.1


- 123). Recuperado de
http://bibliotecavirtual.unad.edu.co/login?
url=http://search.ebscohost.com/login.aspx?
direct=true&db=nlebk&AN=127889&lang=es&site=eds-live&ebv=EB&ppid=pp_123
Hurtado, A. (15 de 11 de 2016). http://www.abreojosensamblador.net. Recuperado
de
https://w6h1uvmqkgffmqwddvae2q-on.drv.tw/Arquitectura/ensamblador/Index.html
Moreno, R. (2016).  Arquitectura y organización de la computadora:
microprocesadores y programación assembler (págs. 1- 95). Recuperado de
https://bibliotecavirtual.unad.edu.co:2538/lib/unadsp/reader.action?
ppg=1&docID=4499097&tm=1543529967064

También podría gustarte