You are on page 1of 25

UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERA Y ARQUITECTURA ESCUELA DE INGENIERA ELCTRICA SISTEMAS DIGITALES PROGRAMABLES I CICLO I - 2014

Laboratorio #2

Integrantes: Hctor Mauricio Fuentes Chicas FC11023 Nstor Gabriel Vsquez Lpez VL10008

Grupo de Laboratorio: 02

Catedrtico: Ing. Ricardo Cortez

Instructor: Guillermo Alexander Escobar

Ciudad Universitaria, 03 de abril de 2014

INDICE

Contenido

Pg.

Introduccin...

Objetivos

Desarrollo de la Practica..

Asignacin...

Conclusiones

23

Bibliografa...

23

Anexos.

24

INTRODUCCION Luego de tener los conceptos ms bsicos sobre la programacin y ahora que se ha aprendido a resolver de una manera lgica un problema planteado con extensin .asm en el emulador del 8086, se enfoca ahora la atencin a la creacin de un archivo ejecutable el cual puede correr en cualquier computadora y realizar las tareas para las cuales fue creado sin tener que tener una interfaz de emulacin o de creacin del programa. Este proceso de conversin de cdigo fuente pasa necesariamente por un estado llamado .OBJ que no es ni cdigo fuente ni ejecutable, en ese momento solo est compilado y falta enlazarlo para convertirlo en .EXE o tambin .COM lo que lo convierte en el Producto Final para ser utilizado en cualquier entorno de Windows. El que se usar en el presente laboratorio es el MASM, es un ensamblador para la familia x86 de microprocesadores. Fue producido originalmente por Microsoft para el trabajo de desarrollo en su sistema operativo MS-DOS, y fue durante cierto tiempo el ensamblador ms popular disponible para ese sistema operativo. El MASM soport una amplia variedad de facilidades para macros y programacin estructurada, incluyendo construcciones de alto nivel para bucles, llamadas a procedimientos y alternacin (por lo tanto, MASM es un ejemplo de un ensamblador de alto nivel). Versiones posteriores agregaron la capacidad de producir programas para los sistemas operativos Windows. MASM es una de las pocas herramientas de desarrollo de Microsoft para las cuales no haba versiones separadas de 16 bits y 32 bits.

OBJETIVOS General: Desarrollar el conocimiento bsico de las diferentes directivas de lenguaje ensamblador para el microprocesador 8086, enfocando el proceso de escritura, ensamblado y creacin de un programa ejecutable por medio de los programas que en el presente laboratorio se detallan.

Especficos: Familiarizar al estudiante con el Macro-ensamblador y el lenguaje ensamblador, conociendo la importancia de su aprendizaje con respecto a otros lenguajes de programacin de ms alto nivel, en la aplicacin de proyectos pequeos o grandes de los cuales se requiere un proceso automatizado.

Comprender los procesos de ensamblado y enlazado (link) de programas en cdigo assembler para su ejecucin en una computadora personal, hechos desde el DOS mediante el Macroensamblador de Microsoft como lo es el MASM.

Crear el cdigo fuente de un programa en lenguaje ensamblador, introducindose as de lleno a la programacin y creacin de proyectos interesantes utilizando las herramientas presentadas en el laboratorio.

DESARROLLO DE LA PRCTICA Enlazar y compilar los dos programas que aparecen en los apndices: a y b de esta gua mediante el mtodo que se expone en ella. Los programas son mostrados en anexos, por el momento se presenta el proceso seguido en laboratorio para crear los archivos .OBJ, .EXE y .COM que se piden para ellos, mediante la consola el MASM utilizando la consola de Windows. Proceso: Crear con el apndice A, el archivo con extensin .asm ya que sta es la que reconoce el MASM para poder ensamblar y enlazar los cdigos fuente. Debe ser ubicado en la direccin: C:\MASM611\BIN de la computadora en la que se est trabajando (el MASM debe estar instalado previamente).

Fig. A. Guardar como .asm y ubicarlo en direccin correcta

En la ventana del Dos de Windows se realizan las dems operaciones que se detallan a continuacin: ml Apen_A.asm: Crea los archivos APENDICE_A.OBJ y APENDICE_A.EXE

Figura 1. Comando ml

ml/Zi Apen_A.asm: Proporciona la informacin de la depuracin presentndola en la consola del DOS.

Figura 2. Comando ml/Zi

ml/Fl Apen_A.asm: Crea el archivo .lst

Figura 3. Comando ml/Fl El resultado de estos procesos es presentado en la imagen 3 donde se puede observar todos los archivos creados mediante el proceso indicado. Los mismos pasos son hechos para el archivo del Apen_B.asm.

a)

b)

Figura: a) Ficheros generados para Apen_A, b) Ficheros generados para Apen_B

ASIGNACIN 1. Establezca las ventajas y desventajas del Lenguaje ensamblador respecto a aquellos de alto nivel.

Fig. 5. Ventajas y Desventajas.

2. Por qu se realiza el ensamblado y enlazado en 2 pasos? Porque el microprocesador necesita traducir primero el cdigo fuente, a lenguaje mquina, posteriormente, el cdigo maquina (entendido), se linkea con un cdigo ejecutable para poder ser visto por el usuario. 3. Qu es un Cross-Assembler? Es un ensamblador que genera el lenguaje de mquina para un tipo diferente de equipo distinto del que est ejecutando el ensamblador. Se utiliza para desarrollar los programas de ordenador en un chip o microprocesadores utilizados en aplicaciones especializadas que son demasiado pequeos o que son incapaces de manejar el desarrollo de software.

4.

Investigue las formas de modificar el modo texto/grfico en las tarjetas de video. Una de las maneras de modificar los modos de la tarjeta de Video, es a travs de las interrupciones que el DOS, hace directamente en la memoria de video. Esta interrupcin se utiliza bsicamente para mostrar texto en la pantalla (sin llamar a la INT 21h de MS-DOS o INT 80h de linux), para cambiar a modo grfico, para establecer la paleta de colores, etc... INT 10h AX=1100h - Cambiar fuente de vdeo (Modo Texto) Parmetros: AX=1100h ES:BP CX = ?? DX = ?? BH = ?? BL = ?? Cambiar fuente de vdeo (Modo Texto) Direccin de la tabla de caracteres nuevos Nmero de caracteres a cambiar Nmero del carcter ASCII desde donde se empieza a cambiar las fuentes Bloque a leer en el mapa 2 Nmero de bytes por carcter

Cambiar fuente de vdeo (Modo Graficos) Activa Modo de video AH=00h AL = Modo de video AL = Bandera del Modo de video / byte del modo del controlador de CRT

5. Investigue el formato completo de un archivo .LST creado con el MASM, identifique sus partes e indique que representa cada una de ellas. Los Archivos con extensin .LST, son archivos generados por el ensamblador, en el se encuentras enlistadas las diferentes rdenes de ensamblado. El archivo de listado tambin proporciona una lista de smbolos y sus valores, informacin sobre el uso de la memoria y el nmero de errores, advertencias y mensajes generados.

Ejemplo: El archivo de listado que genera MPASM proporciona la correspondencia entre cdigo fuente y cdigo objeto, como puede verse en este fragmento de archivo .LST: LOC 001C 001D OBJECT 3A03 1903 CODE 00065 00066 LINE SOURCE TEXT XORLW BTFSC 0x03 STATUS,2 VALUE

Analicemos la lnea: 001C 3A03 00065 XORLW 0x03

La primera columna, 001Ch, 28d, es la direccin de la memoria de programa donde se encuentra el dato 3A03h, 11101000000011b, de la segunda columna. Estas dos columnas conforman el cdigo objeto. La tercera columna indica el nmero de lnea de texto del cdigo fuente, XORLW es el mnemnico de la instruccin y 0x03, 3h, el operando. El dato que se grabar en la memoria de programa, 3A03h, 11101000000011b tiene 14 bits, la longitud de la memoria de programa, el mnemnico XORLW equivale a "111010 kkkkkkkk", donde k es el valor literal sobre el que actuar XORLW, justamente 03h, esto es 00000011b, y nos queda: 111010b (XORLW) + 0x03(00000011b) = 11101000000011b, que es 3A03h.

10

6. Tomando como base la asignacin de la gua 1, desarrolle un programa que obtenga dos nmeros desde el teclado y que muestre en pantalla las diferentes operaciones que se pueden realizar con ellos, suma, resta, multiplicacin y divisin. Solucin: El cdigo generado para este caso es el siguiente:
1. 2. 3. 4. 5. 6. 7. .model small .stack .data num db 2 dup (?) res dw ? 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. mov num[1],al mov ah,0 suma: add al,num[0] aaa add ax,3030h mov res,ax mov dx, offset msj2 call imprimir diferencia: mov al,num[1] mov bl,num[0] cmp al,bl jae resta1 jb resta2 resta1: sub al,bl jmp cont resta2: sub bl,al mov al,bl cont: cbw aas add ax,3030h mov res,ax mov dx, offset msj3 call imprimir multiplicacion: mov bl,num[0] sub bl,30h mov ah,0 mov al,num[1] sub al,30h mul bl aam add ax,3030h mov res,ax
11

msj0 db '*********** Ingrese dos numeros por favor. ************',0ah,0dh,'$' 8. msj1 db 0ah,0dh,' Division',0ah,0dh,'$' 9. msj2 db 0ah,0dh,' Suma aritmetica sera: ',0ah,'$' 10. msj3 db 0ah,0dh,' Resta aritmetica sera: ',0ah,'$' 11. msj4 db 0ah,0dh,' Producto aritmetico sera: ',0ah,'$' 12. msj5 db 0ah,0dh,' Cociente: ',0ah,'$' 13. msj6 db 0ah,0dh,' Residuo: ',0ah,'$' 14. msj7 db 0ah,0ah,0dh,' Final exitoso (PRESIONE CUALQUIER TECLA PARA SALIR)...$' 15. .code 16. .startup 17. mov ah,09h 18. mov dx, offset msj0 19. int 21h 20. call leer 21. mov num[0],al 22. call espacio 23. call leer

63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.

mov dx, offset msj4 call imprimir mov ah,09h mov dx, offset msj1 int 21h division: mov ax,0 mov al, num[0] mov bl,num[1] sub al,30h sub bl,30h div bl add ax,3030h mov cx,ax mov ah,09h mov dx,offset msj5 int 21h mov ah,02h mov dl, cl int 21h mov ah,09h mov dx, offset msj6 int 21h mov ah,02h mov dl, ch int 21h mov mov int mov int ah,09 dx, offset msj7 21h ah,07 21h

100. mov ah,02h 101. mov dl, ' ' 102. int 21h 103. ret 104. espacio endp 105. 106. leer proc near 107. mov ah,01 108. int 21h 109. ret 110. leer endp 111. 112. imprimir proc near 113. mov ah,09h 114. int 21h 115. mov dl,byte ptr res[1] 116. cmp dl,30h 117. jbe segundacifra 118. ja comp2 119. comp2: cmp dl,40h 120. ja segundacifra 121. mov ah,02h 122. int 21h 123. segundacifra: 124. mov dl,byte ptr res[0] 125. mov ah,02h 126. int 21h 127. ret 128. imprimir endp 129. end 130.

.exit espacio proc near

12

Proceso de Ensamble y linkeo. El Archivo lleva por nombre: prue.asm El ejecutar la sentencia ml prue.asm Obtenemos lo siguiente:

Fig_6a. Ensamble del Programa

Fig_6b. Obtencin de los archivos .exe, .asm y .obj

13

Al ejecutar las sentencias Zi, Fl y Fm; se obtuvieron los siguientes resultados:

a)

b)

c)

d)
Fig_6c. Ejecucin de las sentencias a)Zi, b)Fl, c)Fm y d) Corrida del Programa(archivo .exe)

14

7. Disee un programa que sea capaz de aceptar 10 nmeros que sean introducidos desde el teclado y almacenados a partir de una direccin X; luego de la introduccin de estos se proceder a mostrarlos en pantalla uno por uno (a partir del ultimo en ser introducido) al presionar la tecla p, es decir al ser presionada dicha tecla el ltimo nmero en ser introducido se mostrar en pantalla, hasta llegar al ltimo nmero (primero en ser introducido). Si se presiona otra tecla diferente de S el programa no har ninguna accin. Al sacar los diez nmeros en pantalla el programa debe finalizar. Solucin: El cdigo generado es el siguiente:
1. SCOD SEGMENT 'CODE' 2. 3. 4. ASSUME CS:SCOD, DS:SCOD 5. TABLA DB 10 DUP (?) 6. MENS DB 'Introduzca 10 numeros de un digito c/u:$' 7. MENS2 DB 'Ahora presione "P" (mayuscula), para desplegar los$' 8. MENS3 DB 'numeros en orden inverso a su introduccin:$' 9. MENS4 DB 'FIN......!!!!!!!!!!$' 10. MENS5 DB 'Presione cualquier tecla para salir$' 11. CONT DB 40 12. EJ2 PROC FAR 13. MOV AX, CS 14. MOV DS, AX 15. 16. MOV DH,1 17. MOV DL, 15 18. MOV BH, 0 19. MOV AH, 02 20. INT 10H 21. MOV DX, OFFSET MENS 22. MOV AH, 9 23. INT 21H 24. MOV BX, OFFSET TABLA 25. MOV CX, 10 26. 27. OBTENCION: 28. 29. ACO: 30. MOV AH, 6 31. MOV DL, 0FFH 32. INT 21H 33. JE ACO 34. JNE ALLA
15

35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83.

ALLA: MOV [BX], AL INC BX LOOP OBTENCION PRES: MOV DH, 4 MOV DL, 14 MOV BH, 0 MOV AH, 02 INT 10H MOV DX, OFFSET MENS2 MOV AH, 9 INT 21H MOV DH,4 MOV DL, 14 MOV BH, 0 MOV AH, 02 INT 10H MOV DX, OFFSET MENS3 MOV AH, 9 INT 21H MOV AH, 6 MOV DL, 0FFH INT 21H JE PRES JNE VERIF VERIF: CMP AL,50H JA PRES JB PRES JMP LISTA LISTA: MOV CX, 10 MOV BL, CL IMPRESION: MOV MOV MOV MOV INT MOV MOV INT DEC DH,8 DL,CONT BH, 0 AH, 02 10H DL, BYTE PTR [TABLA+BX-1] AH, 6 21H BX
16

84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115.

DEC CONT LOOP IMPRESION EJ2 ENDP MOV DH, 11 MOV DL, 15 MOV BH, 0 MOV AH, 02 INT 10H MOV DX, OFFSET MENS4 MOV AH, 9 INT 21H FIN: MOV DH, 13 MOV DL, 15 MOV BH, 0 MOV AH, 02 INT 10H MOV DX, OFFSET MENS5 MOV AH, 9 INT 21H MOV AH, 6 MOV DL, 0FFH INT 21H JE FIN

SCOD ENDS END EJ2

17

Proceso de Ensamble y Linkeo del Programa. El nombre de este archivo es: prue1.asm. Ejecutando la sentencia ml prue1.asm obtenemos los siguientes resultados:

Fig_7a. Ensamble del Programa

Fig_7b. Obtencin de los archivos .exe, .obj y .asm

18

Posteriormente se ejecutaron las sentencias Zi, Fl, y Fm y se obtuvieron los siguientes resultados:

a)

b)

c)

d)
Fig_7c Resultados de la ejecucin de los comandos a)Zi, b)Fl, y c)Fm; d)Ejecucin del Programa.

19

8. Realice un programa que escriba en pantalla un mensaje de bienvenida, el cual debe estar centrado, y en la siguiente lnea imprima los ASCII desde 00H hasta FFH. Todos ellos separados por un espacio Solucin: Cdigo Generado:
SCOD SEGMENT 'CODE' ASSUME CS: SCOD, DS: SCOD MENS DB 'BIENVENIDOS Y BIENVENIDAS$' MENS2 DB 'SE IMPRIMIRAN A CONTINUACION LOS CARACTERES ASCCI DE 0H A FFH$' MENS3 DB ' 256 CARACTERES EN TOTAL $' CONT DB 00H CONT2 DB 32 FILA DB 5 EJ PROC FAR MOV AX, CS MOV DS, AX MOV DH, 0 MOV AH, 8 INT 10H MOV BH, AH MOV CX, 0000H MOV DX, 2379 MOV AX, 0600H INT 10H MOV DH, 2 MOV DL, 27 MOV BH, 0 MOV AH, 02 INT 10H MOV DX, OFFSET MENS MOV AH, 9 INT 21H MOV DH, 3 MOV DL, 10 MOV BH, 0 MOV AH, 02 INT 10H MOV DX, OFFSET MENS2 MOV AH, 9 INT 21H MOV CX, 255 SALTO: MOV DH, FILA MOV DL, CONT2 MOV BH, 0 MOV AH, 02 INT 10H MOV DX,WORD PTR [CONT] MOV AH, 6 INT 21H INC CONT INC CONT2 CMP CONT2, 48 JB NELES JA REORDENAMIENTO REORDENAMIENTO: MOV CONT2, 32 INC FILA JMP NELES NELES: LOOP SALTO MOV DH, 23 MOV DL, 22 MOV BH, 0 MOV AH, 02 INT 10H MOV DX, OFFSET MENS3 MOV AH, 9 INT 21H MOV AX, 4C00H INT 21H EJ ENDP SCOD ENDS END EJ

20

Proceso de Ensamble y Linkeo del Programa. El nombre del archivo a ensamblar es: prue2.asm. La ejecucin de la siguiente sentencia: ml Obteniendo lo siguiente:

Fig_8a. Ensamble del Programa

Fig_8b. Generacin de archivos .asm, .exe y .obj del programa

21

La ejecucin de la siguiente sentencia: Zi, Fl, y Fm consecutivamente generan los siguientes resultados.

a)

b)

c)

d)
Fig_8c Resultados de la ejecucin de los comandos a)Zi, b)Fl, y c)Fm; d)Ejecucin del Programa.

22

CONCLUSIONES La extensin usada para que MASM reconozca los programas fuente en ensamblador es .ASM; una vez traducido el programa fuente, el MASM crea un archivo con la extensin .OBJ, este archivo contiene un "formato intermedio" del programa, llamado as porque an no es ejecutable pero tampoco es ya un programa en lenguaje fuente. El enlazador genera, a partir de un archivo .OBJ o la combinacin de varios de estos archivos, un programa ejecutable, cuya extensin es usualmente .EXE aunque tambin puede ser .COM, dependiendo de la forma en que se ensambl. Con ml se hace el proceso de ensamblado y linkeado en una sola instruccin, adems tiene otras opciones como observar la informacin de depuracin o crear el archivo .LST que puede ser de utilidad a los programadores ya que presenta las instrucciones en binario tal y como el microprocesador lo lee, es decir en lenguaje mquina. Como se puede observar los cdigos generados en el laboratorio anterior pueden ser utilizados con estos procesos de ensamblado y linkeado, as que la lnea de programacin se mantiene o dicho de otra forma, cada vez conocemos mejores herramientas para la creacin de programas o proyectos orientados a objetos que son comandados por una computadora. Con esto se sientan las bases para que el alumno pueda comenzar a crear aplicaciones que den solucin a algunos problemas reales.

BIBLIOGRAFA
Los Microprocesadores Intel. Barry B. Brey, Prentice Hall. Quinta Edicin en Espaol. Ing. Ricardo Cortez, Notas de Clase de Sistemas Digitales Programables. Guas de Laboratorio. Sistemas Digitales Programables Ciclo I-2013

23

ANEXOS
Apendice A PAGE 50,132 TITLE PRIMASM Primer programa en ensamblador (PRIMASM.ASM) ;SUBTTL Uso de directivas y estructuras de un ;programa. .8086 ;COMMENT + ; DESCRIPCION: Este mdulo limpia el contenido ; del registro AX, hacindolo cero. ; Despus coloca en el registro AX ; el nmero 18. ; + STACK SEGMENT PARA STACK 'STACK' ; inicio del segmento de pila. ; A continuacin se inicia con cero el segmento de pila (STACK) y se ; carga con una cadena de caracteres ( 64 veces la palabra 'STACK'). DB 64 DUP ('STACK') STACK ENDS ; Fin del segmento de pila. CSEG SEGMENT PARA PUBLIC 'CODE' ; inicio del segmento de cdigo. ORG 0 ASSUME CS:CSEG,SS:STACK ; definimos los segmentos. CODIGO PROC NEAR SUB AX,AX ; Borra el contenido de AX MOV AX,18D ; asigna a AX el valor 18 (decimal). SUB AX,18D ; resta 18 decimal a AX, ; volviendo su valor a cero. CODIGO ENDP CSEG ENDS ; fin del segmento de cdigo. END CODIGO ; fin del programa.

24

Apndice B .model small .stack .data mensaje db 'BIENVENIDO A SISTEMAS DIGITALES PROGRAMABLES$' mensaje2 db 'favor presione una tecla para salir $' ;FIN DEL SEGMENTO DE DATOS .CODE ;org 100h MAIN PROC MOV AX,@DATA ;MUEVE EL OFFSET DEL SEGMENTO DE DATA A AX MOV DS,AX ;INICIALIZA DS CON EL OFFSET DATA MOV ES,AX ;BORRAR LA PANTALLA COMPLETA MOV AX,0600H ;OPCION 6 DE LA INT 10H MOV BH, 07 ;FORMATO DE PANTALLA MOV CX,00000H ;INICIO DEL BARRIDO MOV DX,2379H ;FINAL DEL BARRIDO INT 10H MOV AH, 02H ;OPCION 2 INT 10 MOV DX, 0H ;POSICION DEL PUNTERO COL 0 FIL 0 ; DH->FILA , DL->COL MOV BH, 0H ; PAGE NUMBER INT 10H ;FIN DE BORRADO DE PANTALLA MOV DH, 8D ;FILA 8 MOV DL, 18D ;COLUMNA 18 MOV AH, 2H ;MOVER EL CURSOR INT 10 OP 2 INT 10H MOV AH , 09H ;opcion 9 de la int 21 LEA DX, mensaje ;DIRECCIONAMIENTO A POSICION DE MENSAJE INT 21H MOV DH, 19D ;FILA 19 MOV DL, 15D ;COLUMNA 15 MOV AH, 2H ;MOVER EL CURSOR INT 10 OP 2 INT 10H MOV AH , 09H ;opcion 9 int 21 LEA DX, mensaje2 ;DIRECCIONAMIENTO A POSICION DE MENSAJE INT 21H MOV AH, 01H ;OPCION 1 INT 10 INT 21H MOV AX,6H ;OPCION 6 DE LA INT 10H MOV BH, 07 ;FORMATO DE PANTALLA MOV CX,00000H ;INICIO DEL BARRIDO MOV DX,2379H ;FINAL DEL BARRIDO INT 10H MAIN ENDP .exit END

25

You might also like