Académique Documents
Professionnel Documents
Culture Documents
Ensamblador
Emiliano Llano Daz
ISBN 970-91050-0-0
SEP 10137/91
Registrado ante la SEP en la propiedad intelectual del autor
Contenido
Contenido i
Introduccin xiii
Captulo 1 1
Interpretando el Contenido de la Memoria . . . . . . . . . . . . . . 5
Registros 9
Forma de Usar los Registros. . . . . . . . . . . . . . . . . . . . . 11
Banderas de Estado . . . . . . . . . . . . . . . . . . . . . . . . . 15
Memoria de Acceso Aleatorio 24
Puntos Importantes del Captulo 32
Captulo 2 33
.Direccionamiento Implcito . . . . . . . . . . . . . . . . . . . . 41
Direccionamiento directo a memoria 42
Direccionamiento Indirecto 42
Intrpretes 46
Compiladores 47
Puntos Importantes del Captulo 50
3. Sistemas Numricos 53
Ensamblador
ii
Introduccin
iii
Ensamblador
iv
Introduccin
Introduccin
Por qu usar ensamblador?
Las razones para APRENDER ensamblador no son las mismas, en general, que las razones para USAR ensamblador.
Una de las malas razones para querer usar ensamblador es porque se
piensa que ejecutar mucho ms rpido que una secuencia en particular
de un lenguaje de propsito general como Pascal, Fortran, C o hasta BASIC compilado. Aunque esto en general es verdadero, el tiempo y
recursos invertidos en el desarrollo pueden al final no valer la pena con
respecto a la ganacia de velocidad obtenida.
Por otro lado, los lenguajes de alto nivel tienden a aislar al usuario de la
mquina, en lo que radica su fuerza y su debilidad. La gran mayora de los
lenguajes moderno de alto nivel proveen mecanismos para escribir
secuencias en ensamblador, aunque algunos de forma torpe (PEEK y
POKE de BASIC). Esto crea complicaciones en la implementacin y en
el seguimiento y mantenimiento de programas elaborados de esta forma.
Algunas veces el sistema o lenguaje hace muy poco por nosotros; por
ejemplo, con el adaptador asncrono, el sistema provee mecanismos que
quedan cortos de nuestra espectativa y deben ser irremediablemente
mejorados o pagar las consecuencias en una comunicacin de alto nivel
(redes, interfaces, etc.).
Otras veces el sistema o lenguaje hace demasiado por nosotros; por
ejemplo en el control de las teclas que conforman un teclado, donde
previamente se han definido todas las secuencias que se generan al
presionar una tecla.
vii
Ensamblador
viii
Introduccin
ix
Captulo 1
1.1 Componentes Bsicos de un Sistema
Si examinamos las microcomputadoras actuales, vemos que aunque hay
diferencias en el tamao fsico de los componentes, de los sistemas y entre dist intos ti pos de computadoras (mini computadoras,
macrocomputadoras y computadoras personales o microcomputadoras),
la arquitectura empleada en todos los casos es muy similar. Esto se debe
al hecho de que las computadoras usan lgica binaria (de unos y ceros) y
emplean el sistema binario en casi todos sus componentes, lo que exige
un cierto tipo de estrategia para resolver los problemas derivados de esta
seleccin.
1-1
Ensamblador
1-2
Componentes Bsicos de un
Sistema
ms comn de palabra en las microcomputadoras es de 8 bits que se
nombra byte, de 16 bits, de 32 de 64 bits.
Quiz el nico atributo que diferencia a las computadoras de otras
mquinas es que se les puede decir qu deben hacer. Esto se logra con
palabras que contienen patrones de bits que son significativos para la
computadora. Este significado preciso se lo da el fabricante de
computadoras y as, un patrn puede significar suma dos nmeros
mientras que otro ligeramente distinto significar quiz guarda un
resultado en una localidad especfica.
El grupo de patrones definido por el fabricante forma lo que se llama el
juego de instrucciones. La variedad de operaciones distintas que
contiene este juego de instrucciones obedece a criterios de diseo del
circuito. En general todo juego de instrucciones cuenta con operaciones
aritmticas, de manipulacin de bits, de comparaciones, de entrada y
salida, etc. mismas que analizaremos en detalle para un circuito
especfico en los captulos siguientes.
Todos los datos, tanto de instrucciones de programa como datos, son
almacenados en una serie de circuitos conocidos como memorias pues
tienen la particularidad de recordar la informacin contenida en ellos.
Las memorias son organizadas como casilleros nicos en los que se
guarda la informacin. Cada casillero o localidad de memoria tiene un
identificador que lo hace distinto a cualquier otro casillero para
propsitos de identificacin y de almacenamiento de informacin. A este
identificador se le llama direccin y sin entrar en ms detalles hasta la
siguiente seccin baste decir que la direccin es nica e irrepetible para
evitar confusiones y que la capacidad del casillero forma la palabra de la
computadora (nmero de bits que es posible almacenar en la memoria).
1-3
Ensamblador
1-4
Componentes Bsicos de un
Sistema
1-5
Ensamblador
1-6
Componentes Bsicos de un
Sistema
Para que el manejo de texto sea completo debe de incluir al menos las 26
letras en minsculas y maysculas, los nmeros y una serie de signos
especiales que usamos diariamente en nuestra comunicacin como son el
punto, la coma, etc. En conjunto, los caracteres ms usados suman
alrededor de 87. Una palabra de 7 bits es suficiente para su representacin
pero es universalmente aceptada la codificacin utilizando 8 bits (ver
captulo 2).
En algunos sistemas con longitud de palabra de 8 bits, se usa el cdigo
ASCII de 7 bits y el bit libre se utiliza para verificar errores en los datos
por medio de un procedimiento llamado paridad. En otros sistemas se
usa un cdigo de 8 bits ASCII y se agrega a la memoria un bit ms que
sirve para la comprobacin de paridad. A este bit se le conoce como bit de
paridad.
La paridad consiste en una verificacin sencilla de errores en la que se
agrega un bit al cdigo. La paridad puede ser:
Par
Impar
El bit de paridad se cambia a 1 a 0 para que el nmero de bits 1 de una
palabra sea siempre par o impar, segn el tipo de paridad que se haya
escogido. Si el tipo de paridad que se escoge es par, el bit de paridad se
limpia o fija para que el nmero total de unos de la palabra sea siempre
par. Para clarificar el punto inclumos un ejemplo:
Palabra a proteger con un bit de paridad: 1010101
Como el nmero de 1 de la palabra ya es par, el bit de paridad ser en este
caso 0.
Muchos esquemas muy elaborados son usados para verificar la
consistencia de los datos y asegurarse que no contengan errores, an ms,
existen algoritmos para determinar dnde estn los errores y tratar de
corregirlos. Estas tcnicas de deteccin de errores no tienen que ver nada
en particular con la arquitectura de las computadoras o la programacin
en ensamblador y, por lo tanto, no se discuten aqu. Para mayor
informacin consulte la bibliografa, en es pe cial el libro
Telecomunicaciones y Teleproceso.
1-7
Ensamblador
1-8
Componentes Bsicos de un
Sistema
1.3.1 Registros
Es necesario un almacenamiento provisional (o varios) donde guardar
los nmeros para trabajar con ellos, as como un registro donde
almacenar el resultado de las operaciones que llamamos acumulador y
abreviaremos con A. En el acumulador podemos almacenar informacin
tanto antes de operar con ella, como el resultado de las operaciones con
los datos binarios. Por el momento y para simplificar las cosas
consideremos que tenemos slo un acumulador y que ste es de 8 bits.
Se requiere de este tipo de almacenamiento provisional por dos razones:
1. El contenido de la memoria slo se puede leer o escribir, no es
posible operar sobre los registros de la memoria principal debido
al diseo de las computadoras actuales.
2. Es posible tomar los datos directamente de memoria, operar
sobre ellos y regresar el resultado otra vez a la memoria principal,
pero una cantidad adicional importante e innecesaria de circuitos
lgicos seran requeridos para esto, complicando el diseo,
subiendo el costo y disminuyendo la rapidez de las operaciones
como ser aparente segn avancemos en el libro.
Para poder accesar una palabra de memoria, tanto para leer como para
escribir su contenido, necesitamos tener su direccin y sta se almacena
en un registro especial que llamaremos registro contador de datos (data
counter register) que abreviaremos con sus siglas en ingls: DC.
El tamao de este registro depende de la cantidad de memoria principal
que la computadora pueda accesar directamente. En la figura 1.3
suponemos un registro contador de datos de 16 bits que nos da una
capacidad de memoria de 65,536 palabras o 64K bytes (si la palabra es de
1 byte).
1-9
Ensamblador
1-10
Componentes Bsicos de un
Sistema
1-11
Ensamblador
E0E0
E0E1
E0E2
1-12
Componentes Bsicos de un
Sistema
1-13
Ensamblador
1-14
Componentes Bsicos de un
Sistema
1-15
Ensamblador
1-16
Componentes Bsicos de un
Sistema
5. La lnea del reloj.
Mostramos en la figura 1.5 el diagrama parcial y esquematizado de un
circuito de UPC.
1-17
Ensamblador
1-18
Componentes Bsicos de un
Sistema
programa en ensamblador es guardado como una serie de cdigos
binarios dentro de la memoria principal (RAM o ROM). Al programa en
ensamblador se le conoce con el nombre de macroprograma y a cada
macroinstruccin le corresponden uno o ms microprogramas dentro de
la Unidad de Procesamiento Central que deben ser ejecutados para
generar la respuesta esperada.
Un microprograma guardado en la Unidad de Control tiene memoria
para datos, que consiste en los registros de la UPC, ademas de
almacenamiento interno a la misma Unidad de Con trol. Un
macroprograma tambin tiene una rea de almacenamiento, ya sea provisional (RAM) o definitiva (ROM) como describimos en la siguiente
seccin.
La complejidad de las operaciones asociadas con una macroinstruccin
es funcin direct a del tamao del microprograma que la
macroinstruccin inicia. Pero existe el lmite impuesto por el tamao
fsico que puede tener la Unidad de Control y esto se hace ms patente en
las microcomputadoras, donde toda la UPC se encuentra contenida en un
solo circuito.
La Unidad de Control de cada computadora no es ms que un
microprograma. Si se permite al usuario modificarlo se dice que la
computadora es microprogramable. Si la Unidad de Control se disea
como parte del diseo lgico de la computadora y forma parte inalterable
de la Unidad de Procesamiento Central, entonces, la computadora no es
microprogramable.
1-19
Ensamblador
1-20
Componentes Bsicos de un
Sistema
1.7 La Memoria
La memoria de la computadora no est concentrada en un slo lugar; los
dispositivos de almacenaje estn distribuidos en toda la mquina. En la
parte ms interna encontramos a los registros de operacin que son
registros utilizados por la unidad de control y la aritmtica de la
computadora. Los clculos se realizan con los datos que se toman de
estos registros, por ejemplo, la suma, multiplicacin y corrimientos son
todos realizados en estos almacenamientos provisionales. El proceso actual de informacin se realiza en la localidad de estos registros.
Viendo hacia afuera, la siguiente categora de registros de
almacenamiento que encontramos es llamada memoria de alta
velocidad, memoria interna o memoria principal. Esta seccin de la
memoria de la computadora consiste en un conjunto de registros de
almacenamiento, cada uno de los cuales es identificado con una direccin
1-21
Ensamblador
1-22
Componentes Bsicos de un
Sistema
en esta seccin de la memoria, un compromiso entre el costo y la
velocidad debe buscarse. El mismo tipo de compromiso se realiza en el
caso de la memoria auxiliar en el que se almacenan entre 360,000 y 1015
bits, siendo muy caro utilizar los mismos dispositivos que para la
memoria principal.
Es importante darse cuenta al considerar la velocidad de operacin, que
antes de que una palabra puede ser leda, es necesario localizarla. El
tiempo para localizar y leer una palabra de memoria es llamado tiempo
de acceso. El procedimiento para localizar informacin puede ser
dividido en dos clases:
Acceso Aleatorio
Acceso Secuencial
Los dispositivos de almacenaje que tiene acceso aleatorio son aquellos
en los que la localizacin dentro del dispositivo puede ser seleccionada
arbitrariamente sin seguir ningn orden y el tiempo aproximado de
acceso es aproximadamente igual para cada una de las localidades de
memoria del dispositivo. Los registros internos de trabajo o la memoria
principal es un ejemplo de un dispositivo de almacenamiento de acceso
aleatorio.
Por otro lado los dispositivos de acceso secuencial necesitan ser
recorridos en orden para llegar a cierta localidad de memoria, por lo que
el tiempo de acceso varia de acuerdo a la localidad.
Otra forma de subdividir los dispositivos de almacenaje es de acuerdo a
si son dispositivos del tipo
Dinmicos
Estticos
En los estticos, la informacin, una vez grabada en su localidad, no es
olvidada o borrada por el tiempo en que el dispositivo tenga energa
elctrica o la informacin no sea cambiada explcitamente. Como
contraparte, en un dispositivo dinmico, una vez guardada la
informacin en una localidad, sta se olvida en un tiempo finito, por lo
que se debe recordar o refrescar constantemente.
1-23
Ensamblador
1-24
Componentes Bsicos de un
Sistema
binarios, y a este nmero se le llama longitud de la palabra de la
memoria. Una memoria que contenga 4,096 localidades distintas de
memoria, cada una de ellas capaz de almacenar 16 bits binarios, es
llamada memoria de 16 bits 4,096 palabras o en el lenguaje vernculo
de la computadora memoria de 4K 16 bits. Puesto que las memorias
generalmente vienen en potencias de 2, el sufijo K significa en este caso
1,024 y no 103, como en el caso decimal, pues se entiende que las 2N
localidades de memoria estn disponibles. Por ejemplo una memora de
16 bits de 216 palabras es llamada memoria de 64K 16 bits.
Las memorias puede ser ledas (los datos pueden ser tomados de) o
escritas (los datos son almacenados en la memoria). Las memorias en las
que es posible leer y escribir son llamadas memorias de lectura y
escritura y errneamente conocidas como RAM (Random Access Memory, memoria de acceso aleatorio) ya que las memorias de slo lectura
(ver siguiente prrafo) tambin entran en esta clasificacin. A las
memorias en las que solamente es posible leer y no permiten escritura son
llamadas memorias de slo lectura o ROM (Read only memory).
Una palabra de informacin binaria puede ser almacenada en grupos,
por ejemplo 8 bits en unidades de memoria. Las entradas y salidas de
estas unidades se encuentran interconectadas de forma que el grupo de
bits binarios entre y salga de forma serial o secuencial (uno a la vez), o
sean movidos en paralelo (todo el grupo a la vez).
Cuando se trata de registros dentro de la UPC (CPU) los programadores
usualmente los representan como pequeas cajas una junto a otra y
dentro de ellas un cero o uno lgico que representa su contenido.
1.7.2 Direccin
Incrementando el nmero de unidades de memoria de almacenamiento
podemos aumentar el nmero de bits disponibles. Pero un problema fundamental surge: Cmo poder accesar a cada una de las localidades sin
confusin?
La solucin es usar una forma de direccin. Podemos aplicar un nico
grupo de dgitos binarios a una serie de lneas de seleccin y de esta forma
una localidad nica queda disponible. En la figura 1.8 mostramos una
memoria de semiconductores esttica tpica arreglada de forma que sus
celdas puedan ser seleccionadas independientemente con un cdigo
binario nico llamado palabra de direccin.
1-25
Ensamblador
1-26
Componentes Bsicos de un
Sistema
son programables: las memorias de slo lectura programables o PROM
(pro gram ma ble read only mem ory)memoria de slo lectura
programable. Estos circuitos permiten grabar la informacin una sola vez
y de ah en adelante se comportan exactamente igual a un ROM. Si se
realizan circuitos experimentales y son constantes los cambios de diseo
de datos y programas en la etapa inicial o se requiere de la flexibilidad de
poder borrar de vez en cuando el contenido de la memoria ROM y
reprogramarla, se utilizan los circuitos de memoria de slo lectura
programables y borrables o EPROM (erasable programmable read only
memory). Estos circuitos pueden ser programados, tal como los PROM
pero tienen una ventana de cuarzo en la parte superior del empaque por la
que se puede borrar la informacin usando una luz ultravioleta.
El atributo ms importante de la memoria ROM es que la informacin
grabada en ella no se borra si el voltaje que requiere el circuito para
funcionar es interrumpido. Tales memorias son conocidas como no
voltiles. En contraste, casi todo tipo de memoria RAM es voltil.
La memoria ROM tiene muchas aplicaciones en sistemas digitales.
Puede ser usada, por ejemplo, para contener valores arbitrarios de una
tabla de verdad. Cuando una tabla de verdad tiene muchas variables
lgicas de entrada y salida y su realizacin requiere de un gran nmero de
compuertas, puede ser econmicamente substituida por una memoria
ROM. Se usa tambin en conversin de cdigos para despliegue
numrico. Tiene una amplia aplicacin en clculo numrico donde se
requiere de muchas operaciones que pueden ser substituidas por una
bsqueda en tab las, tales como las funciones trascendentales,
multiplicacin, divisin, logaritmos, etc. Pero principalmente guardan el
programa que forma el Sistema Operativo de la mquina en cuestin.
1-27
Ensamblador
1-28
Componentes Bsicos de un
Sistema
acumulador
BX
base
CX
cuenta
DX
datos
BP
apuntador base
SI
apuntador fuente
DI
apuntador datos
IP
apuntador de instruccin
Registros segmentos
CS
segmento de cdigo
DS
segmento datos
ES
segmento extra
SS
segmento pilas
1-29
Ensamblador
OPERACION
AX
AL
AH
BX
Traduce
CX
CL
DX
SP
SI
DI
IP
Funcin
OF
saturacin
DF
IF
habilita interrupciones
TF
SF
ZF
cero
AF
acarreo auxiliar
PF
pariedad (par)
CF
acarreo
IOPL
NT
tarea anidada
RF
Continua operacin
VM
Modo virtual
1-30
Componentes Bsicos de un
Sistema
anteriores, y son controlados por los registros de segmentos, cada uno
indicando el final del segmento en particular.
Slo existe una restriccin con respecto a los segmentos: deben
comenzar en un prrafo que es una direccin que es di visible
exactamente entre 16. Para esto, los 4 bits menos significativos deben ser
cero.
Los segmentos pueden ser adyacentes, disjuntos, sin traslape o con
traslape parcial o total. Si requerimos usar un registro como apuntador a
memoria, necesitaremos sumar un desplazamiento para poder completar
las 32 lneas de direccionamiento disponibles. Este desplazamiento se indica en la tabla 1.4.
Tabla 1.4 Uso del Desplazamiento
Tipo de referencia
Desplazamiento
Traer instruccin
CS
Ninguno
IP
SS
Ninguno
SP
CS ES SS
direccin efectiva
Fuente cadena
DS
CS ES SS
SI
Destino cadena
ES
Ninguno
DI
SS
CS ES SS
direccin efectiva
1.9 Resumen
Se introduce a los componentes de una UPC y se muestra como
funciona est. Se mencionan y explican brevemente algunos
componentes externos a la UPC en especial circuitos auxiliares como la
memoria y sus clasificaciones. En este captulo introducimos el concepto
de instruccin y su forma de interpretacin dentro de la UPC, los
registros indispensables para el funcionamiento de la UPC y el ALU.
Se introduce un circuito tpico de gran popularidad en Mxico y el
mundo: el Intel 80x86.
1-31
Ensamblador
1.10 Bibliografa
Llano Emiliano Sistemas Digitales y Arquitectura de Computadoras.
Unam 1993. Captulo 10 y 11.
1-32
Captulo 2
2.1 Otros lenguajes y el ensamblador
No se debe pasar por alto que un sistema de computacin, no
importando la complejidad de los varios componentes electrnicos que
lo formen, no es ms que un juguete caro a menos de que exista un
propsito de su existencia y un programa que haga que este propsito se
cumpla. Es este programa, formado por una serie de instrucciones
precisas y arreglado en un orden lgico, que hace de la computadora una
herramienta til.
Existen muchos tipos de programas y de sistemas de programas, a los
que en conjunto se conocen como Programas (software), en oposicin a
los elementos mecnicos y electrnicos llamados en conjunto Hardware. Algunos de estos programas se usan para un tarea en particular
como puede ser el caso de una nmina. Otros programas se usan para
manejar los distintos puertos de entrada y salida de una computadora. La
operacin tanto mecnica como lgica de los dispositivos externos al
sistema por donde la informacin es introducida y entregada, es
controlada directamente por estos programas. Existe an otro tipo de
programas que realizan funciones muy especficas de computacin como
realizar las funciones que la UAL no puede realizar o realiza muy
despacio. Algunas veces se conoce a los programas como subrutinas pues
forman parte de programas mucho ms grandes. Para un sistema de
computacin dado, muchos programas pueden reunirse y guardarse en un
sistema de almacenamiento externo tal como disco magntico flexible
(medio muy comn), posteriormente se utiliza un programa que pueda
extraer a los primeros del medio donde fueron almacenados y ejecutarlos.
A este programa se le conoce como sistema operativo (operating sys-
2-33
Ensamblador
2-34
2-35
Ensamblador
2-36
Mnemnico
Operando
Comentario
Cada lnea fuente de programa representa una lnea objeto traducida por
el programa que se denomina ensamblador.
El campo del mnemnico es el ms importante y es el nico campo
obligatorio que aparece en cada lnea.
etiqueta
operando
mnemnico
LIM
LMA
AIA
BZ
resultado es cero
SRA
INC
datos
JMP
byte
SALIR
DC0,ADDR1
AQUI
H"0F"
SALIR
comentario
DC0
AQUI
Ntese que lo nico sagrado e inalterable son los cdigos binarios de las
instrucciones; los mnemnicos del ensamblador pueden ser alterados
siempre y cuando se reprograme al programa ensamblador para
reconocerlos y hacer la traduccin adecuada.
El campo de las etiquetas puede o no tener informacin y si la contiene,
sirve al ensamblador para llevar apuntadores de sitios interesantes dentro
del programa a los que seguramente queremos regresar. Estos sitios son
apuntadores en memoria pues no tenemos forma de usar la direccin
verdadera al no saber en qu lugar la pondr el ensamblador. La direccin
en donde comienza a ensamblarse el programa depende de la longitud del
sistema operativo, del tamao del ensamblador, de instrucciones
especficas, etc.
El campo de los operadores sirve para proveer informacin necesaria a
la instruccin en caso de que exista. Por ejemplo, no podemos sumar un
nmero al registro Acumulador si no indicamos en el campo de operando
este nmero.
2-37
Ensamblador
2.4 Ensambladores
Un programa sencillo como el mostrado en la seccin 1.3, no puede ser
ensamblado tal como se present; es necesario informar al programa
ensamblador de varios elementos antes de que pueda comenzar a realizar
su trabajo. Por ejemplo, es necesario informarle en qu localidad de
memoria queremos comenzar a ensamblar el programa.
2-38
ORG
EQU
LIM
LMA
AIA
BZ
H"03FF"
H"0F"
DC0,ADDR1
mascara
SALIR
cero
SALIR
SRA
INC
JMP
END
DC0
AQUI
2-39
Ensamblador
0110
ejemplo ENDS
;******************************************************************
END inicio
Symbols-1
Segments and Groups:
2-40
Name
Length
DATAREA . . . . . . . 0502
EJEMPLO . . . . . . . . 0110
Symbols
Name
Type
ADDR1
L WORD
AQUI
L NEAR 0104
CODIGO F PROC 0000
INICIO
L NEAR 0100
MASCARA
NUMBER
SALIR
L NEAR 0110
FILENAME
TEXT ensambla
64 Source Lines
64 Total Lines
10 Symbols
51078 + 264170 Bytes symbol space free
0 Warning Errors
0 Severe Errors
2-41
Ensamblador
2-42
2-43
Ensamblador
2-44
USO
programacin cientfica
negocios
objetos
sistemas
simulacin
enseanza de tcnicas correctas de programacin
interfases grficas y ventanas, objetos
interfases grficas y ventanas, objetos
2-45
Ensamblador
2.8.1 Intrpretes
Un programa intrprete toma el cdigo desarrollado por el usuario y
escrito en un procesador de palabras o generalmente en un procesador de
texto proporcionado por el mismo intrprete y al darle la orden de
ejecutar un programa, traduce una a una las instrucciones del cdigo
fuente a lenguaje de mquina.
Esto tiene una serie de ventajas y desventajas:
Ventajas:
Desventajas:
2-46
2.8.2 Compiladores
Un programa compilador ejecutar el mismo programa que un
intrprete, pero la accin se realiza de un modo distinto en cada caso. El
compilador toma un programa fuente como una unidad y lo traduce a
programa objeto en varios pasos dejando un programa ejecutable que ya
no requiere de ningn otro programa para ejecutarse a excepcin del
sistema operativo.
El programa que entrega el compilador puede ejecutarse directamente
desde el procesador de comandos del sistema operativo. Para que esto
suceda, deben de existir varias condiciones:
2-47
Ensamblador
Desventajas:
2-48
2.10 Resumen
Una de las partes primordiales de un sistema de cmputo y sin el cual su
funcionamiento no es posible es el de la programacin. Por medio de un
programa podemos guiar todas las acciones de la electrnica para poder
llegar a una aplicacin prctica y til.
2-49
Ensamblador
2-50
2.11 Actividades
2.1 Investigue qu programa ensamblador viene junto con los circuitos
basados en una UPC de Motorola, tales como los Apple.
2.2 Encuentre el conjunto de algunas instrucciones de una UPC 68000
de Motorola.
2.3 Haga un programa sencillo para multiplicar dos nmeros de 8 bits en
lenguaje ensamblador inventado por usted. Use el registro Acumulador y
dos auxiliares llamados B y C. No emplee una instruccin que haga
directamente la multiplicacin.
2.12 Bibliografa
Llano Emiliano Sistemas Digitales y Arquitectura de Computadoras.
Unam 1993. Captulo 13.
Macro 86 Columbia Data Products, Inc. 1982.
MPC Operations Guide Columbia Data Products, Inc. 1982.
2-51
3. Sistemas Numricos
Como matemtico, Laplace1 apreciaba enormemente el sistema
numrico decimal. Comprenda que cientos de aos de esfuerzos
mentales as como de buena suerte dieron como resultado el sistema que
usamos y estaba en una posicin en la que poda apreciar sus ventajas.
Nuestro presente sistema numrico provee a los matemticos modernos y
cientficos con grandes ventajas sobre los usados por anteriores
civilizaciones y es un factor importante de nuestro rpido avance.
Puesto que las manos son la herramienta ms conveniente con la que la
naturaleza nos dot, los seres humanos siempre hemos tendido a usarlas
para contar. Es entonces natural y afortunado que nuestro sistema de
contar se base en el nmero de dedos que tenemos. Sin embargo pas
bastante tiempo antes de poder representar estos nmeros grficamente.
Las primeras representaciones grficas encontradas consisten en marcas
verticales y horizontales. El nmero 1 es un ejemplo de esto; es
interesante hacer notar que el 2 consista de dos marcas horizontales
unidas con una lnea y el 3 de tres marcas horizontales unidas (sistema
arbigo). Los nmeros Romanos son un buen ejemplo de lneas usadas
como base para nmeros (ver figura 3.1).
Pierre Simon marqus de Laplace (1749-1827). Astrnomo y matemtico francs que dio base
cientfica a la Hiptesis de las Nebulosas. Entre sus trabajos matemticos ms notables se destaca el
perfeccionamiento de la teora de las probabilidades.
3-53
Ensamblador
3-54
Sistemas Numricos
3-55
Ensamblador
Gottfired Wilhelm barn von Leibniz o Leibnitz (1646-1716). Filsofo y matemtico alemn
tambin erudito en ciencia, historia y derecho. Desarroll el clculo infinitesimal sin conocer la obra
de Newton en el mismo campo. Su filosofa se apoya fundamentalmente en la concepcin de un
universo compuesto por un nmero infinito de unidades de fuerza espiritual o materia a la que llama
mnadas.
3-56
Sistemas Numricos
3-57
Ensamblador
Binario
Decimal
Binario
1000
1001
10
10
1010
11
11
1011
100
12
1100
101
13
1101
110
14
1110
111
15
1111
1 1
3
+ =3
4 8
8
3-58
Sistemas Numricos
0135
.
= 1x10 -1 + 3x10 -2 + 5x10 -3
3-59
Ensamblador
1111
11.01
10100 101.11
100011 1001.00
10000
-11
1101
110.01
-100.10
1.11
3-60
Sistemas Numricos
101
11001
101
001
101
100
111.01
11101.00
110
101
100
3-61
Ensamblador
3-62
Sistemas Numricos
8421
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
0
1
2
3
4
5
6
7
8
9
Ntese que son necesarios 4 dgitos binarios para cada smbolo decimal.
Esto es ineficiente pues las combinaciones de 4 dgitos binarios son 24 =
16 de los que slo usamos 10 pero si usamos 3 dgitos 23 = 8 son
insuficientes.
Para simplificar la conversin de decimal a binario, es ms prctico
codificar un nmero decimal d n-1 d n- 2 K d1 d 0 donde d i { 0, 1, ..., 9 }
de la siguiente forma: Reemplace cada dgito decimal con su equivalente
de 4 smbolos binarios tal como estn definidos en la tabla 2 anterior. El
nmero resultante es llamado cdigo binario decimal, cdigo 8, 4, 2, 1 o
3-63
Ensamblador
3-64
Sistemas Numricos
00
01
02
03
04
05
06
07
08
09
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1100
1011
1010
1001
1000
0111
0110
0101
0100
0011
0000
0001
0010
0011
0100
1011
1100
1101
1110
1111
3-65
Ensamblador
3.5.1 Complementos
Aunque el cdigo de notacin con signo es la contraparte directa del
cdigo decimal usado por los seres humanos, otra representacin binaria
llamada de complementos es usada con frecuencia en computadoras
digitales, principalmente porque simplifica la construccin de ciertas
operaciones aritmticas.
Existen dos tipos de complementos usados:
1. Complemento a la base. Se forma restando cada dgito de la
cantidad al nmero de la base menos uno y luego agregando 1 al
resultado as obtenido. Para el sistema decimal llamamos a esta
forma complemento a diez, para el binario, complemento a dos.
2. Complemento a la base menos 1. Se forma restando a cada
dgito de la cantidad al nmero de la base menos uno. Para el
sistema decimal llamamos a esta forma complemento a nueve,
para el binario, complemento a uno.
Por ejemplo el complemento a diez de 8710 es 1310 (1210+110) y el de
2310 es 7710 (7610+110) mientras que el complemento a nueve de 8710 es
1210 y el de 7710 es 2210. En el sistema binario el complemento a dos de
101102 es 010102 y el de 110102 es 001102.
El mtodo para encontrar el complemento en la base dos de cualquier
cantidad consiste en sustituir todo 0 por 1 y todo 1 por 0, dependiendo del
tipo de complemento se sumar 1 o no.
La ventaja principal de usar complementos en sistemas digitales durante la suma o resta, es que todos los bits del nmero son tratados de
forma uniforme y que la resta y suma son realizadas por el mismo circuito
que slo suma y es mucho ms sencillo.
Al usar la representacin por complementos la resta queda simplificada
realizndose con sumas:
3-66
Sistemas Numricos
Complemento a la base
89
-23
66
11011
-10100
00011
89
+77
66 (el ltimo acarreo se descarta)
11011
+01100
100111 (el ltimo acarreo se descarta)
11001
-10100
00011
89
+76
1 65
+1 (el ltimo acarreo se suma)
66
11001
+01001
1 00010
+1 (el ltimo acarreo se suma)
00011
3-67
Ensamblador
el octavo se deja disponible para que el diseador juege con el, ya sea
para comprobar por medio de paridad (explicada en los siguientes
captulos) si no hay error de transmisin o manipulacin de datos o para
expandir el juego de caracteres disponibles elevndolo de 27 (128) a 28
(256) (esto ltimo es lo que se realiza en las computadoras modernas).
Las primeras 32 posiciones estn reservadas para carcteres de control y
usualmente no se pueden desplegar o imprimir (hay formas de dar la
vuelta a esto). Los dems se usan para las letras, los nmeros y toda una
serie de smbolos utilizados. En Japn y otros pases donde se usa otro
tipo de letras que no son las romanas, se utilizan hasta 2 bytes (16 bits o
posiciones de unos y ceros) para que el cdigo pueda representar todas
sus palabras. El usar este cdigo garantiza, en muchos casos,
compatibilidad entre datos de distintas aplicaciones de forma que el
resultado de un programa pueda ser ledo por otro con poco esfuerzo de
nuestra parte.
3-68
Sistemas Numricos
3-69
Ensamblador
3.7 Resumen
Los nmeros son la base de todas las representaciones formales que
realizamos. Las bases distintas a la de diez han estado en uso durante
mucho tiempo pero es la base 2 la nica distinta de 10 que actualmente
usamos. Dada su sencillez, la base 2 se utiliza en las computadoras
digitales actuales. Es importante entenderla y ser capaz de realizar
operaciones sencillas fcilmente.
3-70
Sistemas Numricos
3.8 Ejercicios
3.1 Convierta los siguientes nmeros a su equivalente binario:
a) 3910, b) 1210, c) 12310
3.2 De los nmeros binarios obtenidos en el problema 3.1 encuentre su
equivalente hexadecimal.
3.3 Convierta los nmeros del problema 3.1 a base 8 y base 4 (recuerde
que la base 8 slo consta de 8 smbolos distintos 0 a 7, y la base 4 del 0 al
3).
3.4 Encuentre la equivalencia binaria de los siguientes nmeros:
a) 3.12310, b) 0.437510, c) 1.110
3.5 Sume y luego reste en forma binaria 1210 + 1010.
3.6 Divida y multiplique en forma binaria 3101510.
3.7 Convierta los siguientes nmeros binarios a su complemento de 1 y
de 2:
a) 101112, b) 10012, c) 11112
3.8 Haga la siguiente resta usando complementos a 1 y a 2:
111012-110112
3-71
Ensamblador
3.8 Bibliografa
Llano Emiliano Sistemas Digitales y Arquitectura de Computadoras.
Unam 1993. Captulo 3.
3-72
Captulo 4
4.1 Las herramientas
Existen una multitud de mtodos para codificar un programa en
ensamblador. El primero y ms primitivo consiste en codificar
directamente el programa por medio de una herramienta como DEBUG;
veremos como esto es posible y por qu es un mtodo utilizado solamente
para programas pequeos.
El segundo mtodo consiste en utilizar un cdigo fuente en un
procesador de palabras o cualquier otro editor que nos entregue como
resultado cdigo ASCII y a continuacin ensamblar este cdigo para
producir un cdigo ejecutable.
Este mtodo es el ms corriente y conveniente, para llevarlo a cabo es
necesario seguir los siguientes pasos:
1. Preparar el programa, su estructura, sus datos, mtodos de
clculo, etc. Este paso previo se realiza generalmente en papel o
en la multitud de programas disponibles para tal fin, como son
Procesadores de Palabra, programas de Diagramas de Flujo, etc.
2. Codificar el programa en un editor o Procesador de Palabra que
entregue cdigo ASCII como salida. Se puede utilizar desde el
primitivo EDLIN, el editor de programas de PASCAL o C, hasta
un sofisticado procesador de palabras basado en Windows.
3. Transformar el cdigo fuente en lenguaje de mquina por
medio de un ensamblador (por ejemplo MASM). En est fase se
corrigen los posibles errores de estructura y sintaxis del programa
fuente.
4-73
Ensamblador
4.2 La Sintaxis
Como en todo lenguaje de programacin, hace falta respetar ciertas
reglas. En esta seccin detallamos algunas de las reglas del ensamblador.
4-74
Las Herramientas
= inc bx
pero
ABC no es igual a abc
An as, se recomienda seguir algn tipo de convencin propia y
respetarla siempre. A partir de este momento en el libro se sigue la
siguiente convencin:
Los comentarios en espaol tratando de no emplear anglicismos
ni modismos donde sea posible, siempre en minsculas y
utilizando acentos y marcas diacrticas que hagan ms fcil su
comprensin.
Las etiquetas en espaol y siempre en minsculas.
Las instrucciones y su operandos en maysculas siempre.
VRAI
TRUE
EQU
EQU
1
1
;Colocar flag en 1
;set flag en uno
4-75
Ensamblador
4-76
Las Herramientas
4.3 Editores
Podemos escribir y discutir largo y tendido sobre las grandes ventajas
de un editor o procesador marca X sobre el marca Y, pero no tiene sentido
la discusin cuando para lograr un programa fuente slo requerimos lo
mnimo indispensable de un procesador:
Que sea lo ms rpido posible de ejecutar. De ser posible que
quede residente en memoria y an ms sin estorbar o robar
memoria principal a la hora de ejecutar nuestro lenguaje de
mquina.
Que entrege como salida un archivo de cdigo ASCII sin
caracteres extraos ni de control que el ensamblador no puede
usar.
En suma, se puede utilizar cualquier editor o procesador por sencillo o
complicado que sea. Lo importante a resaltar aqu es que nos sintamos a
gusto con l y que nos provea de herramientas que faciliten y no
dificulten nuestro trabajo, ya de por si difcil.
Habr gente que en este rengln se sienta en casa utilizando un editor
primitivo como EDLIN o WORDSTART y gente que no pueda trabajar
con algo menos que VENTURA. La eleccin depende de gustos y
necesidades. Para nuestro gusto, un editor intermedio como EDIT de las
versiones nuevas del sistema operativo MS-DOS (6.2 en adelante) que se
incluye como parte de sus utileras, es suficiente para la mayora de los
casos.
Si se cuenta con algn editor residente en memoria como SIDEKICK
contamos con algunas ventajas adicionales como son el tener siempre
disponible el editor desde cualquier punto ya sea dentro de DEBUG,
ejecutando el programa u otros.
Seguramente con el nuevo advenimiento de sistemas operativos ms
poderosos basados en ventanas e iconos, el panorama se modificar pero
4-77
Ensamblador
4.4 Debug
En los siguientes captulos utilizaremos el programa DEBUG debido a
que es un programa ms sencillo de usar en principio que MASM y nos
pone en contacto ntimo con la mquina. Para teclear, probar y corregir
un cdigo slo necesitamos ejecutar DEBUG mientras que para usar
MASM se requiere de hasta 4 programas (editor, MASM, LINK y
EXE2BIN).
Al usar un programa como DEBUG nos ahorramos, por el momento,
toda una serie de directivas del ensamblador que causan que el programa
ejecutable crezca.
Por ltimo, al usar DEBUG nos ponemos en contacto ntimo con la
mquina. Tarde o temprano si se continua programando en ensamblador
se requiere aprender a usar el DEBUG.
Tabla 4.1 DEBUG contra Ensamblador
DEBUG
Ensamblador
F c i l d e Difcil de ejecutar
ejecutar
No
se Se agregan muchas lneas de cdigo al
a g r e g a programa ejecutable
nada
al
programa
ejecutable
M u y Nos aleja del funcionamiento interior de
cercano a la la mquina
mquina
No es tan Muy verstil
verstil
Bueno para Bueno para programas grandes
programas
pequeos
4-78
Las Herramientas
4.4.1 Comandos
El DEBUG acepta toda una serie de comandos sencillos de una letra que
describimos brevemente a continuacin:
(Los argumentos entre parntesis cuadrados indican parmetros
opcionales)
?. Despliega ayuda (en versiones nuevas de DEBUG).
D[direccin]. Despliega, despliega la informacin de cierta rea de
memoria en la pantalla (en hexadecimal).
F[direccin inicial] [direccin final] [constante]
E[direccin]. Introduce un programa usando cdigos hexadecimales o
modifica una direccin colocando los nuevos cdigos hexadecimales.
A[direccin]. Introduce un programa usando mnemotcnicos vlidos
del juegos de instrucciones.
G[direccin]. Ejecuta un programa en memoria.
U[direccin inicial][,direccin final]. Desensambla un programa en
memoria, esto es, convierte sus cdigos hexadecimal a mnemotcnicos.
R[registro],. Visualiza o modifica registros de la UPC.
Nnombre.extensin. Informa a Debug el nombre del programa que
queremos recuperar o guardar.
W. Escribe programa en memoria a disco, para esto es necesario haberle
puesto nombre con el comando N e indicar su longitud (registro BX+CX)
con el comando R
Q. Salir del programa DEBUG.
L. Carga un programa en memoria. Es preciso primero indicar qu
programa queremos con el comando N. Otra alternativa es invocando el
programa DEBUG [nombre programa con extensin].
4-79
Ensamblador
4-80
Las Herramientas
4.5 MASM
Para el uso de un ensamblador el primer paso consiste, como ya se
mencion, en disear el programa en papel, a continuacin en pasarlo a
un editor que entrega ASCII. Como ejemplo introduzcamos nuestro
programa de la seccin anterior, para lo cual se requieren agregar otros
comandos propios del ensamblador:
cara
SEGMENT
ASSUME CS:cara
MOV DL,1
MOV AH,2
INT
21h
INT
20h
cara
ENDS
END
4-81
Ensamblador
4.5.1.1 Segmentos
La instruccin SEGMENT y ENDS informan al ensamblador en qu
segmento se localiza el programa y deben contar con una etiqueta que
defina el nombre.
La pseudo instruccin ASSUME CS:nombre define el segmento donde
se localiza el programa (definido con el registro CS, segmento de cdigo)
Por qu el ensamblador no lo puede definir por s mismo? La razn no es
clara pero es necesario incluir la pseudo instruccin.
4.5.1.2 END
Indica el fin del archivo de programa
4.5.1.3 Definiciones
Es necesario muchas veces definir variables, palabras, bytes, etc. para
aclarar el significado de ciertas partes del cdigo. Entre las instrucciones
para realizar esto tenemos EQU que asigna valores a etiquetas:
si
escape
EQU
EQU
1
27
;identificador si=1
;identificador escape=27
EQU
EQU
2*2+1
cinco+1
4-82
Las Herramientas
DB
DB
0
1,2,3
DB
DB
?
5 DUP(?)
DB
5 DUP(1,2,3,4,5)
DB
10 DUP(0,1)
DB
DB
DB
Bienvenido a Ensamblador$
Salta la lnea,13,10,$
07,Mensaje con sonido,$
Note que al final se agrega el signo de $ que indica el fin del mensaje y
slo es necesario si se intenta desplegar la cadena en la pantalla.
4-83
Ensamblador
4.7 Otros
Existen en el mercado otras herramientas profesionales para la
programacin en ensamblador. Incluimos tres herramientas de la
categora Shareware en un disco de 3 1/2" que pueden sernos de utilidad,
en especial cuando no contamos con ninguna otra para practicar.
Recuerde que si el programa resulta til es muy conveniente registrarse
con el autor. Recibe uno el derecho legal a usarlo, actualizaciones,
manuales, etc.
Vale la pena mencionar el programa Language Window (Shareware)
que coloca una tabla del juego de instrucciones 80286 en la memoria y
puede ser activado en cualquier momento.
4-84
Las Herramientas
pila
DB
pila
datos
hola$)
datos
ENDS
;prognom SEGMENT
;define segmento de cdigo
;principal PROC FAR
;parte principal del programa
ASSUME
CS:prognom, DS:datos
comienzo: ;aqu programa principal
;prepara pila para el regreso
PUSH DS
;salva el viejo segmento de datos
SUB
AX,AX
;coloca cero en AX
PUSH AX
;y gurdalo
;prepara DS con segmento actual
MOV AX,datos
;direccin del segmento de datos
MOV DS,AX
;y guarda en registro DS
;La parte principal programa va aqu
RET
;regresa al S.O.
principal ENDP
;subr1
PROC NEAR
;define una subrutina
;Aqu va la subrutina
subr1
ENDP
;prognom ENDS
;fin del segmento de cdigo
;END
comienzo
;fin del ensamble
4-85
Ensamblador
4.9 Resumen
Se introduce y comentan sobre las principales herramientas para
ensamblar un programa: DEBUG y MASM. Estos programas son
sencillos de usar pero a su vez constan de una serie de comandos que
deben ser aprendidos antes de poder utilizarlos en toda su capacidad. En
este captulo se establecen las reglas que sern utilizadas a lo largo del
libro.
4.10 Bibliografa
Llano Emiliano Sistemas Digitales y Arquitectura de Computadoras.
Unam 1993.
Mercier Philippe Assembleur Facile. Marabout 1992, Alleur Blgica.
Varios Macro 86. Columbia Data Products Inc. USA 1986.
4-86
Captulo 5
5.1 Entrada/Salida
La transferencia de datos entre la lgica que forma parte del sistema de
computadora y aquella que est ms all de ste, se conoce en general
como entrada/salida o E/S (input/output o I/O).
Se incluye dentro del mbito del sistema a toda la lgica que se haya
diseado para trabajar en conjuncin con la UPC. Toda aquella que no
caiga dentro de esta clasificacin se le conoce como externa.
La interfase entre el sistema de computacin y la lgica externa debe
estar claramente definida; debe proveer de facilidades para transferir
datos, adems de las seales de control que identifiquen a todos los
eventos que ocurren.
Hay muchas formas en las que un sistema puede transferir datos hacia el
exterior; pero todos estn includos en las siguientes tres categoras:
1) E/S Programada. En este caso todas las transferencias de
datos entre la computadora y el exterior son controladas por la
computadora o para ser ms precisos por un programa corriendo
en la computadora. Existir un protocolo bien definido en el que
la computadora hace conocer a la lgica externa que los datos
estn disponibles en una localidad de memoria fija de donde sta
los puede tomar, o bien, la computadora indicar de alguna
forma a la lgica externa que est esperando que ponga
informacin en ciertas localidades de memoria para poder
accesarlas. La caracterstica clave de la Entrada/Salida
5-87
Ensamblador
5-88
5-89
Ensamblador
5-90
5-91
Ensamblador
5-92
5-93
Ensamblador
Una discusin completa del tema queda fuera del rango que pretende
abarcar este libro por lo que, una vez ms, referimos al lector interesado a
la bibliografa para ms detalles del tema.
5-94
destino, fuente
registro, constante
memoria, constante
registro, memoria
memoria, registro
registro, registro
AX,DS:[BX]
AX,DS:[SI+2]
se usa
5-95
Ensamblador
MOV
MOV
AX,[BX]
AX,[SI+2]
AX,CS:[BX]
5-96
registro valorinmediato
Directa
registrodireccin de memoria
Base
registroDS:[BX] o SS:[BP]
Indice
registroDS:[SI] o DS:[DI]
Indice y
base
registro[BX][SI], [BX][DI],
[BX+SI], [BP][SI], [BP][DI] o
[BP+SI]
Base y
registroident.[BX], ident.[BP] o
Desplazam
[BX+constante]
iento
(Directo o
Inmediato)
Indice y
Desplazam
iento
(Directo o
Inmediato)
Base,
Indice y
Desplazam
iento
(Directo o
Inmediato)
registroident.[BX][SI],
ident.[BX][DI], ident.[BP][SI],
ident. [BP][DI]
5.6.1 Inmediata
RegistroValor inmediato
El contenido de un registro es inicializado por un valor inmediato o una
constante.
Ejemplos:
MOV AH,12
MOV BX,1
;AH12, AL no es afectado,
; el movimiento es de 8 bits (1 byte)
;BX1, tanto BL como BH se afectan,
5-97
Ensamblador
5.6.2 Directo
Registrodireccin de memoria
El contenido de un registro es sustituido por el contenido de la zona de
memoria apuntada por el identificador. La operacin puede ser de 8 16
bits y si los dos operandos no coinciden, se genera un error al ensamblar.
Ejemplos:
;define los apuntadores a memoria
Ident1
DB
2
Ident2
DW
5
Ident3
DB
?
;Operaciones de memoria a un registro
MOV AH,ident1
MOV BX,ident2
;Operaciones de registro a memoria
MOV ident1,CH
MOV AH,ident2
registro de 8 bits
;apuntador de 1 byte
;apuntador de 2 bytes=1 palabra
;define una zona de 1 byte
;AH2 (8 bits)
:BX5 (16 bits)
;ident1CH (8 bits)
;ERROR, operacin de 16 bits a un
5.6.3 Base
RegistroDS:[BX]
RegistroSS:[BP]
Inicializa un registro con el contenido del rea de memoria situada en la
direccin DS:[BX]. En este caso [BX] representa el contenido de la zona
de memoria cuya direccin est contenida en BX. La operacin puede ser
de 8 16 bits. Quedar esto ms claro con los siguientes ejemplos:
MOV
MOV
BX,8
AX,[BX]
;BX8
;AXcontenido de la zona de memoria
DB
DW
2
5
;direccin DS:0008
;Define una zona de 1 byte
:Define una zona de 2 bytes
de la
Ident1
Ident2
5-98
MOV
MOV
BX,OFFSET ident2
AX,[BX]
;BXDesplazamiento de ident2
;AXde la zona de memoria a la
direccin
; DS:ident2 (ident2=5)
En las dos lneas precedentes obsrvese que la pseudo instruccin OFFSET indica un desplazamiento a partir de la variable. Como la variable
contiene 2 se indica un desplazamiento de 2 bytes, el propio de IDENT1
(2), el de IDENT2 parte alta (0) y finalmente el de IDENT2 parte baja (5).
Una forma alternativa de este direccionamiento es con el uso del
registro BP con el apuntador de segmento SS:
MOV
MOV
BP,0AFFFh
AX,[BP]
5.6.4 Indice
RegistroDS:[SI]
RegistroDS:[DI]
Este modo de direccionar se utiliza generalmente para las cadenas de
caracteres o para aislar un elemento de una tabla o matriz. Generalmente
el segmento utilizado es DS salvo en las excepciones que resaltaremos en
ejemplos.
MOV SI,0
MOV AX,[SI]
direccin DS:0
MOV DI,0
MOV [DI],AH
DS:0contenido de AH
;AXcontenido de la memoria en la
5-99
Ensamblador
BX,2
SI,5
AH,[BX][SI]
;AHcontenido de la direccin de
;memoria DS:7 (BX+SI)
DB
MOV
MOV
20 DUP(?)
BX,OFFSET tabla
SI,2
MOV
MOV
AH,[BX][SI]
SI,8
;(siendo el primero 0)
;AH3er elemento de la tabla
;Apuntar al noveno elemento de la tab-
MOV
AL,[BX][SI]
tabla
la
5-100
BP,2
SI,5
AH,[BP][SI]
DW
MOV
MOV
5 DUP(?)
BX,2
AX,ident2[BX]
SI,4
AX,[SI+1]
DB
MOV
MOV
MOV
2
;Zona de 1 byte
BX,5
SI,4
AX,ident1[BX][SI+1]
;AXcontenido de la zona de memoria
5-101
Ensamblador
[BX+1],4
[DI]
[SI+2],1
5.7 Resumen
Hemos dicho que un sistema de cmputo slo debe de contar con la
UPC y la memoria principal. Aunque esto es estrictamente cierto, la
funcionalidad del circuito sera casi nula. Es necesario, entonces, agregar
toda una serie de circuitos y dispositivos que hagan que el diseo sea
funcional y prctico para el que lo usa.
5-102
5-103
Ensamblador
5.9 Problemas
5.1 Justifique la decisin de los diseadores de conservar el esquema de
memoria real de slo 1 megabyte en lugar de los 4 gigabytes accesables
por los modelos 386, 486, P5 y P6.
5.2 Ensamble todos los pedazos de cdigo en el ensamblador agregando
las pseudo instrucciones necesarias y depure hasta no obtener ningn error. No importa que el programa no tenga sentido y que no se pueda ver el
resultado.
5.3 Intente ahora introducir los pedazos de cdigo desde DEBUG.
Ahora s podemos ver los resultados de las transferencias utilizando las
instrucciones adecuadas del programa DEBUG.
5.4 Investigue las mejoras de diseo de las siguientes generaciones: 486
a P5, P5 a P6.
5.10 Bibliografa
Llano Emiliano Sistemas Digitales y Arquitectura de Computadoras.
Unam 1993. Captulo 12 y 14.
Mercier Philippe Assembleur Facile. Marabout 1992, Alleur Blgica.
Captulo 1.
5-104
Captulo 6
6.1 Ms sobre Interrupciones
Todos los diseos de computadoras incluyen la previsin de
interrupciones electrnicas. Lo novedoso del circuito 80x86 es la
inclusin de estas mismas interrupciones electrnicas pero dentro del
juego de instrucciones del circuito lo que permite el acceso a las utileras
diseadas cuidadosamente (algunas no tanto) que hacen que el
programar en ensamblador se simplifique.
La instruccin de interrupcin (INT realiza dentro del la UPC todos los
pasos de una interrupcin generada por un dispositivo de E/S y transfiere
la ejecucin del programa principal a la subrutina de interrupcin
apuntada por la direccin encontrada en el vector de interrupciones que
se pasa como argumento de la instruccin.
Los vectores de interrupcin se encuentran en las localidades bajas de
memoria, de la direccin 00000h a la 00400h (1Kbyte), formando as 256
vectores de interrupcin cada uno de 32 bits (segmento:direccin).
Por ejemplo si empleamos la instruccin INT 20, informamos a la UPC
que se transfiera control a la subrutina cuya direccin encontramos en la
localidad 20*4=80 decimal 40h. Se debe seguir la convencin de byte
menos significativo primero, esto es, byte bajo de direccin, byte alto de
direccin, byte bajo de segmento, byte alto de segmento.
Una lista completa de las interrupciones se encuentra en la seccin de
ROM del manual IBM Personal Computer Technical Reference.
Para pasar parmetros a la subrutina de interrupcin se utilizan los
registros, cada uno de ellos con una funcin distinta segn el caso. El
6-105
Ensamblador
DL,1
AH,2
INT
INT
20h
21h
;Funcin de despliegue
;Regresa control a programa supervi-
pantalla
sor
6-106
DL,1
AH,2
21h
aqui
Explorando el Ensamblador
DL,1
AH,2
21
0100
MOV DL,1
MOV AH,2
INT 21
JMP 0100
DW
DW
DW
DW
MOV
JMP
uno
dos
tres
cuatro
BX,escoge
Salta[BX]
;Coloca en BX la opcin
;Salta a Uno si escoge=0
6-107
Ensamblador
uno:
dos:
DL,00
AH,02
21
DL
0102
BX
AL
variable
tabla[BX]
;Operacin de 2 bytes
;Operacin de 1 byte
;Incrementa una direccin
;Incrementa un elemento de una tabla
6-108
Explorando el Ensamblador
CX,0100
DL,00
AH,02
21
DL
0105
20
no_entra
LOOP
repite
repite:
...
no_entra:
;prueba CX
;instrucciones del lazo
Note que en este caso al estar usando DEBUG, la primera instruccin introduce en CX un contador de 256 decimal.
6-109
Ensamblador
Ejercicio 5.3 Agregar las lineas necesarias para ensamblar con MASM y
ensamble. Utilice pseudo instrucciones especficas para los contadores y
direcciones.
La instruccin LOOP tiene dos variantes:
LOOPE. Realiza el lazo mientas CX<>0 y ZF=1
LOOPNE. Realiza el bucle mientras CX<>0 y ZF=0
Se debe tener cuidado con las banderas pues un cdigo aparentemente
correcto a primera vista no funcionar:
MOV
SI,OFFSET cadena
cadena
Busca:
CMP
AL,[SI]
almacenada en AL
INC
SI
comparar
LOOPNE busca
6-110
Registro,Constante
Memoria,Constante
Explorando el Ensamblador
CMP
CMP
CMP
Registro,Memoria
Memoria,Registro
Registro,Registro
AH,5
AH,6
;-AH+6
[BX],1
;Operacin indefinida
El juego de instrucciones del circuito 80x86 nos ofrece una amplia gama
de saltos condicionales divididos en tres categoras genricas:
Comparacin de banderas
Comparacin entre nmeros sin signo
Comparacin entre nmeros con signo
Para la comparacin de banderas, todas las instrucciones toman la
forma J.. identificador donde J.. en el mnemnico de la instruccin e
identificador es una etiqueta o direccin localizada en un intervalo de +128
a -127 bytes de distancia.
6-111
Ensamblador
Instruccin
Valor de la bandera
A>B
JNBE o JA
(Jump if not Below or Equal,,
Jump if Above)
CF=0 y ZF=0
A>=B
CF=0
A<=B
JBE o JNA
(Jump if Below or Equal,
Jump if Not Above or Equal)
(CF=1 y ZF=1)
o (CF<>ZF)
A<B
JB, JNAE o JC
(Jump if Below,
Jump if Not Above or Equal,,
Jump if Carry)
CF=1
A=B
JE o JZ
(Jump if Equal,
Jump if Zero)
ZF=1
A<>B
JNE o JNZ
(Jump if Not Equal,
Jump if Zero)
ZF=0
6-112
Explorando el Ensamblador
Instruccin
Valor de la bandera
A>B
JG o JNLE
(Jump if Greater,
Jump if Not Less or Equal)
(ZF=0 y OF=SF)
A>=B
JGE o JNL
(Jump if Greater or Equal,
Jump if Not Less)
SF=OF
A<=B
JNG o JLE
(Jump if Not Greater,
Jump if Less or Equal)
(ZF=0 y SF=OF) o
(ZF=1 y SF=OF) o
(ZF=0 y SF<>OF)
A<B
JNGE o JL
(Jump if Not Greater or Equal,
Jump if Less)
(SF<>OF)
A=B
JE o JZ
(Jump if Equal,
Jump if Zero)
ZF=1
A<>B
JNE o JNZ
(Jump if Not Equal,
Jump if Not Zero)
ZF=0
AH,0FFh
AH,0
sigue
;Compara FF con 0
;Comparacin sin signo
;Salta si menor
AH,0FFh
AH,0
sigue
;Compara FF con 0
;Comparacin con signo
;Salta si menor
6-113
Ensamblador
JL
...
...
...
sigue
;Serie de instrucciones
;que dan ms de 128 bytes
;(error sealado por el ensamblador)
sigue:
Usaremos:
JGE
JMP
sigue1
sigue
sigue1:
;Instruccin contraria a JL
;Serie de instrucciones
;que dan ms de 128 bytes
...
sigue:
Registro, Valor
Memoria, Valor
Registro, Memoria
Memoria, Registro
Registro, Registro
AND
6-114
Explorando el Ensamblador
AX,6
AND
AX,0FBh
bits 1 y 2
4
6,AX
AX,BH
AX,0104h
014h,AX
BH,AX
6.6.3 No Lgico
En este caso la operacin da por resultado el contrario de lo que
tenamos en un principio; esto es, si hay un 1 tendremos un 0 y si hay un
cero un 1. La operacin toma la forma
NOT
NOT
Registro
Memoria
AX,AX
;Coloca AX en cero
6-115
Ensamblador
XOR
AH,6
;Complementa bits 1 y 2 de AH
Registro
Memoria
AX,5
AX
AX
;AX=-5
;AX=5
6-116
Explorando el Ensamblador
NEG
NEG
NEG
[BX]
BYTE PTR [BX]
WORD PTR [BX]
Puerto, AL
Puerto, AX
DX,puertonum
DX,AL
6.7.2 La instruccin IN
Al contrario de la instruccin OUT, IN recibe un byte o palabra de un
puerto externo:
IN
IN
Puerto, AL
Puerto, AX
AX
DX,puertonum
6-117
Ensamblador
IN
DX,AL
por DX y coloca en AL
AL,61
AL,fc
AL,2
61,AL
CX,140
10b
104
6-118
Explorando el Ensamblador
AND
AL,quita
XOR
OUT
MOV
AL,alterna
bocina,AL
CX,retraso
LOOP
JMP
repite
sigue
;pierde el tiempo
;repite el proceso
sigue:
;marca la frecuencia
repite:
6.8 Resumen
Las interrupciones forman el trabajo principal y el cuello de botella de la
UPC. El circuito de INTEL nos permite tener acceso a las mismas rutinas
de interrupcin diseadas por los fabricantes del SO dandonos muchas
ventajas.
Los saltos dentro de un segmento de cdigo de programa pueden
dividirese en incondicionales y condicionales y a su vez los
incondicionales dependiendo el signo.
Las mscaras son patrones de bits que nos permiten eliminar ciertas
secuencias de un byte que no nos interesan.
Las instrucciones de IN y OUT nos permiten tener acceso de forma
directa a los dispositivos externos.
6.9 Problemas
6.1 Averigue algunas de las interrupciones prcticas dentro del sistema
operativo MS-DOS.
6-119
Ensamblador
6.10 Bibliografa
Mercier Philippe Assembleur Facile. Marabout 1992, Alleur Blgica.
Barden William Jr. How to Program Microcomputers. Sams & Company 1987.
Lafore Robert Assembly Language Primer for the IBM PC. The Waite
Group 1992.
IBM Personal Computer Technical Reference.
6-120
Captulo 7
7.1 El Sistema Operativo
En todo sistema de cmputo existe una relacin ntima entre los
programas en ensamblador y el sistema operativo (SO) que se ejecuta en
la computadora. En los sistemas personales el sistema operativo reside
principalmente en el disco ya sea duro o flexible y recibe el nombre de
DOS(Disk Operating System).
Como ya sabemos el propsito principal del SO es administrar a otros
programas, mantendindolos en reas especficas de memoria
secundaria para su almacenamiento o en memoria principal para su
ejecucin. Provee las funciones bsicas de impresin, despliegue,
almacenaje, etc. A todas estas funciones slo se puede acceder en su nivel
ms bajo a travs del lenguaje ensamblador.
En un principio la persona que se deba entender con el SO deba tener
un ntimo conocimiento de la mquina. Por ejemplo, si se deseaba
guardar un archivo en disco flexible, se deba saber al detalle dnde se
localizaba cada byte en el disco, el tiempo que tarda en dar una
revolucin, cuanto tarda el motor de pasos en llegar a una pista
determinada, etc. Como se puede imaginar, los programas se convertan
en programas muy largos y complejos. Si por cualquier causa cambiaban
los dispositivos, todo deba de ser reescrito.
Si el SO de todas formas deba de tener rutinas de manejo de todos los
dispositivos conectados a la mquina. Por qu no hacer las rutinas del
SO accesibles a los otros programas? La idea detrs del SO cae dentro de
esta pregunta. De esta forma si se desea escribir un carcter a la pantalla
no se debe saber ya nada del circuito que la controla sino nicamente la
7-121
Ensamblador
7.2 El Teclado
La rutina de interrupcin que atiende al teclado es la 21h entrando con el
registro AH en 1 y regresando en AL al carcter ledo. El uso de las teclas
CTRL y BREAK interrumpe la rutina.
Ejercicio 7.1 Introduzca los siguientes ejemplos usando DEBUG. No
olvide revisar el registro AL para ver el cdigo ASCII de la tecla que se
presion.
MOV
INT
INT
AH,1
21
20
AH,1
21
100
7-122
El Mundo Exterior
DX,109
AH,a
21
20
20
7.3 La Pantalla
Para desplegar una serie de caracteres podemos utilizar la rutina 21h
nuevamente pero ahora colocamos en el registro AH un 9 y en DS:DX
colocamos el inicio de la cadena a desplegar terminada por un signo de
pesos ($).
Ejercicio 7.4 Introduzca el siguiente programa en DEBUG a partir de la
direccin 0100.
MOV
MOV
INT
INT
DB
DX,109
AH,9
21
20
Ejemplo de cadena impresa$
Ejercicio 7.5 Introduzca el programa del ejercicio 7.4 pero con las
pseudo instrucciones requeridas para el ensamblador MASM. No se
olvide de inicializar el segmento DS de donde se toma la direccin de la
cadena a desplegar.
Unamos las funciones aprendidas para realizar un programa que haga
eco a la pantalla de lo que se teclea. Sabemos ya que para que la funcin
de despliegue sepa donde termina la cadena sta debe de finalizar con $
por lo que en este sencillo programa nosotros debemos de introducirlo:
MOV
MOV
INT
DX,116
AH,a
21
7-123
Ensamblador
MOV
MOV
MOV
MOV
INT
INT
DB
DL,a
AH,2
DX,118
AH,9
21
20
30
datos
SEGMENT
memoria DB
20
;20 bytes para memoria de
teclado
; a partir de esta localidad
datos
ENDS
;
programa
SEGMENT
ASSUME CS:programa
;informa a MASM dnde estamos
ASSUME DS:datos
;y dnde est el buffer
ORG
0100h
;fija el origen a direccin 100
inicio:
MOV DX,OFFSET memoria
;direccin de buffer
MOV AH,teclado
INT
dos
;interrupciones varias
MOV DL,lf_cr
;agrega alimentacin de lnea
MOV AH,pantalla
INT
dos
;interrupciones varias
MOV DX,OFFSET memoria+2
;salta primeros 2 bytes de
buffer de teclado
MOV AH,muestra
;despliegua en pantalla
INT
dos
INT
fin
;termina y regresa a SO
;
programa ENDS
7-124
El Mundo Exterior
;******************************************************************
END inicio
7.4 La Impresora
Como para las funciones anteriores, esta vez usamos la interrupcin
21h, pero enviamos un 5 en el registro AH y en DL el carcter a imprimir.
En el siguiente ejemplo mostramos una forma muy primitiva de enviar
una cadena a la impresora.
MOV
MOV
INT
MOV
MOV
INT
MOV
INT
MOV
MOV
INT
INT
DB
DL,[122]
AH,05
21
DL,[123]
AH,05
21
DL,[124]
21
DL,[125]
AH,05
21
20
si,0d,0a
CX,40
BX,111
DL,[BX]
AH,05
21
BX
0106
20
Un mensaje a imprimir de 40 caracteres,0d,0a
05h
40
;funcin de impresora
;Lleva la cuenta de la cadena
7-125
Ensamblador
dos
EQU
21h
;Llamada del SO
fin
EQU
20h
;Termina y vuelve al SO
;
datos
SEGMENT
cadena DB
Mensaje de 40 caracteres,0Dh,0Ah
datos
ENDS
;
programa
SEGMENT
ASSUME CS:programa
;informa a MASM dnde estamos
ASSUME DS:datos
;y dnde estn los datos
ORG
0100h
;fija el origen a direccin 100
inicio:
MOV CX,cuenta
MOV BX,OFFSET cadena ;direccin de mensaje
ciclo:
MOV DL,[BX]
;direccin carcter a imprimir
MOV AH,imprime
INT
dos
;interrupciones varias
INC
BX
;apunta a siguiente carcter
LOOP ciclo
;y v a imprimirlo
INT
fin
;termina y regresa a SO
;
programa ENDS
;******************************************************************
END inicio
CX,2
BX,0111
DL,[BX]
AH,05
21
BX
0106
20
1b,E
7-126
El Mundo Exterior
programa
SEGMENT
;inicio de
segmento
ASSUME CS:programa
;informa a MASM dnde estamos
ORG
0100h
;fija el origen a direccin 100
inicio:
MOV CH,cuenta
;nmero de dgitos
rota:
MOV CL,cuenta
;cuenta a 4 bits
ROL
BX,CL
;desplaza dgito a la izq.
MOV AL,BL
;y pasa a reg. AL
AND
AL,mascara
;quita dgitos de la izq.
ADD
AL,ascii
;convierte a ASCII
CMP
AL,nueve
;Es mayor que 9?
JL
despliega
;Despliega si ente 0 y 9
ADD
AL,a_f
;el dgito est entre A y F
despliega:
MOV DL,AL
;Coloca ASCII en DL
MOV AH,muestra
;Funcin de despliegue
INT
dos
;Llama a DOS
DEC
CH
;Terminamos con los 4 dgitos?
JNZ
rota
;Si an no se termina
INT
fin
;Regresa a SO
;
programa ENDS
7-127
Ensamblador
;******************************************************************
END inicio
7-128
El Mundo Exterior
Registro,1
Memoria,1
Registro,CL
Memoria,CL
7-129
Ensamblador
7-130
El Mundo Exterior
7-131
Ensamblador
Registro,Inmediato
Memoria,Inmediato
Registro,Memoria
Registro, Registro
7.5.2.2 Decrementos
Esta instruccin decrementa en 1 un registro o localidad de memoria
dando por resultado una operacin idntica a la de la resta pero sin afectar
la bandera de acarreo (CF) por lo que se debe poner atencin si queremos
realizar un salto condicional que dependa de este indicador.
DEC
DEC
Registro
Memoria
7-132
El Mundo Exterior
7-133
Ensamblador
MOV AL,dividendo
CBW
MOV BL,divisor
DIV
BL
;divisin entre dos palabras
MOV AX,dividendo
CWD
(DX,AX)
MOV BX,divisor
DIV
BX
una palabra
;en AL el dividendo
;Convierte un byte en palabra (AH=0)
;en BL el divisor
;divisin de una palabra entre un byte
;en AX el dividendo
;Convierte palabra en doble palabra
;en BX el divisor
;divisin de una doble palabra entre
7-134
El Mundo Exterior
T (trace) para seguir el flujo del programa paso a paso y anotar el estado
de los registros que nos interesan tal como AX, BX y CX. Tendremos un
problema al llegar a la instruccin INT pues nunca regresaremos al
programa original, por lo que debemos sustituir la instruccin por una
nueva que no hace nada: NOP. Esta instruccin ocupa un slo byte por lo
que en este caso debemos usar 2 para sustituir a INT que ocupa 2 bytes.
El programa DEBUG utiliza la siguiente simbologa para las banderas:
Tabla 7.1 Simbologa de DEBUG para las banderas
Bandera
OF, saturacin
DF, direccin
IF, habilita interrupciones
SF, signo
ZF, cero
AF, acarreo auxiliar
PF, pariedad
CF, acarreo
En uno lgico
En cero lgico
OV
DN
EI
NG
ZR
AC
PE
CY
NV
UP
DI
PL
NZ
NA
PO
NC
7-135
Ensamblador
nombre
segmento
nombre
PROC
NEAR
PROC
FAR
7-136
El Mundo Exterior
7-137
Ensamblador
7.7 Resumen
Se analizan en este captulo distintas formas de aprovecharnos de las
interrupciones de los diseadores del SO en nuestro beneficio. Se
introducen conceptos de procedimientos y la forma de accesar dejando
para el siguiente captulo la forma idnea de pasar parmetros a las
subrutinas.
7-138
El Mundo Exterior
7.9 Problemas
7.1 Analice el programa de conversin de decimal a hexadecimal en lo
referente a las instrucciones de corrimiento.
7.2 Realice un cdigo como subrutina en el que se le pasan como
parmetro la fecha en el registro AX dividida en da, mes, ao de la
siguiente forma:
El da de 1 a 31 (5 bits)
El mes de 1 a 12 (4 bits)
El ao en 7 bits y al que se le suma 1995 siempre
Al recibir la llamada, la subrutina regresa el da en ASCII en el registro
BX, el mes en ASCII en el registro AX y el ao en ASCII en CX y DX. El
programa principal lo despliega en la pantalla o imprime.
7.10 Bibliografa
Mercier Philippe Assembleur Facile. Marabout 1992, Alleur Blgica.
Morgan Christopher Bluebook of Assembly Languages Routines for the
IBM. Olume Waite, New York 1984.
Lafore Robert Assembly Language Primer for the IBM PC. The Waite
Group 1992.
IBM Personal Computer Technical Reference.
7-139
Captulo 8
8.1 La pila
En los primeros diseos de microcomputadoras surga el problema de
que al atender las interrupciones generadas por los distintos dispositivos
se requera preservar el contenido de varios registros en algn lugar.
Algunos diseadores tomaron el camino de dejar al programador la tarea
de reservar un rea de memoria para tal fin y de asegurar que los registros
fueran restaurados antes de volver al programa principal. Otros se
aseguraron de que esto sucediera siempre al incorporar una serie de
registros paralelos donde se guardaba automticamente el contenido de
todos los registros de la UPC.
Pronto se vio que la primera opcin, con algunas variantes, era el
camino adecuado y el ms conveniente para proporcionar toda la
flexibilidad al programador y dejar que l decida cundo y cmo deben
guardarse los datos requeridos. Esto da gran libertad pero a la vez
complica las cosas al tener que ser extremadamente cuidadoso con el
manejo de esta rea reservada de memoria llamada pila.
Para poder implementar el uso de pilas, es requisito indispensable
agregar nuevos registros o utilizar los ya existentes de forma que
permitan el control de dicha pila. En el circuito de Intel, el manejo de
pilas se logra a travs del registro SS (stack segment o segmento de pila)
junto con SP (stack pointer o apuntador de fin de pila) y BP (base pointer o
apuntador base de pila).
El uso de subprogramas plantea tambin la necesidad de pasar
parmetros a estas subrutinas o procedimientos. Los tres mtodos
preferidos son:
8-141
Ensamblador
CS:ruido
;Define inicio de programa
;nmero de repeticiones
;guarda la cuenta en la pila
;Sonido de disparo
;Y guarda silencio
;Recupera el contador de
;disparos de la pila
LOOP otro
;repite hasta terminar
INT
21h
;Regresa a DOS
principal ENDP ;fin programa principal
;
8-142
La Pila
8-143
Ensamblador
SP
valor de DS
valor de DX
valor de CS
valor de IP
cima de la pila
valor de DS
BP+8
96
valor de DX
BP+6
94
valor de CS
BP+4
92
valor de IP
BP+2
valor de BP
BP
90
SP
AX,[BP+6]
BX,[BP+8]
;mueve el valor de DX a AX
;mueve el valor de DS a BX
8-144
La Pila
SP
98
.....
BP
96
94
92
.....
.....
.....
98
valor de CX
BP,SP
96
94
cima de la pila
.....
.....
.....
BP
valor de CX
96
SP
valor de DS
94
92
cima de la pila
.....
.....
98
96
94
92
90
88
BX
DX
y
BP
valor de CX
SP
valor de DS
valor de BX
valor de DX
CS de x
IP de x
cima de la pila
8-145
Ensamblador
PUSH
MOV
BP
BP,SP
;salva registro BP
;BP recibe el valor de SP
BP,SP
valor de CX
valor de DS
valor de BX
valor de DX
CS de x
IP de x
BP de x
(parmetro 1)
(parmetro 2)
AX
BX
AX,1
BX,1
AX
BX
z
8-146
BP
BP,SP
;Guarda registro BP
;inicializa pila para subrutina z
La Pila
BP,SP
valor de CX
valor de DS
valor de BX
valor de DX
CS de x
IP de x
BP de x
valor de AX
valor de BX
Parmetro 1
Parmetro 2
CS de y
IP de y
BP de y
(parmetro 1)
(parmetro 2)
(salvado por y)
(salvado por y)
(transmitido por y)
(transmitido por y)
(salvado por z)
BP
valor de CX
valor de DS
valor de BX
valor de DX
CS de x
IP de x
BP de x
(salvado por y)
(salvado por y)
(transmitido por y)
(transmitido por y)
SP
valor de AX
valor de BX
Parmetro 1
Parmetro 2
CS de y
IP de y
BP de y
(salvado por z)
(parmetro 1)
(parmetro 2)
8-147
Ensamblador
98
96
94
92
90
88
86
84
82
80
78
BP
valor de CX
valor de DS
valor de BX
valor de DX
CS de x
IP de x
BP de x
SP
valor de AX
valor de BX
Parmetro 1
Parmetro 2
(salvado por y)
(salvado por y)
(transmitido por y)
(transmitido por y)
CS de y
IP de y
BP de y
(salvado por z)
76
74
72
RET
(parmetro 1)
(parmetro 2)
bytes
98
96
94
92
90
88
86
BP
valor de CX
valor de DS
valor de BX
valor de DX
CS de x
IP de x
BP de x
84
82
SP
valor de AX
valor de BX
(salvado por y)
(salvado por y)
Parmetro 1
Parmetro 2
CS de y
IP de y
BP de y
(transmitido por y)
(transmitido por y)
80
78
76
74
72
(parmetro 1)
(parmetro 2)
(salvado por z)
8-148
La Pila
POP
POP
POP
BX
AX
BP
98
BP
96
SP
94
92
90
88
86
84
82
80
78
76
74
72
valor de CX
valor de DS
valor de BX
valor de DX
CS de x
IP de x
BP de x
valor de AX
valor de BX
Parmetro 1
Parmetro 2
CS de y
IP de y
BP de y
(parmetro 1)
(parmetro 2)
(salvado por y)
(salvado por y)
(transmitido por y)
(transmitido por y)
(salvado por z)
DS
CX
BP
valor de CX
valor de DS
valor de BX
valor de DX
CS de x
IP de x
BP de x
valor de AX
valor de BX
Parmetro 1
Parmetro 2
CS de y
IP de y
BP de y
(parmetro 1)
(parmetro 2)
(salvado por y)
(salvado por y)
(transmitido por y)
(transmitido por y)
(salvado por z)
8-149
Ensamblador
prueba
PROC NEAR
PUSH AX
PUSH BX
....
POP
BX
POP
AX
RET
ENDP
;tanto AX como
;BX sern utilizados
;instrucciones del subprograma
;recupera los valores
;de AX y BX de la pila
8-150
La Pila
;zona de 20 caracteres
;ESDS
;SIdireccin del texto1
;DIdireccin del texto2
;ALU de Un text...
;AHO de Otro te...
;Compara las cadenas
8-151
Ensamblador
DB
EQU
MOV
8-152
La Pila
8-153
Ensamblador
AL,DS:[SI]
ES:[DI],AL
SI
DI
comparacin cause que la bandera de cero sea limpiada (no cero) como
resultado que dos palabras o bytes no sean iguales. Las banderas
afectadas dependen de la operacin y el resultado de sta.
REPNE (Repite while not equal, repite mientras no igual) repite la
operacin CMPS o SCAS mientras CX sea distinto de cero o el resultado de
una comparacin cause que la bandera de cero sea fijada (cero) como
resultado de que dos palabras o bytes sean iguales. Las banderas
afectadas dependen de la operacin y el resultado de sta.
8-154
La Pila
AL,DS:[SI]
AH,ES:[DI]
AL,AH
salta
SI
DI
otro
salta:
8-155
Ensamblador
BL,ES:[DI]
AL,BL
salta
DI
otro
salta:
8-156
La Pila
;BUSCA
;El usuario introduce una llave y a continuacin
;una frase, el programa decide si la llave se encuentra en la frase
muestra
EQU
9h
;funcin de despliegue
teclado
EQU
0Ah
;funcin del teclado
dos
EQU
21h
;interrupcin de DOS
;******************************************************************
pila
SEGMENT
STACK;define la pila
DB
20 DUP(pila )
;palabra pila y 4 blancos
pila
ENDS
;******************************************************************
datos
SEGMENT
;define segmento de datos
ora_max DB
127d
;long. mxima de frase
ora_real
DB
?
;long. real introducida
oracion
DB
127d DUP(?)
;espacio para 127 caracteres
llav_max DB
20d
;long. mxima de llave
llav_real DB
?
;long. real introducida
llave
DB
20d DUP(?)
;espacio para 20 caracteres
mens1
DB
0Dh,0Ah,Llave a buscar: $
mens2
DB
0Dh,0Ah,Frase: $
mens3
DB
0Dh,0Ah,No se encontro $
mens4
DB
0Dh,0Ah,Si se encontro $
datos
ENDS
;******************************************************************
Busca
SEGMENT
;segmento del cdigo
principal PROC FAR
;parte principal del programa
ASSUME CS:busca,DS:datos,ES:datos
;
Inicio:
;guarda la valores para el regreso
PUSH DS
;segmento de datos viejo
SUB
AX,AX
;forma rpida de poner 0 en AX
8-157
Ensamblador
PUSH AX
;guarda en pila (DS:0)
;
;DS apunta ahora a nuestro segmento de datos
MOV AX,datos
;direccin del segmento de datos
MOV DS,AX
;hacia el registro DS
;
;ES apunta ahora a nuestro segmento extra
MOV AX,datos
;direccin del segmento de datos
MOV ES,AX
;hacia registro ES
la_llave:
;pide llave y coloca en memoria
MOV DX,OFFSET mens1 ;direccin mensaje
MOV AH,muestra
;y prepara a mostrar
INT
dos
;
;Toma llave y guarda
MOV DX,OFFSET llave_max
;direccin de llave
MOV AH,teclado
;toma llave de teclado
INT
dos
;
frase:
;pide la frase y gurdala
MOV DX,OFFSET mens2 ;direccin mensaje
MOV AH,muestra
;y prepara a mostrar
INT
dos
;
;Toma frase y guarda
MOV DX,OFFSET ora_max;direccin frase
MOV AH,teclado
;toma frase de teclado
INT
dos
;
;Busca la llave en la frase
;SI apuntador a la llave
;DI apuntador a la frase
;BX apuntador a inicio de frase
;DX long. frase - long. llave + 1
;CX long. de la frase
;
CLD
;bsqueda hacia adelante
MOV AL,ora_real
;long. frase
SUB
AL,llav_real
;- long. llave
JL
no_esta
;si long. llave>long. frase
8-158
La Pila
CBW
;cambia byte a palabra
MOV DX,AX
;poner en DX
INC
DX
;+1
MOV BX,OFFSET oracion ;BX apunta a inicio frase
;
compara:
MOV DI,BX
;lugar donde comienza comparacin
MOV SI,OFFSET llave
;SI inicio de llave
MOV AL,llav_real
;toma long. llave
CBW
;convierte a palabra
MOV CX,AX
;y guarda en CX
REPE
CMPSB
;repite hasta CX=0 o no se encuentre
carcter
JZ
si_esta
;no encontramos nada
INC
BX
;avanza apuntador a sig. carcter de
frase
DEC
DX
;Acabamos?
JZ
no_esta
;si, no est
JMP
compara
;no, continua siguiente
;
si_esta:
;encontramos llave
MOV DX,OFFSET mens4 ;direccin mensaje
MOV AH,muestra
;prepara a mostrar
INT
dos
JMP
la_llave
;Ve por otra llave y frase
;
no_esta:
;no se encontr llave
MOV DX,OFFSET mens3 ;direccin mensaje
MOV AH,muestra
;prepara a mostrar
INT
dos
JMP
la_llave
;Ve por otra llave y frase
RET
;
principal ENDP
;fin de programa principal
busca
ENDS
;fin del segmento
END
inicio
;fin del programa
8-159
Ensamblador
8.3 Resumen
Se introduce en este captulo el manejo de la pila, siempre importante en
los diseos actuales de computadoras y programas. Se analizan adems,
las instrucciones de manejo de cadenas particulares a este circuito y la
forma de usarlas en nuestra ventaja en tareas sencillas como la del ltimo
programa presentado en el captulo.
8.4 Problemas
8.1 Convierta el programa BUSCA de forma tal que no se usen las
instrucciones especiales de manejo de cadenas en la comparacin.
8.2 Programe un algoritmo desde DEBUG que llene las localidades de
memoria de la 200h a la 2FFh con un 0.
8.3 Averige si el circuto MOTOROLA tiene instrucciones similares a las
presentadas en este captulo para manejo de pila y de cadenas.
8-160
La Pila
8.6 Bibliografa
Revista PC Magazine EU nmeros de 1983.
Mercier Philippe Assembleur Facile. Marabout 1992, Alleur Blgica.
Barden William Jr. How to Program Microcomputers. Sams & Company 1987.
MASM 86 Columbia Data Products, EU 1986.
IBM Personal Computer Technical Reference.
8-161
Captulo 9
9.1 El Vdeo
Durante el desarrollo de las microcomputadoras hubo que tomar varias
decisiones con respecto a los componentes que forman el sistema y a la
forma de interactuar entre ellos. Muchas de estas decisiones, buenas o
malas, an nos siguen persiguiendo con el fantasma de la compatibilidad.
Los caracteres que se despliegan en la pantalla funcionaban en un
principio como una serie de cdigos ASCII que se mandaban al manejador
de la pantalla uno a uno y ste se encargaba de todo lo dems. Esto
funciona muy bien en los confines del despliegue de letras, pero una vez
que el usuario y los diseadores exigen ms de la pantalla, este esquema
es inadmisible.
El siguiente paso consiste en reservar un rea de memoria para cada
localidad grfica de la pantalla llamada PIXEL (Picture Element,
Elemento de Pantalla).
Utilicemos de inmediato el programa DEBUG para averiguar a qu nos
referimos:
C>CLS
C>DEBUG
-d b800:0 fa
9-163
Ensamblador
9-164
El Video
9.2 Ventanas
Las rutinas del ROM de una computadora IBM o compatible permiten el
manejo de ventanas dentro de la pantalla, as como de varias pginas de
video para animaciones rpidas y distintos trucos programticos.
Esta caracterstica es muy utilizada en los programas modernos
integrados y ambientes en el que el manejo de las ventanas es la base.
Mostraremos a continuacin cmo colocar una ventana sencilla en la
pantalla de 20 columnas de ancho y 9 renglones de alto colocada en la
mitad de la pantalla:
;Ventana: demostracin del uso de ventanas
;NO utilice el ENTER para terminar una lnea
ventana
SEGMENT
ASSUME CS:ventana
;
;limpia pantalla
MOV AH,6
;Funcin de movimiento de pantalla
MOV AL,0
;Cdigo para limpiar pantalla
MOV CH,0
;rengln izq. sup.
MOV CL,0
;columna izq. sup.
MOV DH,24
;rengln inf. derecho
MOV DL,79
;columna inf. derecha
MOV BH,7
;Byte de atributo del carcter
INT
10h
;llamada al ROM
;
9-165
Ensamblador
ventana
ENDS
END
Ejercicio 9.1 Convierta el programa anterior en uno modular usando
llamadas a subrutinas (CALL) en lugar de las secuencas de cdigo
insertadas para: 1. limpiar pantalla, 2. colocar cursor y 3. mover rengln
hacia arriba (Scroll).
9-166
El Video
video
SEGMENT
AT
0B800h
DB
800h DUP(?)
;tamao de la pantalla (2048 bytes)
video
ENDS
;**********************************************************
codigo
SEGMENT
llena
PROC FAR
ASSUME CS:codigo
ASSUME DS:video
PUSH DS
;guarda el segmento viejo
SUB
AX,AX
;AX en cero
PUSH AX
;segmento DS:0
;
;llena la pantalla
otro:
MOV [BX],AX
;inserta carcter
INC
BX
;incrementa contador en
INC
BX
;2 bytes
LOOP otro
RET
;
llena
ENDP
codigo
ENDS
END
9-167
Ensamblador
9-168
El Video
9-169
Ensamblador
ASSUME DS:rom
MOV AX,rom
MOV DS,AX
;
;coloca en monocromtico
mono:
MOV AX,bandera
;bandera del equipo
AND
AX,11001111b
;quita los bits del video
OR
AX,00110000b
;y coloca bits de monocromtico
MOV bandera,AX
;regersa a su lugar
MOV AL,2
;80 columnas en Blanco y Negro
MOV AH,0
;funcin de modifica equipo
INT
10h
;llama a rutina de video
JMP
salida
;finaliza
;
9-170
El Video
INT
10h
;llama a rutina de video
;
salida:
INT
20h
;salir
;
mens
db
13,10
db
Teclee m para 80 x 25 monocromtico,13,10
db
modo
ENDS
END
inicio
9-171
Ensamblador
resultado.
9-172
El Video
AH = 12h
DX = nmero de rengln del punto a desplegar
CX = nmero de la columna del punto a desplegar
AL = color del punto
9-173
Ensamblador
abajo
EQU
50H
; flecha hacia abajo
derecha
EQU
4dH
; izquierda EQU
4bH
;
escape
EQU
1bH
; tecla de ESC
;************************************************
video
SEGMENT AT 0B800H
; define segmento extra apuntando a
pantalla
wd_buff
LABEL WORD
v_buff
LABEL BYTE
video
ENDS
;************************************************
linea
SEGMENT
; define el segmento de codigo
;
9-174
El Video
CMP
AL,33H
; si es mayor que 3 (ASCII)
JG
grafica
; no es color
CMP
AL,30H
; si es menor que cero (ASCII)
JL
grafica
; no es color
; nmero entre 0 y 3, es un color, defnelo
AND
AL,3
; quita 5 bits superiores
MOV BL,AL
; guarda en BL
JMP
lee_tecla
; toma siguiente caracter
; encuentra hacia a donde ir y grafica siguiente punto
grafica:
MOV AL,AH
; poner cdigo de bsqueda en AL
CMP
AL, arriba
JNZ
no_arriba
; salta si no es hacia arriba
DEC
DX
; si es hacia arriba resta lnea
no_arriba:
CMP
AL,abajo
JNZ
no_abajo
; salta si no es hacia abajo
INC
DX
; si hacia abajo, resta lnea
no_abajo:
CMP
AL,derecha
JNZ
no_derecha
INC
CX
no_derecha:
CMP
AL,izquierda
JNZ
prendelo
DEC
CX
; llama a subrutina de grfica que requiere color en AL,
; rengln en DX y columna en CX
prendelo:
MOV AL,BL
;retrasa
CALL graf_punto
; lee puerto B en AL
JMP
lee_tecla
; mascarilla los 2 bits ms bajos
salida:
RET
; regresa a dos
principal ENDP
; final de parte principal de programa
;
graf_punto PROC NEAR
; subrutina de graficacin en pantalla
; resolucin media, 320 x 200 en color
; entra con :
; coordenada x en CX, coordenada y en DX
; color en AL(0=apagado, 1,2,3=colores)
PUSH BX
; salva BX,columna,renglon y color
PUSH CX
9-175
Ensamblador
PUSH DX
PUSH AX
; multiplica rengln x # de bytes por rengln
; (80 pero como ya fue mult. por 2 usar 40)
PUSH DX
; salva reng. para par/non
MOV AL,40
; bytes/reng./2
AND
DX,0FEh
; quita bit de non/par
MUL DL
; AX tiene ahora la dir. del reng.
; ver si hay que sumar 2000H para segundo banco de memoria
; si el rengln es impar
POP
DX
; trae nmero original de reng.
TEST DL,1
; probar bit 0 para par/non
JZ
par
; salta a pares
ADD
AX,2000H
; suma para apuntar a 2do banco de
mem.
par:
MOV BX,AX
; salvar reng. en BX
; sumar dir de columna a rengln
PUSH CX
; salvar columna
SHR
CX,1
; correr a izq. para
SHR
CX,1
;no matar bits de color
ADD
BX,CX
; sumar a dir. en BX
; usar los bits de pos. para poner color y mascara en pos. correcta
POP
CX
; recupera columna
AND
CX,3
; guarda bits de pos.
INC
CX
; corrimiento gratis
POP
AX
; trae color
MOV DL,0FCh
; DL mascara 11,11,11,00
corre:
; AL color 00,00,00,cc
ROR
AL,1
; corre color
ROR
AL,1
; 2 bits a la derecha
ROR
DL,1
; corre mascarilla 2 bits
ROR
DL,1
; a la derecha
LOOP corre
; hacerlo el # de veces de pos. de bits
; contenido del byte, mascarilla todo menos color y OR con bits de color
AND
[v_buff + BX],DL
; mascarilla
OR
[v_buff + BX],AL
;OR con el color
POP
DX
; restaura rengln
POP
CX
; restaura columna
POP
BX
; restaura BX y
RET
; regresa
graf_punto ENDP
;
linea
ENDS ; fin de segmento
9-176
El Video
;*****************************************************
;
END
inicio
; fin de ensamble
Se introduce la pseudo instruccin LABEL BYTE, LABEL WORD y LABEL DWORD que define o redefine una localidad como tipo byte, palabra
o palabra doble. Recordemos que las pseudo instrucciones DB y DW
reservan y apartan las localidades de memoria necesarias segn la
definicin realizada, a diferencia de stas, LABEL slo informa al
ensamblador qu tipo de localidad es la que sigue o precede sin reservar
localidades de memoria y es sumamemte usada cuando se necesita
definir una misma rea como de dos o ms tipos diferentes. Se requiere de
este tipo de instrucciones pues el ensamblador es muy rgido con la
definicin de tipos y no es posible cambiar al vuelo el tipo de datos.
El dibujar lneas horizontales y verticales es muy sencillo pero en diagonal se vuelve un poco ms complejo requiriendo de ms pasos para
definir qu pixeles encender y cules no. Presentamos un programa en el
que al introducir una secuencia de 5 nmeros (x1, y1, x2, y2, color)
realiza la lnea utilizando el algoritmo de Bresenham.
Ejercicio 9.5 Investigar en qu consiste el algoritmo de Bresenham para
dibujar una lnea entre dos puntos en una pantalla.
9-177
Ensamblador
mitad_y
LABEL WORD
;|y2-y1|/2
mitad_x
DW
?
;|x2-x1|/2
cuenta
DW
?
;eje largo
x1
DW
?
;coordenada 1
y1
DW
?
;coordenada 1
x2
DW
?
;coordenada 2
y2
DW
?
;coordenada 2
color
DW
?
;color de 0 a 4 de 0 a 1
datos
ENDS ;fin de datos
;
bresen
SEGMENT
;segmento de cdigo
prog
PROC FAR
;parte principal del programa
ASSUME
CS:bresen,DS:datos
inicio:
;direccin inicial
;guarda la pila para el regreso
PUSH DS
SUB
AX,AX
PUSH AX
; limpia pantalla usando el ROM
MOV AH,6
; usa corrimiento hacia arriba
MOV AL,0
; cdigo para limpiar pantalla
MOV CX,0
; punto superior izq.=0,0
MOV DL,79
; punto inf izq en
MOV DH,24
; 79,24
INT
10H
; llama a rutina de ROM
n_linea:
CALL decbin
;pide x1
MOV x1,BX
CALL decbin
;pide y1
MOV y1,BX
CALL decbin
;pide x2
MOV x2,BX
CALL decbin
;pide y2
MOV y2,BX
CALL decbin
;pide el color
MOV color,BX
CALL linea
;dibuja la lnea
JMP
n_linea
;vuelve por otros datos
prog
ENDP ;
;
linea
PROC NEAR
;rutina para dibuhar la lnea
;encuentra |y2-y1| resultado en delta_y
MOV AX,y2
;toma y2
9-178
El Video
SUB
AX,y1
;resta y1, resultado en AX
;Si delta_y es + SI=1, si - SI=-1
MOV SI,1
;bandera positiva
JGE
guarda_y
;manten si positivo
MOV SI,-1
;poner bandera en negativo
NEG
AX
;saca valor absoluto
guarda_y:
MOV delta_y,AX
;guarda valor de |y2-y1|
;encuentra |x2-x1| resultado en delta_x
MOV AX,x2
;toma x2
SUB
AX,x1
;resta x1, resultado en AX
;Si delta_x es + DI=1, si - DI=-1
MOV DI,1
;bandera positiva
JGE
guarda_x
;si positivo manten
MOV DI,-1
;si negativo pon bandera
NEG
AX
;y saca valor absoluto
guarda_x:
MOV delta_x,AX
;guarda valor de |x2-x1|
;Encuentra si pendiente > o < que 1
CMP
AX,delta_y
;compara las deltas
JL
c_pend
;pendiente>1
CALL pend_1
;pendiente<=1
JMP
fin
c_pend:
CALL pend
;pendiente>1
fin:
RET
linea
ENDP
;
pend_1
PROC NEAR
;pendiente < 1
;Calcula |x2-x2|/2
MOV AX,delta_x
;toma |x2-x2|
SHR
AX,1
;divide entre 2
MOV mitad_x,AX
;y guarda
;Inicia valores
MOV CX,x1
;toma x1
MOV DX,y1
;toma y1
MOV BX,0
;inicializa BX
MOV AX,delta_x
;fija la cuenta a
MOV cuenta,AX
;|x2-x1|
punto:
CALL graf_punto
;grafica un punto
ADD
CX,DI
;inc/dec de X
ADD
BX,delta_y
;+|y2-y1| en BX
CMP
BX,mitad_x
;compara con |x2-x1|/2
9-179
Ensamblador
JLE
SUB
ADD
dcuenta
BX,delta_x
DX,SI
dcuenta:
DEC
cuenta
;Terminamos?
JGE
punto
;an no
RET
pend_1
ENDP
;
pend
PROC NEAR
;pendiente > 1
MOV AX,delta_y
;toma |y2-y1|
SHR
AX,1
;divide entre 2
MOV mitad_y,AX
;y guarda
;Inicia valores
MOV CX,x1
;toma x1
MOV DX,y1
;toma y1
MOV BX,0
;inicializa registro BX
MOV AX,delta_y
;toma |x2-x1|
MOV cuenta,AX
;y guarda en cuenta
punto2:
CALL graf_punto
;grafica punto
ADD
DX,SI
;incrementa o decrementa Y
ADD
BX,delta_x
;BX+|x2-x1|
CMP
BX,mitad_y
;compara con |y2-y1|/2
JLE
dcuenta2
;no incrementar o decrementar X
SUB
BX,delta_y
;BX-|y2-y1|
ADD
CX,DI
;incrementa o decrementa X
dcuenta2:
DEC
cuenta
;Se termin la lnea?
JGE
punto2
;an no
RET
pend
ENDP
;
graf_punto PROC NEAR
PUSH BX
;guarda registros
PUSH CX
PUSH DX
PUSH AX
PUSH SI
PUSH DI
;Rutina de ROM para graficar punto requiere de:
;DX=rengln, CX=columna, AL=color
MOV AX,color
9-180
El Video
MOV AH,12d
;funcin de graficar punto
INT
10h
;Rutina del BIOS
POP
DI
;Regresa registros
POP
SI
POP
AX
POP
DX
POP
CX
POP
BX
RET
graf_punto ENDP
;
key_in
EQU
1h
doscall
EQU
21H
;
decbin
PROC NEAR
;Ver captulo 6
;Acepta decimal de teclado, regresa
;binario en registro BX
MOV BX,0
;Limpia registro BX
otro:
MOV AH,key_in
;entrada del teclado
INT
doscall
;llama a DOS
SUB
AL,30h
;ASCII a binario
JL
sale
;Salir si el #<0
CMP
al,9d
;Es > 9?
JG
sale
;Si es as, no es dgito
CBW
;Convierte byte en AL a palabra en
AX
;Multiplica nmero en BX por 10
XCHG AX,BX
;Cambia registros AX y BX
MOV CX,10d
;Coloca 10 en CX
MUL CX
;y multiplica por AX (AX*10)
XCHG AX,BX
;Regresa # a BX
;Suma nmero en AX por el de BX
ADD
BX,AX
;suma dgito a #
JMP
otro
; y ve por otro
sale:
RET
decbin
ENDP
;
bresen
ENDS ;fin de segmento principal
;
-
9-181
Ensamblador
END
inicio
;fin de programa
9.4 Resumen
9.6 Problemas
9.1 Modifique el programa BRESENH de forma que salte un rengln
despus de aceptar cada parmetro.
9.2 Modifique el programa BRESENH de forma que acepte alguna tecla
que usted defina para terminar la ejecucin.
9.3 Modifique el programa BRESENH para que limpie la pantalla
despues de la graficacin de cada lnea.
9.7 Bibliografa
Revista PC Magazine EU nmeros de 1993.
Mercier Philippe Assembleur Facile. Marabout 1992, Alleur Blgica.
Barden William Jr. How to Program Microcomputers. Sams & Company 1987.
MASM 86 Columbia Data Products, EU 1986.
IBM Personal Computer Technical Reference. Apndice A
9-182
Captulo 10
10.1 Archivos
Por razones histricas y de compatibilidad con sistemas anteriores y con
versiones viejas, el MS-DOS proporciona acceso a lectoras de disco de
varias formas:
Acceso secuencial a registros
Acceso aleatorio a registros
Acceso aleatorio a bloques
Manejadores de archivo (file handles)
En el ltimo esquema se especifica el nombre del archivo y la
interrupcin regresa un nmero de manejador que a partir de ese
momento sirve para accesar los datos del archivo.
Analizaremos brevemente en las siguientes secciones cada uno de los
mtodos e ilustraremos con breves programas.
10-183
Ensamblador
AH=0Fh
DS=Direccin del Segmento del FCB
DX=Desplazamiento de la direccin del FCB
AL=FF
El archivo no existe
FCB
10-184
El Acceso a Disco
y comprobemos con D.
-d0
Veremos que los bytes a partir del 5Ch han sido modificados y contienen
ahora el nombre del archivo PRUEBA.TXT que DEBUG coloc ah.
Ejecutemos ahora nuestro programa con G. Si desplegamos de nuevo la
direccin 0 (D0) nos encontramos que todo el panorama del FCB ha
cambiado y muestra nueva informacin de acuerdo a la siguiente tabla:
10-185
Ensamblador
10-186
El Acceso a Disco
AL=01
AL=02
AL=03
fin de archivo
10-187
Ensamblador
MOV
MOV
INT
MOV
INT
INT
DX,5C
AH,0F
21
AH,14
21
20
dos
EQU
21h
;llamada al SO
abre
EQU
0Fh
;llamada al SO
lee
EQU
14h
;llamada al SO
muestra EQU 2h
;llamada al SO
fcb
EQU
5Ch
;llamada al SO
eof
EQU
1Ah
;llamada al SO
10-188
El Acceso a Disco
datos
SEGMENT
ORG
7Ch
regnum
DB
?
;nmero de registro
ORG
80h
dato
DB
80h DUP(?)
;rea DTA
datos
ENDS
;
secuencial SEGMENT
;programa principal
;
prog
PROC FAR
ASSUME CS:secuencial,DS:datos
inicio:
;Salva segmentos para el regreso
PUSH DS
;salva DS
SUB
AX,AX
;0 en AX
PUSH AX
;coloca 0 en la pila
;Abre el archivo y coloca registrro en 0
MOV DX,fcb
;poner direccin de FCB dentro del
segmento
MOV AH,abre
;servicio de apertura
INT
dos
;de la interrupcin 21h
MOV regnum,0
;primer registro en 7Ch
;lee registro en forma secuencial
lee_reg:
MOV DX,fcb
;apunta al FCB
MOV AH,lee
;servicio de lectura de
INT
dos
;la interrupcin 21h
;muestra el registro que se encuentra en DTA
MOV CX,80h
;nmero de caracteres
MOV BX,0
;inicializa el apuntador
imprime:
MOV DL,[dato+BX]
;toma carcter
CMP
DL,eof
;Llegamos al final de archivo?
JE
salir
;si, salir
MOV AH,muestra
;no, muestra
INT
dos
INC
BX
;incrementa el contador
LOOP imprime
;realiza 80h veces
JMP
lee_reg
;y ve por otro registro del archivo
salir:
RET
;termina y regresa a DOS
prog
ENDP
10-189
Ensamblador
secuencial ENDS
END
inicio
El programa requiere del nombre del archivo que queremos leer y ver en
la pantalla como parmetro del programa: SECUENCI LEEME.TXT, el SO
se encarga entonces de llenar el FCB con los datos del archivo (en este
caso LEEME.TXT), algo similar al comando N de DEBUG.
Otra cosa a notar es el manejo del registro DS y ES que el sistema
operativo, por tratarse de un archivo tipo EXE, inicializa con los datos del
mismo programa apuntando a los segmentos adecuados.
Existe tambin un traslape de 1 byte entre el FCB y el DTA en la direccin
80h. En el caso de acceso secuencial no hay problema pues el byte no es
usado. Pero en el caso de acceso aleatorio se debe tener cuidado de no
perderlo por lo que muchas veces se prefiere mudar el rea de DTA a
otro lado.
En nuestro siguiente programa introducimos las funciones de crear un
archivo y de escribir a l conjuntamente:
;
dos
EQU
21h
;llamada al SO
crear
EQU
16h
;crear archivo
escribe
EQU
15h
;despliega carcter
cierra
EQU 10h
;cierra archivo
mem_prov EQU
0Ah
;memoria para el teclado
fcb
EQU
5Ch
;rea de control de archivo
cr
EQU
0Dh
;ASCII de RETORNO
lf
EQU
0Ah
;ASCII de ALIMENTA LINEA
;
datos
SEGMENT
ORG
7Ch
regnum
DB
?
ORG
80h
dato
DB
80h DUP(?)
;rea DTA
datos
ENDS
;
guarda
SEGMENT
10-190
El Acceso a Disco
prog
PROC FAR
ASSUME CS:guarda,DS:datos
inicio:
;Guarda segmentos para regresar en paz
PUSH DS
;salva DS
SUB
AX,AX
;colcoa 0 en AX
PUSH AX
;y empuja a la pila
;crea archivo, coloca contador de registro en 0
MOV DX,fcb
;FCB en DX
MOV AH,crear
;servicio de Crea archivo
INT
dos
;de DOS
MOV regnum,0
;0 en direccin 7Ch (nmero de
registro)
;limpia memoria llenando con retorno de lnea
otra_linea:
MOV BX,0
;apuntador de caracteres
MOV CX,80h
;cuenta de caracteres
borra:
MOV [BX+dato],cr
;CR en zona de datos
INC
BX
;incrementa apuntador
LOOP borra
;repite 80h veces
;Toma lnea del teclado
MOV dato-2,78
;long. mxima de lnea
MOV DX,OFFSET dato-2 ;direccin de DTA
MOV AH,mem_prov
;acepta del teclado una lnea
INT
dos
CMP
dato-1,1
;si no hay caracteres
JLE
salir
;salir del programa
;inserta alimentacin de lnea
MOV BL,dato-1
;coloca cuenta de caracteres
aceptados
MOV BH,0
;en registro BH
MOV [dato+BX+1],lf
;inserta alimentacin de lnea
;escribe registro al archivo en modo secuencial
MOV DX,fcb
;FCB en DX
MOV AH,escribe
;escribe en secuencia
INT
dos
JMP
otra_linea
;y acepta otra lnea
;Cierra el archivo y sal a DOS
salir:
MOV DX,fcb
;FCB en DX
MOV AH,cierra
;funcin de cerra archivo
INT
dos
RET
prog
ENDP
10-191
Ensamblador
guarda
ENDS
END
inicio
Los datos se introducen al programa lnea a lnea terminando con RECuando introducimos un RETORNO unicamente el programa
cierra el archivo y regresa el controla al SO. Se han introducido dos
nuevas funciones en el programa como se resumen en las siguientes tablas:
TORNO.
10-192
El Acceso a Disco
AL=FF
AL=01
AL=02
10-193
Ensamblador
salga de inmediato.
En los ejercicios anteriores use definiciones de mensajes en el rea de
datos de forma similara a:
mensaj1
DB
10-194
El Acceso a Disco
AL=01
AL=02
AL=03
fin de archivo
dos
EQU
21h
;llamada al SO
abre
EQU
0Fh
;abre un archivo
leer
EQU
21h
;leer de un archivo aleatorio
muestra
EQU
2h
;despliega carcter
tecla
EQU 1h ;lee un carcter del teclado
fcb
EQU
5Ch
;rea de control de archivo
eof
EQU
1Ah
;ASCII de fin de archivo
;
datos
SEGMENT
10-195
Ensamblador
ORG
7Dh
;registro aleatorio
aleatorio1 DW
?
;registro parte baja
aleatorio2 DW
?
;registro parte alta
ORG
80h
dato
DB
80h DUP(?)
;rea de transferencia de datos
datos
ENDS
;
leealea
SEGMENT
prog
PROC FAR
ASSUME CS:leealea,DS:datos
inicio:
;Guarda segmentos para regresar en paz
PUSH DS
;salva DS
SUB
AX,AX
;colcoa 0 en AX
PUSH AX
;y empuja a la pila
;abre el archivo
MOV DX,fcb
;FCB en DX
MOV AH,abre
;servicio de Abre archivo
INT
dos
;de DOS
;Toma # registro del teclado y coloca en FCB
MOV ah,tecla
;funcin del teclado
INT
dos
SUB
AL,30h
;convierte de ASCII a binario
CBW
;convierte a palabra
MOV aleatorio1,AX
;coloca en FCB
MOV aleatorio2,0
;y 0 en parte alta
;Lee registro del archivo
MOV DX,fcb
;en DX el FCB
MOV AH,leer
;lee de forma aleatoria
INT
dos
;Muestra el registro del rea de transferencia (DTA)
MOV CX,80h
;# de caracteres en CX (contador)
MOV BX,0
;Inicializa apuntador
a_pantalla:
MOV DL,[dato+BX]
;toma carcter
CMP
DL,eof
;Se lleg al final?
JE
salir
;si, salir
MOV AH,a_pantalla
;no, despliega en pantalla
INT
DOS
INC
BX
;ajusta el apuntador
LOOP muestra
;lazo de 80h veces
salir:
RET
;regresa a DOS
prog
ENDP
10-196
El Acceso a Disco
leealea
ENDS
END
inicio
10-197
Ensamblador
Error
01
02
Archivo no encontrado
03
Camino no encontrado
04
05
06
Manija invlida
07
08
Memoria insuficiente
09
10
0A
Ambiente invlido
11
0B
Formato invlido
12
0C
13
0D
Datos invlidos
14
0E
no se usa
15
0F
Disco invlido
16
10
17
11
No es el mismo dispositivo
18
12
No hay ms archivos
10-198
El Acceso a Disco
AH=3Dh
DS=Direccin del Segmento de cadena ASCII+0
DX=Desplazamiento de la direccin de cadena ASCII+0
AL=Cdig o
de
(0=lectura,1=escritura,2=lectura/escritura)
Acceso
Regresa:
Bandera de acarreo 0 si no hay error, 1 si hay error
(CF)
AX
AL=02
10-199
Ensamblador
10-200
El Acceso a Disco
10-201
Ensamblador
AX
llama_dos EQU
21h
;servicios varios de DOS
datos
SEGMENT
;Define segmento de datos
nombre
DB
50
;nombre de archivo
DB
?
;bytes leidos
DB
50
DUP(?) ;mem. prov. del nombre
registro
DB
80
;long. del registro
DB
?
;bytes leidos
DB
80
DUP(80)
;mem. prov. del
registro
manija
DW
?
;almacenamiento de manija
;zona de mensajes del programa
mensj1
DB
0Dh,0Ah,Nombre del archivo con todo y
camino:,0Dh,0Ah,$
mensj2
DB
0Dh,0Ah,0Dh,0Ah,Datos: (termine con
ENTER),0Dh,0Ah,$
10-202
El Acceso a Disco
mensje
DB
Error $
crlf
DB
0Dh,0Ah,$
;nueva lnea
datos
ENDS ;fin del segmento de datos
;
creaarch
SEGMENT
;segmento de cdigo
;
10-203
Ensamblador
JLE
salir
;y si no salir
;Inserta salto de lnea al registro
MOV BL,registro+1
;coloca cuenta
MOV BH,0
;y ajusta BX
MOV [registro+BX+2],0Dh ;agrega salto de lnea
MOV [registro+BX+3],0Ah ;y nueva lnea
ADD
registro+1,2
;ajusta al nuevo final
MOV DX,OFFSET crlf
;encargarse de la pantalla
MOV AH,09h
;funcin de despliegue
INT
llama_dos
;Escribe al archivo el registro
MOV BX,manija
;coloca manija en BX
MOV DX,OFFSET registro+2
;direccin de mem. prov.
MOV CL,registro+1
;# de bytes a escribir
MOV CH,0
;y ajusta CX
MOV AH,40h
;funcin de escritura a archivo
INT
llama_dos
JC
error
;si hay un error salir
CMP
AL,registro+1
;Compara bytes escritos con los que
solicitamos escribir
JNE
error
;si no son iguales hay un error
JMP
otra_linea
;vuelve por ms registros
salir:
;Cierre el archivo y termina
MOV BX,manija
;toma la manija
MOV AH,3Eh
;funcin de cierre de archivo
INT
llama_dos
JC
error
;si hay un error, despliega
RET
;termina normalmente
error:
;maneja los errores
MOV DX,OFFSET mensje ;el mensaje de error
MOV AH,09h
;funcin de despliegue
INT
llama_dos
MOV BX,manija
;toma el # de error
CALL binhex
;convierte a hexadecimal y despliega
JMP
salir
;termina cerrando
principio ENDP
;
10-204
El Acceso a Disco
AND
AL,0Fh
;quita dgitos de la izq.
ADD
AL,30h
;convierte a ASCII
CMP
AL,3Ah
;Es mayor que 9?
JL
despliega
;Despliega si ente 0 y 9
ADD
AL,7h
;el dgito est entre A y F
despliega:
MOV DL,AL
;Coloca ASCII en DL
MOV AH,2h
;Funcin de despliegue
INT
llama_dos
;Llama a DOS
DEC
CH
;Terminamos con los 4 dgitos?
JNZ
rota
;Si an no se termina
RET
;Regresa
binhex
ENDP
;
creaarch
ENDS
;
END
inicio
10-205
Ensamblador
10. Resumen
10. Problemas
10. Bibliografa
Revista PC Magazine EU nmeros de 1980-93.
Barden William Jr. How to Program Microcomputers. Sams & Company 1987.
MASM 86 Columbia Data Products, EU 1986.
IBM Personal Computer Technical Reference. Apndice D
Morgan L. Christopher Bluebook of Assembly Routines for the IBM PC
The Waite Group USA 1987
10-206
Captulo 11
11.1 Interfase a otros Lenguajes
Como ya hemos visto a lo largo del libro, el ensamblador es ideal para
problemas en los que se requiere de rapidez o de el acceso a todos los
componentes del sistema sin restricciones. Pero por otro lado esa es su
debilidad pues cuesta mucho trabajo y tiempo hacer programas en
ensamblador. En el otro extremo del espectro se encuentran los lenguajes
de alto nivel como PASCAL o C donde es fcil realizar los programas
pero muchas veces no obtienen la rapidez necesaria o el acceso a los
dispositivos requerido.
La interfase se realiza con mucho mayor facilidad en los lenguajes
compilados que en los interpretes pues el ligador se encarga de reunir los
distintos archivos OBJ en un slo ejecutable uniendo las libreras y
dems elementos necesarios para el funcionamiento del programa.
El reunir dos objetos de distintos lenguajes tiene problemas especficos
que analizaremos por separado en las siguientes secciones.
11-207
Ensamblador
11-208
BP
BP,SP
BP
BP,SP
SP,4
11-209
Ensamblador
PUSH
MOV
SUB
PUSH
PUSH
PUSH
PUSH
.
.
.
BP
BP,SP
SP,4
SI
DI
SS
DS
BP
Parmetro
Parmetro
...
...
CS de x
IP de x
BP de x
SP
d-14
d-16
d-18
d-20
d-22
d-24
Direccin alta
(salvado por y)
(reservado por y)
(reservado por y)
(salvado por y)
(salvado por y)
(salvado por y)
(salvado por y)
EQU
EQU
EQU
[BP+6]
[BP+8]
[BP+10]
;primer parmetro
;segundo parmetro
;tercer parmetro
11-210
Si es de 1 byte en AL
Si es de 2 bytes en AX
Si es de 4 bytes en DX y AX
Y la rutina en ensamblador es
codigo
eleva
eleva
codigo
11-211
Ensamblador
END
11.1.5 C y Ensamblador
Un programa en C puede llamar a uno en ensamblador tal como si se
tratase de otro modulo o funcin escrita en C. Para tal propsito se den de
seguir los siguientes pasos:
1. Declare los procedimientos en C como lejanos (FAR)
2. Observe las siguientes convenciones:
a) Regrese con un simple RET sin tratar de ajustar la pila
b) Los parmetros se colocan en la pila en el orden inverso en el
que aparecen en la lista de la llamada. El primer parmetro se
encuentra en la parte baja de memoria.
c) Los parmetros se pasan por valor a excepcin de los arreglos
que se pasan por referencia
Incluya un signo de subrayado en frente de cada variable que se va
a compartir con otros mdulos. Recuerde que C solo reconoce los
primeros 8 caracteres y que a menos de que se especifique lo
contrario, si importan las maysculas y minsculas.
EXTERN INT eleva(int,int);
MAIN()
{
PRINTF(5 x 2^5 es %d\n,eleva(5,5));
}
Y la rutina en ensamblador es
codigo
_eleva
_eleva
codigo
END
11-212
11-213
Ensamblador
11-214
initialize:
MOV
MOV
MOV
MOV
INT
MOV
MOV
BX,CS
DS,BX
AL,dos_video_io ;toma interrup de video
AH,get_vector
dos_function
video_io,BX
; y guardalo para uso posterior
video_io[2],ES
11-215
Ensamblador
MOV BX,CS
;reemplaza vector de
impresora viejo
MOV DS,BX
;con el que apunta a esta
rutina
MOV DX,OFFSET printer_interceptor
MOV AL,dos_printer_io
MOV AH,set_vector
INT
dos_function
MOV BX,CS
MOV DS,BX
MOV DX,OFFSET initialize
INT
dos_terminate_resident ;termina quedando residente
CSEG ENDS
END
START
; es necesario que este instalado el ANSI.SYS
; en CONFIG.SYS con DEVICE=ANSI.SYS
TITLE Anti CTRL-PRINTSCREEN
code_seg SEGMENT PARA PUBLIC code
ASSUME CS:code_seg, DS:code_seg, ES:code_seg,
SS:code_seg
ORG
100h
start:
JMP
screen
;limpia pantalla,
;definir prtscr como A y ^P como NO
message
screen
screen
code_seg
END
DB
27,[2J
DB
27,[0;114;65p
DB
27,[16;66p
DB
$
PROC NEAR
MOV DX,OFFSET message
MOV AH,09h
INT 21h
INT 27h
ENDP
ENDS
start
Los programas del tipo TSR son una respuesta a la estructura de tarea
nica del sistema operativo para intentar que mas de un programa
funcione a la vez.
En los programas anteriores debemos de diferenciar entre los
programas del tipo residentes (TSR) y los del tipo ISR (Interrupt Service
11-216
11.3 Resumen
11.4 Problemas
11.5 Bibliografa
Revista PC Magazine EU nmeros de 1980-93.
MASM 86 Columbia Data Products, EU 1986.
IBM Personal Computer Technical Reference. Apndice D
Morgan L. Christopher Bluebook of Assembly Routines for the IBM PC
The Waite Group USA 1987
Tischer Turbo Pascal Internals Abacus USA 1990
11-217
Apndice A.
A.1 Las Instrucciones del 80x86
acumulador
BX
base
CX
cuenta
DX
datos
BP
apuntador base
SI
apuntador fuente
DI
apuntador datos
IP
apuntador de instruccin
CS
segmento de cdigo
DS
segmento datos
ES
segmento extra
SS
segmento pilas
Registros segmentos
A-219
Ensamblador
OPERACION
AX
AL
AH
BX
Traduce
CX
CL
DX
SP
SI
DI
IP
A-220
Funcin
OF
saturacin
DF
IF
habilita interrupciones
TF
SF
ZF
cero
AF
acarreo auxiliar
PF
pariedad (par)
CF
acarreo
IOPL
NT
tarea anidada
RF
continua operacin
VM
modo virtual
A-221
Ensamblador
A-222
Desplazamiento
Traer instruccin
CS
Ninguno
IP
SS
Ninguno
SP
CS ES SS
direccin efectiva
Fuente cadena
DS
CS ES SS
SI
Destino cadena
ES
Ninguno
DI
SS
CS ES SS
direccin efectiva
Inmediato
En la misma instruccin
Registro
En el registro
Directo
De base e ndice con La direccin de memoria se forma por la suma del contenido del
registro base el contenido del registro ndice y un
desplazamiento
desplazamiento
A-223
Ensamblador
Segmentada
A-224
LOCALIZACION
EJEMPLO
Inmediato
En la instruccin
ADD CH,5F
Registro
En el registro
ADD BX,DX
Directo
Registro
Indice o base
Base e ndice con desplazamiento La direccin de memoria es la suma del ADD [BX+DI+5],DX
contenido del registro base, ms el contenido
del registro ndice y un desplazamiento
A-225
Ensamblador
Descripcin de su operacin
MOV destino,fuente
PUSH fuente
POP destino
PUSHF
POPF
XCHG op1,op2
LAHF
SAHF
IN acc,puerto
OUT puerto,acc
LEA destino,fuente
LDS destino,fuente
LES destino,fuente
XLAT
traduce byte
A-226
A-227
Ensamblador
A-228
A-229
Ensamblador
Descripcin de la Operacin
ADD destino,fuente
ADC destino,fuente
SUB destino,fuente
SBB destino,fuente
INC destino
DEC destino
NEG destino
CMP destino,fuente
MUL fuente
IMUL fuente
DIV fuente
IDIV fuente
CBW
CWD
DAA
DAS
AAA
AAS
AAM
AAD
A-230
Descripcin de la Operacin
NOT destino
AND destino,fuente
OR destino,fuente
XOR destino,fuente
TEST destino,fuente
SHR destino,cuenta
SAR destino,cuenta
SHL/SAL destino,cuenta
ROR destino,cuenta
RCR destino,cuenta
ROL destino,cuenta
RCL destino,cuenta
Descripcin de la Operacin
JMP destino
Jcond destino
LOOP destino
Lazo
LOOPE/LOOPZ destino
LOOPNE/LOOPNZ destino
JCXZ destino
Salta si CX=0
CALL destino
INT tipo
Interrupcin
INTO
IRET
A-231
Ensamblador
Con signo
JG/JNLE destino
JGE/JNL destino
JL/JNGE destino
JLE/JNG destino
JO destino
Saturacin
JS destino
Signo
JNO destino
No saturacin
JNS destino
No signo
Sin signo
JA/JNBE destino
JAE/JNB destino
JB/JNAE destino
JBE/JNA destino
No importa el signo
JC destino
Acarreo
JE/JZ destino
Igual/Cero
JP/JPE destino
Pariedad/Pariedad par
JNC destino
No acarreo
JNE/JNZ destino
No igual/No cero
JNP/JPO destino
No pariedad/Pariedad non
Descripcin de la Operacin
MOVSB/MOVSW
CMPSB/CMPSW
SCASB/SCASW
LODSB/LODSW
STOSB/STOSW
Repite
REPE/REPZ
REPNE/REPNZ
A-232
Operacin
SI
DI
ES
CX
contador de repeticin
AL/AX
DF
ZF
Accin
STC
CLC
CMC
STD
CLD
STI
Habilita interrupciones
CLI
Deshabilita interrupciones
HLT
WAIT
ESC
LOCK
NOP
A-233
Ensamblador
A-234
Apendice B
Interrupciones
S e r v i c i o Interrupcin Descripcin
(AH=)
Parmetros
Regresa
02h
21h
DL=carcter (ASCII)
20h
01h
21h
09h
21h
0Ah
21h
05h
21h
Imprime carcter
DL=carcter a imprimir
0Bh
21h
00h
10h
Tipo
de
(color,mono,etc.)
d e s p l ie g u e
01h
10h
Tipo de cursor
02h
10h
03h
10h
04h
10h
05h
10h
B-235
Ensamblador
06h
10h
07h
10h
08h
10h
09h
10h
0Ah
10h
0Bh
10h
0Ch
10h
0Dh
10h
0Fh
10h
10h
10h
Generador de carcteres
11h
bit 0 coprocesador
bit 4,5 tipo de video
bit 7,6 # lectoras de disco
bit 9,10,11 #puertos RS-232
bit 13 joystick
bit 14,15 #puertos paralelos
12h
Tamao de la memoria
AX=# bytes
2Ah
21h
2Bh
21h
2Ch
21h
CH=hora, CL=minuto
D H = se g u n d o s , DL = 1 /1 0 0
segundos
2Dh
21h
30h
21h
AX=versin
38h
21h
0Fh
21h
B-236
FCB, # de disco,tamao de
registro,fecha,tamao archivo,#
bolque,etc.
(El nombre del archivo con su extensin deben de estar ya en el FCB)
4Eh
21h
CS:DI=archivo a buscar
DTA 0B0h
4Fh
21h
CS:DI=archivo a buscar
57h
21h
B-237
Introduccin
ndice
!
804861-27
A
acceso aleatorio1-23, 10-194
acceso directo a memoria5-88
acceso secuencial1-23
acceso secuncial10-183
acumulador1-9
ADC7-132
ADD7-131
AND6-114
ASCII3-67
ASCIIZ10-197
asignacin de memoria11-207
ASSUME4-82
B
BCD3-63
BIOS2-34
bit1-2, 3-64
Bresenham9-177
buffer5-88
bus1-4
239
Ensamblador
byte1-3, 3-65
BYTE PTR5-102
C
C y ensamblador11-212
CALL7-136
carcteres de control3-68
CLD8-152
CMP6-110
CMPS8-152
cdigo fuente2-35
cdigo Grey3-67
cdigo objeto2-35
cdigos3-67
COM4-83
compilador2-45
complemento3-64
complemento a 13-66
complemento a 23-66
complemento a 93-64
conjunto de instrucciones2-38
contador de programa1-10
conversin binario-decimal3-58
conversin decimal-binario3-59
240
Introduccin
corrimientos7-128
CPU1-2 - 1-3, 1-19
D
DB4-83
DD4-83
debug4-78
DEC7-132
desbordamiento3-65
direccin1-3, 1-25
direccin efectiva2-42
direccionamiento
directo a memoria2-42
Implcito2-41
indirecto2-42
memoria2-41
relativo2-42
directivas de ensamblador2-39
DIV7-133
divisin en otros sistemas3-60
DMA5-88
DOS7-121
DTA10-183
DUP4-83
241
Ensamblador
DW4-83
E
E/S1-2, 5-87
mapa de memoria5-88
E/S por interrupcin5-88
E/S programada5-87
END4-82
ENDP7-135
ENDS4-82
ensamblador2-36
entrada/salida5-87
EPROM1-27
EQU4-82
exceso 33-64
EXE4-83
F
FCB10-183
H
hardware2-33
hexadecimal3-61
I
I/O1-2
IBM1-27
242
Introduccin
IDIV7-133
IMUL7-133
IN6-117
INC6-108
input/output5-87
instruccin1-8
INT5-94, 6-105
interfase a otros lenguajes11-207
intrprete2-45
interrupcin
impresora7-125
no mascarillable5-93
pantalla7-123
teclado7-122
ISR11-213, 11-216
J
JMP6-106
juego de instrucciones1-3
L
LABEL BYTE9-177
LABEL DWORD9-177
LABEL WORD9-177
Leibnitz3-56
243
Ensamblador
lenguaje de mquina2-36
lenguajes de alto nivel2-44
LOOP6-109
LOOPE6-110
LOOPNE6-110
M
macroinstruccin1-18
macroprograma1-19
manijas10-197
masm4-81
memoria1-2
memoria auxiliar1-22
memoria de alta velocidad1-21
memoria de lectura escritura1-25
memoria de respaldo1-22
memoria de slo lectura1-25 - 1-26
memoria de slo lectura programable y borrable1-27
memoria interna1-21
memoria no voltil1-27
memoria principal1-21
memoria secundaria1-22
memoria voltil1-27
microinstruccin1-18
244
Introduccin
microprograma1-18
microprogramacin1-18
mnemnico1-12
MOV5-95
MOVS8-152
MOVSB8-152
MOVSW8-152
MUL7-133
multiplexin1-17
multiplicacin en otros sistemas3-60
N
NEG6-114
NOP7-135
NOT6-114
O
OR6-114
OUT6-117
P
PAGE7-138
paginacin2-42
palabra3-65
palabra de direccin1-25
paridad1-7
245
Ensamblador
paridad impar1-7
paridad par1-7
prrafo1-31
Pascal y ensamblador11-208
pila5-91, 8-141
PIXEL9-163
POP8-142
POPF8-150
PROC7-135
procesador de comandos2-34
programas2-33
programas residentes11-213
PROM1-27
PSP11-214
PUSH8-142
PUSHF8-150
R
RAM1-25
RCL7-130
RCR7-130
registro1-9
registro contador de datos1-9
registro de estado1-15
246
Introduccin
registro de instruccin1-10
REP8-152
REPE8-154
REPNE8-154
REPNZ8-154
representacin con signo3-65
REPZ8-154
resta en otros sistemas3-60
RET7-136
ROL7-130
ROM1-25 - 1-26
ROR7-129
rotaciones7-128
rutina de servicio de interrupcin5-91
S
SAL7-130
saltos cercanos6-107
saltos condicionales6-110
saltos cortos6-107
saltos de ndice6-107
saltos lejanos6-107
SAR7-130
saturacin3-65
247
Ensamblador
SBB7-132
SCAS8-152
SEGMENT4-82
SEGMENT AT9-171
SHL7-130
SHR7-130
sistema base dos3-56
sistema binario3-56
sistema decimal3-55
sistema notacional3-56
sistema operativo2-33
sistemas numricos3-53
software2-33
STD8-152
SUB7-131
suma en otros sistemas3-60
T
TEST6-114
tiempo de acceso1-23
TSR11-213
U
UAL1-19
unidad aritmtica y lgica1-19
248
Introduccin
249