Beruflich Dokumente
Kultur Dokumente
Laboratorio No. 3:
Programacin en Lenguaje Ensamblador
8086/88/286 en el ambiente DOS
Catedrtico:
Ing. Ricardo Cortez
Instructor:
Br. David Martnez
Bachilleres: Carnet:
Hernndez Nieto, Jairo Alejandro HN14001
Sorto Castillo, Jairo Josu SC14009
Porcentaje Nota
Introduccin 5%
Objetivos 5%
Marco Terico 10%
Desarrollo de la practica 10%
Asignaciones 40%
P1 8%
P2 8%
P3 8%
P4 8%
P5 8%
Conclusiones 30%
Nota final
INDICE
Introduccin:.................................................................................. 3
Objetivo General:........................................................................... 4
Objetivos Especficos:.................................................................. 4
Marco terico:................................................................................ 5
Descripcin de la prctica:............................................................7
Asignaciones:................................................................................8
Conclusiones:..............................................................................31
2
Lab. 3 SDG115
Introduccin:
3
Lab. 3 SDG115
4
Lab. 3 SDG115
Objetivo General:
Objetivos Especficos:
Estudiar el uso de directivas ms populares y comunes en el
MASM.
5
Lab. 3 SDG115
Marco terico:
6
Lab. 3 SDG115
7
Lab. 3 SDG115
8
Lab. 3 SDG115
Descripcin de la prctica:
1. Escriba el programa del Apndice B con formato .COM, ensmblelo y
enlcelo segn el procedimiento escrito en la prctica anterior.
1. ;PROGRAMA.COM:
2. NAME PRUEBA
6. ASSUME CS:CSEG,DS:CSEG,SS:CSEG,ES:CSEG
7. ;----------------------------------procedimiento------------------------
9
Lab. 3 SDG115
10
Lab. 3 SDG115
c) Ejecute el programa.
1. NAME PRUEBA
11
Lab. 3 SDG115
4. ASSUME CS:CSEG,DS:DSEG,SS:STACK
5. ;-------------------------------------Segmento de cdigo----------------
8. MOV DS,AX
22. end
12
Lab. 3 SDG115
Al ejecutar el programa:
Excluyendo PARA:
13
Lab. 3 SDG115
14
Lab. 3 SDG115
Quitando Stack:
15
Lab. 3 SDG115
Asignaciones:
Para abrir el listado. lst solo debemos darle click y se abrir por defecto con
el navegador dado que as esta predeterminado en mi PC. Esto resulta:
16
Lab. 3 SDG115
1. .8086
2. .model small
3. .DATA
5. CONTR DB "contrasena",'$'
6. temp_contr db 25 dup(?)
10. .CODE
17
Lab. 3 SDG115
14. INTR_datosp:
23. inc SI
25. seguir:
26. inc si
28. MOV AH,02 ; PONDRA UNA LINEA NUEVA DESPUES DE INTRODUCIR LOS DATOS
33. RET
35.
18
Lab. 3 SDG115
37. password:
44.
46. errorusuario:
52.
53.
54. inicio2:
19
Lab. 3 SDG115
63. cnt_correcta:
69. .exit
21
Lab. 3 SDG115
imagen tena que ser auto cambiante de posicin, sin chequeos solo lo lea y
trabajaba.
El archivo EXE normal contiene un encabezado o bloque de informacin de
control con un formato caracterstico. El tamao de dicho encabezado puede
variar dependiendo del nmero de instrucciones que deben ser re localizadas
al momento de la carga del programa, pero siempre ser un mltiplo de 512.
El cambio necesario para que funcione el cdigo al compilarlo y ejecutarlo es
aadir la directiva .STARTUP, que como bien dice su nombre arranca el
programa. Sin ella nos diera el siguiente mensaje al ocupar TLINK:
C:TASMBIN>Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International
Fatal: No program entry point
[/code]
1. .MODEL small
2. .STACK 100h
3. .DATA
5. .CODE
6. .startup
7. mov ax,@data
14. END
22
Lab. 3 SDG115
23
Lab. 3 SDG115
24
Lab. 3 SDG115
Este mensaje puede ser ignorado, ya que el mismo se debe a que se ha instruido al
enlazador para que genere un programa con extensin EXE donde el segmento de
pila debe ser indicado de manera explcita, y no as en los COM donde esta es
asumida por defecto.
Ejemplo de un programa con extensin COM.
El programa HOLA.COM listado en la figura 5-3 demuestra la estructura de programa
sencillo en lenguaje ensamblador, destinado a ser un archivo ejecutable con
extensin COM.
25
Lab. 3 SDG115
Interrupcin 10:
LLAMADA:
AH = 00H
AL = Modo de vdeo.
DEVUELVE:
NADA.
EFECTO:
Selecciona y activa el modo de vdeo especificado. A no ser que se utilice el
truco que se indica a continuacin, al llamar a esta funcin, se borra la
pantalla. Pero se borra el contenido de pantalla. Por suerte hay una especie
de 'truco' para evitar este borrado automtico de la pantalla. Consiste en
poner con valor 1 el bit 7 del registro AL (que contiene el modo de vdeo) en
la llamada a la funcin.
As, por ejemplo, si queremos cambiar a modo 13h, y queremos que se
pierda el contenido que hubiera en la pantalla en este modo, en vez de
introducir en AL nmero 13h (00010011b), introduciramos el nmero 93h
(10010011b).
TARJETA GRAFICA: TODAS (MDA, CGA, EGA, MCGA, VGA...)
Modos de vdeo y caractersticas principales:
26
Lab. 3 SDG115
27
Lab. 3 SDG115
LLAMADA:
AH = 02H
BH = Pgina de vdeo
DH = Lnea donde situar el cursor
DL = Columna donde situar el cursor
DEVUELVE:
NADA.
EFECTO:
Posiciona el cursor en pantalla, de acuerdo a las coordenadas indicadas en
los registros DH y DL
Slo se desplazar el cursor si la pgina de vdeo indicada mediante BH es la
pgina de vdeo activa. Esto es as ya que existe un cursor independiente
para cada una de las pginas de vdeo con las que contamos en el modo
actual
Las coordenadas para la columna empiezan a partir de 0. Las coordenadas
para la fila empiezan a partir de 0. Esto quiere decir que la esquina superior
izquierda de la pantalla tendr las coordenadas (lnea=0, columna=0). La
columna mxima es la 39 (si estamos en un modo de vdeo de 40 columnas)
o la 79 (si estamos en un modo de vdeo de 80 columnas). La lnea mxima
es la 24 (si estamos en un modo de vdeo de 25 lneas) o la 49 (si estamos en
un modo de vdeo de 50 lneas).
(Un 'truco' para hacer desaparecer el cursor de la pantalla consiste en dar
valores no vlidos para la columna o la fila. Por ejemplo, si damos a la
columna el valor 100, el cursor desaparecer de la pantalla)
INT 10H Funcin 03H
Buscar posicin del Cursor y Tamao
LLAMADA:
AH = 03H
BH = Pgina de vdeo.
DEVUELVE:
CH = Lnea inicial del cursor
CL = Lnea final del cursor
DH = Fila donde se encuentra el cursor
DL = Columna donde se encuentra el cursor
EFECTO:
Obtiene las coordenadas del cursor en una pgina de vdeo dada. Tambin se
obtiene el tamao del cursor.
28
Lab. 3 SDG115
29
Lab. 3 SDG115
30
Lab. 3 SDG115
31
Lab. 3 SDG115
EFECTO:
Mediante esta funcin podemos saber en todo momento, en qu modo de
vdeo estamos trabajando. La utilidad de esta funcin reside sobre todo en la
construccin de programas residentes.
Interrupcin 21H:
32
Lab. 3 SDG115
DEVUELVE: NADA.
EFECTO: Se enva una cadena de caracteres al dispositivo estndar de salida.
Si no se ha redireccionado la salida, la cadena se enviar a la pantalla.
33
Lab. 3 SDG115
LLAMADA:
AH = 0BH
DEVUELVE:
AL = 00H si no hay carcter disponible.
AL = FFH si hay algn carcter disponible.
EFECTO: Se comprueba si hay algn carcter procedente del dispositivo
estndar de entrada. La entrada puede ser redireccionada. Si no hay tal
redireccin, se comprueba el buffer de teclado
INT 21H Funcin 0EH
Seleccin de disco
LLAMADA:
AH = 0EH
DL = Cdigo de la unidad (0=A , 1=B , etc...)
DEVUELVE: AL = Nmero de unidades lgicas del sistema
EFECTO: Selecciona una unidad de disco para que se convierta en la unidad
por defecto o actual. Ofrece adems informacin acerca del nmero total de
unidades lgicas del sistema. Una unidad fsica como un disco duro puede
estar particionada en varias unidades lgicas designadas por C , D, E ,etc
34
Lab. 3 SDG115
DEVUELVE:
Si se ejecut correctamente: Flag de acarreo (Cf) = 0
Si NO se ejecut correctamente: Flag de acarreo (Cf) = 1
AX = Cdigo de error.
EFECTO: Establece como directorio actual el indicado mediante la cadena
ASCII. Esta funcin se abortar (indicndolo mediante Cf y AX) si el cdigo de
unidad no es vlido.
35
Lab. 3 SDG115
Crear Fichero
LLAMADA:
AH = 3CH
CX = Atributos del fichero: 00H Fichero Normal. 01H Fichero de Slo
Lectura. 02H Fichero Oculto. 03H Fichero de Sistema.
DS:DX = Segmento: Desplazamiento de una cadena ASCII con el
nombre de fichero.
DEVUELVE:
Si se ejecut correctamente: Flag de acarreo (Cf) = 0
AX = Handle o manejador de fichero.
Si NO se ejecut correctamente: Flag de acarreo (Cf) = 1
AX = Cdigo de error.
EFECTO: Si el fichero indicado mediante la cadena ASCII ya exista, entonces
se vaca su contenido, quedando con longitud 0. Si el fichero no exista,
entonces se crea. En ambos casos, el fichero se abre, y se devuelve un
Handle manejador de fichero para los restantes accesos a dicho fichero.
Esta funcin se abortar (indicndolo mediante Cf y AX) si:
- La va de acceso indicada en la cadena ASCII es errnea.
- Se va a crear el fichero en el directorio raz y ste ya est lleno
El Handle es un nmero mediante el cual se referencia a un fichero dado. De
esta forma es ms cmodo trabajar con ficheros. Para cada uno de los
ficheros con que trabajemos, tendremos un nmero (Handle) que lo
representar.
36
Lab. 3 SDG115
DEVUELVE:
Si se ejecut correctamente Flag de acarreo (Cf) = 0
AX = Handle o manejador de fichero
Si NO se ejecut correctamente: Flag de acarreo (Cf) = 1
AX = Cdigo de error.
EFECTO: Mediante esta funcin se abre un fichero ya existente, y se devuelve
un Handle para acceder al fichero en lo sucesivo.
DEVUELVE:
Si se ejecut correctamente:
Flag de acarreo (Cf) = 0
Si NO se ejecut correctamente: Flag de acarreo (Cf) = 1
AX = Cdigo de error.
EFECTO: Mediante esta funcin se cierra un fichero que estuviera abierto. Se
utiliza el Handle para indicar el fichero a cerrar. Tras cerrar el fichero, dicho
Handle se libera para nuevos ficheros. Se vuelvan al disco todos los buffers
internos asociados al fichero.
DEVUELVE:
Si se ejecut correctamente: Flag de acarreo (Cf) = 0
AX = Bytes transferidos
Si NO se ejecut correctamente: Flag de acarreo (Cf) = 1
AX = Cdigo de error.
EFECTO: Dado un handle vlido, se realiza una transferencia desde el fichero
referenciado por ese handle hacia el buffer de memoria especificado
mediante DS:DX. Se transferirn tantos caracteres como se especifique en
CX. Acto seguido, se actualiza el puntero de fichero hasta el carcter que
sigue al bloque ledo. Mediante esta funcin es posible leer caracteres del
teclado, usando el handle 0.
37
Lab. 3 SDG115
DEVUELVE:
Si se ejecut correctamente: Flag de acarreo (Cf) = 0
AX = Bytes transferidos.
Si NO se ejecut correctamente: Flag de acarreo (Cf) = 1
AX = Cdigo de error
EFECTO Dado un handle vlido, se realiza una transferencia desde el buffer
de memoria indicado mediante DS:DX hacia el fichero o dispositivo
referenciado por el Handle. Se transferirn tantos caracteres como se
especifique en CX. Acto seguido, se actualiza el puntero de fichero una
posicin por delante del bloque escrito, para que futuras escrituras no
'machaquen' los datos que ya hubiera. Mediante esta funcin es posible
escribir caracteres en la pantalla, usando el handle 1.
DEVUELVE:
Si se ejecut correctamente: Flag de acarreo (Cf) = 0
Si NO se ejecut correctamente: Flag de acarreo (Cf) = 1
AX = Cdigo de error.
EFECTO: Se borra el fichero indicado mediante la cadena ASCII
38
Lab. 3 SDG115
DEVUELVE:
Si se ejecut correctamente
Flag de acarreo (Cf) = 0
DX = Mitad ms significativa del puntero actualizado.
AX = Mitad menos significativa del puntero actualizado.
Si NO se ejecut correctamente
Flag de acarreo (Cf) = 1
AX = Cdigo de error.
EFECTO:
Cambia el valor del puntero de fichero, permitiendo as un acceso aleatorio al
fichero. Podremos, mediante esta funcin, escribir y leer caracteres en
cualquier posicin del fichero, sin pasar por las anteriores.
DEVUELVE
Si se ejecut correctamente:
Flag de acarreo (Cf) = 0
CX = Atributos del fichero
Si Bit 0 = 1, Fichero de slo lectura.
Si Bit 1 = 1, Fichero oculto.
Si Bit 2 = 1, Fichero de sistema.
Si Bit 5 = 1, El archivo ha sido modificado desde el ltimo backup.
Si NO se ejecut correctamente:
Flag de acarreo (Cf) = 1
AX = Cdigo de error.
EFECTO: Mediante esta funcin se obtiene informacin acerca de los
atributos de un determinado fichero, indicado mediante la cadena ASCII.
39
Lab. 3 SDG115
DEVUELVE:
Si se ejecut correctamente
Flag de acarreo (Cf) = 0
Si NO se ejecut correctamente:
Flag de acarreo (Cf) = 1
AX = Cdigo de error.
EFECTO:
Mediante esta funcin se establecen nuevos atributos a un fichero dado. Este
fichero se indica mediante la cadena ASCII.
40
Lab. 3 SDG115
DEVUELVE:
NADA
EFECTO: Se finaliza la ejecucin del programa en curso. Esto conlleva:
- Liberacin de toda la memoria asignada al programa.
- Todos los buffers de fichero son vaciados.
- Se cierra cualquier fichero abierto por el programa.
- Se restauran los tres vectores de interrupcin (INT 22H, INT 23H, INT 24H)
cuyo contenido original fue almacenado en la pila. Esta funcin est pensada
para programas COM, en los cuales, el PSP est en el mismo segmento que el
cdigo del programa. En los programas EXE esto no sucede as, estando el
PSP en diferente segmento al cdigo del programa, por tanto, no se debe
llamar a esta funcin desde un programa .EXE. En ambos casos (COM y EXE),
es preferible utilizar la funcin 4CH, ya que devuelve un cdigo de retorno la
programa padre.
DEVUELVE:
NADA.
EFECTO: Se finaliza la ejecucin del programa en curso, y se devuelve un
cdigo de retorno al programa padre. Mediante este cdigo de retorno, se
puede ofrecer informacin al programa padre acerca de la ejecucin del
programa (si se ha producido error, etc...) La terminacin del programa
conlleva:
- Liberacin de toda la memoria asignada al programa.
- Todos los buffers de fichero son vaciados.
- Se cierra cualquier fichero abierto por el programa.
- Se restauran los tres vectores de interrupcin (INT 22H, INT 23H, INT 24H)
cuyo contenido original fue almacenado en la pila.
Este es el mtodo idneo de terminacin de programas, ya que no necesita
que el registro CS tenga ningn contenido especial. Y aparte, devuelve
informacin al programa padre.
41
Lab. 3 SDG115
DEVUELVE:
NADA
EFECTO: Se finaliza la ejecucin del programa en curso, y se devuelve un
cdigo de retorno al programa padre. Mediante este cdigo de retorno, se
puede ofrecer informacin al programa padre acerca de la ejecucin del
programa (si se ha producido error, etc...) Adems de esto, y lo ms
importante: Se deja residente el programa o parte del mismo, de forma que
las siguientes ejecuciones de programas no lo 'machaquen'. La terminacin
del programa conlleva:
- Liberacin de toda la memoria asignada al programa.
- Todos los buffers de fichero son vaciados.
- Se cierra cualquier fichero abierto por el programa.
- Se restauran los tres vectores de interrupcin (INT 22H, INT 23H, INT 24H)
cuyo contenido original fue almacenado en la pila.
Un prrafo equivale a 16 bytes. Por tanto, en DX habr que indicar el nmero
total de bytes a dejar residentes dividido por 16. Esta funcin se utiliza en
programacin de utilidades residentes (como SideKick o SanBit). Una vez que
el programa queda residente en memoria, la activacin del mismo se
realiza de acuerdo a algn criterio del propio programa (como la pulsacin de
una combinacin de teclas). En este caso, el programa residente toma el
control y al acabar su tarea le devuelve el control al programa que se
estuviera ejecutando antes de la activacin del residente.
42
Lab. 3 SDG115
Conclusiones:
43
Lab. 3 SDG115
44