Beruflich Dokumente
Kultur Dokumente
CLAVE: CEI02.09
PREREQUISITOS: Leguaje de programacin.
DPTO.: COMUNICACIONES Y ELECTRNICA
SALON: 309
ENSAMBLADOR 8086
TASM/MASM/EMU8086
PROGRAMACIN
PRCTICAS DE LABORATORIO
Pagina 1 / 18
Introduccin
Estas prcticas se han elaborado para orientar a los alumnos de la materia de INFORMTICA BSICA en
el aprendizaje de algoritmos computacionales dentro del Lenguaje Ensamblador y el entorno TASM /
MASM / emu8086
Objetivo.
Recursos.
Teora.
Desarrollo de ejercicios y entrega de resultados
NOTAS:
EL RESULTADO DE CADA PROGRAMA DE ESTA PRCTICA, SE ENVIAR AL CORREO: PROF. ING. JORGE
RAMOS GARCIA, ensamblador8086_ugto@outlook.com (reporte lo que haya observado y sus conclusiones, adems los
archivos fuente .ASM cuando se realicen ejercicios propuestos)
REVISE Y ESTUDIE CADA EJERCICIO Y TRATE DE ENTENDERLOS PARA LOS EJERCICIOS QUE SE
REALIZARAN EN LAS SIGUIENTES PRACTICAS.
CUALQUIER DUDA O COMENTARIO FAVOR DE EXPRESARLO
Pagina 2 / 18
PRACTICA NO. 02
programacin bsica
OBJETIVO:
1.
2.
3.
RECURSOS:
Para implementar los ejercicios de programacin en lenguaje ensamblador se utilizarn las siguientes herramientas de
software:
Editor:
EDIT / NE / o cualquier otro que genere archivos ASCII.
Ensamblador: TASM.EXE
Enlazador:
TLINK.EXE
Emulador:
EMU8086.exe (entorno)
TEORIA.
Instrucciones bsicas
Hay una serie de instrucciones importantes y necesarias para cualquier programa en ensamblador. La ms importante es la instruccin
MOV.
MOV: mueve un valor de un lugar a otro.
MOV destino, origen
Ejemplos:
mov ax,10
mov bx,cx ;
mov dx,Number
INT: llama a una funcin del DOS o BIOS a travs de una subrutina para realizar un servicio especial, por ejemplo manipular el vdeo,
la pantalla, abrir un fichero, escribir en un puerto, etc. En este texto usaremos una de ellas, la salida a pantalla, que se corresponde con
la 21h. Las dems se pueden consultar en la bibliografa.
INT interrupt number
Ejemplos:
int 21h
int 10h
Casi todas las interrupciones tienen asociados ms de un servicio, por ello es necesario pasar el nmero de servicio deseado. Se utiliza
para ello el registro AH. El ejemplo ms usado es escribir algo en la pantalla del monitor:
mov ah,9
int 21h
Pagina 3 / 18
El servicio, o funcin, nmero 9 se corresponde a la impresin de caracteres en pantalla. Para ello, antes es necesario especificar qu
vamos a escribir en pantalla. Se hace uso de DS:DX que ser el puntero de la direccin fsica en memoria indicando dnde se
encuentra la cadena de caracteres a imprimir en pantalla. La cadena de caracteres se termina con el smbolo ($). Sera sencillo si
pudisemos escribir directamente en DS, como no es posible, tenemos que usar el registro AX para generar la direccin fsica. El
ejemplo es el siguiente:
mov dx,OFFSET Message ; DX contiene el offset de message
mov ax,SEG Message
; AX contiene el segmento del message
mov ds,ax
; DS:DX apunta a la direccin fsica del mensaje
mov ah,9
; carga el servicio 9 caracteres a pantalla
int 21h
; llamada a la interrupcin de DOS
Las directivas OFFSET y SEG indican al compilador que el segmento y el offset de Message se use para obtener la direccin fsica en
memoria la cadena de datos, para posteriormente escrib ir a pantalla. Hecho esto, podremos enviar el mensaje a la pantalla, escribiendo
previamente en el segmento de datos el mensaje con la etiqueta y la directiva DB de la siguiente forma:
Message DB "Estructura y Tecnologa de Computadores. Prctica 1$"
Ntese que la cadena de caracteres termina con el smbolo ($). DB es una directiva para asignar memoria a variables del tipo byte y el
contenido del mensaje en un array de bytes (ASCII). Adems de formato bytes (DB) se puede usar formatos tipo word (DW)
y doble word (DD).
Number1 db ?
Number2 dw ?
El smbolo (?) al final de la lnea indica que no hay inicializacin.
Number1 db 0
Number2 dw 1
En este caso Number1 es igual a 0 y Number2 es igual a 1. Hay que tener en cuenta el
tamao de los datos, por ejemplo:
mov al,Number1
mov ax,Number1
mov bx,Number2
mov bl,Number2
; ok
;error
; ok
; error
Lo que indica que, nicamente se pueden usar bytes en registros de 8 bits y palabras en
registros de 16 bits
Pagina 4 / 18
Pagina 5 / 18
Sumar
Sintaxis:
ADD reg,imm
Ejemplo: ADD BL, 10
BL= BL +10
ADD reg, reg Sumar el contenido del 2 registro al
contenido del 1.
Ejemplo: ADD BL, AL ; No cambia el valor de AL
BL= BL + AL
ADD reg,mem
ADD mem,reg
ADD mem, mem
ADD mem,imm
SUB destino, origen (SUBstract, resta) {O,S,Z,A,P,C}
Resta a destino lo que haya en origen
Instruccin SUB
Resta
Sintaxis: SUB reg, imm
SUB reg, reg
SUB reg,mem
SUB mem,reg
SUB mem, mem
SUB mem,imm
Pagina 6 / 18
RESUMEN DE INSTRUCCIONES.
AAA, AAD, AAM, AAS
ADD
ADC
CBW
CMP
CWD
DAA, DAS
DEC
DIV
IDIV
IMUL
INC
MUL
NEG
SBB
SUB
Pagina 7 / 18
DESARROLLO DE EJERCICIOS.
Cada uno de los ejercicios se pueden desarrollar ya sea utilizando TASM o EMU8086.
1.
- inicio
del
programa -
; archivo: TECLA.ASM
;----------------------a los nombres de los archivos asignelos de una a 8 letras,
;----------------------y la extension asignela con las letras .ASM
; Fecha:
; materia: informatica basica
; Universidad de Guanajuato. Campus Irapuato-Salamanca
;
.MODEL SMALL
.STACK
.DATA
_msg_titulo db 10,13,' PRESIONA UNA TECLA: $'
_TECLA DB ?
_msg_salida db 10,13,' USTED PRESIONO LA TECLA: $'
_msg_repeticion db 10,13,10,13,'***** repetido 3 veces ****** ',10,13,10,13,'$'
.CODE
_PROGRAMA:
;segmento de datos
mov ax,@data
mov ds,ax
;mensaje en pantalla
mov dx,offset _msg_titulo
mov ah,09h
int 21h
;entrada de dato desde teclado
MOV AH,01H
INT 21H
mov _tecla,al
;mensaje a pantalla
mov dx,offset _msg_salida
mov ah,09h
int 21h
;dato a pantalla
MOV DL,_TECLA
mov ah,02h
LENGUAJE ENSAMBLADOR 8086 USANDO TASM/MASM/emu80086
Pagina 8 / 18
int 21h
;mensaje a pantalla
mov ah,09h
mov dx,offset _msg_repeticion
int 21h
;datos repetidos
MOV DL,_TECLA
mov ah,02h
int 21h
int 21h
int 21h
_SALIR:
MOV AH,4CH
INT 21H
END _PROGRAMA
-fin del programa-
2.
PROGRAMA QUE RECIBE UN DATO Y VERIFICA QUE SEA SOLO NUMERO (0-9) EN CASO DE PRESIONAR UNA
TECLA QUE NO SE NUMERO EMITE UN ERROR EN PANTALLA.
; archivo: NUMERO.ASM
;----------------------a los nombres de los archivos asignelos de una a 8 letras,
;----------------------y la extension asignela con las letras .ASM
; Fecha:
; materia: informatica basica
; Universidad de Guanajuato. Campus Irapuato-Salamanca
;
.MODEL SMALL
.STACK
.DATA
_msg_titulo db 10,13,' PRESIONA UNA TECLA: $'
_TECLA DB ?
_msg_salida db 10,13,' USTED PRESIONO LA TECLA: $'
_msg_ERROR db 10,13,10,13,'***** E R R O R, el dato no es NUMERO ****** ',10,13,10,13,'$'
_msg_numero db 10,13,' !! El dato dado SI es un Numero !! ',10,13,'$'
.CODE
_PROGRAMA:
;segmento de datos
mov ax,@data
LENGUAJE ENSAMBLADOR 8086 USANDO TASM/MASM/emu80086
Pagina 9 / 18
mov ds,ax
;mensaje en pantalla
mov dx,offset _msg_titulo
mov ah,09h
int 21h
;entrada de dato desde teclado
MOV AH,01H
INT 21H
mov _tecla,al
;mensaje a pantalla
mov dx,offset _msg_salida
mov ah,09h
int 21h
;dato dado enviado a pantalla
mov dl,_tecla
mov ah,02h
int 21h
;----------------------------------;checar la condicion de la tecla presionada
mov al,_tecla
cmp al,030h
jl _error
cmp al,039h
jg _error
;mensaje correcto de numero
mov dx,offset _msg_numero
mov ah,09h
int 21h
jmp _salir
;mensaje de error a pantalla
_error:
mov dx,offset _msg_error
mov ah,09h
int 21h
;----------------------------------_SALIR:
MOV AH,4CH
INT 21H
END _PROGRAMA
-fin del programa-
Pagina 10 / 18
3.
; archivo: sumaXY.ASM
;----------------------a los nombres de los archivos asignelos de una a 8 letras,
;----------------------y la extension asignela con las letras .ASM
; Fecha:
; materia: informatica basica
; Universidad de Guanajuato. Campus Irapuato-Salamanca
;
.MODEL SMALL
.STACK
.DATA
_msg_titulo db 10,13,' --- Suma de dos numeros X + Y --- ',10,13,10,13,'$'
_X DB ?
_msg_X db 10,13,' DAR UN NUMERO X= $'
_Y db ?
_msg_Y db 10,13,' DAR UN NUMERO Y= $'
_suma db ?
_msg_salida db 10,13,' La suma es ===> $'
.CODE
_PROGRAMA:
;segemento de datos
mov ax,@data
mov ds,ax
;mensaje en pantalla
mov dx,offset _msg_titulo
mov ah,09h
int 21h
;entrada de dato X
MOV DX,OFFSET _MSG_X
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
mov _X,al
;al dato X se le resta 030h
Pagina 11 / 18
sub _x,30h
;entrada de dato Y
MOV DX,OFFSET _MSG_Y
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
mov _Y,al
;al dato y se le resta 030h
sub _y,30h
;----------------------------------;calculo de la suma de los dos numeros
MOV AL,_X
ADD AL,_Y
; SE SUMA X+Y
MOV _SUMA,AL
; RESULTADO DE LA SUMA
;mostrar resultado en pantalla
mov dx,offset _msg_salida
mov ah,9h
int 21h
mov dl,_suma
;SE AGREGA 030H al resultado para el valor ASCII
add dl,030h
mov ah,02h
int 21h
;----------------------------------_SALIR:
MOV AH,4CH
INT 21H
END _PROGRAMA
Pagina 12 / 18
4.
EN BASE AL EJERCICIO 3, INTENTE DISEAR EL ALGORITMO QUE CALCULE LA RESTA DE DOS NUMEROS.
SIGA LA LOGICA EN EL CLCULO DE LA SUMA. POSTERIORMENTE EN SALON SE EXPLICARA SU
DESARROLLO Y LOS DETALLES DE RESULTADO A PANTALLA.
5.
;titulo principal
Pagina 13 / 18
int 21h
;entrada de valor Y
MOV AH,01H
INT 21H
MOV Y,AL
SUB Y,30H
mov ax,0
;limpiar registro AX
mov al,x
mul y
;asignar resultado
mov _oper_mul,al
;mandar a pantalla resultado
mov dx,offset _comenta2
mov ah,09h
int 21h
MOV DL,_oper_mul
ADD DL,30H
MOV AH,02H
INT 21H
_salir_DOS:
;------MOV AH,4CH
INT 21H
END _multiplica
6.
7.
Pagina 14 / 18
PROG_1:
;SEGEMENTO DE DATOS
MOV AX,@DATA
MOV DS,AX
;------------------lea dx,coment1
mov ah,09h
int 21h
;lecctura de teclado sin echo
mov ah,08h
int 21h
mov n1,al
;aparece un simbolo asterisco
mov dl,'*'
mov ah,02h
int 21h
lea dx,coment1
mov ah,09h
int 21h
;lecctura de teclado sin echo
mov ah,08h
int 21h
mov n2,al
;aparece un simbolo asterisco
mov dl,'*'
mov ah,02h
int 21h
;mostrar digitos ingresados
;inserta una linea
lea dx, linea
mov ah,09h
int 21h
LEA DX,COMENT2
MOV AH,09H
INT 21H
mov dl,n1
mov ah,02h
int 21h
;----mov dl,'y'
mov ah,02h
int 21h
;----mov dl,n2
mov ah,02h
int 21h
;------------;REGReSO A D.O.S.
MOV AH,4CH
INT 21H
END PROG_1
LENGUAJE ENSAMBLADOR 8086 USANDO TASM/MASM/emu80086
Pagina 15 / 18
8.
DISEE UN PROGRAMA QUE SOLICITE 3 DIGITOS Y MUESTRE EN PANTALLA LAS COMBINACIONES COMO
EN EL EJEMPLO SIGUIENTE:
Ej. entrada de datos al programa
digito 1:? 4
digito 2:? 7
digito 3:? 3
salida de ternas a pantalla en forma vertical
473
437
743
734
347
374
9.
Pagina 16 / 18
;nombre
;ap. paterno
;ap. materno
;imprimir asteriscos
mov dx,offset aster
mov ah,09h
int 21h
;--------------------------- terminan las instrucciones del programa
mov ah,4ch
int 21h
end programa
10. DISEE UN PROGRAMA QUE SOLICITE UN NUMERO ENTRE 0 Y 9. LUEGO IMPRIMA DICHO NUMERO Y LOS
DOS NUMEROS SIGUIENTES EN ORDEN CRECIENTE. (utilice las rutinas de lectura desde teclado y salida a pantalla,
adems de la operacin de suma ADD explicada en uno de los ejercicios arriba). Ejemplo:
Numero:? 5
Imprimir: 5 6 7
Pagina 17 / 18
Pagina 18 / 18