����������������������� �UNIVERSIDAD DE GUADALAJARA
����������� ����������������� Coordinaci�n General de Sistemas de Informaci�n.
DIRECTORIO
Dr. V�ctor Manuel
Gonz�lez Romero
Rector General de la
Universidad de Guadalajara
Dr. Misael Gradilla
Damy
Vicerrector�a
Ejecutiva
M en C. Jeffrey
Steven Fern�ndez Rodr�guez
Coordinador General
de Sistemas de Informaci�n
Ing. M�nico Brise�o
Cort�s
Responsable del
servidor Gr�fico
Cultura y
Entretenimiento
Hugo P�rez P�rez
Autor del tutorial
de Ensamblador
Ana Mar�a Peraza
Captura y revisi�n
del texto
���������������������������� Derechos Reservados
1995
�������������������������� UNIVERSIDAD DE
GUADALAJARA
����������������� Coordinaci�n General de
Sistemas de Informaci�n.
Introducci�n.
�El documento que est� visualizando tiene la
funci�n primordial de introducirlo a la programaci�n en lenguaje Ensamblador, y
est� pensado en aquellas personas que nunca han trabajado con este lenguaje y
probablemente con ning�n otro.
El tutorial se
enfoca completamente hacia las computadoras que operan con procesadores de la
familia x86 de Intel y, considerando que el ensamblador basa su funcionamiento
en los recursos internos del�
procesador, los ejemplos descritos no son compatibles con ninguna otra
arquitectura.
Se estructur� la
informaci�n en forma de unidades para permitir el f�cil acceso a cada uno de
los t�picos y facilitar el seguimiento del tutorial.
En la secci�n
introductoria se mencionan algunos de los conceptos elementales acerca de los
sistemas de c�mputo as' como del ensamblador mismo, y contin�a con el tutorial
propiamente dicho.
CONTENIDO:
Descripci�n b�sica
de un sistema de c�mputo...................................................3
El porqu
aprender lenguaje ensamblador.........................................................6
Acercamiento al
lenguaje ensamblador.
Esta primera parte
esta enfocada al conocimiento de algunas de las
caracter'sticas de
las computadoras y del ensamblador.
�UNIDAD 1: Conceptos
b�sicos...................................................................................7
�UNIDAD 2: Programaci�n en
ensamblador.........................................................28
��������������������
�
�������������������������������������� Derchos
Reservados.1995����������� ��������������������������1
�������������������������
��������������������������� UNIVERSIDAD DE
GUADALAJARA
����������������� Coordinaci�n General de
Sistemas de Informaci�n.
��������������������������
Las instrucciones
del ensamblador.
En esta segunda
parte se profundiza un poco mas en la descripci�n de las instrucciones del
lenguaje ensamblador.
�UNIDAD 3: Instrucciones de operaci�n sobre
datos.......................................41
�UNIDAD 4: Instrucciones l�gicas y
aritmticas................................................50
�UNIDAD 5: Instrucciones para control de
procesos........................................58
Interrupciones y
manejo de archivos.
�UNIDAD 6:
Interrupciones.........................................................................................74
�UNIDAD 7: Introducci�n al manejo de
archivos..............................................102
Introducci�n a las
macros.
�UNIDAD 8: Macros y
procedimientos...................................................................109
Ejemplos.............................................................................................................................114
En esta secci�n se
exponen algunos programas de ejemplo en los que se utilizan los elementos
explicados en el tutorial.
Desplegar un mensaje
en pantalla
Desplegar n�meros
hexadecimales del 15 al 0
Operaciones b�sicas
Directorio y
bibliograf'a..............................................................................................128
Comentarios y
sugerencias........................................................................................129
���������������������������������� Derechos
Reservados.1995�����������������������������
2
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Descripci�n b�sica
de un sistema de c�mputo.
Esta secci�n tiene
como finalidad dar una breve rese�a de las partes
principales de un
sistema de c�mputo a un nivel b�sico, que permita al
usuario un mayor
entendimiento de los conceptos que se tratar�n a lo largo
del tutorial.
�� * Procesador Central
�� * Memoria Central
�� * Unidades de Entrada y Salida
�� * Unidades de Memoria Auxiliar
Sistema de C�mputo.
Le llamamos sistema
de c�mputo a la configuraci�n completa de una
computadora,
incluyendo las unidades perifricas y la programaci�n de
sistemas que la
hacen un aparato �til y funcional para un fin determinado.
Procesador Central.
Esta parte es
conocida tambin como unidad central de procesamiento o UCP.
formada a su vez por
la unidad de control y la unidad aritmtica y l�gica.
Sus funciones
consisten en leer y escribir contenidos de las celdas de
memoria, llevar y
traer datos entre celdas de memoria y registros especiales
y decodificar y
ejecutar las instrucciones de un programa.
El procesador cuenta
con una serie de celdas de memoria que se utilizan con
mucha frecuencia y
que, por ende, forman parte de la UCP.
�������������������������������������� Derechos
Reservados.1995������������������������������������� 3
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Estas celdas son
conocidas con el nombre de registros. Un procesador puede tener una docena o
dos de estos registros. La unidad aritmtica y l�gica de la UCP realiza
las operaciones relacionadas con los c�lculos numricos y simb�licos.
T'picamente estas unidades s�lo tienen capacidad de efectuar operaciones muy
elementales como: suma y resta de dos n�meros de punto fijo, multiplicaci�n y
divisi�n de punto fijo, manipulaci�n de bits de los registros y comparaci�n del
contenido de dos registros.
Las computadoras
personales pueden clasificarse por lo que se conoce como
tama�o de palabra,
esto es, la cantidad de bits que el procesador puede
manejar a la vez.
Memoria Central.
Es un conjunto de
celdas (actualmente fabricadas con semiconductores) usadas
para procesos
generales, tales como la ejecuci�n de programas y el
almacenamiento de
informaci�n para las operaciones.
Cada una de las
celdas puede contener un valor numrico y tienen la
propiedad de ser
direccionables, esto es, que se pueden distinguir una de
otra por medio de un
n�mero �nico o direcci�n para cada celda.
El nombre
genrico de estas memorias es Random Access Memory (Memoria de acceso
aleatorio) o RAM por sus siglas en ingls. La principal desventaja de
este tipo de memoria
es que los circuitos integrados pierden la informaci�n
que tienen
almacenada cuando se interrumpe la alimentaci�n elctrica. Esto
llev� a la creaci�n
de memorias cuya informaci�n no se pierda cuando se
apaga el sistema.
Estas memorias reciben el nombre de Read Only Memory
(Memoria de solo
lectura) o ROM.
��������������������������������������
Derechos Reservados.1995������������������������������������� 4
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Unidades de Entrada
y Salida.
Para que una
computadora nos sea �til es necesario que el procesador se
comunique al
exterior por medio de interfaces que permiten la entrada y la
salida de datos del
procesador y la memoria. Haciendo uso de estas
comunicaciones es
posible introducir datos para su procesamiento y la
posterior
visualizaci�n de los datos ya procesados.
Algunas de las
unidades de entrada mas comunes son teclados, lectoras de
tarjetas (ya en
desuso), mouse, etc. Las unidades de salida mas comunes son
las terminales de
video y las impresoras.
Unidades de Memoria
Auxiliar.
Como la memoria
central de una computadora es costosa y, considerando las
aplicaciones
actuales, muy limitada, surge entonces la necesidad de crear
sistemas de
almacenamiento de informaci�n pr�cticos y econ�micos. Adem�s, la memoria
central pierde su contenido al apagarse la m�quina, por lo que no es
conveniente utilizarla para almacenamiento permanente de datos.
Estos y otros
incovenientes dan lugar a la creaci�n de unidades perifricas
de memoria que
reciben el nombre de memoria auxiliar o secundaria. De estas
unidades
perifricas las m�s comunes son las cintas y los discos magnticos.
La informaci�n
almacenada en estos medios magnticos recibe el nombre de
archivo. Un archivo
est� formado por un n�mero variable de registros,
generalmente de
tama�o fijo; los registros pueden contener datos o
programas.
��������������������������������������
Derechos Reservados.1995���������������
����������������������5
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinci�n General de
Sistemasde Informaci�n.
Ventajas del
Ensamblador
La primera raz�n
para trabajar con ensamblador es que proporciona la
oportunidad de
conocer m�s a fondo la operaci�n de su PC, lo que permite el
desarrollo de
software de una manera m�s consistente.
La segunda raz�n es
el control total de la PC que se tiene con el uso del
mismo.
Otra raz�n es que
los programas de ensamblador son mas r�pidos, m�s
compactos y tienen
mayor capacidad que los creados en otros lenguajes.
Por �ltimo el
ensamblador permite una optimizaci�n ideal en los programas
tanto en su tama�o
como en su ejecuci�n.
Software
En terminos de
computaci�n es todo aquel proceso o programa que utiliza los
recursos de la
computadora para lograr el objetivo trazado por su dise�ador
o programador.
��������������������������������������
Derechos Reservados.1995������������������������������������� 6
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Conceptos b�sicos
Informaci�n en las
computadoras.
���� Unidades de informaci�n
���� Sistemas numricos
���� Convertir n�meros binarios a decimales
���� Convertir n�meros decimales a binarios
���� Sistema Hexadecimal
Mtodos de
representaci�n de datos en una computadora.
���� C�digo ASCII
���� Mtodo BCD
���� Representaci�n de punto flotante
Trabajando con el
lenguaje ensamblador.
���� Proceso de creaci�n de un programa
���� Registros de la UCP
���� La estructura del ensamblador
���� Nuestro primer programa
���� Guardar y cargar los programas
���� Condiciones, ciclos y bifurcaciones
���� Interrupciones
Unidades de informaci�n
Para que la PC pueda
procesar la informaci�n es necesario que sta se
encuentre en celdas
especiales llamadas registros.
Los registros son
conjuntos de 8 o 16 flip-flops (basculadores o
biestables).
��������������������������������������
Derechos Reservados.1995������������������������������������� 7
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Un flip-flop es un dispositivo
capaz de almacenar dos niveles de voltaje,
uno bajo,
regularmente de 0.5 volts y otro alto comunmente de 5 volts. El
nivel bajo de
energ'a en el flip-flop se interpreta como apagado o 0, y el
nivel alto como
prendido o 1. A estos estados se les conoce usualmente como
bits, que son la
unidad mas peque�a de informaci�n en una computadora.
A un grupo de 16
bits se le conoce como palabra, una palabra puede ser
dividida en grupos
de 8 bits llamados bytes, y a los grupos de 4 bits les
llamamos nibbles.
Sistemas
numricos
El sistema
numrico que utilizamos a diario es el sistema decimal, pero este
sistema no es
conveniente para las m�quinas debido a que la informaci�n se
maneja codificada en
forma de bits prendidos o apagados; esta forma de
codificaci�n nos
lleva a la necesidad de conocer el c�lculo posicional que
nos permita expresar
un n�mero en cualquier base que lo necesitemos.
Es posible
representar un n�mero determinado en cualquier base mediante la
siguiente formula:
Donde n es la
posici�n del d'gito empezando de derecha a izquierda y
numerando a partir
de cero. D es el d'gito sobre el cual operamos y B es la
base numrica
empleada.
��������������������������������������
Derechos Reservados.1995���������������������������������� ��8
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Convertir n�meros
binarios a decimales
Trabajando en el
lenguaje ensamblador nos encontramos con la necesidad de
convertir n�meros
del sistema binario, que es el empleado por las
computadoras, al
sistema decimal utilizado por las personas.
El sistema binario
est� basado en unicamente dos condiciones o estados, ya
sea encendido (1) o
apagado (0), por lo tanto su base es dos.
Para la conversi�n
podemos utilizar la formula de valor posicional:
Por ejemplo, si
tenemos el numero binario 10011, tomamos de derecha a
izquierda cada
d'gito y lo multiplicamos por la base elevada a la nueva
posici�n que ocupan:
Binario:���� ��1������ 1������ 0������
0������ 1
Decimal:���� 1*2^0 + 1*2^1 + 0*2^2 + 0*2^3 + 1*2^4
���������� =��
1�� +�� 2�� +�� 0��
+�� 0�� +�� 16�� =�
19 decimal.
El caracter ^ es
utilizado en computaci�n como s'mbolo de potenciaci�n y el
caracter * se usa
para representar la multiplicaci�n.
Convertir n�meros
decimales a binarios
Existen varios
mtodos de conversi�n de n�meros decimales a binarios; aqu'
solo se analizar�
uno.
��������������������������������������
Derechos Reservados.1995������������������������������������� 9
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Naturalmente es
mucho mas f�cil una conversi�n con una calculadora cient'fica, pero no siempre
se cuenta con ella, as' que es conveniente conocer por lo menos una forma
manual para hacerlo.
El mtodo que
se explicar� utiliza la divisi�n sucesiva entre dos, guardando
el residuo como
d'gito binario y el resultado como la siguiente cantidad a
dividir.
Tomemos como ejemplo
el n�mero 43 decimal.
43/2 = 21 y su
residuo es 1
21/2 = 10 y su
residuo es 1
10/2 = 5 y su
residuo es 0
5/2 = 2 y su residuo
es 1
2/2 = 1 y su residuo
es 0
1/2 = 0 y su residuo
es 1
Armando el n�mero de
abajo hacia arriba tenemos que el resultado en binario
es 101011
Sistema hexadecimal
En la base
hexadecimal tenemos 16 d'gitos que van del 0 al 9 y de la letra A
hasta la F (estas
letras representan los n�meros del 10 al 15). Por lo
tanto, contamos 0,
1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F.
��������������������������������������
Derechos Reservados.1995������������������������������������� 10
������������������������� �����UNIVERSIDAD DE GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
La conversi�n entre
numeraci�n binaria y hexadecimal es sencilla. Lo primero
que se hace para una
conversi�n de un n�mero binario a hexadecimal es
dividirlo en grupos
de 4 bits, empezando de derecha a izquierda. En caso de
que el �ltimo grupo
(el que quede mas a la izquierda) sea menor de 4 bits se
rellenan los
faltantes con ceros.
Tomando como ejemplo
el n�mero binario 101011 lo dividimos en grupos de 4
bits y nos queda:
10; 1011
Rellenando con ceros
el �ltimo grupo (el de la izquierda):
0010; 1011
Despus tomamos
cada grupo como un n�mero independiente y consideramos su
valor en decimal:
0010 = 2; 1011 = 11
Pero como no podemos
representar este n�mero hexadecimal como 211 porque ser'a un error, tenemos que
sustituir todos los valores mayores a 9 por su respectiva representaci�n en
hexadecimal, con lo que obtenemos:
2BH (Donde la H
representa la base hexadecimal)
Para convertir un
n�mero de hexadecimal a binario solo es necesario invertir
estos pasos: se toma
el primer d'gito hexadecimal y se convierte a binario,
y luego el segundo,
y as' sucesivamente hasta completar el n�mero.
��������������������������������������
Derechos Reservados.1995������������������������������������� 11
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
C�digo ASCII
ASCII generalmente
se pronuncia "aski", es un acr�nimo de American Standard
Code for Information
Interchange.
Este c�digo asigna a
las letras del alfabeto, a los d'gitos decimales del 0
al 9 y a varios
s'mbolos adicionales un n�mero binario de 7 bits (ponindose
el bit 8 en su
estado de apagado o 0).
De esta forma cada
letra, d'gito o caracter especial ocupa un byte en la
memoria de la
computadora.
Podemos observar que
este mtodo de representaci�n de datos es muy
ineficiente en el
aspecto numrico, ya que en formato binario nos basta un
solo byte para representar
numeros de 0 a 255, en cambio con el c�digo ASCII
un byte puede
representar unicamente un d'gito.
Debido a esta
ineficiencia, el c�digo ASCII es principalmente utilizado en
la memoria para
representar texto.
Metodo BCD
BCD es un acr�nimo
de Binary Coded Decimal.
En esta notaci�n se
utilizan grupos de 4 bits para representar cada d'gito
decimal del 0 al 9.
Con este mtodo podemos representar dos d'gitos por byte
de informaci�n.
��������������������������������������
Derechos Reservados.1995������������������������������������� 12
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
A�n cuando este
mtodo es mucho mas pr�ctico para representaci�n de n�meros en la memoria
en comparaci�n al ASCII, todav'a se queda por debajo del binario, ya que con un
byte en el mtodo BCD solo podemos representar
d'gitos del 0 al 99,
en cambio, en formato binario podemos representar todos
los d'gitos desde 0
hasta 255.
Este formato es
utilizado principalmente para representar n�meros muy
grandes en
aplicaciones mercantiles ya que facilita las operaciones con los
mismos evitando
errores de redondeo.
Representaci�n de
punto flotante
Esta representaci�n
esta basada en la notaci�n cient'fica, esto es,
representar un
n�mero en dos partes: su mantisa y su exponente.
Poniendo como
ejemplo el n�mero 1234000, podemos representarlo como
1.123*10^6, en esta
�ltima notaci�n el exponente nos indica el n�mero de
espacios que hay que
mover el espacio hacia la derecha para obtener el
resultado original.
En caso de que el
exponente fuera negativo nos estar'a indicando el n�mero
de espacios que hay
que recorrer el punto decimal hacia la izquierda para
obtener el original.
Proceso de creaci�n
de un programa
Para la creaci�n de
un programa es necesario seguir cinco pasos: Dise�o del
algoritmo,
codificaci�n del mismo, su traducci�n a lenguaje m�quina, la
prueba del programa
y la depuraci�n.
����������������������� ��������������Derechos Reservados.1995������������������������������������� 13
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
�En la etapa de dise�o se plantea el problema
a resolver y se propone
la mejor soluci�n,
creando diagramas esquem�ticos utilizados para el mejor
planteamiento de la
soluci�n.
�La codificaci�n del programa consiste en
escribir el programa en
alg�n lenguaje de
programaci�n; en este caso espec'fico en ensamblador,
tomando como base la
soluci�n propuesta en el paso anterior.
�La traducci�n al lenguaje m�quina es la
creaci�n del programa
objeto, esto es, el
programa escrito como una secuencia de ceros y unos que
pueda ser interpretado
por el procesador.
�La prueba del programa consiste en verificar
que el programa
funcione sin
errores, o sea, que haga lo que tiene que hacer.
�La �ltima etapa es la eliminaci�n de las
fallas detectadas en el
programa durante la
fase de prueba. La correcci�n de una falla normalmente
requiere la
repetici�n de los pasos comenzando desde el primero o el
segundo.
Para crear un
programa en ensamblador existen dos opciones, la primera es
utilizar el MASM
(Macro Assembler, de Microsoft), y la segunda es utilizar
el debugger, en esta
primera secci�n utilizaremos este �ltimo ya que se
encuentra en
cualquier PC con el sistema operativo MS-DOS, lo cual lo pone
al alcance de
cualquier usuario que tenga acceso a una m�quina con estas
caracteristicas.
Debug solo puede
crear archivos con extensi�n .COM, y por las
caracter'sticas de
este tipo de programas no pueden ser mayores de 64 kb,
adem�s deben
comenzar en el desplazamiento, offset, o direcci�n de memoria
0100H dentro del
segmento espec'fico.
��� ����������������������������������Derechos Reservados.1995������������������������������������� 14
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Registros de la UCP
La UCP tiene 14
registros internos, cada uno de 16 bits. Los primeros
cuatro, AX, BX, CX,
y DX son registros de uso general y tambien pueden ser
utilizados como
registros de 8 bits, para utilizarlos como tales es
necesario referirse
a ellos como por ejemplo: AH y AL, que son los bytes
alto (high) y bajo
(low) del registro AX. Esta nomenclatura es aplicable
tambin a los
registros BX, CX y DX.
Los registros son
conocidos por sus nombres espec'ficos:
�AX Acumulador
�BX Registro base
�CX Registro contador
�DX Registro de datos
�DS Registro del segmento de datos
�ES Registro del segmento extra
�SS Registro del segmento de pila
�CS Registro del segmento de c�digo
�BP Registro de apuntadores base
�SI Registro 'ndice fuente
�DI Registro 'ndice destino
�SP Registro del apuntador de la pila
�IP Registro de apuntador de siguiente
instrucci�n
�F�
Registro de banderas
Es posible
visualizar los valores de los registros internos de la UCP
utilizando el
programa Debug. Para empezar a trabajar con Debug digite en el
prompt de la
computadora:
C:\> Debug
[Enter]
������������������������������������ Derechos
Reservados.1995������������������������������������� 15
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
En la siguiente
linea aparecera un gui�n, ste es el indicador del Debug, en
este momento se
pueden introducir las instrucciones del Debug. Utilizando el
comando:
- r [Enter]
Se desplegaran todos
los contenidos de los registros internos de la UCP; una
forma alternativa de
mostrarlos es usar el comando "r" utilizando como
parametro el nombre
del registro cuyo valor se quiera visualizar. Por
ejemplo:
- rbx
Esta instrucci�n
desplegar� unicamente el contenido del registro BX y cambia
el indicador del
Debug de " - " a " : "
Estando as' el
prompt es posible cambiar el valor del registro que se
visualiz� tecleando
el nuevo valor y a continuaci�n [Enter], o se puede
dejar el valor
anterior presionando [Enter] sin telclear ning�n valor.
Es posible cambiar
el valor del registro de banderas, as' como utilizarlo
como estructura de
control en nuestros programas como se ver� mas adelante.
Cada bit del
registro tiene un nombre y significado especial, la lista dada
a continuaci�n
describe el valor de cada bit, tanto apagado como prendido y
su relaci�n con las
operaciones del procesador:
�Overflow
���� NV = no hay desbordamiento;
���� OV = s' lo hay
�Direction
���� UP = hacia adelante;
���� DN = hacia atras;
�
������������������������������������ Derechos
Reservados.1995������������������������������������� 16
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Interrupts
���� DI = desactivadas;
���� EI = activadas
�Sign
���� PL = positivo;
���� NG = negativo
�Zero
���� NZ = no es cero;
���� ZR = s' lo es
�Auxiliary Carry
���� NA = no hay acarreo auxiliar;
���� AC = hay acarreo auxiliar
�Parity
���� PO = paridad non;
���� PE = paridad par;
�Carry
���� NC = no hay acarreo;
���� CY = S' lo hay
La estructura del
ensamblador
En el lenguaje
ensamblador las lineas de c�digo constan de dos partes, la
primera es el nombre
de la instrucci�n que se va a ejecutar y la segunda son
los par�metros del
comando u operandos. Por ejemplo:
add ah bh
Aqu' "add"
es el comando a ejecutar (en este caso una adici�n) y tanto "ah"
como "bh"
son los par�metros.
������������������������������������ Derechos
Reservados.1995��������������� ����������������������17
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
El nombre de las
instrucciones en este lenguaje esta formado por dos, tres o
cuatro letras. a
estas instrucciones tambien se les llama nombres mnem�nicos
o c�digos de
operaci�n, ya que representan alguna funci�n que habr� de
realizar el
procesador.
Existen algunos
comandos que no requieren parametros para su operaci�n, as'
como otros que
requieren solo un par�metro.
Algunas veces se
utilizar�n las instrucciones como sigue:
add al,[170]
Los corchetes en el
segundo par�metro nos indican que vamos a trabajar con
el contenido de la
casilla de memoria n�mero 170 y no con el valor 170, a
sto se le
conoce como direccionamiento directo.
Nuestro primer
programa
Vamos a crear un
programa que sirva para ilustrar lo que hemos estado
viendo, lo que
haremos ser� una suma de dos valores que introduciremos
directamente en el
programa:
El primer paso es
iniciar el Debug, este paso consiste unicamente en teclear
debug [Enter] en el
prompt del sistema operativo.
Para ensamblar un
programa en el Debug se utiliza el comando "a" (assemble);
cuando se utiliza
este comando se le puede dar como parametro la direcci�n
donde se desea que
se inicie el ensamblado.
������������������������������������ Derechos
Reservados.1995������������������������������������� 18
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Si se omite el
parametro el ensamblado se iniciar� en la localidad especificada por CS:IP,
usualmente 0100H, que es la localidad donde deben iniciar los programas con
extensi�n .COM, y sera la localidad que utilizaremos debido a que debug solo
puede crear este tipo espec'fico de programas.
Aunque en este
momento no es necesario darle un parametro al comando "a" es
recomendable hacerlo para evitar problemas una vez que se haga uso de los
registros CS:IP, por
lo tanto tecleamos:
- a0100 [Enter]
Al hacer sto
aparecer� en la pantalla algo como: 0C1B:0100 y el cursor se
posiciona a la
derecha de estos n�meros, n�tese que los primeros cuatro
d'gitos (en sistema
hexagesimal) pueden ser diferentes, pero los �ltimos
cuatro deben ser
0100, ya que es la direcci�n que indicamos como inicio.
Ahora podemos
introducir las instrucciones:
0C1B:0100 mov
ax,0002 ;coloca el valor 0002 en el registro ax
0C1B:0103 mov
bx,0004 ;coloca el valor 0004 en el registro bx
0C1B:0106 add ax,bx
;le adiciona al contenido de ax el contenido de bx
0C1B:0108 int 20 ;
provoca la terminaci�n del programa.
0C1B:010A
No es necesario
escribir los comentarios que van despues del ";". Una vez
digitado el �ltimo
comando, int 20, se le da [Enter] sin escribir nada mas,
para volver al
prompt del debuger.
La �ltima linea
escrita no es propiamente una instrucci�n de ensamblador, es
una llamada a una
interrupci�n del sistema operativo, estas interrupciones
ser�n tratadas mas a
fondo en un cap'tulo posterior, por el momento solo es
necesario saber que
nos ahorran un gran n�mero de lineas y son muy �tiles
para accesar a
funciones del sistema operativo.
��������������������������������������
Derechos Reservados.1995���������������������������� ���������19
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Para ejecutar el
programa que escribimos se utliza el comando "g", al
utilizarlo veremos
que aparece un mensaje que dice: "Program terminated
normally".
Naturalmente con un mensaje como ste no podemos estar seguros
que el programa haya
hecho la suma, pero existe una forma sencilla de
verificarlo,
utilizando el comando "r" del Debug podemos ver los contenidos
de todos los
registros del procesador, simplemente teclee:
- r [Enter]
Aparecera en
pantalla cada registro con su respectivo valor actual:
AX=0006BX=0004CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0C1BES=0C1BSS=0C1BCS=0C1BIP=010A
NV UP EI PL NZ NA PO NC
0C1B:010A 0F DB oF
Existe la
posibilidad de que los registros contengan valores diferentes,
pero AX y BX deben
ser los mismos, ya que son los que acabamos de modificar.
Otra forma de ver
los valores, mientras se ejecuta el programa es utilizando
como par�metro para
"g" la direcci�n donde queremos que termine la ejecuci�n y muestre
los valores de los registros, en este caso ser'a: g108, esta
instrucci�n ejecuta
el programa, se detiene en la direcci�n 108 y muestra
los contenidos de
los registros.
Tambin se
puede llevar un seguimiento de lo que pasa en los registros
utilizando el
comando "t" (trace), la funci�n de este comando es ejecutar
linea por linea lo
que se ensambl� mostrando cada vez los contenidos de los
regitros.
Para salir del Debug
se utiliza el comando "q" (quit).
������������������������������������� Derechos
Reservados.1995������������������������������������� 20
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Guardar y cargar los
programas
No ser'a pr�ctico
tener que digitar todo un programa cada vez que se
necesite, para
evitar eso es posible guardar un programa en el disco, con la
enorme ventaja de
que ya ensamblado no ser� necesario correr de nuevo debug para ejecutarlo.
Los pasos a seguir
para guardar un programa ya almacenado en la memoria son:
�Obtener la longitud del programa restando la
direcci�n final de la
�direcci�n inicial, naturalmente en sistema
hexadecimal. Darle un nombre al��������������
programa y extensi�n Poner la longitud del programa en el registro CX
�Ordenar a Debug que escriba el programa en el
disco.
Utilizando como
ejemplo el programa del cap'tulo anterior tendremos una idea
mas clara de como
llevar estos pasos:
Al terminar de
ensamblar el programa se ver'a as':
0C1B:0100 mov
ax,0002
0C1B:0103 mov
bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:010A
- h 10a 100
020a 000a
- n prueba.com
- rcx
CX 0000
:000a
-w
Writing 000A bytes
��������������������������������������
Derechos Reservados.1995������������������������������������� 21
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Para obtener la
longitud de un programa se utiliza el comando "h", el cual
nos muestra la suma
y resta de dos n�meros en hexadecimal. Para obtener la
longitud del nuestro
le proporcionamos como par�metros el valor de la
direcci�n final de
nuestro programa (10A) y el valor de la direcci�n inicial
(100). El primer
resultado que nos muestra el comando es la suma de los
par�metros y el
segundo es la resta.
El comando
"n" nos permite poner un nombre al programa.
El comando
"rcx" nos permite cambiar el contenido del registro CX al valor
que obtuvimos del
tama�o del archivo con "h", en este caso 000a, ya que nos
interesa el
resultado de la resta de la direcci�n inicial a la direcci�n
final.
Por �ltimo el
comando w escribe nuestro programa en el disco, indicandonos
cuantos bytes
escribi�.
Para cargar un
archivo ya guardado son necesarios dos pasos:
�Proporcionar el nombre del archivo que se
cargar�.
�Cargarlo utilizando el comando "l"
(load).
Para obtener el
resultado correcto de los siguientes pasos es necesario que
previamente se haya
creado el programa anterior.
Dentro del Debug
escribimos lo siguiente:
- n prueba.com
- l
- u 100 109
0C3D:0100 B80200 MOV
AX,0002
0C3D:0103 BB0400 MOV
BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT
20
������������������������������������� Derechos
Reservados.1995�������������������������������������� 22
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
El �ltimo comando,
"u", se utiliza para verificar que el programa se carg�
en memoria, lo que
hace es desensamblar el c�digo y mostrarlo ya
desensamblado. Los
par�metros le indican a Debug desde donde y hasta donde
desensamblar.
Debug siempre carga
los programas en memoria en la direcci�n 100H, a menos
que se le indique
alguna otra.
Condiciones, ciclos
y bifurcaciones
Estas estructuras, o
formas de control le dan a la m�quina un cierto grado
de desici�n basado en
la informaci�n que recibe.
La forma mas
sencilla de comprender este tema es por medio de ejemplos.
Vamos a crear tres
programas que hagan lo mismo: desplegar un n�mero
determinado de veces
una cadena de caracteres en la pantalla.
- a100
0C1B:0100 jmp 125 ;
brinca a la direcci�n 125H
0C1B:0102 [Enter]
- e 102 'Cadena a
visualizar 15 veces' 0d 0a '$'
- a125
0C1B:0125 MOV
CX,000F ; veces que se desplegara la cadena
0C1B:0128 MOV
DX,0102 ; copia cadena al registro DX
0C1B:012B MOV AH,09
; copia valor 09 al registro AH
0C1B:012D INT 21 ;
despliega cadena
0C1B:012F LOOP 012D
; si CX>0 brinca a 012D
0C1B:0131 INT 20 ;
termina el programa.
������������������������������������� Derechos
Reservados.1995�������������������������������������� 23
������������������������������ UNIVERSIDAD DE GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Por medio del
comando "e" es posible introducir una cadena de caracteres en
una determinada
localidad de memoria, dada como par�metro, la cadena se
introduce entre
comillas, le sigue un espacio, luego el valor hexadecimal
del retorno de
carro, un espacio, el valor de linea nueva y por �ltimo el s'mbolo '$' que el
ensamblador interpreta como final de la cadena. La
interrupci�n 21 utiliza
el valor almacenado en el registro AH para ejecutar
una determinada
funci�n, en este caso mostrar la cadena en pantalla, la
cadena que muestra
es la que est� almacenada en el registro DX. La instrucci�n LOOP decrementa
automaticamente el registro CX en uno y si no ha llegado el valor de este
registro a cero brinca a la casilla indicada como par�metro, lo cual crea un
ciclo que se repite el n�mero de veces especificado por el valor de CX. La
interrupci�n 20 termina la ejecuci�n del programa.
Otra forma de
realizar la misma funci�n pero sin utilizar el comando LOOP es
la siguiente:
- a100
0C1B:0100 jmp 125 ;
brinca a la direcci�n 125H
0C1B:0102 [Enter]
- e 102 'Cadena a
visualizar 15 veces' 0d 0a '$'
- a125
0C1B:0125 MOV
BX,000F ; veces que se desplegara la cadena
0C1B:0128 MOV
DX,0102 ; copia cadena al registro DX
0C1B:012B MOV AH,09
; copia valor 09 al registro AH
0C1B:012D INT 21 ;
despliega cadena
0C1B:012F DEC BX ;
decrementa en 1 a BX
0C1B:0130 JNZ 012D ;
si BX es diferente a 0 brinca a 012D
0C1B:0132 INT 20 ;
termina el programa.
En este caso se
utiliza el registro BX como contador para el programa, y por
medio de la
instrucci�n "DEC" se disminuye su valor en 1. La instrucci�n
"JNZ"
verifica si el valor de B es diferente a 0, esto con base en la
bandera NZ, en caso
afirmativo brinca hacia la direcci�n 012D. En caso
contrario contin�a
la ejecuci�n normal del programa y por lo tanto se
termina.
������������������������������������ Derechos
Reservados.1995����������������������������������� ���24
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Una �tima variante
del programa es utilizando de nuevo a CX como contador,
pero en lugar de
utilizar LOOP utilizaremos decrementos a CX y comparaci�n
de CX a 0.
- a100
0C1B:0100 jmp 125 ;
brinca a la direcci�n 125H
0C1B:0102 [Enter]
- e 102 'Cadena a
visualizar 15 veces' 0d 0a '$'
- a125
0C1B:0125 MOV
DX,0102 ; copia cadena al registro DX
0C1B:0128 MOV
CX,000F ; veces que se desplegara la cadena
0C1B:012B MOV AH,09
; copia valor 09 al registro AH
0C1B:012D INT 21 ;
despliega cadena
0C1B:012F DEC CX ;
decrementa en 1 a CX
0C1B:0130 JCXZ 0134
; si CX es igual a 0 brinca a 0134
0C1B:0132 JMP 012D ;
brinca a la direcci&oaute;n 012D
0C1B:0134 INT 20 ;
termina el programa
En este ejemplo se
us� la instrucci�n JCXZ para controlar la condici�n de
salto, el
significado de tal funci�n es: brinca si CX=0
El tipo de control a
utilizar depender� de las necesidades de programaci�n
en determinado
momento.
Interrupciones
Definici�n de
interrupci�n:
���� Una interrupci�n es una instrucci�n que
detiene la ejecuci�n de un
���� programa para permitir el uso de la UCP a
un proceso prioritario. Una
���� vez concluido este �ltimo proceso se
devuelve el control a la
���� aplicaci�n anterior.
������������������������������������ Derechos
Reservados.1995��������������������������
������������25
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Por ejemplo, cuando
estamos trabajando con un procesador de palabras y en
ese momento llega un
aviso de uno de los puertos de comunicaciones, se
detiene
temporalmente la aplicaci�n que estabamos utilizando para permitir
el uso del
procesador al manejo de la informaci�n que est� llegando en ese
momento. Una vez
terminada la transferencia de informaci�n se reanudan las
funciones normales
del procesador de palabras.
Las interrupciones
ocurren muy seguido, sencillamente la interrupci�n que
actualiza la hora
del d'a ocurre aproximadamente 18 veces por segundo. Para
lograr administrar
todas estas interrupciones, la computadora cuenta con un
espacio de memoria,
llamado memoria baja, donde se almacenan las direcciones de cierta localidad de
memoria donde se encuentran un juego de instrucciones que la UCP ejecutar� para
despues regresar a la aplicaci�n en proceso.
En los programas
anteriores hicimos uso de la interrupcion n�mero 20H para
terminar la
ejecuci�n de nuestros programas, ahora utilizaremos otra
interrupci�n para
mostrar informaci�n en pantalla:
Utilizando Debug
tecleamos:
- a100
2C1B:0100 JMP 011D
2C1B:0102 [ENTER]
- E 102 'Hola, como
estas.' 0D 0A '$'
- A011D
2C1B:011D MOV
DX,0102
2C1B:0120 MOV AH,09
2C1B:0122 INT 21
2C1B:0123 INT 20
En este programa la
interrupci�n 21H manda al monitor la cadena localizada
en la direcci�n a la
que apunta el registro DX.
���������������������������������� Derechos
Reservados.1995�������������������������������������� 26
�
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
El valor que se le
da a AH determina cual de las opciones de la interrupci�n
21H sera utilizada,
ya que esta interrupci�n cuenta con varias opciones.
El manejo directo de
interrupciones es una de las partes mas fuertes del
lenguaje
ensamblador, ya que con ellas es posible controlar eficientemente
todos los
dispositivos internos y externos de una computadora gracias al
completo control que
se tiene sobre operaciones de entrada y salida.
���������������������������������� Derechos
Reservados.1995�������������������������������������� 27
����������������
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Programaci�n en
ensamblador
Requerimientos para
la programaci�n en ensamblador.
���� Software necesario.
���� Utilizaci�n del MASM
���� Uso del enlazador (linker)
Formato de un
programa en ensamblador.
���� Formato interno
���� Formato externo
���� Ejemplo pr�ctico de un programa
Proceso de
ensamblado.
���� Segmentos
���� Tabla de s'mbolos
Tipos de
instrucciones.
���� Movimiento de datos
���� Operaciones l�gicas y aritmticas
���� Saltos, ciclos y procedimientos
Software necesario
Para poder crear un
programa se requieren varias herramientas:
Primero un editor
para crear el programa fuente. Segundo un compilador que no es mas que un
programa que "traduce" el programa fuente a un programa objeto. Y
tercero un enlazador o linker, que genere el programa ejecutable a partir del
programa objeto.
���������������������������������������
Derechos Reservados.1995������������������������������������ 28
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
El editor puede ser
cualquier editor de textos que se tenga a la mano, como
compilador
utilizaremos el MASM (macro ensamblador de Microsoft) ya que es
el mas com�n, y como
enlazador utilizaremos el programa link.
La extensi�n 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
extensi�n .OBJ, este archivo contiene un "formato intermedio"
del programa,
llamado as' porque aun no es ejecutable pero tampoco es ya un
programa en lenguaje
fuente. El enlazador genera, a partir de un archivo
.OBJ o la
combinaci�n de varios de estos archivos, un programa executable,
cuya extensi�n es
usualmente .EXE aunque tambin puede ser .COM, dependiendo de la forma en
que se ensambl�.
Este tutorial
describe la forma de trabajar con la versi�n 5.0 o posterior
del MASM, la
diferencia principal de esta versi�n con otras anteriores es la
forma en que se
declaran los segmentos de c�digo, datos y la pila, pero la
estructura de
programaci�n es la misma.
Utilizaci�n del MASM
Una vez que se cre�
el programa objeto se debe pasar al MASM para crear el
c�digo intermedio,
el cual queda guardado en un archivo con extensi�n .OBJ.
El comando para
realizar esto es:
MASM Nombre_Archivo;
[Enter]
Donde Nombre_Archivo
es el nombre del programa fuente con extensi�n .ASM que se va a traducir.
���������������������������������������
Derechos Reservados.1995������������������ ������������������29
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
El punto y coma
utilizados despues del nombre del archivo le indican al macro ensamblador que
genere directamente el codigo intermedio, de omitirse este caracter el MASM
pedir� el nombre del archivo a traducir, el nombre del archivo que se generar�
as' como opciones de listado de informaci�n que puede proporcionar el
traductor.
Es posible ejecutar
el MASM utilizando par�metros para obtener un fin
determinado, toda la
lista de los mismos se encuentra en el manual del
programa. Solo
recordar en este tutorial la forma de pasar dichos
par�metros al MASM:
Todo par�metro va
despues del simbolo "/". Es posible utilizar varios
par�metros a la vez.
Una vez tecleados todos los par�metros se escribe el
nombre del archivo a
ensamblar. Por ejemplo, si queremos que el MASM
ensamble un programa
llamado prueba, y ademas deseamos que despliege el
numero de lineas
fuente y s'mbolos procesados (eso lo realiza con el
parametro /v), y si
ocurre un error que nos diga en que linea ocurri� (con
el parametro /z),
entonces tecleamos:
MASM /v /z prueba;
Uso del enlazador
(linker)
El MASM unicamente
puede crear programas en formato .OBJ, los cuales no son
ejecutables por si
solos, es necesario un enlazador que genere el c�digo
ejecutable.
La utilizaci�n del
enlazador es muy parecida a la del MASM, unicamente se
teclea en el
indicador del DOS:
LINK Nombre_Archivo
;
��������������������������������������
Derechos Reservados.1995������������������������������������ 30
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Donde Nombre_Archivo
es el nombre del programa intermedio (OBJ). Esto
generara
directamente un archivo con el nombre del programa intermedio y la
extensi�n .EXE
Formato interno de
un programa
Para poder
comunicarnos en cualquier lenguaje, incluyendo los lenguajes de
programaci�n, es
necesario seguir un conjunto de reglas, de lo contrario no
podr'amos expresar
lo que deseamos.
En este apartado
veremos algunas de las reglas que debemos seguir para
escribir un programa
en lenguaje ensamblador, enfocandonos a la forma de
escribir las
instrucciones para que el ensamblador sea capaz de
interpretarlas.
Basicamente el
formato de una linea de c�digo en lenguaje ensamblador consta
de cuatro partes:
�Etiqueta, variable o constante: No siempre es
definida, si se define
es necesario
utilizar separadores para diferenciarla de las otras partes,
usualmente espacios,
o alg�n simbolo especial.
�Directiva o instrucci�n: es el nombre con el
que se conoce a la
instrucci�n que
queremos que se ejecute.
�Operando(s): la mayoria de las instrucciones
en ensamblador trabajan
con dos operandos,
aunque hay instrucciones que funcionan solo con uno. El
primero normalmente
es el operando destino, que es el dep�sito del resultado
de alguna operaci�n;
y el segundo es el operando fuente, que lleva el dato
que sera procesado.
Los operandos se separan uno del otro por medio de una
coma ",".
��������������������� �����������������Derechos Reservados.1995������������������������������������ 31
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
�Comentario: como su nombre lo indica es tan
solo un escrito informativo, usado principalmente para explicar que est�
haciendo el programa en determinada linea; se separa de las otras partes por
medio de un punto y coma ";". Esta parte no es necesaria en el
programa, pero nos ayuda a depurar el programa en caso de errores o
modificaciones.
Como ejemplo podemos
ver una linea de un programa escrito en ensamblador:
Etiq1: MOV AX,001AH
; Inicializa AX con el valor 001A
Aqui tenemos la
etiqueta "Etiq1" (Identificable como etiqueta por el simbolo
final
":"), la instrucci�n "MOV", y los operandos "AX"
como destino y "001A"
como fuente, ademas
del comentario que sigue despues del ";".
Un ejemplo de una
declaraci�n de una constante esta dado por:
UNO EQU 0001H
Donde
"UNO" es el nombre de la constante que definimos, "EQU" es
la
directiva utilizada
para usar a "UNO" como constante, y "0001H" es el
operando, que en
este caso sera el valor que guarde UNO.
Formato Externo de
un programa
Ademas de definir
ciertas reglas para que el ensamblador pueda entender una
instrucci�n es
necesario darle cierta informaci�n de los recursos que se van
a utilizar, como por
ejemplo los segmentos de memoria que se van a utilizar,
datos iniciales del
programa y tambien donde inicia y donde termina nuestro
c�digo.
������������������������������������� Derechos
Reservados.1995������������������������������������ 32
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Un programa sencillo
puede ser el siguiente:
���� .MODEL SMALL
���� .CODE
���� Programa:
���� MOV AX,4C00H
���� INT 21H
���� .STACK
���� END Programa
El programa
realmente no hace nada, unicamente coloca el valor 4C00H en el
registro AX, para
que la interrupci�n 21H termine el programa, pero nos da
una idea del formato
externo en un programa de ensamblador.
La directiva .MODEL
define el tipo de memoria que se utilizar�; la directiva
.CODE nos indica que
lo que esta a continuaci�n es nuestro programa; la
etiqueta Programa
indica al ensamblador el inicio del programa; la directiva
.STACK le pide al
ensamblador que reserve un espacio de memoria para las
operaciones de la
pila; la instrucci�n END Programa marca el final del
programa.
Ejemplo pr�ctico de
un programa
Aqui se
ejemplificar� un programa que escriba una cadena en pantalla:
.MODEL SMALL
.CODE
Programa:
MOV AX, @DATA
MOV DS, AX
MOV DX, Offset Texto
���������������������������� ���������Derechos Reservados.1995������������������������������������ 33
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
MOV AH, 9
INT 21H
MOV AX,4C00H
INT 21H
.DATA
Texto DB 'Mensaje en
pantalla.$'
.STACK
END Programa
Los primeros pasos
son iguales a los del programa anterior: se define el
modelo de memoria,
se indica donde inicia el c�digo del programa y en donde
comienzan las
instrucciones.
A continuaci�n se
coloca @DATA en el registro AX para despues pasarlo al
registro DS ya que
no se puede copiar directamente una constante a un
registro de
segmento. El contenido de @DATA es el n�mero del segmento que
ser� utilizado para
los datos. Luego se guarda en el registro DX un valor dado por "Offset
Texto" que nos da la direcci�n donde se encuentra la cadena de caracteres
en el segmento de datos. Luego utiliza la opci�n 9 (Dada por el valor de AH) de
la interrupci�n 21H para desplegar la cadena posicionada en la direcci�n que
contiene DX. Por �ltimo utiliza la opci�n 4CH de la interrupci�n 21H para
terminar la ejecuci�n del programa (aunque cargamos al registro AX el valor
4C00H la interrupci�n 21H solo toma como opci�n el contenido del registro AH).
La directiva .DATA
le indica al ensamblador que lo que est� escrito a
continuaci�n debe
almacenarlo en el segmento de memoria destinado a los
datos. La directiva
DB es utilizada para Definir Bytes, sto es, asignar a
cierto identificador
(en este caso "Texto") un valor, ya sea una constante o
una cadena de
caracteres, en este �ltimo caso deber� estar entre comillas
sencillas ' y
terminar con el simbolo "$".
������������������������������������� Derechos
Reservados.1995������������������������������������ 34
��������������� ���������������UNIVERSIDAD DE GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Segmentos
La arquitectura de
los procesadores x86 obliga al uso de segmentos de
memoria para manejar
la informaci�n, el tama�o de estos segmentos es de
64kb.
La raz�n de ser de
estos segmentos es que, considerando que el tama�o m�ximo de un n�mero que
puede manejar el procesador esta dado por una palabra de 16 bits o registro, no
ser'a posible accesar a m�s de 65536 localidades de memoria utilizando uno solo
de estos registros, ahora, si se divide la memoria de la pc en grupos o
segmentos, cada uno de 65536 localidades, y utilizamos una direcci�n en un
registro exclusivo para localizar cada segmento, y entonces cada direcci�n de
una casilla espec'fica la formamos
con dos registros,
nos es posible accesar a una cantidad de 4294967296 bytes
de memoria, lo cual
es, en la actualidad, m�s memoria de la que veremos
instalada en una PC.
Para que el
ensamblador pueda manejar los datos es necesario que cada dato o
instrucci�n se
encuentren localizados en el �rea que corresponde a sus
respectivos
segmentos. El ensamblador accesa a esta informaci�n tomando en
cuenta la
localizaci�n del segmento, dada por los registros DS, ES, SS y CS,
y dentro de dicho
registro la direcci�n del dato espec'fico. Es por ello que
cuando creamos un
programa empleando el Debug en cada linea que vamos
ensamblando aparce
algo parecido a lo siguiente:
1CB0:0102 MOV AX,BX
En donde el primer
n�mero, 1CB0, corresponde al segmento de memoria que se est� utilizando, el
segundo se refiere la la direcci�n dentro de dicho
segmento, y a
continuaci�n aparecen las instrucciones que se almacenaran a
partir de esa
direcci�n.
������������������������������������� Derechos
Reservados.1995������������������������������������ 35
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
La forma de
indicarle al ensamblador con cuales de los segmentos se va a
trabajar es por
medio de las directivas .CODE, .DATA y .STACK.
El ensamblador se
encarga de ajustar el tama�o de los segmentos tomando como base el n�mero de
bytes que necesita cada instrucci�n que va ensamblando, ya que ser'a un
desperdicio de memoria utilizar los segmentos completos. Por ejemplo, si un
programa unicamente necesita 10kb para almacenar los datos, el segmento de
datos unicamente sera de 10kb y no de los 64kb que puede manejar.
Tabla de s'mbolos
A cada una de las
partes de una linea de c�digo en ensamblador se le conoce
como token, por
ejemplo en la linea de c�digo
MOV AX,Var
tenemos tres tokens,
la instrucci�n MOV, el operando AX, y el operando VAR.
El ensamblador lo
que hace para generar el c�digo OBJ es leer cada uno de
los tokens y
buscarlo en una tabla interna de "equivalencias" conocida como
tabla de palabras
reservadas, que es donde se encuentran todos los
significados de los
mnem�nicos que utilizamos como instrucciones.
Siguiendo este
proceso, el ensamblador lee MOV, lo busca en su tabla y al
encontrarlo lo
identifica como una instrucci�n del procesador, asi mismo lee
AX y lo reconoce
como un registro del procesador, pero al momento de buscar
el token Var en la
tabla de palabras reservadas no lo encuentra y entonces
lo busca en la tabla
de s'mbolos que es una tabla donde se encuentran los
nombres de las
variables, constantes y etiquetas utilizadas en el programa
donde se incluye su
direcci�n en memoria y el tipo de datos que contiene.
������������������������������������ Derechos
Reservados.1995������������������������������������ 36
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Algunas veces el
ensamblador se encuentra con algun token no definido en el
programa, lo que
hace en estos casos es dar una segunda pasada por el
programa fuente para
verificar todas las referencias a ese s'mbolo y
colocarlo en la
tabla de s'mbolos. Existen s'mbolos que no los va a
encontrar ya que no
pertenecen a ese segmento y el programa no sabe en que
parte de la memoria
se encontrara dicho segmento, en este momento entra en
acci�n el enlazador,
el cual crea la estructura que necesita el cargador
para que el segmento
y el token sean definidos cuando se cargue el programa
y antes de que el
mismo sea ejecutado.
Movimiento de datos
En todo programa es
necesario mover datos en la memoria y en los registros
de la UCP; existen
diversas formas de hacer esto: puede copiar datos de la
memoria a algun
registro, de registro a registro, de un registro a una pila,
de la pila a un
registro, transmitir datos hacia dispositivos externos asi
como recibir datos
de dichos dispositivos.
Este movimiento de
datos est� sujeto a reglas y restricciones. Algunas de
ellas son las que se
citan a continuaci�n.
�No es posible mover datos de una localidad de
memoria a otra
directamente, es
necesario primero mover los datos de la localidad origen
hacia un registro y
luego del registro a la localidad destino.
�No se puede mover una constante directamente
a un registro de
segmentos, primero
se debe mover a un registro de la UCP.
����������������������������������� Derechos
Reservados.1995������������������������������������ 37
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Es posible mover
bloques de datos por medio de las instrucciones movs, que
copia una cadena de
bytes o palabras; movsb que copia n bytes de una
localidad a otra; y
movsw copia n palabras de una localidad a otra. Las dos
�ltimas
instrucciones toman los valores de las direcciones definidas por
DS:SI como grupo de
datos a mover y ES:DI como nueva localizaci�n de los
datos.
Para mover los datos
tambien existen las estructuras llamadas pilas, en este
tipo de estructuras
los datos se introducen con la instrucci�n push y se
extraen con la
instrucci�n pop
En una pila el
primer dato introducido es el �ltimo que podemos sacar, esto
es, si en nuestro
programa utilizamos las instrucciones:
PUSH AX
PUSH BX
PUSH CX
Para devolver los
valores correctos a cada registro al momento de sacarlos
de la pila es
necesario hacerlo en el siguiente orden:
POP CX
POP BX
POP AX
Para la comunicaci�n
con dispositivos externos se utilizan el comando out
para mandar
informaci�n a un puerto y el comando in para leer informaci�n
recibida desde algun
puerto.
La sintaxis del
comando out es:
OUT DX,AX
����������������������������������� Derechos
Reservados.1995������������������������������������ 38
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Donde DX contiene el
valor del puerto que se utilizar� para la comunicaci�n
y AX contiene la
informaci�n que se mandar�.
La sintaxis del
comando in es:
IN AX,DX
Donde AX es el
registro donde se guardar� la informaci�n que llegue y DX
contiene la
direcci�n del puerto por donde llegar� la informaci�n.
Operaciones l�gicas
y aritmticas
Las instrucciones de
las operaciones l�gicas son: and, not, or y xor, stas
trabajan sobre los
bits de sus operandos.
Para verificar el
resultado de operaciones recurrimos a las instrucciones
cmp y test.
Las instrucciones
utilizadas para las operaciones algebraicas son: para
sumar add, para
restar sub, para multiplicar mul y para dividir div.
Casi todas las
instrucciones de comparaci�n est�n basadas en la informaci�n
contenida en el
registro de banderas. Normalmente las banderas de este
registro que pueden
ser directamente manipuladas por el programador son la
bandera de direcci�n
de datos DF, usada para definir las operaciones sobre
cadenas. Otra que
tambien puede ser manipulada es la bandera IF por medio de las instrucciones
sti y cli, para activar y desactivar respectivamente las
interrupciones.
����������������������������������� Derechos
Reservados.1995����������� �������������������������39
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Saltos, ciclos y
procedimientos
Los saltos
incondicionales en un programa escrito en lenguaje ensamblador
est�n dados por la
instrucci�n jmp, un salto es alterar el flujo de la
ejecuci�n de un
programa enviando el control a la direcci�n indicada.
Un ciclo, conocido
tambien como iteraci�n, es la repetici�n de un proceso un
cierto n�mero de
veces hasta que alguna condici�n se cumpla. En estos ciclos
se utilizan los
brincos "condicionales" basados en el estado de las
banderas. Por
ejemplo la instrucci�n jnz que salta solamente si el resultado
de una operaci�n es
diferente de cero y la instrucci�n jz que salta si el
resultado de la
operaci�n es cero.
Por �ltimo tenemos
los procedimientos o rutinas, que son una serie de pasos
que se usaran
repetidamente en el programa y en lugar de escribir todo el
conjunto de pasos
unicamente se les llama por medio de la instrucci�n call.
Un procedimiento en
ensamblador es aquel que inicie con la palabra Proc y
termine con la
palabra ret.
Realmente lo que
sucede con el uso de la instrucci�n call es que se guarda
en la pila el
registro IP y se carga la direcci�n del procedimiento en el
mismo registro,
conociendo que IP contiene la localizaci�n de la siguiente
instrucci�n que
ejecutara la UCP, entonces podemos darnos cuenta que se
desv'a el flujo del
programa hacia la direcci�n especificada en este
registro. Al momento
en que se llega a la palabra ret se saca de la pila el
valor de IP con lo
que se devuelve el control al punto del programa donde se
invoc� al
procedimiento.
Es posible llamar a
un procedimiento que se encuentre ubicado en otro
segmento, para
sto el contenido de CS (que nos indica que segmento se est�
utilizando) es
empujado tambin en la pila.
����������������������������������� Derechos
Reservados.1995���� ��������������������������������40
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
Instrucciones de
operaci�n sobre datos
Instrucciones de
transferencia
Son utilizadas para
mover los contenidos de los operandos. Cada instrucci�n
se puede usar con
diferentes modos de direccionamiento.
���� MOV
���� MOVS (MOVSB) (MOVSW)
Instrucciones de
carga
Son instrucciones
espec'ficas de los registros. Son usadas para cargar en
alg�n registro bytes
o cadenas de bytes.
���� LODS (LODSB) (LODSW)
���� LAHF
���� LDS
���� LEA
���� LES
Instrucciones de la
pila
Estas instrucciones
permiten el uso de la pila para almacenar y extraer
datos.
���� POP
���� POPF
���� PUSH
���� PUSHF
Instrucci�n MOV
Prop�sito:
Transferencia de datos entre celdas de memoria, registros y
acumulador.
������������������������������������� Derechos
Reservados.1995������������������������������������ 41
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
Sintaxis:
MOV Destino,Fuente
Donde Destino es el
lugar a donde se mover�n los datos y fuente es el lugar
donde se encuentran
dichos datos.
Los diferentes
movimientos de datos permitidos para esta instrucci�n son:
�Destino: memoria. Fuente: acumulador
�Destino: acumulador. Fuente: memoria
�Destino: registro de segmento. Fuente:
memoria/registro
�Destino: memoria/registro. Fuente: registro
de segmento
�Destino: registro. Fuente: registro
�Destino: registro. Fuente: memoria
�Destino: memoria. Fuente: registro
�Destino: registro. Fuente: dato inmediato
�Destino: memoria. Fuente: dato inmediato
Ejemplo:
MOV AX,0006h
MOV BX,AX
MOV AX,4C00h
INT 21H
Este peque�o
programa mueve el valor 0006H al registro AX, luego mueve el
contenido de AX
(0006h) al registro BX, por �ltimo mueve el valor 4C00h al
registro AX para
terminar la ejecuci�n con la opci�n 4C de la interrupci�n
21h.
��������������������������������������
Derechos Reservados.1995������������������������������������ 42
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
Instrucci�n MOVS (MOVSB)
(MOVSW)
Prop�sito: Mover
cadenas de bytes o palabras desde la fuente, direccionada
por SI, hasta el
destino direccionado por DI.
Sintaxis:
MOVS
Este comando no
necesita parametros ya que toma como direcci�n fuente el
contenido del
registro SI y como destino el contenido de DI. La secuencia de
instrucciones
siguiente ilustran esto:
MOV SI, OFFSET VAR1
MOV DI, OFFSET VAR2
MOVS
Primero
inicializamos los valores de SI y DI con las direcciones de las
variables VAR1 y
VAR2 respectivamente, despues al ejecutar MOVS se copia el
contenido de VAR1 a
VAR2.
Los comandos MOVSB y
MOVSW se utilizan de la misma forma que MOVS, el
primero mueve un
byte y el segundo una palabra.
Instrucci�n LODS
(LODSB) (LODSW)
Prop�sito: Cargar
cadenas de un byte o palabra al acumulador.
��������������������������������������
Derechos Reservados.1995������������������������������������ 43
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
Sintaxis:
LODS
Esta instrucci�n
toma la cadena que se encuentre en la direcci�n especificada por SI, la carga
al registro AL (o AX) y suma o resta 1 (segun el estado de DF) a SI si la
transferencia es de bytes o 2 si la transferencia es de palabras.
MOV SI, OFFSET VAR1
LODS
La primer linea
carga la direcci�n de VAR1 en SI y la segunda linea lleva el
contenido de esa
localidad al registro AL.
Los comandos LODSB y
LODSW se utilizan de la misma forma, el primero carga
un byte y el segundo
una palabra (utiliza el registro completo AX).
Instrucci�n LAHF
Prop�sito:
Transfiere al registro AH el contenido de las banderas
Sintaxis:
LAHF
Esta instrucci�n es
�til para verificar el estado de las banderas durante la
ejecuci�n de nuestro
programa.
��������������������������������������
Derechos Reservados.1995������������������������������������ 44
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
Las banderas quedan en
el siguiente orden dentro del registro:
SF ZF �? AF �? PF �?
CF
El simbolo
"�?" significa que en esos bits habr�. un valor indefinido.
Instrucci�n LDS
Prop�sito: Cargar el
registro del segmento de datos
Sintaxis:
LDS destino, fuente
El operando fuente
debe ser una palabra doble en memoria. La palabra
asociada con la
direcci�n mas grande es transferida a DS, o sea que se toma
como la direcci�n
del segmento. La palabra asociada con la direcci�n menor
es la direcci�n del
desplazamiento y se deposita en el registro se�alado
como destino.
Instrucci�n LEA
Prop�sito: Carga la
direcci�n del operando fuente.
Sintaxis:
LEA destino, fuente
��������������������������������������
Derechos Reservados.1995������������������������������������ 45
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
El operando fuente
debe estar ubicado en memoria, y se coloca su
desplazamiento en el
registro 'ndice o apuntador especificado en destino.
Para ilustrar una de
las facilidades que tenemos con este comando pongamos
una equivalencia:
MOV SI, OFFSET VAR1
Equivale a:
LEA SI, VAR1
Es muy probable que
para el programador sea mas sencillo crear programas
extensos utilizando
este �ltimo formato.
Instrucci�n LES
Prop�sito: Carga el
registro del segmento extra
Sintaxis:
LES destino, fuente
El operando fuente
debe ser un operando en memoria de palabra doble. El
contenido de la
palabra con la direcci�n mayor se interpreta como la
direcci�n del
segmento y se coloca en ES. La palabra con la direcci�n menor
es la direcci�n del
desplazamiento y se coloca en el registro especificado
en el par�metro
destino.
��������������������������������������
Derechos Reservados.1995������������������������������������ 46
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
Instrucci�n POP
Prop�sito: Recupera
un dato de la pila
Sintaxis:
POP destino
Esta instrucci�n
transfiere el �ltimo valor almacenado en la pila al
operando destino,
despues incrementa en dos el registro SP.
Este incremento se
debe a que la pila va creciendo desde la direcci�n mas
alta de memoria del
segmento hacia la mas baja, y la pila solo trabaja con
palabras (2 bytes),
entonces al incrementar en dos el registro SP realmente
se le esta restando
dos al tama�o real de la pila.
Instrucci�n POPF
Prop�sito: Extrae
las banderas almacenadas en la pila.
Sintaxis:
POPF
Este comando
transfiere bits de la palabra almacenada en la parte superior
de la pila hacia el
registro de banderas.
��������������������������������������
Derechos Reservados.1995������ ������������������������������47
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
La forma de
transferencia es la siguiente:
�BIT�
BANDERA
�� 0����
CF
�� 2����
PF
�� 4����
AF
�� 6����
ZF
�� 7����
SF
�� 8����
TF
�� 9����
IF
� 10����
DF
� 11����
OF
Estas localizaciones
son las mismas para el comando PUSHF
Una vez hecha la
transferencia se incrementa en 2 el registro SP
disminuyendo as' el
tama�o de la pila.
Instrucci�n PUSH
Prop�sito: Coloca
una palabra en la pila.
Sintaxis:
PUSH fuente
La instrucci�n PUSH
decrementa en dos el valor de SP y luego transfiere el
contenido del
operando fuente a la nueva direcci�n resultante en el registro
recin
modificado.
��������������������������������������
Derechos Reservados.1995������������������������������������ 48
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
El decremento en la
direcci�n se debe a que al agregar valores a la pila
sta crece de
la direcci�n mayor a la direcci�n menor del segmento, por lo
tanto al restarle 2
al valor del registro SP lo que hacemos es aumentar el
tama�o de la pila en
dos bytes, que es la �nica cantidad de informaci�n que
puede manejar la
pila en cada entrada y salida de datos.
Instrucci�n PUSHF
Prop�sito: Coloca el
valor de las banderas en la pila
Sintaxis:
PUSHF
Este comando
decrementa en 2 el valor del registro SP y luego se transfiere
el contenido del
registro de banderas a la pila, en la direcci�n indicada
por SP.
Las banderas quedan
almacenadas en memoria en los mismos bits indicados en
el comando POPF
��������������������������������������
Derechos Reservados.1995�����������
�������������������������49
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Instrucciones
l�gicas y aritmticas
Instrucciones
l�gicas.
Son utilizadas para
realizar operaciones l�gicas sobre los operandos.
���� AND
���� NEG
���� NOT
���� OR
���� TEST
���� XOR
Instrucciones
aritmticas.
Se usan para
realizar operaciones aritmticas sobre los operandos.
���� ADC
���� ADD
���� DIV
���� IDIV
���� MUL
���� IMUL
���� SBB
���� SUB
Instrucci�n AND
Prop�sito: Realiza
la conjunci�n de los operandos bit por bit.
��������������������������������������
Derechos Reservados.1995������������������������������������� 50
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Sintaxis:
AND destino, fuente
Con esta instrucci�n
se lleva a cabo la operaci�n "y" l�gica de los dos
operandos:
�Fuente�
Destino | Destino
�--------------------------
��� 1������
1��� |��� 1
��� 1������
0��� |��� 0
��� 0������
1��� |��� 0
��� 0������
0��� |��� 0
El resultado de la
operaci�n se almacena en el operando destino.
�
Instrucci�n NEG
�
Prop�sito: Genera el
complemento a 2
Sintaxis:
NEG destino
Esta instrucci�n
genera el complemento a 2 del operando destino y lo
almacena en este
mismo operando. Por ejemplo, si AX guarda el valor de
1234H, entonces:
NEG AX
�������������������������������� ������Derechos Reservados.1995������������������������������������� 51
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Nos dejar'a
almacenado en el registro AX el valor EDCCH.
Instrucci�n NOT
Prop�sito: Lleva a
cabo la negaci�n bit por bit del operando destino.
Sintaxis:
NOT destino
El resultado se
guarda en el mismo operando destino.
Instrucci�n OR
Prop�sito: OR
inclusivo l�gico
Sintaxis:
OR destino, fuente
La instrucci�n OR
lleva a cabo, bit por bit, la disyunci�n inclusiva l�gica
de los dos
operandos:
�Fuente�
Destino | Destino
�--------------------------
��� 1������
1��� |��� 1
��� 1������
0��� |��� 1
��� 0������
1��� |��� 1
��� 0������
0��� |��� 0
����� ���������������������������������Derechos Reservados.1995������������������������������������� 52
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Instrucci�n TEST
Prop�sito: Comparar
logicamente los operandos
Sintaxis:
TEST destino, fuente
Realiza una
conjunci�n, bit por bit, de los operandos, pero a diferencia de
AND esta instrucci�n
no coloca el resultado en el operando destino, solo
tiene efecto sobre
el estado de las banderas.
Instrucci�n XOR
Prop�sito: OR
exclusivo
Sintaxis:
XOR destino, fuente
Su funci�n es
efectuar bit por bit la disyunci�n exclusiva l�gica de los dos
operandos.
�Fuente�
Destino | Destino
�--------------------------
��� 1������
1��� |��� 0
��� 0������
0��� |��� 1
��� 0������
1��� |��� 1
��� 0������
0��� |��� 0
��������������������������������������
Derechos Reservados.1995������������������������������������� 53
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Instrucci�n ADC
Prop�sito: Adici�n
con acarreo.
Sintaxis:
ADC destino, fuente
Lleva a cabo la suma
de dos operandos y suma uno al resultado en caso de que
la bandera CF
est activada, esto es, en caso de que exista acarreo.
El resultado se
guarda en el operando destino.
Instrucci�n ADD
Prop�sito: Adici�n
de los operandos.
Sintaxis:
ADD destino, fuente
Suma los dos
operandos y guarda el resultado en el operando destino.
Instrucci�n DIV
Prop�sito: Divisi�n
sin signo
��������������������������������������
Derechos Reservados.1995������������������������������������� 54
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Sintaxis:
DIV fuente
El divisor puede ser
un byte o palabra y es el operando que se le da a la
instrucci�n.
Si el divisor es de
8 bits se toma como dividendo el registro de 16 bits AX
y si el divisor es
de 16 bits se tomara como dividendo el registro par
DX:AX, tomando como
palabra alta DX y como baja AX.
Si el divisor
fu un byte el cociente se almacena en el registro AL y el
residuo en AH, si
fu una palabra el cociente se guarda en AX y el residuo
en DX.
Instrucci�n IDIV
Prop�sito: Divisi�n
con signo
Sintaxis:
IDIV fuente
Consiste basicamente
en lo mismo que la instrucci�n DIV, solo que esta
�ltima realiza la
operaci�n con signo.
Para sus resultados
utiliza los mismos registros que la instrucci�n DIV.
������������������������������������� Derechos
Reservados.1995������������������������������������� 55
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Instrucci�n MUL
Prop�sito:
Multiplicaci�n sin signo
Sintaxis:
MUL fuente
El ensamblador asume
que el multiplicando sera del mismo tama�o que el del
multiplicador, por
lo tanto multiplica el valor almacenado en el registro que se le da como
operando por el que se encuentre contenido en AH si el multiplicador es de 8
bits o por AX si el multiplicador es de 16 bits.
Cuando se realiza
una multiplicaci�n con valores de 8 bits el resultado se
almacena en el
registro AX y cuando la multiplicaci�n es con valores de 16
bits el resultado se
almacena en el registro par DX:AX.
Instrucci�n IMUL
Prop�sito:
Multiplicaci�n de dos enteros con signo.
Sintaxis:
IMUL fuente
Este comando hace lo
mismo que el anterior, solo que si toma en cuenta los
signos de las
cantidades que se multiplican.
������������������������������������� Derechos
Reservados.1995������������������������������������� 56
���������������� ��������������UNIVERSIDAD DE GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Los resultados se
guardan en los mismos registros que en la instrucci�n MOV.
Instrucci�n SBB
Prop�sito:
Substracci�n con acarreo
Sintaxis:
SBB destino, fuente
Esta instrucci�n
resta los operandos y resta uno al resultado si CF est�
activada. El
operando fuente siempre se resta del destino.
Este tipo de
substracci�n se utiliza cuando se trabaja con cantidades de 32
bits.
Instrucci�n SUB
Prop�sito:
Substracci�n
Sintaxis:
SUB destino, fuente
Resta el operando
fuente del destino.
������������������������������������� Derechos
Reservados.1995������������������������������������� 57
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Instrucciones
l�gicas y aritmticas
Instrucciones de
salto
Son utilizadas para
transferir el flujo del proceso al operando indicado.
���� JMP
���� JA (JNBE)
���� JAE (JNBE)
���� JB (JNAE)
���� JBE (JNA)
���� JE (JZ)
���� JNE (JNZ)
���� JG (JNLE)
���� JGE (JNL)
���� JL (JNGE)
���� JLE (JNG)
���� JC
���� JNC
���� JNO
���� JNP (JPO)
���� JNS
���� JO
���� JP (JPE)
���� JS
Instrucciones para
ciclos: LOOP
Transfieren el flujo
del proceso, condicional o incondicionalmente, a un
destino repitiendose
esta acci�n hasta que el contador sea cero.
���� LOOP
���� LOOPE
���� LOOPNE
Instrucciones de
conteo
�������������������������� �����������Derechos Reservados.1995������������������������������������� 58
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Se utilizan para
decrementar o incrementar el contenido de los contadores.
���� DEC
���� INC
Instrucciones de
comparaci�n
Son usadas para
comparar operandos, afectan al contenido de las banderas.
���� CMP
���� CMPS (CMPSB) (CMPSW)
Instrucciones de
banderas
Afectan directamente
al contenido de las banderas.
���� CLC
���� CLD
���� CLI
���� CMC
���� STC
���� STD
���� STI
Instrucci�n JMP
Prop�sito: Salto
incondicional
Sintaxis:
JMP destino
Esta instrucci�n se
utiliza para desviar el flujo de un programa sin tomar
en cuenta las
condiciones actuales de las banderas ni de los datos.
������������������������������������� Derechos
Reservados.1995������������������������������������� 59
��������������������� ����������UNIVERSIDAD DE GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Instrucci�n JA
(JNBE)
Prop�sito: Brinco
condicional
Sintaxis:
JA Etiqueta
Despus de una
comparaci�n este comando salta si est� arriba o salta si no
est� abajo o si no
es igual.
Esto significa que
el salto se realiza solo si la bandera CF esta
desactivada o si la
bandera ZF esta desactivada (que alguna de las dos sea
igual a cero).
Instrucci�n JAE
(JNB)
Prop�sito: salto
condicional
Sintaxis:
JAE etiqueta
Salta si est� arriba
o si es igual o salta si no est� abajo.
El salto se efectua
si CF esta desactivada.
������������������������������������� Derechos
Reservados.1995������������������������������������� 60
����������������� ��������������UNIVERSIDAD DE GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Instrucci�n JB
(JNAE)
Prop�sito: salto
condicional
Sintaxis:
JB etiqueta
Salta si est� abajo
o salta si no est� arriba o si no es igual.
Se efect�a el salto
si CF esta activada.
Instrucci�n JBE
(JNA)
Prop�sito: salto
condicional
Sintaxis:
JBE etiqueta
Salta si est� abajo
o si es igual o salta si no est� arriba.
El salto se efect�a
si CF est� activado o si ZF est� activado (que
cualquiera sea igual
a 1).
������������������������������������� Derechos
Reservados.1995������������������������������������� 61
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Instrucci�n JE (JZ)
Prop�sito: salto
condicional
Sintaxis:
JE etiqueta
Salta si es igual o
salta si es cero.
El salto se realiza
si ZF est� activada.
Instrucci�n JNE
(JNZ)
Prop�sito: salto
condicional
Sintaxis:
JNE etiqueta
Salta si no es igual
o salta si no es cero.
El salto se efectua
si ZF est� desactivada.
Instrucci�n JG
(JNLE)
Prop�sito: salto
condicional, se toma en cuenta el signo.
������������������������������������� Derechos
Reservados.1995������������������� ������������������62
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Sintaxis:
JG etiqueta
Salta si es m�s
grande o salta si no es menor o igual.
El salto ocurre si
ZF = 0 u OF = SF.
Instrucci�n JGE
(JNL)
Prop�sito: salto
condicional, se toma en cuenta el signo.
Sintaxis:
JGE etiqueta
Salta si es m�s
grande o igual o salta si no es menor que.
El salto se realiza
si SF = OF
Instrucci�n JL
(JNGE)
Prop�sito: salto
condicional, se toma en cuenta el signo.
Sintaxis:
JL etiqueta
��������������������������������������
Derechos Reservados.1995������������������������������������� 63
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Salta si es menor
que o salta si no es mayor o igual.
El salto se efect�a
si SF es diferente a OF.
Instrucci�n JLE
(JNG)
Prop�sito: salto
condicional, se toma en cuenta el signo.
Sintaxis:
JLE etiqueta
Salta si es menor o
igual o salta si no es m�s grande.
El salto se realiza
si ZF = 1 o si SF es diferente a OF
Instrucci�n JC
Prop�sito: salto
condicional, se toman en cuenta las banderas.
Sintaxis:
JC etiqueta
Salta si hay
acarreo.
El salto se realiza
si CF = 1
��������������������������������������
Derechos Reservados.1995������������������������������������� 64
������������ �������������������UNIVERSIDAD DE GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Instrucci�n JNC
Prop�sito: salto
condicional, se toma en cuenta el estado de las banderas.
Sintaxis:
JNC etiqueta
Salta si no hay
acarreo.
El salto se efect�a
si CF = 0.
Instrucci�n JNO
Prop�sito: salto
condicional, se toma en cuenta el estado de las banderas.
Sintaxis:
JNO etiqueta
Salta si no hay
desbordamiento.
El salto se efectua
si OF = 0.
Instrucci�n JNP
(JPO)
Prop�sito: salto
condicional, toma en cuenta el estado de las banderas.
��������������������������������������
Derechos Reservados.1995������������������������������������� 65
������������������������������� UNIVERSIDAD DE
GUADALAJARA
��� ����������������Coordinaci�n General de Sistemas de Informaci�n.
Sintaxis:
JNP etiqueta
Salta si no hay
paridad o salta si la paridad es non.
El salto ocurre si
PF = 0.
Instrucci�n JNS
Prop�sito: salto
condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JNP etiqueta
Salta si el signo
esta desactivado.
El salto se efect�a
si SF = 0.
Instrucci�n JO
Prop�sito: salto
condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JO etiqueta
��������������������������������������
Derechos Reservados.1995������������������������������������� 66
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Salta si hay desbordamiento
(overflow).
El salto se realiza
si OF = 1.
Instrucci�n JP (JPE)
Prop�sito: salto
condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JP etiqueta
Salta si hay paridad
o salta si la paridad es par.
El salto se efect�a
si PF = 1.
Instrucci�n JS
Prop�sito: salto
condicional, toma en cuenta el estado de las banderas.
Sintaxis:
JS etiqueta
Salta si el signo
est� prendido.
El salto se efect�a
si SF = 1.
��������������������������������������
Derechos Reservados.1995������������������������������������� 67
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Instrucci�n LOOP
Prop�sito: Generar
un ciclo en el programa.
Sintaxis:
LOOP etiqueta
La instrucci�n loop
decrementa CX en 1, y transfiere el flujo del programa a
la etiqueta dada
como operando si CX es diferente a 1.
Instrucci�n LOOPE
Prop�sito: Generar
un ciclo en el programa considerando el estado de ZF
Sintaxis:
LOOPE etiqueta
Esta instrucci�n
decrementa CX en 1. Si CX es diferente a cero y ZF es igual
a 1, entonces el
flujo del programa se transfiere a la etiqueta indicada
como operando.
Instrucci�n LOOPNE
Prop�sito: Generar
un ciclo en el programa, considerando el estado de ZF
��������������������������������������
Derechos Reservados.1995������������������������������������� 68
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Sintaxis:
LOOPNE etiqueta
Esta instrucci�n
decrementa en uno a CX y transfiere el flujo del programa
solo si ZF es
diferente a 0.
Instrucci�n DEC
Prop�sito:
Decrementar el operando
Sintaxis:
DEC destino
Esta operaci�n resta
1 al operando destino y almacena el nuevo valor en el
mismo oeprando.
Instrucci�n INC
Prop�sito:
Incrementar el operando.
Sintaxis:
INC destino
��������������������������������������
Derechos Reservados.1995������������������������������������� 69
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
La instrucci�n suma
1 al operando destino y guarda el resultado en el mismo
operando destino.
Instrucci�n CMP
Prop�sito: Comparar
los operandos.
Sintaxis:
CMP destino, fuente
Esta instrucci�n
resta el operando fuente al operando destino pero sin que
ste almacene el
resultado de la operaci�n, solo se afecta el estado de las
banderas.
Instrucci�n CMPS
(CMPSB) (CMPSW)
Prop�sito: Comparar
cadenas de un byte o palabra.
Sintaxis:
CMP destino, fuente
Con esta instrucci�n
la cadena de caracteres fuente se resta de la cadena
destino.
��������������������������������������
Derechos Reservados.1995������������������������������������� 70
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Se utilizan DI como
indice para el segmento extra de la cadena fuente y SI
como indice de la
cadena destino.
Solo se afecta el
contenido de las banderas y tanto DI como SI se
incrementan.
Instrucci�n CLC
Prop�sito: Limpiar
bandera de acarreo.
Sintaxis:
CLC
Esta instrucci�n
apaga el bit correspondiente a la bandera de acarreo, o
sea, lo pone en
cero.
Instrucci�n CLD
Prop�sito: Limpiar
bandera de direcci�n
Sintaxis:
CLD
La instrucci�n CLD
pone en cero el bit correspondiente a la bandera de
direcci�n.
��������������������������������������
Derechos Reservados.1995������������������������������������� 71
������������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Instrucci�n CLI
Prop�sito: Limpiar
bandera de interrupci�n
Sintaxis:
CLI
CLI pone en cero la
bandera de interrupciones, desabilitando as' aquellas
interrupciones
enmascarables.
Una interrupci�n
enmascarable es aquella cuyas funciones son desactivadas
cuando IF = 0.
Instrucci�n CMC
Prop�sito:
Complementar la bandera de acarreo.
Sintaxis:
CMC
Esta instrucci�n
complementa el estado de la bandera CF, si CF = 0 la
instrucci�n la
iguala a 1, y si es 1 la instrucci�n la iguala a 0.
Podemos decir que
unicamente "invierte" el valor de la bandera.
��������������������������������������
Derechos Reservados.1995������������������������������������� 72
������������������������� ������UNIVERSIDAD DE GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Instrucci�n STC
Prop�sito: Activar
la bandera de acarreo.
Sintaxis:
STC
Esta instrucci�n
pone la bandera CF en 1.
Instrucci�n STD
Prop�sito: Activar
la bandera de direcci�n.
Sintaxis:
STD
La instrucci�n STD
pone la bandera DF en 1.
Instrucci�n STI
Prop�sito: Acticar
la bandera de interrupci�n.
Sintaxis:
STI
La instrucci�n
activa la bandera IF, esto habilita las interrupciones
externas
enmascarables (las que funcionan unicamente cuando IF = 1 ).
��������������������������������������
Derechos Reservados.1995������������������������������������� 73
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Interrupciones
Interrupciones
internas de hardware
Interrupciones
externas de hardware
Interrupciones de
software
Interrupciones mas
usuales:
���� Int 21H (interrupci�n del DOS)
���� Multiples llamadas a funciones del DOS.
���� Int 10H (interrupci�n del BIOS)
���� Entrada/salida de video.
���� Int 16H (Interrupci�n del BIOS)
���� Entrada/salida de teclado.
���� Int 17H (Interrupci�n del BIOS)
���� Entrada/salida de la impresora.
Interrupciones
internas de hardware
Las interrupciones
internas son generadas por ciertos eventos que surgen
durante la ejecuci�n
de un programa.
Este tipo de
interrupciones son manejadas en su totalidad por el hardware y
no es posible
modificarlas.
�������������������������������������� Derechos Reservados.1995������������������������������������� 74
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Un ejemplo claro de
este tipo de interrupciones es la que actualiza el contador del reloj interno
de la computadora, el hardware hace el llamado a esta interrupci�n varias veces
durante un segundo para mantener la hora actualizada.
Aunque no podemos
manejar directamente esta interrupci�n (no podemos
controlar por
software las actualizaciones del reloj), es posible utilizar sus efectos en la
computadora para nuestro beneficio, por ejemplo para crear
un "reloj
virtual" actualizado continuamente gracias al contador del reloj
interno. Unicamente
debemos escribir un programa que lea el valor actual del
contador y lo
traduzca a un formato entendible para el usuario.
Interrupciones
externas de hardware
Las interrupciones
externas las generan los dispositivos perifericos, como
pueden ser: teclado,
impresoras, tarjetas de comunicaciones, etc. Tambin
son generadas por
los coprocesadores.
No es posible
desactivar a las interrupciones externas.
Estas interrupciones
no son enviadas directamente a la UCP, sino que se
mandan a un circuito
integrado cuya funci�n es exclusivamente manejar este
tipo de
interrupciones. El circuito, llamado PIC 8259A, si es controlado por
la UCP utilizando
para tal control una serie de vias de comunicaci�n
llamadas puertos.
Interrupciones de
software
Las interrupciones
de software pueden ser activadas directamente por el
ensamblador
invocando al n�mero de interrupci�n deseada con la instrucci�n
INT.
��������������������������������������
Derechos Reservados.1995������������������������������������� 75
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
El uso de las
interrupciones nos ayuda en la creaci�n de programas,
utilizandolas
nuestros programas son m�s cortos, es m�s f�cil entenderlos y
usualmente tienen un
mejor desempe�o debido en gran parte a su menor tama�o.
Este tipo de
interrupciones podemos separarlas en dos categorias: las
interrupciones del
sistema operativo DOS y las interrupciones del BIOS.
La diferencia entre
ambas es que las interrupciones del sistema operativo
son m�s f�ciles de
usar pero tambin son m�s lentas ya que estas
interrupciones hacen
uso del BIOS para lograr su cometido, en cambio las
interrupciones del
BIOS son mucho m�s r�pidas pero tienen la desventaja que,
como son parte del
hardware son muy espec'ficas y pueden variar dependiendo incluso de la marca
del fabricante del circuito.
La elecci�n del tipo
de interrupci�n a utilizar depender� unicamente de las
caracteristicas que
le quiera dar a su programa: velocidad (utilizando las
del BIOS) o
portabilidad (utilizando las del DOS).
Interrupci�n 21H
Prop�sito: Llamar a
diversas funciones del DOS.
Sintaxis:
Int 21H
�Nota: Cuando trabajamos en MASM es necesario
especificar que el
valor que estamos
utilizando es hexadecimal.
��������������������������������������
Derechos Reservados.1995������������������������������������� 76
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de Sistemas
de Informaci�n.
Esta interrupci�n
tiene varias funciones, para accesar a cada una de ellas
es necesario que el
el registro AH se encuentre el n�mero de funci�n que se
requiera al momento
de llamar a la interrupci�n.
�Funciones para desplegar informaci�n al
video.
����� 02H Exhibe salida
����� 09H Impresi�n de cadena (video)
����� 40H Escritura en dispositivo/Archivo
�Funciones para leer informaci�n del teclado.
����� 01H Entrada desde teclado
����� 0AH Entrada desde teclado usando buffer
����� 3FH Lectura desde dispositivo/archivo
�Funciones para trabajar con archivos.
En esta secci�n
unicamente se expone la tarea espec'fica de cada funci�n,
para una referencia
acerca de los conceptos empleados refierase a la unidad
7, titulada:
"Introducci�n al manejo de archivos".
���� Mtodo FCB
����� 0FH Abrir archivo
����� 14H Lectura secuencial
����� 15H Escritura secuencial
����� 16H Crear archivo
����� 21H Lectura aleatoria
����� 22H Escritura aleatoria
�������������������������������������� Derechos
Reservados.1995������������������������������������� 77
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
���� Handles
���� 3CH Crear archivo
���� 3DH Abrir archivo
���� 3EH Cierra manejador de archivo
���� 3FH Lectura desde archivo/dispositivo
���� 40H Escritura en archivo/dispositivo
���� 42H Mover apuntador de lectura/escritura
en archivo
Funci�n 02H
�Uso:
Despliega un
caracter a la pantalla.
�Registros de llamada:
AH = 02H
DL = Valor del
caracter a desplegar.
�Registros de retorno:
Ninguno
Esta funci�n nos
despliega el caracter cuyo codigo hexagesimal corresponde
al valor almacenado
en el registro DL, no se modifica ning�n registro al
utilizar este
comando.
Es recomendado el
uso de la funci�n 40H de la misma interrupci�n en lugar de
esta funci�n.
��������������������������������������
Derechos Reservados.1995������������������������������������� 78
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Funci�n 09H
�Uso:
Despliega una cadena
de carateres en la pantalla.
�Registros de llamada:
AH = 09H
DS:DX = Direcci�n de
inicio de una cadena de caracteres
�Registros de retorno:
Ninguno.
Esta funci�n
despliega los caracteres, uno a uno, desde la direcci�n
indicada en el
registro DS:DX hasta encontrar un caracter $, que es
interpretado como el
final de la cadena.
Se recomienda
utilizar la funci�n 40H en lugar de esta funci�n.
Funci�n 40H
�Uso:
Escribir a un
dispositivo o a un archivo.
��������������������������������������
Derechos Reservados.1995������������������������������������� 79
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
�Registros de llamada:
AH = 40H
BX = V'a de
comunicaci�n
CX = Cantidad de
bytes a escribir
DS:DX = Direcci�n
del inicio de los datos a escribir
�Registros de retorno:
CF = 0 si no hubo
error
���� AX = N�mero de bytes escritos
CF = 1 si hubo error
���� AX = C�digo de error
El uso de esta
funci�n para desplegar informaci�n en pantalla se realiza
dandole al registro
BX el valor de 1 que es el valor preasignado al video
por el sistema
operativo MS-DOS.
Funci�n 01H
�Uso:
Leer un caracter del
teclado y desplegarlo.
�Registros de llamada:
AH = 01H
�Registros de retorno:
AL = Caracter le'do
��������������������������������������
Derechos Reservados.1995������������������������������������� 80
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Con esta funci�n es muy
sencillo leer un caracter del teclado, el c�digo
hexadecimal del
caracter le'do se guarda en el registro AL. En caso de que
sea un caracter
extendido el registro AL contendra el valor de 0 y ser�
necesario llamar de
nuevo a la funci�n para obtener el c�digo de este
caracter.
Funci�n 0AH
�Uso:
Leer caracteres del
teclado y almacenarlos en un buffer.
�Registros de llamada:
AH = 0AH
DS:DX = Direcci�n
del �rea de almacenamiento
BYTE 0 = Cantidad de
bytes en el �rea
BYTE 1 = Cantidad de
bytes le'dos
desde BYTE 2 hasta
BYTE 0 + 2 = caracteres le'dos
�Registros de retorno:
Ninguno
Los caracteres son
le'dos y almacenados en un espacio predefinido de
memoria. La
estructura de este espacio le indica que en el primer byte del
mismo se indican
cuantos caracteres ser�n le'dos. En el segundo byte se
almacena el n�mero
de caracteres que ya se leyeron, y del tercer byte en
adelante se escriben
los caracteres le'dos.
��������������������������������������
Derechos Reservados.1995������������������������������ �������81
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Cuando se han
almacenado todos los caracteres indicados menos uno la bocina
suena y cualquier
caracter adicional es ignorado. Para terminar la captura
de la cadena es
necesario darle [ENTER].
Funci�n 3FH
�Uso:
Leer informaci�n de
un dispositivo o archivo.
�Registros de llamada:
AH = 3FH
BX = N�mero asignado
al dispositivo
CX = N�mero de bytes
a procesar
DS:DX = Direcci�n
del �rea de almacenamiento
�Registros de retorno:
CF = 0 si no hay
error y AX = n�mero de bytes leidos.
CF = 1 si hay error
y AX contendra el c�digo del error.
Funci�n 0FH
�Uso:
Abrir archivo FCB
��������������������������������������
Derechos Reservados.1995������������������������������������� 82
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
�Registros de llamada:
AH = 0FH
DS:DX = Apuntador a
un FCB
�Registros de retorno:
AL = 00H si no hubo
problema, de lo contrario regresa 0FFH
Funci�n 14H
�Uso:
Leer secuencialmente
un archivo FCB.
�Registros de llamada:
AH = 14H
DS:DX = Apuntador a
un FCB ya abierto.
�Registros de retorno:
AL = 0 si no hubo
errores, de lo contrario se regresara el c�digo
correspondiente de
error: 1 error al final del archivo, 2 error en la
estructura del FCB y
3 error de lectura parcial.
Esta funci�n lo que
hace es que lee el siguiente bloque de informaci�n a
partir de la
direcci�n dada por DS:DX, y actualiza este registro.
��������������������������������������
Derechos Reservados.1995������������������������������������� 83
�������������� ����������������UNIVERSIDAD DE GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Funci�n 15H
�Uso:
Escribir
secuencialmente a un archivo FCB
�Registros de llamada:
AH = 15H
DS:DX = Apuntador a
un FCB ya abierto
�Registros de retorno:
AL = 00H si no hubo
errores, de lo contrario contendra el c�digo del error:
1 disco lleno o
archivo de solo lectura, 2 error en la formaci�n o
especificaci�n del
FCB.
La funci�n 15H
despus de escribir el registro al bloque actual actualiza el
FCB.
Funci�n 16H
�Uso:
Crear un archivo
FCB.
�Registros de llamada:
��������������������������������������
Derechos Reservados.1995������������������������������������� 84
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
AH = 16H
DS:DX = Apuntador a
un FCB ya abierto.
�Registros de retorno:
AL = 00H si no hubo
errores, de lo contrario contendra el valor 0FFH
Se basa en la
informaci�n proveida en un FCB para crear un archivo en el
disco.
Funci�n 21H
�Uso:
Leer en forma
aleatoria un archivo FCB.
�Registros de llamada:
AH = 21H
DS:DX = Apuntador a
un FCB ya abierto.
�Registros de retorno:
A = 00H si no hubo
error, de lo contrario AH contendra el c�digo del error:
1 si es fin de
archivo, 2 si existe error de especificaci�n de FCB y 3 si se
ley� un registro
parcial o el apuntador del archivo se encuentra al final
del mismo.
��������������� �����������������������Derechos Reservados.1995������������������������������������� 85
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Esta funci�n lee el
registro especificado por los campos del bloque actual y
registro actual de
un FCB abierto y coloca la informaci�n en el DTA (�rea de
transferencia de
disco o Disk Transfer Area).
Funci�n 22H
�Uso:
Escribir en forma
aleatoria en un archivo FCB.
�Registros de llamada:
AH = 22H
DS:DX = Apuntador a
un FCB abierto.
�Registros de retorno:
AL = 00H si no hubo
error, de lo contrario contendr� el c�digo del error: 1
si el disco est�
lleno o es archivo de solo lectura y 2 si hay error en la
especificaci�n de
FCB.
Escribe el registro
especificado por los campos del bloque actual y registro
actual de un FCB
abierto. Escribe dicha informaci�n a partir del contenido
del DTA (�rea de
transferencia de disco).
��������������������������������������
Derechos Reservados.1995������������������������������������� 86
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Funci�n 3CH
�Uso:
Crear un archivo si
no existe o dejarlo en longitud 0 si existe. (Handle)
�Registros de llamada:
AH = 3CH
CH = Atributo de
archivo
DS:DX = Apuntador a
una especificai�n ASCIIZ
�Registros de retorno:
CF = 0 y AX el
n�mero asignado al handle si no hay error, en caso de haberlo
CF ser� 1 y AX
contendra el c�digo de error: 3 ruta no encontrada, 4 no hay
handles disponibles
para asignar y 5 acceso negado.
Esta funci�n
sustituye a la 16H. El nombre del archivo es especificado en
una cadena ASCIIZ,
la cual tiene como caracter'stica la de ser una cadena de
bytes convencional
terminada con un caracter 0.
El archivo creado
contendra los atributos definidos en el registro CX en la
siguiente forma:
�Valor��
Atributos
� 00H����
Normal
� 02H����
Escondido
� 04H����
Sistema
� 06H����
Escondido y de sistema
El archivo se crea
con los permisos de lectura y escritura. No es posible
crear directorios
utilizando esta funci�n.
��������������������������������������
Derechos Reservados.1995�� �����������������������������������87
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Funci�n 3DH
�Uso:
Abre un archivo y
regrese un handle
�Registros de llamada:
AH = 3DH
AL = modo de acceso
DS:DX = Apuntador a
una especificaci�n ASCIIZ
�Registros de retorno:
CF = 0 y AX = n�mero
de handle si no hay errores, de lo contrario CF = 1 y
AX = c�digo de
error: 01H si no es v�lida la funci�n, 02H si no se encontr�
el archivo, 03H si
no se encontr´o la ruta, 04H si no hay handles
disponibles, 05H en
caso de acceso negado, y 0CH si el c�digo de acceso no
es v�lido.
El handle regresado
es de 16 bits.
El c�digo de acceso
se especifica en la siguiente forma:
�BITS
�7 6 5 4 3 2 1
�. . . . 0 0 0��� Solo lectura
�. . . . 0 0 1��� Solo escritura
�. . . . 0 1 0��� Lectura/Escritura
�. . . X . . .��� RESERVADO
��������������������������������������
Derechos Reservados.1995������������������������������������� 88
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Funci�n 3EH
�Uso:
Cerrar archivo
(Handle).
�Registros de llamada:
AH = 3EH
BX = Handle asignado
�Registros de retorno:
CF = 0 si no hubo
errores, en caso contrario CF ser� 1 y AX contendr� el
c�digo de error: 06H
si el handle es inv�lido.
Esta funci�n
actualiza el archivo y libera o deja disponible el handle que
estaba utilizando.
Funci�n 3FH
�Uso:
Leer de un archivo
abierto una cantdad definida de bytes y los almacena en
un buffer
espec'fico.
��������������������������������������
Derechos Reservados.1995������������������������������������� 89
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
�Registros de llamada:
AH = 3FH
BX = Handle asignado
CX = Cantidad de
bytes a leer
DS:DX = Apuntador a
un �rea de trabajo.
�Registros de retorno:
CF = 0 y AX = n�mero
de bytes leidos si no hubo error, en caso contrario CF
= 1 y AX = c�digo de
error: 05H si acceso negado y 06H si no es v�lido el
handle.
Funci�n 40H
�Uso:
Escribe a un archivo
ya abierto una cierta cantidad de bytes a partir del
buffer designado.
�Registros de llamada:
AH = 40H
BX = Handle asignado
CX = Cantidad de
bytes a escribir.
DS:DX = Apuntador al
buffer de datos.
��������������������������������������
Derechos Reservados.1995������������������������������������� 90
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
�Registros de retorno:
CF = 0 y AX = n�mero
de bytes escritos si no hay errores, en caso de existir
CF = 1 y AX = c�digo
del error: 05H si el acceso es negado y 06H si el
handle es inv�lido.
Funci�n 42H
�Uso:
Mover apuntador al
archivo (Handle)
�Registros de llamada:
AH = 42H
AL = mtodo
utilizado
BX = Handle asignado
CX = La parte m�s
significativa del offset
DX = La parte menos
significativa del offset
�Registros de retorno:
CF = 0 y DX:AX = la
nueva posici�n del apuntador. En caso de error CF ser� 1
y AX = c�digo de
error: 01H si la funci�n no es v�lida y 06H si el handle no
es v�lido.
El mtodo
utilizado se configura como sigue:
�Valor de AL��
Mtodo
��� 00H�������� A partir del principio del archivo
��� 01H�������� A partir de la posici�n actual
��� 02H�������� A partir del final del archivo
��������������������������������������
Derechos Reservados.1995������������������������������������� 91
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Interrupci�n 10H
Prop�sito: Llamar a
diversas funciones de video del BIOS.
Sintaxis:
Int 10H
Esta interrupci�n
tiene diversas funciones, todas ellas nos sirven para
controlar la entrada
y salida de video, la forma de acceso a cada una de las
opciones es por
medio del registro AH.
En este tutorial
unicamente veremos algunas de las funciones de esta
interrupci�n.
�Funciones comunes de la interrupci�n 10H.
���� 02H Selecci�n de posici�n del cursor
���� 09H Escribe atributo y caracter en el
cursor
���� 0AH Escribe caracter en la posici�n del
cursor
���� 0EH Escritura de caracteres en modo
alfanumrico
Funci�n 02H
�Uso:
Posiciona el cursor
en la pantalla dentro de las coordenadas v�lidas de
texto.
��������������������������������������
Derechos Reservados.1995������������������������������������� 92
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
�Registros de llamada:
AH = 02H
BH = P�gina de video
en la que se posicionar� el cursor.
DH = Fila
DL = Columna
�Registros de retorno:
Ninguno.
Las posiciones de
localizaci�n del cursor son definidas por coordenadas
iniciando en 0,0,
que corresponde a la esquina superior izquierda hasta 79,24 correspondientes a
la esquina inferior derecha. Tenemos entonces que los valores que pueden tomar
los registros DH y DL en modo de texto de 80 x 25 son de 0 hasta 24 y de 0
hasta 79 respectivamente.
Funci�n 09H
�Uso:
Desplegar un
caracter un determinado n�mero de veces con un atributo
definido empezando
en la posici�n actual del cursor.
�Registros de llamada:
AH = 09H
AL = Caracter a
desplegar
BH = P�gina de video
en donde se desplegar�
BL = Atributo a usar
N�mero de
repeticiones.
��������������������������������������
Derechos Reservados.1995��������������������� ����������������93
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
�Registros de retorno:
Ninguno
Esta funci�n
despliega un caracter el n�mero de veces especificado en CX
pero sin cambiar la
posici�n del cursor en la pantalla.
Funci�n 0AH
�Uso:
Desplegar un
caracter en la posici�n actual del cursor.
�Registros de llamada:
AH = 0AH
AL = Caracter a
desplegar
BH = P�gina en donde
desplegar
BL = Color a usar
(s�lo en gr�ficos).
CX = N�mero de
repeticiones
�Registros de retorno:
Ninguno.
La �nica diferencia
entre esta funci�n y la anterior es que sta no permite
modificar los
atributos, simplemente usa los atributos actuales.
Tampoco se altera la
posici�n del cursor con esta funci�n.
��������������������������������������
Derechos Reservados.1995������������������������������������� 94
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Funci�n 0EH
�Uso:
Deplegar un caracter
en la pantalla actualizando la posici�n del cursor.
�Registros de llamada:
AH = 0EH
AL = Caracter a
desplegar
BH = P�gina donde se
desplegara el caracter
BL = Color a usar
(solo en gr�ficos)
�Registros de retorno:
Ninguno
Interrupci�n 16H
Prop�sito: Manejar
la entrada/salida del teclado.
Sintaxis:
Int 16H
Veremos dos opciones
de la interrupci�n 16H, estas opciones, al igual que
las de otras
interrupciones, son llamadas utilizando el registro AH.
��������������������������������������
Derechos Reservados.1995������������������������������������� 95
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
�Funciones de la interrupci�n 16H
����� 00H Lee un caracter de teclado
����� 01H Lee estado del teclado
Funci�n 00H
�Uso:
Leer un caracter del
teclado.
�Registros de llamada:
AH = 00H
�Registros de retorno:
AH = c�digo de
barrido (scan code) del teclado
AL = Valor ASCII del
caracter.
Cuando se utiliza
esta interrupci�n se detiene la ejecuci�n del programa
hasta que se
introduzca un caracter desde el teclado, si la tecla presionada
es un caracter ASCII
su valor ser� guardado en el registro AH, de lo
contrario el c�digo
de barrido ser� guardado en AL y AH contendr� el valor
00H.
El c�digo de barrido
fu creado para manejar las teclas que no tienen una
representaci�n ASCII
como [ALT], [CONTROL], las teclas de funci�n, etc.
������������������������������� �������Derechos Reservados.1995������������������������������������� 96
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Funci�n 01H
�Uso:
Leer estado del
teclado.
�Registros de llamada:
AH = 01H
�Registros de retorno:
Si la bandera de
cero, ZF, est� apagada significa que hay informaci�n en el
buffer, si se
encuentra prendida es que no hay teclas pendientes.
En caso de existir
informaci�n el registro AH contendr� el c�digo de la
tecla guardada en el
buffer.
Interrupci�n 17H
Prop�sito: Manejar
la entrada/salida de la impresora.
Sintaxis:
Int 17H
Esta interrupci�n es
utilizada para escribir caracteres a la impresora,
inicializarla y leer
su estado.
��������������������������������������
Derechos Reservados.1995������������������������������������� 97
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
�
Funciones de la interrupci�n
16H
����� 00H Imprime un caracter ASCII
����� 01H Inicializa la impresora
����� 02H Proporciona el estado de la
impresora
Funci�n 00H
�Uso:
Escribir un caracter
a la impresora.
�Registros de llamada:
AH = 00H
AL = Caracter a
imprimir
DX = Puerto a
utilizar
�Registros de retorno:
AH = Estado de la
impresora.
El puerto a
utilizar, definido en DX, se especifica as': LPT1 = 0, LPT2 = 1,
LPT3 = 2 ...
��������������������������������������
Derechos Reservados.1995��������������������� ����������������98
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
El estado de la
impresora se codifica bit por bit como sigue:
�BIT 1/0 SIGNIFICADO
�----------------------------------------
� 0��
1�� Se agot� el tiempo de espera
� 1�� -
� 2�� -
� 3��
1�� Error de entrada/salida
� 4��
1�� Impresora seleccionada
� 5��
1�� Papel agotado
� 6��
1�� Reconocimiento de
comunicaci�n
� 7��
1�� La impresora se encuentra
libre
Los bits 1 y 2 no
son relevantes.
La mayoria de los
BIOS unicamente soportan 3 puertos paralelos aunque
existen algunos que
soportan 4.
Funci�n 01H
�Uso:
Inicializar un
puerto de impresi�n.
�Registros de llamada:
AH = 01H
DX = Puerto a
utilizar
��������������������������������������
Derechos Reservados.1995������������������������������������� 99
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
�Registros de retorno:
AH = Status de la
impresora
El puerto a
utilizar, definido en DX, se especifica as': LPT1 = 0, LPT2 = 1,
etc.
El estado de la
impresora se codifica bit por bit como sigue:
�BIT 1/0 SIGNIFICADO
�----------------------------------------
� 0��
1�� Se agot� el tiempo de espera
� 1�� -
� 2�� -
� 3��
1�� Error de entrada/salida
� 4��
1�� Impresora seleccionada
� 5��
1�� Papel agotado
� 6��
1�� Reconocimiento de
comunicaci�n
� 7��
1�� La impresora se encuentra
libre
Los bits 1 y 2 no
son relevantes.
La mayoria de los
BIOS unicamente soportan 3 puertos paralelos aunque
existen algunos que
soportan 4.
Funci�n 02H
�Uso:
Obtener el estado de
la impresora.
��������������������������������������
Derechos Reservados.1995����������������������������������� 100
�
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Registros de
llamada:
AH = 01H
DX = Puerto a
utilizar
�Registros de retorno:
AH = Status de la
impresora.
El puerto a
utilizar, definido en DX, se especifica as': LPT1 = 0, LPT2 = 1,
etc.
El estado de la
impresora se codifica bit por bit como sigue:
�BIT 1/0 SIGNIFICADO
�----------------------------------------
� 0��
1�� Se agot� el tiempo de espera
� 1�� -
� 2�� -
� 3��
1�� Error de entrada/salida
� 4��
1�� Impresora seleccionada
� 5��
1�� Papel agotado
� 6��
1�� Reconocimiento de
comunicaci�n
� 7��
1�� La impresora se encuentra
libre
Los bits 1 y 2 no
son relevantes.
La mayoria de los
BIOS unicamente soportan 3 puertos paralelos aunque
existen algunos que
soportan 4.
��������������������������������������
Derechos Reservados.1995����������������������������������� 101
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
Introduci�n al
manejo de archivos
Formas de trabajar
con archivos
���� Mtodos de trabajo con archivos
Mtodo FCB
���� Introducci�n
���� Abrir archivos
���� Crear un archivo nuevo
���� Escritura secuencial
���� Lectura secuencial
���� Lectura y escritra aleatoria
���� Cerrar un archivo
Mtodo de
canales de comunicaci�n
���� Trabajando con handles
���� Funciones para utilizar handles
Mtodos de
trabajo con archivos
Existen dos formas
de trabajar con archivos, la primera es por medio de
bloques de control
de archivos o "FCB" y la segunda es por medio de canales
de comunicaci�n,
tambien conocidos como "handles".
La primera forma de
manejo de archivos se viene utilizando desde el sistema
operativo CPM,
antecesor del DOS, por lo mismo asegura cierta compatibilidad
con archivos muy
antiguos tanto del CMP como de la versi�n 1.0 del DOS,
adem�s este mtodo
nos permite tener un n�mero ilimitado de archivos
abiertos al mismo
tiempo. Si se quiere crear un volumen para el disco la
�nica forma de
lograrlo es utilizando este mtodo.
��������������������������������������
Derechos Reservados.1995���������
��������������������������102
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
A�n considerando las
ventajas del FCB el uso de los canales de comunicaci�n
es mucho m�s
sencillo y nos permite un mejor manejo de errores, adem�s, por
ser m�s novedoso es
muy probable que los archivos as' creados se mantengan
compatibles a
travs de versiones posteriores del sistema operativo.
Para una mayor
facilidad en las explicaciones posteriores me referir a el
mtodo de
bloques de control de archivos como FCBs y al mtodo de canales de
comunicaci�n como
handles.
Introducci�n
Existen dos tipos de
FCB, el normal, cuya longitud es de 37 bytes y el
extendido de 44
bytes. En este tutorial unicamente se tratar� el primer
tipo, as' que de
ahora en adelante cuando me refiera a un FCB realmente
estoy hablando de un
FCB de 37 bytes.
El FCB se compone de
informaci�n dada por el programador y por informaci�n
que toma
directamente del sistema operativo. Cuando se utilizan este tipo de
archivos unicamente
es posible trabajar en el directorio actual ya que los
FCB no proveen apoyo
para el uso de la organizaci�n por directorios del DOS.
El FCB est� formado
por los siguientes campos:
������������������������������������� Derechos
Reservados.1995����������������������������������� 103
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
�POSICION�
LONGITUD� SIGNIFICADO
�� 00H�����
1 Byte��� Drive
�� 01H�����
8 Bytes�� Nombre del archivo
�� 09H�����
3 Bytes�� Extensi�n
�� 0CH�����
2 Bytes�� N�mero de bloque
�� 0EH�����
2 Bytes�� Tama�o del registro
�� 10H�����
4 Bytes�� Tama�o del archivo
�� 14H�����
2 Bytes� �Fecha de creaci�n
�� 16H�����
2 Bytes�� Hora de creaci�n
�� 18H�����
8 Bytes�� Reservados
�� 20H�����
1 Byte��� Registro actual
�� 21H�����
4 Bytes�� Regsitro aleatorio
Para seleccionar el
drive de trabajo se sigue el siguiente formato: drive A
= 1; drive B = 2;
etc. Si se utiliza 0 se tomar� como opci�n el drive que se
est utilizando
en ese momento.
El nombre del
archivo debe estar justificado a la izquierda y en caso de ser
necesario se deber�n
rellenar los bytes sobrantes con espacios, la extensi�n
del archivo se
coloca de la misma forma.
El bloque actual y
el registro actual le dicen a la computadora que registro
ser� accesado en
operaciones de lectura o escritura. Un bloque es un grupo
de 128 registros. El
primer bloque del archivo es el bloque 0. El primer
registro es el
registro 0, por lo tanto el �ltimo registro del primer bloque
ser'a 127, ya que la
numeraci�n inici� con 0 y el bloque puede contener 128
registros en total.
������������������������������������� Derechos
Reservados.1995����������������������������������� 104
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
Abrir archivos
Para abrir un
archivo FCB se utiliza la interrupci�n 21H, funci�n 0FH. La
unidad, el nombre y
extensi�n del archivo deben ser inicializados antes de
abrirlo.
El registro DX debe
apuntar al bloque. Si al llamar a la interrupci�n sta
regresa valor de FFH
en el registro AH es que el archivo no se encontr�, si
todo sali� bien se
devolvera un valor de 0.
Si se abre el
archivo DOS inicializa el bloque actual a 0, el tama�o del
registro a 128 bytes
y el tama�o del mismo y su fecha se llenan con los
datos encontrados en
el directorio.
Crear un archivo
nuevo
Para la creaci�n de
archivos se utiliza la interrupci�n 21H funci�n 16H .
DX debe apuntar a
una estructura de control cuyos requisitos son que al
menos se encuentre
definida la unidad l�gica, el nombre y la extensi�n del
archivo.
En caso de existir
algun problema se devolver� el valor FFH en AL, de lo
contrario este
registro contendr� el valor de 0.
��������������������������������������
Derechos Reservados.1995����������������������������������� 105
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
Escritura secuencial
Antes de que podamos
realizar escrituras al disco es necesario definir el
�rea de
transferencia de datos utilizando para tal fin la funci�n 1AH de la
interrupci�n 21H.
La funci�n 1AH no
regresa ning�n estado del disco ni de la operaci�n, pero
la funci�n 15H, que
es la que usaremos para escribir al disco, si lo hace en
el registro AL, si
ste es igual a cero no hubo error y se actualizan los
campos del registro
actual y bloque.
Lectura secuencial
Antes que nada
debemos definir el �rea de transferencia de archivos o DTA.
Para leer
secuencialmente utilizamos la funci�n 14H de la int 21H.
El registro a ser
leido es el que se encuentra definido por el bloque y el
registro actual. El
registro AL regresa el estado de la operaci�n, si AL
contiene el valor de
1 o 3 es que hemos llegado al final del archivo. Un
resultado de 2
significa que el FCB est� mal estructurado.
En caso de no
existir error AL contendr� el valor de 0 y los campos bloque
actual y registro
actual son actualizados.
��������������������������������������
Derechos Reservados.1995����������������������������������� 106
��� ���������������������������UNIVERSIDAD DE GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
Lectura y escritura
aleatoria
La funci�n 21H y la
funci�n 22H de la interrupci�n 21H son las encargadas de
realizar las
lecturas y escrituras aleatorias respectivamente.
El n�mero de
registro aleatorio y el bloque actual son usados para calcular
la posici�n relativa
del registro a leer o escribir.
El registro AL
regresa la misma informaci�n que para lectura o escritura
secuencial. La
informaci�n que ser� le'da se regresar� en el �rea de
transferencia de
disco, as' mismo la informaci�n que ser� escrita reside en
el DTA.
Cerrar un archivo
Para cerrar un
archivo utilizamos la funci�n 10H de la interrupci�n 21H.
Si despus de
invocarse esta funci�n el registro AL contiene el valor de FFH
significa que el
archivo ha cambiado de posici�n, se cambi� el disco o hay
un error de acceso
al disco.
Trabajando con
handles
El uso de handles
para manejar los archivos facilita en gran medida la
creaci�n de archivos
y el programador puede concentrarse en otros aspectos
de la programaci�n
sin preocuparse en detalles que pueden ser manejados por
el sistema
operativo.
����������� ���������������������������Derechos Reservados.1995����������������������������������� 107
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n
La facilidad en el
uso de los handles consiste en que para operar sobre un
archivo unicamente
es necesario definir el nombre del mismo y el n�mero del
handle a utilizar,
toda la dem�s informaci�n es manejada internamente por el
DOS.
Cuando utilizamos
este mtodo para trabajar con archivos no existe una
distinci�n entre
accesos secuenciales o aleatorios, el archivo es tomado
simplemente como una
cadena de bytes.
Funciones para
utilizar handles
Las funciones
utilizadas para el manejo de archivos por medio de handles son
descritas en la
unidad 6: Interrupciones, en la secci�n dedicada a la
interrupci�n 21H.
��������������������������������������
Derechos Reservados.1995����������������������������������� 108
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Macros y
procedimientos
Procedimientos.
���� Definici�n de procedimiento
���� Sintaxis de un procedimiento
Macros.
���� Definici�n de una macro
���� Sintaxis de una macro
���� Bibliotecas de macros
Definici�n de
procedimiento
Un procedimiento es
un conjunto de instrucciones a los que podemos dirigir
el flujo de nuestro
programa, y una vez terminada la ejecuci�n de dichas
instrucciones se devuelve
el control a la siguiente linea a procesar del
c�digo que mando
llamar al procedimiento.
Los procedimientos
nos ayudan a crear programas legibles y f�ciles de
modificar.
Al momento de
invocar a un procedimiento se guarda en la pila la direcci�n
de la siguiente
instrucci�n del programa para que, una vez transferido el
flujo del programa y
terminado el procedimiento, se pueda regresar a la
linea siguiente del
programa original (el que llam� al procedimiento).
��������������������������������������
Derechos Reservados.1995����������������������������������� 109
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Sintaxis de un procedimiento
Existen dos tipos de
procedimientos, los intrasegmentos, que se encuentran
en el mismo segmento
de instrucciones y los intersegmentos que pueden ser
almacenados en
diferentes segmentos de memoria.
Cuando se utilizan
los procedimientos intrasegmentos se almacena en la pila
el valor de IP y
cuando se utilizan los intersegmentos se almacena el valor
CS:IP
Para desviar el
flujo a un procedimiento (llamarlo) se utiliza la directiva:
CALL
NombreDelProcedimiento
Las partes que
componen a un procedimiento son:
�Declaraci�n del procedimiento
�C�digo del procedimiento
�Directiva de regreso
�Terminaci�n del procedimiento
Por ejemplo, si
queremos una rutina que nos sume dos bytes, almacenados en
AH y AL cada uno y
guardar la suma en el registro BX:
�Suma Proc Near� ;Declaraci�n del procedimiento
�� Mov Bx, 0���� ;Contenido del procedimiento
�� Mov Bl, Ah
�� Mov Ah, 00
�� Add Bx, Ax
�� Ret���������� ;Directiva de regreso
�Suma Endp������ ;Declaraci�n de final del procedimiento
���������������������� ����������������Derechos Reservados.1995����������������������������������� 110
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
En la declaraci�n la
primera palabra, Suma, corresponde al nombre de nuestro
procedimiento, Proc
lo declara como tal y la palabra Near le indica al MASM
que el procedimiento
es intrasegmento. La directiva Ret carga la direcci�n IP almacenada en la pila
para regresar al programa original, por �ltimo, la directiva Suma Endp indica
el final del procedimiento.
Para declarar un
procedimiento intersegmento sustituimos la palabra Near por
la palabra FAR.
El llamado de este
procedimiento se realiza de la siguiente forma:
Call Suma
Las macros ofrecen
una mayor flexibilidad en la programaci�n comparadas con
los procedimientos,
pero no por ello se dejar�n de utilizar estos �ltimos.
Definici�n de una
macro
Una macro es un
grupo de instrucciones repetitivas en un programa que se
codifican solo una
vez y pueden utilizarse cuantas veces sea necesario.
La principal
diferencia entre una macro y un procedimiento es que en la
macro se hace
posible el paso de par�metros y en el procedimiento no (esto
es aplicable solo
para el MASM, hay otros lenguajes de programaci�n que si
lo permiten). Al
momento de ejecutarse la macro cada par�metro es sustituido
por el nombre o
valor especificado al momento de llamarla.
Podemos decir
entonces que un procedimiento es una extensi�n de un
determinado programa,
mientras que la macro es un m�dulo con funciones
espec'ficas que
puede ser utilizado por diferentes programas.
�Otra diferencia entre una macro y un
procedimiento es la forma de llamar a
cada uno, para
llamar a un procedimiento se requiere el uso de una directiva, en cambio la
llamada a las macros se realiza como si se tratara de una instrucci�n del
ensamblador.
��������������������������������������
Derechos Reservados.1995����������������������������������� 111
�
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Sintaxis de una
macro
Las partes que
componen a una macro son:
�Declaraci�n de la macro
�C�digo de la macro
�Directiva de terminaci�n de la macro
La declaraci�n de la
macro se lleva a cabo de la siguiente forma:
NombreMacro MACRO
[parametro1, parametro2...]
Aunque se tiene la
funcionalidad de los parametros es posible crear una
macro que no los
necesite.
La directiva de terminaci�n
de la macro es: ENDM
Un ejemplo de macro,
para colocar el cursor en alguna posici�n determinada
de la pantalla es:
�Posicion MACRO Fila, Columna
�� PUSH AX
�� PUSH BX
�� PUSH DX
�� MOV AH, 02H
�� MOV DH, Fila
�� MOV DL, Columna
�� MOV BH, 0
�� INT 10H
�� POP DX
�� POP BX
�� POP AX
�ENDM
����������������������������������� Derechos
Reservados.1995����������������������������������� 112
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������� Coordinaci�n General de
Sistemas de Informaci�n.
Para utilizar una
macro solo es necesario llamarla por su nombre, como si
fuera una
instrucci�n mas del ensamblador, ya no son necesarias las
directivas como en
el caso de los procedimientos. Ejemplo:
Posicion 8, 6
Bibliotecas de macros
Una de las
facilidades que ofrece el uso de las macros es la creaci�n de
bibliotecas, las
cuales son grupos de macros que pueden ser incluidas en un
programa desde un
archivo diferente.
La creaci�n de estas
bibliotecas es muy sencilla, unicamente tenemos que
escribir un archivo
con todas las macros que se necesitar�n y guardarlo como
archivo de texto.
Para llamar a estas
macros solo es necesario utilizar la instrucci�n Include
NombreDelArchivo, en
la parte de nuestro programa donde escribiriamos
normalmente las
macros, esto es, al principio de nuestro programa (antes de
la declaraci�n del
modelo de memoria).
Suponiendo que se
guard� el archivo de las macros con el nombre de
MACROS.TXT la
instrucci�n Include se utilizar'a de la siguiente forma:
�� ;Inicio del programa
�Include MACROS.TXT
�.MODEL SMALL
�.DATA
�� ;Aqui van los datos
�.CODE
�Inicio:
�� ;Aqui se inserta el c�digo del programa
�.STACK
�� ;Se define la pila
�End Inicio
�� ;Termina nuestro programa
����������������������������������� Derechos
Reservados.1995����������������������������������� 113
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
Ejemplos:
Desplegar un mensaje
en pantalla
Uno de los programas
m�s sencillos, pero en cierta forma pr�ctico, es uno
que despliegue una
cadena de caracteres en la pantalla. Eso es lo que hace
el siguiente
programa:
Programa :
�; Primero definimos el modelo de memoria, en
este caso small
�.MODEL SMALL
�.CODE��������������� ; Declaramos el �rea que contendr� el c�digo
�Inicio:������������� ; Etiqueta de inicio del programa:
�MOV AX,@DATA�������� ; Vamos a colocar la direcci�n del segmento de datos
�MOV DS,AX����
�������;� en DS, usando como intermediario a AX
�MOV DX,OFFSET Cadena ; Colocamos en DX la
direcci�n, dentro del
��������������������� ;� segmento, de la cadena a desplegar
�MOV AH,09����������� ; Utilizaremos la funci�n 09 de la interrupci�n
�INT 21H����
���������;� 21H para desplegar la cadena.
�MOV AH,4CH���������� ; Por medio de la funci�n 4CH de la interrupci�n
�INT 21H������������� ;� 21H
terminaremos nuestro programa
�.DATA��������������� ; Declaramos el semento de datos
�Cadena DB 'Mensaje del programa.$' ; Cadena a
desplegar
�.STACK�������������� ; Declaramos la pila
�END Inicio���������� ; Final de nuestro programa
Ya se explic� en el
tutorial un programa casi igual a este, por lo tanto no
requiere ning�n
comentario adicional.
����������������������������������� Derechos
Reservados.1995����������������������������������� 114
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
Cuando se crea un
programa no es necesario escribir los comentarios que van
despues de las
comillas, sin embargo es una tcnica recomendable para que en
caso de errores o
mejoras al c�digo sea m�s sencillo encontrar la parte
deseada.
Para ensamblar este
programa primero se guarda en formato ASCII con un
nombre v�lido, por
ejemplo: program1.asm
Para ensamblarlo se
utiliza el MASM, el comando de ensamble es: masm
program1;
Para enlazarlo y
hacerlo ejecutable tecleamos: link program1;
Una vez terminados
estos pasos es posible ejecutarlo tecleando: program1
[Enter]
Para utilizar el
programa directamente en su computadora guarde este archivo
como ASCII o texto,
llvelo a su PC, con algun editor elimine todos estos
comentarios y los
comentarios del principio y ens�mblelo.
Desplegar n�meros
hexadecimales del 15 al 0
Este programa
despliega los 16 caracteres correspondientes al c�digo
hexadecimal en orden
descendente.
����������������������������������� Derechos
Reservados.1995��� ��������������������������������115
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
Programa:
�; Inicio del programa, definimos el modelo de
memoria a usar y el segmento
�; de c�digo
�.MODEL SMALL��������� ; Modelo de memoria
�.CODE���������������� ; Area de c�digo
�Inicio:�������������� ; Etiqueta de inicio del programa
�MOV AX,@DATA��������� ; Inicializa el registro DS con la direcci�n dada
�MOV DS,AX������������ ;� por @DATA
(Segmento de datos).
�MOV DX, OFFSET Titulo ; Obtiene la direcci�n
de la cadena de caracteres
�MOV AH,09������������ ; Usamos la funci�n 09H de la interrupci�n 21H
�INT 21H�������������� ;� para
desplegar la cadena cuya direcci�n obtuvimos.
�MOV CX,16������������ ; Contador de caracteres que se mostrar�n
�MOV BX, OFFSET Cadena ; Permite acceso a la
cadena donde se encuentran los
���������������������� ;� valores a desplegar
�Ciclo:��������������� ; Etiqueta para generar un ciclo
�MOV AL,CL����������� �; Coloca en AL
el n�mero a traducir y lo traduce
�XLAT����������������� ; usando la instrucci�n XLAT
�MOV DL,AL������������ ; Coloca en DL el valor a ser desplegado por medio de
la
�MOV AH,02������������ ;� funci�n 2 de
la interrupci�n 21H
�INT 21H������
��������; Despliega el caracter
�MOV DL,10������������ ; Salta una linea desplegando el caracter 10
�INT 21H�������������� ; Despliega el caracter
�MOV DL,13������������ ; Produce un retorno de carro desplegando el caracter
13
�INT 21H�������������� ; Despliega el retorno de carro
�LOOP Ciclo����������� ; Decrementa en uno a CX y brinca a la etiqueta Ciclo
���������������������� ;� siempre y cuando CX no sea igual a cero
�MOV AH,4C������������ ; Utiliza la funci�n 4C de la interrupci�n 21H para
�INT 21H�������������� ; finalizar el programa
�; Inicio del segmento de datos
�.DATA���������������� ;Define el segmento de datos
�Titulo DB 13,10,'Desplegar los n�meros
hexadecimales del 15 al 1'
�� DB 13,10,'$'������� ; Cadena a desplegar al inicio del programa
�Cadena DB '0123456789ABCDEF'� ; Cadena con los d'gitos hexadecimales
�; Declaraci�n del segmento de la pila
�.STACK
�END Inicio����������� ;Declaraci�n del final del programa
����������������������������������� Derechos
Reservados.1995��������� ��������������������������116
����
�
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
��� El comando XLAT busca la cadena o tabla
localizada en BX, el registro
���� AL contiene el n�mero de bytes, a partir
de la direcci�n de inicio, que
���� se recorrer� el apuntador para buscar un
dato, el contenido de AL es
���� remplazado por el byte donde se encuentra
el apuntador.
���� El proceso de ensamblado es igual al del
ejemplo anterior.
���
���
���
�� Operaciones b�sicas
En el siguiente
ejemplo se utilizan la mayor parte de las instrucciones
vistas en el
tutorial, su objetivo es realizar las operaciones de suma,
resta,
multiplicaci�n o divisi�n de dos cantidades.
Para accesar a cada
una de las opciones disponibles se hace uso de un men�
en el que se
presentan las operaciones disponibles.
Programa:
�.MODEL SMALL������������ ; Define el modelo de memoria
�.DATA������������������� ; Define el segmentos de datos
�ErrorCAP DB 0����������� ;Bandera de error en la captura de las cantidades
�Cantidad DB 0����������� ;Cantidad sobre la que se opera. Si es 0 la cantidad
������������������������� ; ser� la 1, y si es
1 ser� la 2.
�CantUnoR DW 0����������� ;Guardar� la cantidad 1 convertida en binario
�CantDosR DW 0����������� ;Guardar� la cantidad 2 convertida en 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
�������������������������� ��������Derechos Reservados.1995����������������������������������� 117
�
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
�Funcion�
DB 0����������� ;Variable que
almacena la opci�n a realizar
�Resulta�
DB 13,10,'Resultado: $'
�ResultaR DB 11 DUP(?)
�Mensaje�
DB 13,10,'Operaciones b�sicas entre dos n�meros'
��������� DB 13,10,13,10,'$'
�Pregunta DB 13,10,'Presione: ',13,10
�� �������DB ' 1�
Multiplicaci�n ',13,10
��������� DB ' 2� Divisi�n ',13,10
��������� DB ' 3� Suma ',13,10
��������� DB ' 4� Resta ',13,10
��������� DB ' 5� Salir ',13,10,'$'
�Error���
DB 7,13,10,'Selecci�n inv�lida (1-5)',13,10,'$'
�Error1��
DB 7,13,10,'Cantidad 1 inv�lida.��������� ',13,10,'$'
�Error2��
DB 7,13,10,'Cantidad 2 inv�lida.��������� ',13,10,'$'
�Error3��
DB 7,13,10,'Cantidad fuera de rango (65535)����� ',13,10,'$'
�Error4��
DB 7,13,10,'Intento de divisi�n por cero. ',13,10,'$'
�CantUnoM DB 13,10,'Introduzca la cantidad 1
(Menor a 65535): $'
�CantDosM DB 13,10,'Introduzca la cantidad 2
(Menor a 65535): $'
�; Tabla de potencias para conversi�n
binaria/ASCII
�Potencia DW 0001h, 000Ah, 0064h, 03E8h, 2710h
�PotenciaF DW $
�.CODE������������������ ;Define el �rea de c�digo
�Empieza:��������������� ;Etiqueta de inicio del programa
�� Mov AH, 0Fh������������ ;Obtiene modo de video actual
�� Int 10h
�� Mov AH, 00������������� ;Cambia el modo de video al mismo anterior
�� Int 10h���������������� ; con la finalidad de que se borre la pantalla
�� Mov AX, @Data���������� ;Obtiene la direcci�n del segmento de datos
�� Mov Ds, Ax������������� ;Inicializa a DS con esa direcci�n
�
��������������������������������������
Derechos Reservados.1995����������������������������������� 118
�
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
�Mov Dx, Offset Mensaje� ;Despliega el t'tulo del programa
�� Call Imprime �����������;Llama a un procedimiento
�� Mov Si, Offset ResultaR ;Inicializa la
variable ResultaR
�� Add Si,11
�� Mov Al,'$'
�� Mov [Si], Al
�OTRA:
�� Mov Dx,Offset Pregunta� ;Despliega men� de opciones
�� Call Imprime
�� Call ObtenTecla�������� ;Espera a que se presione la opci�n deseada
�� Cmp Al, 49������������� ;Compara la selecci�n con el d'gito 1 ASCII
�� Jae SIGUE�������������� ;Si la opci�n es mayor a 1 brinca a SIGUE
�� Mov Dx, Offset Error��� ;Despliega mensaje de error
�� Call Imprime
�� Jmp OTRA��������������� ;Brinca a OTRA para volver a preguntar
�SIGUE:
�� Cmp Al,53�������������� ;Compara la selecci�n con el d'gito 5 ASCII
�� Jbe TODOBIEN����������� ;Si es menor a 5 brinca a TODOBIEN, sino contin�a
�� Mov Dx, Offset Error��� ;Si la opci�n fu mayor a 5 despiega
el error
�� Call Imprime
�� Jmp OTRA
�TODOBIEN:
�� Cmp Al,53�������������� ;Compara la seleci�n con el d'gito 5 ASCII
�� Jnz CHECATODO���������� ;Si no es igual brinca a CHECATODO
�� Jmp FUNCION5����������� ;Si es igual brinca a FUNCION5 para terminar
�CHECATODO:
�� Mov Funcion, Al�������� ;Guarda el n�mero de funci�n a realizar
�CAPCANT01:
�� Mov Dx, Offset CantUnoM ;Mensaje de captura
de la cantidad 1
�� Call Imprime
�� Mov Ah, 0Ah������������ ;Captura la cantidad (hasta 8 d'gitos)
�� Mov Dx, Offset CantUnoN
�� Int 21h
��
���������������������������������������
Derechos Reservados.1995��������������������������������� 119
�
�
���������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
�� Mov ErrorCAP, 0�������� ;Supone que no hay errores y que se est�
�� Mov Cantidad, 0�������� ; operando sobre la cantidad 1
�� Call ConvNUM����������� ;Convierte cantidad 1 a binario
�� Cmp ErrorCAP, 1�������� ;Verifica si hubo error
�� Jz CAPCANT01����������� ;En caso afirmativo regresa a la captura.
�� Mov CantUnoR, Bx������� ;Guarda el resultado de la conversi�n
�CAPCANT02:
�� Mov ErrorCAP, 0�������� ;Supone que no hay error
�� Mov Cantidad, 1�������� ;Indica a ConvNUM que se trabajar� con cantidad 2
�� Mov Dx, Offset CantDosM ;Mensaje de captura
de cantidad 2
�� Call Imprime
�� Mov Ah, 0Ah������������ ;Captura de la cantidad 2
�� Mov Dx, Offset CantDosM
�� Int 21H
�� Call ConvNum����������� ;Convierte la cantidad 2 a binario
�� Cmp ErrorCAP, 1�������� ;Verifica si existi� algun error
�� Jz, CAPCANT02���������� ;En caso afirmativo regresa a la captura
�� Mov CantDosR, Bx������� ;Almacena el valor binario de cantidad 2
�;La siguiente parte es el proceso de selecci�n
de la operaci�n
�;Que se realizara:
�� Mov Al, Funcion�������� ;Carga en Al la funci�n que seleccion� el usuario
�� Cmp Al, 31h������������ ;Revisa si es 1
�� Jne FUNCION2����������� ;Si no es brinca a FUNCION2
�� Call Multiplica�������� ;Multiplica las cantidades
�� Jmp OTRA��������������� ;Regresa al men� principal
�FUNCION2:
�� Cmp Al, 32h������������ ;Revisa si es 2
�� Jne FUNCION3����������� ;Si no es brinca a FUNCION3
�� Call Divide������������ ;Divide las cantidades
�� Jmp OTRA
��������������������������������������
Derechos Reservados.1995����������������������������������� 120
�
���������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
�FUNCION3:
�� Cmp Al, 33h������������ ;Revisa si es 3
�� Jne FUNCION4����������� ;Si no es brinca a FUNCION4
�� Call Suma�������������� ;Suma las cantidades
�� Jmp OTRA
�FUNCION4:
�� Cmp Al, 34h������������ ;Revisa si es 4
�� Jne FUNCION5����������� ;Si no es brinca a FUNCION5
�� Call Resta������������� ;Resta las cantidades
�� Jmp OTRA
�FUNCION5:
�� Mov Ax, 4C00h���������� ;Esta funci�n termina la ejecuci�n
�� Int 21h���������������� ;del programa
�; Procedimientos o rutinas del programa
�
�Multiplica Proc Near����� ;Indicador de inicio de procedimiento
�� Xor Dx, Dx������������� ;Dx = 0
�� Mov Ax, CantUnoR������� ;Primera cantidad
�� Mov Bx, CantDosR������� ;Segunda cantidad
�� Mul Bx ;Multiplica
�� Call ConvASCII��������� ;Convierte en ASCII
�� Mov Dx, Offset Resulta� ;Imprime mensaje del resultado
�� Call Imprime
�� Mov Dx, Offset ResultaR ;Imprime resultado
�� Call Imprime
�� Ret�������������������� ;Regresa al programa principal
�Multiplica Endp���������� ;Indicador de fin de procedimiento
�
������������������������������������� Derechos
Reservados.1995����������������������������������� 121
���������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
Divide Proc Near
�� Mov Ax, CantUnoR������� ;Carga la cantidad 1 (dividendo)
�� Mov Bx, CantDosR������� ;Carga la cantidad 2 (divisor)
�� Cmp Bx, 0�������������� ;Revisa que el divisor no sea cero
�� Jnz DIVIDE01����������� ;Si no es cero brinca a DIVIDE01
�� Mov Cantidad, 3�������� ;Hubo error asi que despliega el mensaje y regresa al
programa
�� Call HuboError
�� Ret
�DIVIDE01:
�� Div Bx����������������� ;Efect�a la divisi�n
�� Xor Dx, Dx������������� ;Dx = 0. El residuo no es utilizado
�� Call ConvASCII��������� ;Convierte en ASCII el resultado
�� Mov Dx, Offset Resulta� ;Despliega el mensaje del resultado
�� Call Imprime
�� Mov Dx, Offset ResultaR ;Depliega el
resultado
�� Call Imprime
�� Ret
�Divide Endp
�Suma Proc Near
�� Xor Dx, Dx������������� ;Dx = 0 por si acaso existe acarreo
�� Mov Ax, CantUnoR������� ;Cantidad 1
�� Mov Bx, CantDosR������� ;Cantidad 2
�� Add Ax, Bx������������� ;Realiza la suma
�� Jnc SUMACONV����������� ;Si no existi� acarreo brinca a SUMACONV
�� Adc Dx,0��������������� ;Si existi�
�SUMACONV:
�� Call ConvASCII��������� ;Convierte en ASCII el resultado
�� Mov Dx, Offset Resulta� ;Despliega el mensaje del resultado
�� Call Imprime
�� Mov Dx, Offset ResultaR ;Despliega el
resultado
�
������������������������������������� Derechos
Reservados.1995����������������������������������� 122
���������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
�Call Imprime
�� Ret
�Suma Endp
�Resta Proc Near
�� Xor Dx, Dx������������� ;Dx = 0 por si existe acarreo
�� Mov Ax, CantUnoR������� ;Ax = cantidad 1
�� Mov Bx, CantDosR������� ;Bx = cantidad 2
�� Sub Ax, Bx������������� ;Realiza la resta
�� Jnc RESTACONV���������� ;Si no hay acarreo brinca a RESTACONV
�� Sbb Dx,0��������������� ;Si hay acarreo
�RESTACONV:
�� Call ConvASCII��������� ;Convierte en ASCII el resultado
�� Mov Dx, Offset Resulta� ;Despliega el mensaje del resultado
�� Call Imprime
�� Mov Dx, Offset ResultaR ;Despliega el
resultado
�� Call Imprime
�� Ret
�Resta Endp
�Imprime Proc Near
�� Mov Ah, 09������������� ;Utiliza la funci�n 9 de la interrupci�n
�� Int 21h���������������� ;21h para desplegar una cadena
�� Ret
�Imprime Endp
�ObtenTecla Proc Near
�� Mov ah, 0�������������� ;Utiliza la interrupci�n 16h para
�� Int 16h���������������� ; leer una tecla
�� Ret
�ObtenTecla Endp
������������������������������������� Derechos
Reservados.1995����������������������������������� 123
���������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
�ConvNum Proc Near
�� Mov Dx, 0Ah���������������� ;Multiplicador es 10
�� Cmp Cantidad, 0������������ ;Verifica si es la cantidad 1
�� Jnz CONVNUM01�������������� ;No fu, entonces es cantidad 2 y brinca
�� Mov Di, Offset CantUnoN + 1 ;Bytes leidos
en la cantidad 1
�� Mov Cx, [Di]
�� Mov Si, Offset CantUnoN + 2 ;La cantidad 1
�� Jmp CONVNUM02
�CONVNUM01:
�� Mov Di, Offset CantDosN + 1 ;Bytes leidos
de la cantidad 2
�� Mov Cx, [Di]
�� Mov Si, Offset CantDosN + 2 ;La cantidad 2
�CONVNUM02:
�� Xor Ch, Ch ;CH = 0
�� Mov Di, Offset Potencia���� ;Direcci�n de la tabla de potencias
�� Dec Si
�� Add Si, Cx
�� Xor Bx, Bx
�� Std
�CONVNUM3:
�� Lodsb������������������ ;Carga en AL el byte cuya direcci�n es DS:SI
�� Cmp Al, "0"������������ ;Compara el byte con el d'gito 0
�� Jb CONVNUM04����������� ;Si es menor es inv�lido y brinca
�� Cmp Al, "9"������������ ;Compara el byte con el d'gito 9
�� Ja CONVNUM04����������� ;Si es mayor es inv�lido y brinca
�� Sub Al, 30h����� �������;Convierte el
d'gito de ASCII a binario
�� Cbw�������������������� ;Convierte a palabra
�� Mov Dx, [Di]����������� ;Obtiene la potencia a ser usada para multiplicar
�� Mul Dx����������������� ;Multiplica el n�mero
�� Jc CONVNUM05����������� ;Si hay acarreo brinca (fu mayor a 65535)
�� Add Bx, Ax������������� ;Suma el resultado a BX
�
��������������������������������������
Derechos Reservados.1995����������������������������������� 124
������������������������� ���UNIVERSIDAD DE GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
� Jc CONVNUM05����������� ;Si hay acarreo brinca
�� Add Di, 2�������������� ;Va a la siguiente potencia de 10
�� Loop CONVNUM03��������� ;Brinca hasta que CX sea igual a 0
�� Jmp CONVNUM06
�CONVNUM04:
�� Call HuboERROR��������� ;Hubo algun error, depliega mensaje
�� Jmp CONVNUM06���������� ;Brinca a CONVNUM06
�CONVNUM05:
�� Mov Cantidad, 2�������� ;Hubo acareo en la conversi�n, lo que
�� Call HuboERROR����� ����; significa que la
cantidad es mayor a 65535
�CONVNUM06:
�� Cld�������������������� ;Regresa la bandera de direcci�n a su estado
�� Ret�������������������� ; normal
�ConvNum Endp
�ConvASCII Proc Near
�� Push Dx
�� Push Ax���������������� ;Guarda el resultado en la pila
�� Mov Si, Offset ResultaR ;Inicializa la
variable ResultaR
�� Mov Cx, 10������������� ; llenandola con asteriscos
�� Mov Al, '*'
�ConvASCII01:
�� Mov [Si], Al
�� Inc Si
�� Loop ConvASCII01
�� Pop Ax
�� Pop Bx
�� Mov Bx, Ax������������� ;Palabra baja de la cantidad
�� Mov Ax, Dx������������� ;Palabra alta de la cantidad
�� Mov Si, Offset ResultaR ;Cadena donde se
guarda el resultado
�� Add Si, 11
�� Mov Cx, 10������������� ;Divisor = 10
���������� ����������������������������Derechos Reservados.1995����������������������������������� 125
���������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
�OBTENDIGITO:
�� Dec Si
�� Xor Dx, Dx������������� ;DX contrendr� el residuo
�� Div Cx����������������� ;Divide la palabra alta
�� Mov Di, Ax������������� ;Guarda cociente en DI
�� Mov Ax, Bx������������� ;Carga palabra baja en AX
�� Div Cx����������������� ;DX contiene registro de la divisi�n
�� Mov Bx, Ax������������� ;Guarda el cociente
�� Mov Ax, Di������������� ;Regresa la palabra alta
�� Add Dl, 30h������������ ;Convierte residuo en ASCII
�� Mov [Si], Dl����������� ;Lo almacena
�� Or Ax, Ax�������������� ;Si la palabra alta no es cero
�� Jnz OBTENDIGITO�������� ; brinca a OBTENDIGITO
�� Or Bx, Bx�������������� ;Si la palabra baja no es cero
�� Jnz OBTENDIGITO�������� ; brinca a OBTENDIGITO
�� Ret
�ConvASCII Endp
�HuboERROR Proc Near
�� Cmp Cantidad,0��������� ;Es la cantidad 1?
�� Jnz HUBOERROR02�������� ;no
�� Mov Dx, Offset Error1
�� Call Imprime
�� Mov ErrorCAP, 1�������� ;Enciende la bandera de error
�� Jmp HUBOERROR05
�HUBOERROR02:
�� Cmp Cantidad, 1�������� ;Es la cantidad 2?
�� Jnz HUBOERROR03�������� ;no
�� Mov Dx, Offset Error2
�� Call Imprime
�� Mov ErrorCAP, 1
�
��������������������������������������
Derechos Reservados.1995����������������������������������� 126
���������������������������� UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sisyemas deInformaci�n.
� Jmp HUBOERROR05
�HUBOERROR03:
�� Cmp Cantidad, 2�������� ;Es una cantidad fuera de rango?
�� Jnz HUBOERROR04�������� ;no
�� Mov Dx, Offset Error3
�� Call Imprime
�� Mov ErrorCAP, 1
�� Jmp HUBOERROR05
�HUBOERROR04:
�� Mov Dx, Offset Error4�� ;Error de divisi�n por cero
�� Call Imprime
�� Mov ErrorCAP, 1
�HUBOERROR05:
�� Ret
�HuboERROR Endp
�.STACK
�End Empieza
��������������������������������������
Derechos Reservados.1995����������������������������������� 127
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas de Informaci�n.
Directorio y
bibliograf'a
Crditos
Ing. M�nico Brise�o
C.
���� Idea original
Hugo Eduardo
Prez P.
���� Desarrollo e implementaci�n
Bibliograf'a
Lenguaje Ensamblador
Para Microcomputadoras IBM
���� J. Terry Godfrey
���� Ed. Prentice Hall Hispanoamericana, S.A.
���� Mxico
Ensamblador B�sico
���� A. Rojas
���� Ed. Computec Editores S.A. de C.V.
���� Mxico
IBM Personal
Computer Assembly Languaje Tutorial
���� Joshua Auerbach
���� Yale University
��������������������������������������
Derechos Reservados.1995����������������������������������� 128
������������������������������ UNIVERSIDAD DE
GUADALAJARA
������������������ Coordinaci�n General de
Sistemas deInformaci�n.
�Necesitamos tu
opini�n!
Nuestra finalidad
con este documento es llevar el conocimiento a tus manos.
Para hacerlo en una
forma m�s eficiente es necesario conocer tu opini�n,
sugerencias y
cr'ticas.
Nos gustar'a que nos
mandaras tus programas escritos en ensamblador (�En
c�digo fuente por
favor!) para mostrarlos en este espacio, as' como para
darte el
reconocimiento que mereces. Procura incluir todos tus datos: tu
nombre, domicilio,
profesi�n y tu direcci�n electr�nica (si la tienes), y la
versi�n de
ensamblador que usas.
Manda tus programas
y sugerencias relacionados con este tutorial a la
direcci�n
[email protected] o si lo deseas manda tus comentarios
sobre el servidor en
general a la direcci�n [email protected]
Como informaci�n soy
un alumno de la Universidad de Guadalajara, del
Departamento de
Ciencias Computacionales. Estudio la carrera de Ingenier'a
en Computaci�n y me
gustar'a aprender de ti. La primera direcci�n es mi
direcci�n personal,
as' que sientete libre de mandar tus comentarios.
��������������������������������������
Derechos Reservados.1995����������������������������������� 129