Professional Documents
Culture Documents
PRESENTACIN
MATERIA: Lenguajes de Interfaz
CLAVE: SCC-1014
EQUIPO NO:
TTULO: Programacin en Lenguaje Ensamblador
PROFESOR:
FECHA:
PRCTICA : 4
COMPETENCIA(S): Comprender las caractersticas de la arquitectura bsica de los circuitos procesadores ;
Potenciar las habilidades para el uso de las tecnologas de la informacin; Identificar los elementos que
integran un programa en Lenguaje Ensamblador; Analizar la accin que realiza cada instruccin en un
programa; Evaluar los efectos de cada instruccin en los registros de propsito general y en el registro de
banderas del procesador. Identificar las funciones y el trabajo de la interrupcin 21.
II.INSTRUMENTACIN
MATERIAL:
EQUIPO:
Computadora Personal compatible con IBM-PC
HERRAMIENTAS COMPUTACIONALES:
WordPad, TurboAssembler, TurboLinker, TurboDebugger
III. ASPECTOS TERICOS
INTRODUCCIN: Deber de contener los modos de direccionamiento del procesador.
DIAGRAMAS:
Diagrama de flujo de los programas de COMPARA y de OPERA
BIBLIOGRAFA:
Christopher L. Morgan & Mitchell Waite.
Introduccin al Microprocesador 8086/8088 (16 bits).
Ed. Mc Graw Hill.
2. Willian H. Murray III && Chris H Pappas.
80386/80286 Programacin en Lenguaje Ensamblador.
Ed. Mc Graw Hill.
3. J. Terry Godfrey.
Lenguaje Ensamblador para Microcomputadoras IBM para principiantes y avanzados.
Ed. Prentice Hall.
4. Barry B. Brey.
Los Microprocesadores de Intel.
Ed. Prentice Hall
5. Abel, Peter
Lenguaje Ensamblador y Programacin para PC IBM y Compatibles.
Ed. Pearson Educacin.
6. Brey, Barry
Intel Microprocessors 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Pentium Pro
Processor, Pentium II, Pentium III and Pentium IV:
Architecture, Programming and Interfacing. 6/ed.
Ed. Prentice-Hall. USA
IV. DESARROLLO
COMPETENCIAS ESPECFICAS:
Identificar los elementos que integran un programa en Lenguaje Ensamblador.
Analizar la accin que realiza cada instruccin en un programa.
Evaluar los efectos de cada instruccin en los registros y banderas del procesador.
Identificar las funciones de la interrupcin 21
ACTIVIDADES A DESARROLLAR:
a) Capture los siguientes programas utilizando Wordpad y gurdelos con formato de texto MS-DOS.
b) Ensamble (Tasm), enlace (Tlink) y pruebe (*.exe).
c) Identifique los mensajes de error.
d) Corrija cada programa, tomando en consideracin que pueden existir errores.
e) Verifique cada programa lnea por lnea, utilizando el archivo *.LST y el debugger (Td).
f) Elabore el diagrama de flujo de cada programa.
g) Elabore un Reporte de la Prctica.
; ES = DS
CAPCAD03:
Mov Dx, Offset CadDosM ; Mensaje de captura de cadena 2
Mov Ah, 9
Int 21h
Mov Ah, 0Ah
; Captura la segunda cadena
Mov Dx, Offset Cadena2
Push Dx
; Guarda direccin de variable
Int 21h
Pop Dx
Inc Dx
Mov Si, Dx
Cmp Byte ptr [Si], 0
Jnz CAPCAD04
Mov Dx, Offset Error1
Mov Ah, 9
Int 21h
Jpm CAPCAD03
Inc Si
Mov Di, Offset Cadena2 + 2
Cld
Repe Cmpsb
Jcxz CAPCAD05
Mov Dx, Offset Error
Mov Ah, 9
Int 21h
Jpm CAPCAD01
; CH = 0 por si acaso.
; Bytes realmente ledos de cadena 1
; CX tiene bytes ledos de cadena 1
; Ajusta CL debido a la naturaleza de
; la instruccin de comparacin, y a
; manera en que se comporta
; la funcin 9 de la INT 21H.
; Regresa a direccin de cadena 1
; Direccin de cadena 2
; Compara cadenas
; Son iguales?
; No,, despliega mensaje
CAPCAD05:
Mov Dx, Offset TodoBIEN
; Cadenas son iguales
Mov Ah, 9
Int 21h
Jpm CAPCAD01
;-----------------------------------------------------------------------------; TERMINA EL PROGRAMA
;-----------------------------------------------------------------------------TERMINA:
Mov Ax, 4C00h
Int 21h
End Empieza
;******************************************************************************
; Nombre del programa: OPERA.ASM
; Objetivo: Realizar operaciones de suma, resta, multiplicacin y divisin sobre dos cantidades
; enteras sin signo y no mayores de 65535.
;******************************************************************************
; COMANDO DE ENSAMBLE: Tasm OPERA;
; COMANDO DE ENLACE: TLink OPERA;
; COMANDO DE EJECUCION: OPERA [Enter]
;******************************************************************************
; NOTA: El objetivo es educativo y NO de optimizacin o de
; eficientar. Por favor, NO SE DESESPERE y estdielo.
;******************************************************************************
;-----------------------------------------------------------------------------; Define el MODELO DE MEMORIA
;-----------------------------------------------------------------------------.MODEL SMAL
;-----------------------------------------------------------------------------; Define el rea DE DATOS
;-----------------------------------------------------------------------------.Data
ErrorCAP DB 0 ; Bandera de error en la captura de las cantidades
Cantidad DB 0 ; La cantidad sobre la que se opera. Si es 0 se opera
; sobre la cantidad 1, si es 1 se opera sobre la
; cantidad 2.
CantUnoR DW 0
; Variable que guarda la cantidad 1 convertida a binario.
CantDosR DW 0
; Variable que guarda la cantidad 2 convertida a binario.
CantUnoN DB 6,0,6 DUP(?) ; Variable que almacena la cantidad 1
CantDosN DB 6,0,6 DUP(?)
; Variable que almacena la cantidad 2
Funcion DB 0
; Variable que guarda la funcin a realizar
Resulta DB 13,10,13,10,'El resultado es: $'
ResultaR DB 11 DUP('?')
Mensaje DB 'Bienvenidos a Opera, que le permite realizar las'
DB 13,10
DB 'operaciones BASICAS de MULTIPLICACION, DIVISION, SUMA'
DB 13,10,'y RESTA sobre dos cantidades enteras.' DB 13,10,13,10,'$'
Pregunta DB 13,10,13,10,'DIGITE:',13,10,13,10 DB ' (1) para MULTIPLICAR.',13,10 DB ' (2) para DIVIDIR.',13,10
DB ' (3) para SUMAR.',13,10
DB ' (4) para RESTAR.',13,10
DB ' (5) para TERMINAR.',13,10,'$'
Error DB 7,7,7,13,10,'ERROR : en la seleccion de las opciones.'
DB 13,10,13,10,'$'
Error1 DB 7,7,7,13,10,'ERROR : digito INVALIDO en CANTIDAD 1.'
DB 13,10,13,10,'$'
Error2 DB 7,7,7,13,10,'ERROR : digito INVALIDO en CANTIDAD 2.'
DB 13,10,13,10,'$'
Error3 DB 7,7,7,13,10,'ERROR : cantidad fuera de RANGO ( 65535).'
DB ' !!!.' DB 13,10,13,10,'$'
Error4 DB 7,7,7,13,10,'ERROR : intento de DIVISION por CERO.' DB 13,10,13,10,'$'
CantunoM DB 13,10,13,10,'Digite primer CANTIDAD (debe ser < a 65535)'
DB ' : $'
CantDosM DB 13,10,13,10,'Digite Segunda CANTIDAD (debe ser < a 65535)'
DB ' : $'
;-----------------------------------------------------------------------------; TABLA DE POTENCIAS USADA PARA CONVERTIR EL RESULTADO BINARIO DE LA
; OPERACIN EN FORMATO ASCII. SE USAN LAS POTENCIAS DE 10 (1, 10, 100, 1000
; y 10000), PORQUE EL NMERO MS GRANDE ES 65535. EN CASO DE QUE QUIERA
; OPERAR SOBRE NMEROS MS GRANDES, AMPLIE LA TABLA.
;-----------------------------------------------------------------------------Potencia DW 0001h, 000ah, 0064h, 03E8h, 2710h
PotenciaF DW $
;-----------------------------------------------------------------------------; Define el rea del Stack
;-----------------------------------------------------------------------------.STACK
;-----------------------------------------------------------------------------; Define el rea de cdigo
;-----------------------------------------------------------------------------.CODE
; rea de cdigo
;-----------------------------------------------------------------------------; Inicia programa
;-----------------------------------------------------------------------------Empieza:
; Etiqueta de comienzo de programa
;-----------------------------------------------------------------------------; BORRA LA PANTALLA CAMBIANDO LA MODALIDAD DE VIDEO. ESTA FORMA DE BORRAR
; LA PANTALLA ES MUY PECULIAR Y SE CONSIDERA COMO "TRUCO". SE BASA EN EL
; HECHO DE QUE AL CAMBIAR LA MODALIDAD DE VIDEO, EL PROPIO BIOS (HARDWARE)
; BORRA LA PANTALLA POR NOSOTROS. ES UN MTODO BURDO PERO MUY EFICIENTE.
;-----------------------------------------------------------------------------Mov Ah, 0Fh
; Obtiene la modalidad de video actual
Int 10h
Mov Ah, 0
; Cambia la modalidad de video que se obtuvo
Int 10h
Mov Ax,@Data
; Inicializa DS con la direccin de @Data
Mov Ds, Ax
Mov Dx, Offset Mensaje ; Despliega el mensaje de bienvenida
Call Imprime
Mov Si, Offset ResultaR ; Inicializa la variable ResultaR
Add Si, 11
Mov Al, '$'
Mov [Si], Al
;-----------------------------------------------------------------------------; SE DESPLIEGA EL MEN DE OPCIONES A ELEGIR. LA OPCIN ELEGIDA DEBE DE ESTAR
; COMPRENDIDA ENTRE 1 Y 5. ESTO ES VERIFICADO POR LAS INSTRUCCIONES CMP Y
; JAE (SALTA SI MAYOR O IGUAL A) Y JBE (SALTA SI MENOR O IGUAL A).
; NOTE QUE LA SELECCIN "NO ES DESPLEGADA A LA PANTALLA", ESO SE DEJA A SU
; CREATIVIDAD. SI EXISTE ALGUN ERROR, SE DESPLEGAR EL MENSAJE APROPIADO.
;-----------------------------------------------------------------------------OTRA:
TODOBIEN:
Cmp Al, 53
Jnz CHECATODO
Jmp FUNCION5
CHECATODO:
Mov Funcion, Al
; Guarda la funcin a realizar
;-----------------------------------------------------------------------------; SE CAPTURAN LAS CANTIDADES Y SE GUARDAN EN SUS RESPECTIVAS VARIABLES PARA
; PODER TRABAJAR SOBRE ELLAS MAS ADELANTE. LA CAPTURA SE BASA EN LA FUNCIN
; 09 DE LA INT 21H. DICHA FUNCIN ESTABLECE QUE EL REGISTRO AH CONTENGA 09
; Y EL REGISTRO PAR DS:DX APUNTE A LA DIRECCIN DE LA VARIABLE QUE
; ALMACENAR LA ESTRUCTURA DEL BUFFER, EL CUAL DEBE ESTAR CONSTRUIDO DE LA
; SIGUIENTE MANERA:
;
; BYTE 1 = CANTIDAD DE BYTES POR LEER
; BYTE 2 = (LLENADO POR MS-DOS) ES LA CANTIDAD DE BYTES REALMENTE LEDOS.
; BYTE 3 = BUFFER DONDE SE ALMACENA EL RESULTADO; DEBE ENCONTRARSE
; INICIALIZADO CON LA MISMA CANTIDAD DE BYTES ESPECIFICADOS
; POR EL BYTE 1.
;
; LAS CANTIDADES CAPTURADAS REPRESENTAN UNA CADENA QUE ES NECESARIO
; CONVERTIR EN BINARIO ANTES DE QUE SE PUEDA OPERAR SOBRE ELLA. MS
; ADELANTE SER EVIDENTE LO ANTERIOR.
;-----------------------------------------------------------------------------;-----------------------------------------------------------------------------; CAPTURA PRIMER CANTIDAD.
;-----------------------------------------------------------------------------CAPCANT01:
Mov Dx, Offset CantUnoM
Call Imprime
; Es 3?
; No.
; Suma las dos cantidades
; Es 4?
; No.
Call Resta
; Resta las dos cantidades
Jmp OTRA
FUNCION5:
;-----------------------------------------------------------------------------; TERMINA EL PROGRAMA
;-----------------------------------------------------------------------------Mov Ax, 4C00h
; Termina el programa sin errores.
Int 21h
;******************************************************************************
;R UT I N A S DE S OP ORT E
;******************************************************************************
;-----------------------------------------------------------------------------; Rutina: Multiplica
; Propsito: Multiplica dos nmeros enteros sin signo
; Parmetros: En el registro AX el multiplicando y en BX el multiplicador
; Regresa: El resultado en el registro par DX:AX, que es desplegado en
; la pantalla.
;-----------------------------------------------------------------------------Multiplica Proc Near
Xor Dx, Dx
; Dx = 0 por si acaso
Mov Ax, CantUnoR
; Primera cantidad (multiplicando)
Mov Bx, CantDosR
; Segunda cantidad (multiplicador)
Mul Bx
; Multiplica
Call ConvASCII
; Convierte en ASCII
Mov Dx, Offset Resulta ; Prepara para desplegar la cadena del resultado
Call Imprime
;
Mov Dx, Offset ResultaR ; Despliega el resultado.
Call Imprime
Ret
Multiplica Endp
;-----------------------------------------------------------------------------; Rutina: Divide
; Propsito: Divide dos nmeros enteros sin signo
; Parmetros: En el registro AX el dividendo y en BX el divisor
; Regresa: El resultado en el registro par DX:AX, que es desplegado en
; la pantalla.
;-----------------------------------------------------------------------------Divide Proc Near
Mov Ax, CantUnoR
Mov Bx, CantDosR
Cmp Bx, 0
Jnz DIVIDE01
Mov Cantidad, 3
Call HuboERROR
Ret
DIVIDE01:
Div Bx
; Divide
Xor Dx, Dx
Call ConvASCII
Mov Dx, Offset Resulta
Call Imprime
Mov Dx, Offset ResultaR ; Despliega el resultado
Call Imprime
Ret
Divide Endp
;-----------------------------------------------------------------------------; Rutina: Suma
; Propsito: Suma dos nmeros enteros sin signo
; Parmetros: En el registro AX el primer nmero y en BX el segundo
; Regresa: El resultado en el registro par DX:AX, que es desplegado en
; la pantalla.
;-----------------------------------------------------------------------------Suma Proc Near
Xor Dx, Dx
; DX = 0 por si acaso existe acarreo
Mov Ax, CantUnoR
; Primera cantidad
Mov Bx, CantDosR
; Segunda cantidad
Add Ax, Bx
; suma
Jnc SUMACONV
; Hubo acarreo?
Adc Dx, 0
; Si.
SUMACONV:
Call ConvASCII
; Convierte resultado en ASCII
Mov Dx, Offset Resulta
; Despliega cadena del resultado
Call Imprime
Mov Dx, Offset ResultaR
; Despliega el resultado
Call Imprime
Ret
Suma Endp
;-----------------------------------------------------------------------------; Rutina: Resta
; Propsito: Resta dos nmeros enteros sin signo
; Parmetros : En el registro AX el primer nmero y en BX el segundo
; Regresa: El resultado en el registro par DX:AX, que es desplegado en la pantalla.
;-----------------------------------------------------------------------------Resta Proc Near
Xor Dx, Dx
; DX = 0 por si acaso existe acarreo
Mov Ax, CantUnoR
; Primera cantidad
Mov Bx, CantDosR
; Segunda cantidad
Sub Ax, Bx
; Resta cantidades
Jnc RESTACONV
; Hubo acarreo?
Sbb Dx, 0
; Si.
RESTACONV:
Call ConvASCII
; Convierte en ASCII
Mov Dx, Offset Resulta
; Despliega cadena del resultado
Call Imprime
Mov Dx, Offset ResultaR ; Despliega el resultado
Call Imprime
Ret
Resta Endp
;-----------------------------------------------------------------------------; Rutina: Imprime
; Propsito: Despliega una cadena
; Parmetros: El registro DX contiene el desplazamiento de la cadena
; Regresa: Nada
;-----------------------------------------------------------------------------Imprime Proc Near
Mov Ah, 9
Int 21h
Ret
Imprime Endp
Xor Ch, Ch
Mov Di, Offset Potencia
Dec Si
Add Si, Cx
Xor Bx, Bx
Std
CONVNUM03:
Lodsb
Cmp AL,"0"
Jb CONVNUM04
Cmp AL,"9"
Ja CONVNUM04
Sub Al, 30h
Cbw
Mov Dx, [Di]
Mul Dx
Jc CONVNUM05
Add Bx, Ax
Jc CONVNUM05
Add Di, 2
Loop CONVNUM03
Jpm CONVNUM06
CONVNUM04:
Call HuboERROR
Jpm CONVNUM06
CONVNUM05:
Mov Cantidad, 2
Call HuboERROR
CONVNUM06:
Cld
Ret
ConvNum Endp
; CH = 0
; Direccin de la tabla de potencias
; Posiciona SI en el primer byte de la
; cadena capturada y le suma el
; desplazamiento de bytes ledos
; para que podamos posicionarnos en el
; final de la misma (apunta al ltimo
; dgito capturado). BX = 0 y lee la
; cadena en forma inversa; es decir, de
; atrs hacia adelante.
; DX contendr el residuo
; Divide la palabra alta (AX)
; Guarda cociente (AX)
; AX = palabra baja (BX)
; DX tena un residuo de la divisin anterior
; Guarda el cociente
; Regresa la palabra alta
; Convierte residuo en ASCII
; Lo almacena
; Palabra alta es 0?
; No, , sigue procesando
; Palabra baja es 0?
; No,, sigue procesando
; Es la cantidad 1?
Jnz HUBOERROR02
Mov Dx, Offset Error1
Call Imprime
Mov ErrorCAP, 1
Jmp HUBOERROR05
HUBOERROR02:
Cmp Cantidad, 1
Jnz HUBOERROR03
Mov Dx, Offset Error2
Call Imprime
Mov ErrorCAP, 1
Jmp HUBOERROR05
HUBOERROR03:
Cmp Cantidad, 2
Jnz HUBOERROR04
Mov Dx, Offset Error3
Call Imprime
Mov ErrorCAP, 1
Jmp HUBOERROR05
HUBOERROR04:
Mov Dx, Offset Error4
Call Imprime
Mov ErrorCAP, 1
; No.
; Es la cantidad 2?
; No.
HUBOERROR05:
Ret
HuboERROR Endp
;-----------------------------------------------------------------------------; Termina programa
;-----------------------------------------------------------------------------End Empieza
PRODUCTOS ENTREGABLES:
Reporte de la prctica
V. EVALUACIN
RBRICA:
Programas funcionando ---------------------------------------- 20%
Realizacin de prctica en el laboratorio --------------------- 30%
Elaboracin y entrega del reporte de la prctica ----------- 30%
Entrega de conclusiones personales ------------------------- 20%