Sunteți pe pagina 1din 23

ESCUELA SUPERIOR POLITCNICA DEL LITORAL FACULTAD DE INGENIERIA EN ELECTRICIDAD Y COMPUTACIN

[Fecha]

LABORATORIO DE MICROPROCESADORES
Prctica #5:

El Microprocesador Bsico 8086/8088 Arquitectura Interna


Profesor:

Ing. Hugo Villavicencio


REALIZADO POR:

Natalia Bonifaz Montaguano Maricela Elaje Acevedo


PARALELO: 5 Grupo: # 2 Fecha de presentacin: 27 / 11 /201 3

Prctica #5
El microprocesador bsico 8086/8088 Arquitectura interna
OBJETIVOS Familiarizar al estudiante con el conjunto de instrucciones. Manejo de cadenas y su visualizacin en pantalla de texto.

ENUNCIADO DE LA PRCTICA En esta prctica aprendimos a editar valores almacenados en variables as como a editar los caracteres y frases almacenados en cadenas de caracteres y poder visualizarlos sus cambios en un interfaz de MSDOS ms vistoso y con colores. Al mismo tiempo uno de los ejercicios de la prctica nos ensea a hallar ciertos valores deseados de una cadena de nmeros, valores los cuales se buscan segn su respectiva direccin IP. EJERCICIO 8:

Edite y ensamble P8.ASM. ;********************************************************************** TITLE Sumando nmeros ASCII .MODEL SMALL .STACK 64 .DATA MSJ DB 'SUMANDO NUMEROS ASCII ',10,13, 'EL RESULTADO DE LA SUMA ES: $'
NUM1 DB NUM2 DB BCD1 DB ASC2 DB ASC3 DB '0659478127' '0779563678' 10 DUP (?) 11 DUP (?) 10 DUP (?)

PP

.CODE INCLUDE LABMICP.INC; incorpore las subrutinas ASCSUMA y CONVERT PROC FAR MOV AX,@DATA MOV DS, AX LPANT 0000H, 184FH CURSOR 3,0 DISPLAY MSJ CALL ASCSUMA CALL CONVERT

DISPLAY ASC2 CURSOR 5,0 CALL SALIR RET PP ENDP END PP ;**************************************************** ; Incorpore las subrutinas siguientes al fichero LABMICP.INC: ; **************************************************** ; Subrutina ASCSUMA. Esta subrutina suma los nmeros ASCII (NUM1+NUM2) y deja el resultado ; BCD desempaquetado en la variable BCD1.
ASCSUMA PROC NEAR CLC MOV CX, 10 MOV BX, 9 MOV AL, NUM1 [BX] ADC AL, NUM2 [BX] AAA MOV BCD1 [BX], AL DEC BX LOOP ATRAS RET ENDP

ATRAS:

ASCSUMA

;--------------------------------------------------------------------------------------------------------------------------; Subrutina CONVERT. Esta subrutina convierte cdigo BCD desempaquetado (en variable BCD1) ; a cdigo ASCII (variable ASC2).
CONVERT PROC NEAR MOV BX, OFFSET BCD1 MOV SI, OFFSET ASC2 MOV CX, 5 MOV AX, WORD PTR [BX] OR AX, 3030H MOV WORD PTR [SI], AX

ATRAS2:

ADD BX, 2 ADD SI, 2 LOOP ATRAS2 MOV BYTE PTR [SI], '$' RET CONVERT ENDP ;--------------------------------------------------------------------------------------------

DIAGRAMA DE BLOQUES
DATOS DE ENTRADA: Instrucciones dadas en notepad++ DATOS DE SALIDA: PROCESANDO instrucciones Presentacin de resultados

DIAGRAMA DE FLUJO

INICIO

Declaracin de variables
NUM1, NUM2, ASC3

NUM1 '98765124' NUM2 12457859

ASC3 NUM1 + NUM2

Visualizamos 'ELG RESULTADO


DE LA SUMA ES: ASC3

FIN

DESCRIPCIN Este programa suma dos nmeros de diez dgitos codificados en ASCII residentes en memoria, empezamos copiando el cdigo que nos da el ejercicio es un documento en blanco de notepad++ y como es costumbre lo almacenamos con la extensin .ASM, ejecutamos el programa a travs del interfaz de MSDOS para as generar el documento con la extensin .LST y una vez realizado esto procedemos a ver en pantalla el resultado de la suma efectuada. El ejercicio nos pide que cambiemos los valores de las variables que sumamos, para ellos vamos al documento de notepad++ con la extensin .ASM y editamos por los valores que deseamos, guardamos el documento y volvemos a ejecutar nuestro programa para ver los cambios efectuados.

Programa: P8.ASM 1. Correr P8.EXE y verifique su funcionamiento. Tome foto a color a la pantalla.

2. Modifique el programa P8.ASM para que sume los nuevos valores NUM1= 98765124 con NUM2= 12457859 y deje el resultado en ASC3. 3. Tome foto a color a la pantalla con el resultado del programa modificado.

4. Incluya en su reporte el listado del programa fuente P8.ASM modificado.

EJERCICIO 9:

Edite y ensamble P9.ASM. ; *******************************************************************


TITLE Promedio de varios nmeros enteros tipo palabra. .MODEL SMALL .STACK 64 .DATA DW 18000, 10832, 2000, 14414, 11384, 8000 DW ? DW ? DW ? DW 6 DB 6 DUP (?) DB 10,10,13, 'El promedio de seis enteros del arreglo TABLA .CODE INCLUDE LABMICP.INC; ver listado en la ltima pgina. PROC FAR MOV AX, @DATA MOV DS, AX

TABLA SUMA PROM RESID NUM ASCNUM MSJ9 es:$'

PP

BUCLE:

LPANT CURSOR MOV MOV MOV ADD INC INC DEC JNZ MOV MOV DIV MOV MOV DISPLAY BINASC

0, 184FH 2,0 BX, OFFSET TABLA CX, 6 AX, 0 AX, WORD PTR [BX]; genera suma de 6 enteros BX BX CX BUCLE SUMA, AX; registra suma en memoria DX, 0; DX:AX dividendo (suma) NUM; divisor tipo palabra (16 bits) PROM, AX; AX=cociente RESID, DX; DX=residuo MSJ9 PROM; binario de 16 bits a ASCII, deja valor en

ASCNUM DISPLAY ASCNUM; visualiza promedio en pantalla CURSOR 5,0 CALL SALIR RET PP ENDP END PP ; *******************************************************************

DIAGRAMA DE BLOQUES

DATOS DE ENTRADA: Instrucciones dadas en notepad++

DATOS DE SALIDA: PROCESANDO instrucciones Presentacin de resultados

DIAGRAMA DE FLUJO

DESCRIPCIN Este programa calcula el promedio de seis nmeros enteros. Usando las instrucciones ADD y DIV. Al igual que en el ejercicio anterior, empezamos copiando el cdigo del ejercicio en el programa notepad++ y lo almacenamos con la extensin .ASM, una vez realizado esto mandamos a ejecutar el programa, una vez hecho esto presionamos F19 hasta llegar a

ejecutar la lnea del segmento de cdigo que deseamos analizar (como se demuestra en las capturas ms adelante). En la parte final del ejercicio nos pide ciertos valores del arreglo del ejercicio, para saber cules son estos valores, necesitaremos del cdigo IP del mismo y as con el hallaremos de manera rpida esos valores, los cuales nos aparecen sombreados directamente.

Programa: P9.ASM. 1. Cargue P9.EXE en CODEVIEW para su ejecucin paso a paso con F10.

2. Despus de ejecutar MOV SUMA, AX: valor hex de SUMA= FC76H , equivalente decimal=64630 3. Despus de ejecutar DIV NUM: valor hex de cociente AX=2A13H, equivalente decimal 10771 valor hex de residuo DX=0004H, equivalente decimal 4 4. Contenido de variables: PROM =2A13H , equivalente decimal= 10771 RESID= 0004H , equivalente decimal= 4

5. Dibuje el mapa de memoria mostrando el contenido hexadecimal de cada localidad del arreglo ASCNUM.

6. Salga de CODEVIEW y ejecute el programa. Tome foto a la pantalla.

EJERCICIO 10:

Edite y ensamble P10.ASM. ;**********************************************************************


.MODEL SMALL .STACK 40H .DATA MENSA1 CARACTERES DB OPERACIONES CON CADENAS DE

MENSA2 MENSA3 FILA COL

DB Copia # 1: ,38 DUP (?), 10, 13, '$' DB Copia # 2: ,38 DUP (?), 10, 13, '$' EQU 3 EQU 0 .CODE INCLUDE LABMICP.INC PROC FAR MOV AX, @DATA MOV DS, AX MOV ES, AX LPANT 0, 184FH CURSOR FILA, COL CALL MVS_20B; copia MENSA1 en MENSA2 CALL MVS_10W; copia MENSA2 en MENSA3 DISPLAY MENSA2 DISPLAY MENSA3 CALL SALIR RET ENDP

PP

PP

;********************************************************************** ;Incorpore esta subrutinas al fichero LABMICP.INC MVS_20B PROC NEAR; COPIA BYTES
CLD MOV CX, 37 LEA SI, MENSA1 LEA DI, MENSA2+10 REP MOVSB RET

MVS_20B ENDP ;------------------------------------------------------------------------------------------------------------------------MVS_10W PROC NEAR; COPIA PALABRAS CLD


MOV CX, 19 LEA SI, MENSA2+10 LEA DI, MENSA3+10 REP MOVSW RET

MVS_10W ENDP ;--------------------------------------------------------------------------------------------------------END PP ;**********************************************************************

DIAGRAMA DE BLOQUES

DATOS DE ENTRADA: Instrucciones dadas en notepad++

DATOS DE SALIDA: PROCESANDO instrucciones Presentacin de resultados en pantalla

DIAGRAMA DE FLUJO

INICIO
Llamamos a MVS_20B 1

Declaracin de Variables MENSA1, MENSA2, MENSA3, AX, DS, ES


MENSA1 Las instrucciones primitivas MOVSB y MOVSW requieren de un prefijo REP de repeticin

Llamamos a MVS_10B

Visualizamos MENSA2

Visualizamos MENSA3 AX @DATA DS AX ES AX

Llamamos a SALIR

LPANT 0, 184F 1 2

FIN

Llamamos a MVS_20B

Llamamos a MVS_10B

CX 85

CX 49

Leer SI MENSA1

Leer SI MENSA2+10

Leer DI MENSA2+10

Leer DI MENSA3+10

MOVSB

MOVSW

DESCRIPCIN El programa realiza lo siguiente: genera en memoria dos copias del arreglo MENSA1 con los nombres MENSA2 y MENSA3, adems visualiza ambas copias en la pantalla de texto. Usa las instrucciones MOVSB y MOVSW para transferencias de memoria a memoria. El programa se inicia limpiando pantalla con atributo nuevo de color y llama a las subrutinas MVS_20B y MVS_10W para crear copias en memoria. Para realizar esto, debemos copiar en un nuevo documento de notepad++ el cdigo que presento el ejercicio, almacenarlo con la extensin .ASM y mandarlo a ejecutar desde el interfaz de MSDOS una vez hecho eso vemos el mensaje que se presenta en pantalla, ele ejercicio nos pide editar este mensaje, para hacerlo, editamos la cadena de

caracteres que se encuentra en el documento de notepad++, guardamos el cambio efectuado y al enviar de nuevo a correr el programa, nos fijamos que el mensaje no aparece completo, lo que tenemos que hacer es contar el nmero de letras y espacios de la frase y poner el nmero exacto de la frase en el tamao de la cadena y as al enviar a ejecutar de nuevo nuestro programa aparece toda la frase en pantalla.

Programa: P10.ASM. 1. Corra el programa. Tome foto de la pantalla con resultados.

2. Modifique en segmento de datos la cadena MENSA1 con: Las instrucciones primitivas MOVSB y MOVSW requieren de un prefijo REP de repeticin.

3. Haga los cambios necesarios en el segmento de cdigo y corra el programa. Tome foto a la ventana con el nuevo resultado.

EJERCICIO 11:

Edite y ensamble P11.ASM. ;**********************************************************************


.MODEL SMALL .STACK 40H .DATA TABLA1 DB '"osomreh y odirolf oyam a necah osoivull lirba y osotnev ozraM"' TABLA2 DB 63 DUP (20H),10,13, '$' MSJ11 13, '$' 10, DB ' Para visualizar el mensaje escondido aprete la tecla ENTER',10, 13, .CODE INCLUDE LABMICP.INC; incorpore subrutinas DESCIFRA, ESPERA, SALIR PP PROC FAR MOV AX, @DATA MOV DS, AX MOV ES, AX LPANT 0,184FH CURSOR 3, 0 DISPLAY MSJ11 LEA DI, TABLA2+63 CALL DESCIFRA CALL ESPERA DISPLAY TABLA2

CURSOR 6,0 CALL SALIR RET PP ENDP ; Fin del programa Principal. ;-----------------------------------------------------------------------------------------------; Incorpore estas subrutinas al fichero LABMICP.INC DESCIFRA PROC NEAR
LEA SI, TABLA1 CLD MOV CX, 63 LODSB MOV [DI], AL DEC DI LOOP A20 RET

A20:

DESCIFRA ENDP ;----------------------------------------------------------------------------------------------ESPERA PROC NEAR MOV AH, 8; funcin 8 de MSDOS, espera por cualquier tecla INT 21H

CMP AL, 0DH; JNZ RET ESPERA ENDP ESPERA; sale si tecla apretada es ENTER

;-------------------------------------------------------------------------------------------------------END PP

DIAGRAMA DE BLOQUES

DATOS DE ENTRADA: Instrucciones dadas en notepad++

DATOS DE SALIDA: PROCESANDO instrucciones Presentacin de resultados en pantalla

DIAGRAMA DE FLUJO

DESCRIPCIN El programa descifra el mensaje escondido en TABLA1, para lo cual se inicia limpiando pantalla y creando la cadena TABLA2 que luego imprime en pantalla de texto. El programa espera por la tecla enter que permite visualizar el mensaje escondido (TABLA2). Se usa la instruccin LODSB y la funcin 8 de MSDOS.

Empezamos copiando el cdigo es un documento de notepad++ lo almacenamos con la extensin .ASM, ejecutamos el programa a travs del interfaz de MSDOS Para as generar el documento con la extensin .LST y una vez realizado esto procedemos a ejecutar el programa. El ejercicio nos pide que editemos la cadena de caracteres que se muestra en la pantalla, para lo cual regresamos al documento de notepad++ para editarla, mandamos a ejecutar el programa y vemos como se ve la frase. Programa: P11.ASM. 1. Ensamble P11. 2. Tome foto y de corra

la pantalla.

3. Regrese a notepad++ y modifique TABLA1 con: La tecnologa actual permite implementar microprocesadores de 80 y ms ncleos

EJERCICIO 12:

Edite y ensamble P12.ASM. ;********************************************************************** .MODEL SMALL .STACK 32 .DATA NUMBIN DB 01011011B MS12 DB RESULTADO XOR BINARIO DE 8 BITS: ,$ MSF12 DB 10,13,Verifique manualmente este resultado ,1,2,$ PP .CODE PROC FAR MOV AX, @DATA MOV DS, AX MOV DX, OFFSET MS12 MOV AH, 9 INT 21H ;******************************** MOV BL, NUMBIN XOR BL, 0FFH MOV CX, 8 LAZO1: JC SHR BL, 1

ESUNO

MOV DL, 30H

JMP ESUNO: DISPLAY:

DISPLAY

MOV DL, 31H MOV AH, 2 INT 21H

LOOP LAZO1 MOV DX,OFFSET MSF12 MOV AH, 9 INT .EXIT RET PP ENDP END PP 21H

DIAGRAMA DE BLOQUES

DATOS DE ENTRADA: Instrucciones dadas en notepad++

DATOS DE SALIDA: PROCESANDO instrucciones Presentacin de resultados en pantalla

DIAGRAMA DE FLUJO
INICIO BL BL XOR 0FFH CX 8

Declaracin de variables AX, DS, DX, AH, CX, DL,BL

DL 31H AH 2 DX OFFSET MSF12 AH 9

AX @DATA DS AX DX OFFSET MS12 AH 9 BL NUMBIN

FIN

DESCRIPCIN Este programa visualiza en pantalla con formato binario de 8 bits el resultado de la operacin lgica XOR entre NUMBIN almacenado en memoria con la constante FFH. Este ejercicio requiere de las instrucciones de desplazamiento SHL y SHR.

Programa: P12.ASM 1. Ejecute de una P12.EXE y verifique el resultado de XOR en pantalla.

2. Hay un problema con el resultado de XOR en pantalla, se imprime del bit menos significativo al ms significativo, es decir al revs de lo normal. Tome foto a la pantalla.

3. Haga los cambios en segmento de cdigo (no en segmento de datos) para que el resultado de XOR se imprima en el orden normal, es decir del bit ms significativo al bit menos significativo. Ejecute P12.exe y verifique que el resultado sea correcto, tome foto a la pantalla.

4. Ponga NUMBIN DW 0ABCDH en lugar de NUMBIN DB 11010101B en el segmento de datos. 5. Modifique el programa para visualizar el resultado XOR (entre NUMBIN con 0FFFFH) de 16 bits en el centro de la pantalla con el mensaje siguiente (dos lneas de texto), donde b es un digito binario:

RESULTADO XOR BINARIO DE 16 BITS: bbbbbbbbbbbbbbbb Verifique manualmente este resultado 6. Ejecute P12.exe modificado y verifique que el resultado sea correcto. Incluya en su reporte el listado de sta ltima modificacin de P12.ASM.

CONCLUSIONES Pudimos familiarizarnos con el conjunto de instrucciones dadas para ejecutar cada aplicacin en el MSMDOS; las mismas que nos permite el fcil manejo de cadenas definidas como byte, palabra o doble palabra; ya que en ocasiones es necesario manipular, mover o comparar campos de datos que exceden longitudes establecidas. Para el manejo de una cadena de caracteres se utiliza instrucciones primitivas como MOV, LODS, STOS, CMPS y SCAS; donde podemos mover, cargar, almacenar, comparar contenido de un byte, palabra o doble palabra en distintas localidades de memoria; tambin nos dios cuenta que con bandera DF=0 los punteros incrementan y con DF= 1 decrementan con la ejecucin de la instruccin primitiva. Aprendimos que podemos realizar operaciones con el contenido de las cadenas; es decir los contenidos numricos donde podemos sumar; multiplicar o dividir dgitos con o sin signo para esto hacemos uso de las instrucciones respectivas como: ADD, AAA, MULS, IMUL S, DIV S, IDIV S. tambin nos dimos cuenta que debido al acarreo en la suma se muestran problemas lo cual se soluciona con la instruccin DAA.

RECOMENDACIONES Verificar que los datos ingresados en las instrucciones sean los correctos, teniendo muy en cuenta que la mquina solo trabaja basndose en el sistema hexadecimal, por lo tanto no puede excederse de la letra F ni del nmero 9.

En el momento que se crea el archivo en notepad++ con las instrucciones requeridas, guardar este archivo con la extensin .ASM, solo de esta forma notepad++ puede generar otro archivo con extensin .lst til para el desarrollo de la aplicacin requerida.

No intente ejecutar las instrucciones con la tecla F5 porque esta, ejecuta las instrucciones hasta que haya una interrupcin y si no la encuentra se encerrara en un bucle sin fin, daando de esta manera el equipo.

S-ar putea să vă placă și