Professional Documents
Culture Documents
1 FUNDAMENTOS
1.1 INTRODUCCIN
Todo procesador, grande o pequeo, desde el de una calculadora hasta el de un supercomputador, ya sea
de propsito general o especfico, posee un lenguaje nico que es capaz de reconocer y ejecutar. Por
razones que resultan obvias, este lenguaje ha sido denominado Lenguaje Mquina y ms que ser propio
de un computador pertenece a su microprocesador. El lenguaje Mquina est compuesto por una serie de
instrucciones, que son las nicas que pueden ser reconocidas y ejecutadas por el microprocesador.
Este lenguaje es un conjunto de nmeros que representan las operaciones que realiza el
microprocesador a travs de su circuitera interna. Estas instrucciones, por decirlo as, estn grabadas o
"alambradas" en el hardware y no pueden ser cambiadas. El nivel ms bajo al que podemos aspirar a
llegar en el control de un microprocesador es precisamente el del lenguaje de mquina.
Obviamente es el lenguaje ms simple es el empleado por el propio ordenador (compuesto de 0 y 1,
cdigo binario). Es comprensible que al usar slo ceros y unos su utilizacin sea difcil, larga y motivo de
frecuentes errores.
Con el Lenguaje Mquina, se obtiene un control total del microprocesador sin embargo, la
programacin en este lenguaje resulta muy difcil y fcil para cometer errores. No tanto por el hecho de
que las instrucciones son slo nmeros, sino porque se debe calcular y trabajar con las direcciones de
memoria de los datos, los saltos y las direcciones de llamadas a subrutinas, adems de que para poder
hacer ejecutable un programa, se deben enlazar las rutinas de run-time y servicios del sistema operativo.
Este proceso es al que se le denomina ensamblado de cdigo. Para facilitar la elaboracin de
programas a este nivel, se desarrollaron los Ensambladores y el Lenguaje Ensamblador.
Lenguaje Ensamblador
Programar en Ensamblador es como programar en un lenguaje mquina ya que hay una identificacin
entre lenguaje mquina de 0 y 1 y un lenguaje simblico
El ensamblador es un lenguaje intermedio, creado para facilitar la comunicacin entre el hombre y la
mquina. Utiliza cdigos nmotcnicos o nmnicos, generalmente difciles de aprender y que adems son
especficos de cada microprocesador.
Para facilitar el trabajo del programador y hacer la programacin accesible al mayor nmero de
personas, se han creado lenguajes avanzados, que no dependen del ordenador. En realidad, estos
lenguajes son programas que convierten las distintas instrucciones y datos en lenguaje mquina, el nico
que es procesado por el ordenador.
Por lo tanto, se deduce que el Lenguaje Ensamblador es un lenguaje de bajo nivel compuesto por una
serie de cdigos nmotcnicos (o nmnicos) o de peticin que son traducidos a lenguaje mquina. Sus
caractersticas son:
1. Muy rpido.
2. Difcil de aprender.
3. Propio de cada procesador.
Una caracterstica fundamental del lenguaje ensamblador es que cada una de sus sentencias es una
codificacin simblica de una instruccin numrica mquina. Otra caracterstica que presenta es que nos
permite llegar a usar cualquier recurso del sistema (hw), cosa que no nos permiten los lenguajes de alto
nivel.
1
El uso de referencias simblicas es una caracterstica bsica del lenguaje ensamblador, evitando
tediosos clculos y direccionamiento manual luego de cada modificacin del programa.
Tambin incluyen facilidades para crear macros , a fin de generar series de instrucciones cortas que
se ejecutan en tiempo real, en lugar de utilizar subrutinas.
Existe una correspondencia 1 a 1 entre las instrucciones del lenguaje de mquina y las del lenguaje
ensamblador. Cada uno de los valores numricos del lenguaje de mquina tiene una representacin
simblica de 3 a 5 letras como instruccin del lenguaje ensamblador.
Adicionalmente, este lenguaje proporciona un conjunto de pseudo-operaciones (tambin conocidas
como directivas del ensamblador) que sirven para definir datos, rutinas y todo tipo de informacin para que
el programa ejecutable sea creado de determinada forma y en determinado lugar.
El propsito para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de
programas, ya que escribir directamente en cdigo binario, que es el nico cdigo entendible por la
computadora, es en la prctica imposible.
USUARIO
P
R
O
G
R
A
M
A
D
O
R
APLICACIONES
Lenguajes Visuales
SOFTWARE
Lenguaje de Alto
Nivel
Lenguaje Ensamblador
HARDWARE
Lenguaje Mquina
Ensambladores
El proceso importante que convierte las instrucciones de Lenguaje Ensamblador en un cdigo Mquina es el de traduccin. Los
traductores son programas que realizan ese proceso de conversin.
En el proceso de traduccin es necesario identificar los diferentes tipos de cdigo que se involucran. Cdigo Fuente se
denomina al programa escrito con las instrucciones propias del lenguaje. El Cdigo Objeto es el que se genera cuando ha
pasado por la traduccin y est escrito generalmente en cdigo mquina.
Los traductores se dividen en dos grupos dependiendo de la relacin entre cdigo fuente y cdigo objeto. Cuando una
instruccin de un cdigo fuente nos genera una nica instruccin numrica mquina decimos que ese cdigo fuente es
ensamblador.
Cuando la instruccin simblica de cdigo fuente (como Basic, Cobol, Fortran, llamados de Lenguajes de Alto Nivel) nos
genera varias instrucciones mquina o varias instrucciones simblicas de otro lenguaje, el traductor realiza la transformacin en
una de 2 formas:
Cuando todas las instrucciones son traducidas en un solo bloque se le llama compilador.
Si las instrucciones y datos son traducidas a lenguaje mquina lnea por lnea, entonces se llama intrprete.
2
27
128
1
1*128
12810
26
64
0
25
24
32
16
1
0
1*32
3210
(128+32+8+4+1) = 17310
23
8
1
1*8
810
22
4
1
1*4
410
21
2
0
20
1
1
1*1
110
2. Este byte es dividido es 2 partes, cada uno de 4 bits. Cada una de estas partes recibe el nombre de
NIBBLE. El sistema de numeracin hexadecimal es usado en esta conversin, siendo sus dgitos del 0
al 9 que representan respectivamente los nmeros del 0 al 9, los nmeros del 10 al 15 se representan
como sigue: A=10, B=11, C=12, D=13, E=14 y F=15.
Nibble Alto
23
8
1
1*8
22
4
0
Nibble Bajo
21
2
1
1*2
20
1
0
23
8
1
1*8
22
4
1
1*4
21
2
0
20
1
1
1*1
4
2
(8+2) = 1010 = A16
161
16
10*16
16010
4
(8+4+1) = 1310 = D16
160
1
13*1
1310
(160+13)= 17310
3. El procesador 80386 utiliza la PALABRA que est compuesto de 2 bytes. El byte de valores mayores
(las 8 posiciones de la izquierda) recibe el nombre de byte ms significativo, el de valores menores (8
posiciones a la derecha) recibe el nombre de byte menos significativo.
PALABRA
Byte ms significativo
Nibble
22
21
4
2
0
0
20
1
0
Los nmeros decimales se pueden almacenar de varias formas, como por ejemplo:
Desempaquetado, donde cada byte contiene un dgito.
Ejemplo:
1434
01
04
03
0000 0001
0000 0100
0000 0011
04
0000 0100
34
0011 0100
Tamao
2 bytes.
2 palabras, 4 bytes
4 palabras, 8 bytes
5
8 palabras, 16 bytes.
128 palabras (normalmente)
256 bytes
64k bytes ( normalmente)
32,768 palabras
65,536 bytes
Modos disponibles
Memoria Direccionable
8086 / 8088
Real
1 MegaB
16 bits
80186 / 80188
Real
1 MegaB
16 bits
80286
Real y Protegido
16 MegaB
16 bits
80386
Real y Protegido
4 GigaB
16 o 32 bits
80486
Real y Protegido
4 GigaB
16 o 32 bits
En modo Real solo se puede ejecutar a la vez un proceso. El sistema operativo DOS solo funciona
en modo real. En el modo Protegido, ms de un proceso pueden ser activados a la vez.
1.1.3 Tipos de Lenguajes Ensambladores
Podemos distinguir entre tres tipos de ensambladores:
Ensambladores bsicos. Son de muy bajo nivel, y su tarea consiste bsicamente en ofrecer nombres
simblicos a las distintas instrucciones, parmetros y cosas tales como los modos de direccionamiento.
Adems, reconoce una serie de directivas (o meta instrucciones) que indican ciertos parmetros de
funcionamiento del ensamblador.
Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores bsicos, fueron
muy populares en las dcadas de los 50 y los 60, antes de la generalizacin de los lenguajes de alto nivel.
Hacen todo lo que puede hacer un ensamblador, y adems proporcionan una serie de directivas para
definir e invocar macroinstrucciones (o simplemente, macros).
Ensambladores modulares 32-bitso de alto nivel. Son ensambladores que aparecieron como respuesta a
una nueva arquitectura de procesadores de 32 bits, muchos de ellos teniendo compatibilidad hacia atrs
pudiendo trabajar con programas con estructuras de 16 bits. Adems de realizar la misma tarea que los
anteriores, permitiendo tambin el uso de macros, permiten utilizar estructuras de programacin ms
complejas propias de los lenguajes de alto nivel.
1.1.4 Clasificacin de la Memorias
Para las PCs la memoria se clasifica en tres tipos:
Convencional. Es la memoria de tipo bsico y que abarca las direcciones de 0 a 640KB. En sta es
donde se cargan los programas de usuario y el sistema operativo, y es la que est disponible para equipo
XT (8088,8086, 80186 y 80188).
Extendida. Esta memoria slo est disponible para procesadores 80286 y mayores (equipo AT, 80386 y
80486). Muchos programas que usan la memoria convencional no pueden usar la memoria extendida
porque las direcciones en memoria extendida estn ms all de las que el programa puede reconocer.
nicamente las direcciones dentro de los 640KB pueden ser reconocidas por todos los programas. Para
reconocer la memoria extendida se requiere de un manejador de memoria extendida, como HIMEM.SYS
que provee MS-DOS.
Expandida. Esta es la memoria que se agrega al computador a travs de una tarjeta de expansin, y que
debe ser administrada por un programa especial, como el EMM386.EXE. A diferencia de la memoria
convencional o extendida, la memoria expandida es dividida en bloques de 16K llamados pginas (pages).
Cuando un programa solicita informacin de memoria expandida el manejador copia la pgina
correspondiente en un rea denominada page frame para poder ser accedida en la memoria extendida.
Como podremos ver, el 8088, 8086, 80188 y 80186 son capaces de direccionar hasta 1 MB de
memoria. Ya hemos indicado que la memoria convencional slo abarca 640KB, as nos quedan 384KB
libres. Esta parte de la memoria es denominada parte alta, y como no est disponible para muchos
programas generalmente se usa para cargar drivers del sistema operativo, programas residentes y datos
de hardware (ROM y pginas de video).
La memoria principal puede ser considerada como un arreglo lineal de localidades de
almacenamiento de un byte de tamao. Cada localidad de almacenamiento tiene asignada una direccin
que la identifica. La memoria principal es el lugar donde el CPU lee las instrucciones a ejecutar, as como
algunos datos a emplear.
Un mtodo de asignacin de memoria es la manera mediante la cual el Sistema Operativo lleva el
control de la memoria tratando de que sea lo ms eficiente posible.
El mtodo de asignacin usada por ensamblador es la segmentacin.
Arquitectura de Segmentos.
Los registros son elementos con un nmero determinado de bits que usa el procesador para hacer unas
operaciones especficas. Un segmento es una porcin de memoria seleccionada por el procesador para
almacenar cierto tipo de informacin.
Con la llegada de procesadores en modo protegido, la arquitectura de segmento consigui que los
segmentos puedan separarse en bloques diferentes para protegerlos de interacciones indeseables. La
arquitectura de segmentos realiz otro cambio significativo con el lanzamiento de procesadores de 32 bits,
empezando con el 80386, que minimizan las limitaciones de memoria de la arquitectura de segmentos de
los 16 bits, siendo, adems, compatibles con stos de 16 bits.
Ambos ofrecen paginacin para mantener la proteccin de los segmentos. En DOS los segmentos
se asignan normalmente adyacentes uno al otro.
En modo Protegido los segmentos estaran en cualquier parte de memoria. El programador no
sabe donde estn ubicados y no tiene ningn control sobre ellos.
Los segmentos pueden incluso moverse a una nueva posicin de memoria o cambiarse al disco
mientras que el programa se est ejecutando.
1 direccin disponible
Segmento 1
...
...
Segmento 1
El de cdigo, que contiene los cdigos de instruccin del programa que se est ejecutando.
El de datos, que guarda las variables del programa.
El de stack, con informacin referente a la pila o stack.
El extra, o rea de datos complementario, usada generalmente para operaciones con cadenas.
Desplazamiento:
Dado que los segmentos pueden tener hasta 64 Kbytes de tamao, es necesario especificar la ubicacin
de las localidades dentro de un segmento. Este parmetro es el desplazamiento de la localidad de
memoria.
El desplazamiento necesita de una palabra de 16 bits para definir todas las posiciones posibles
dentro de un segmento de 64 Kbytes (64*1024=65,536) de longitud mxima.
La representacin de una localidad de memoria que incluye la direccin de inicio del segmento y el
desplazamiento es la siguiente:
88A1:0015
Direccin del Desplazamiento
Direccin de inicio del Segmento
Este mecanismo interior combina el valor del segmento y un valor de desplazamiento para crear una
direccin. Las 2 partes representan una direccin 'segmento:desplazamiento'.
Memoria
Segmento 0
0000:0000
0000:0001
.....
0000:FFFF
.....
0001:0000
0001:0001
......
0001:FFFF
5
0101
3
0011
C
1100
2
0010
0101
0101
5
0011
0001
0100
4
1100
0000
1100
C
0010
0111
1001
9
1
0001
3
0011
F
1111
7
0111
0001
0011
0011
0111
7
1111
1000
1000
8
0111
1010
0001
1
1
0001
0
0000
7
0111
A
1010
A
1010
C
1100
0000
1010
1010
A
Direccin Fsica
Ejemplo:
Hexadecimal -->
Binario ------>
+
0001
1
3
0011
8
1000
0000
1100
1100
C
Direccin Fsica
10
Las direccines base actuales de cada segmento se guardan en registros punteros especiales de 16 o 32
bits, denominados Registro de Segmento.
DIRECCIONAMIENTO MS-DOS
MS-DOS(Segmentacin)
8086 (16 Bits)
SEGMENTACION MS-DOS
Si un programa trata de asignar un bloque de memoria de cierto tamao, MS-DOS busca un bloque
apropiado, si lo encuentra, se modifica para que pertenezca al proceso solicitado. Si el bloque es
demasiado grande, MS-DOS divide en un bloque asignado y un nuevo bloque libre. Cuando un programa
libera un bloque de memoria, MS-DOS lo modifica para indicar que est disponible. Cuando un programa
reduce la cantidad de memoria que necesita, MS-DOS crea un nuevo bloque de control de memoria para
la memoria liberada.
Tamao Maximo de Segmento.
En realidad no solo se ampliaron solo los registros de 32 bits, sino que tambin la longitud mxima del
segmento que puede ocupar hasta 4 GB (232).
Existe un tipo de segmento que especficamente sirve para la gestin de programas en modo
protegido el SEGMENTO DEL SISTEMA.
1.2 EL MICROPROCESADOR
1.2.1 Buses
Bus es el conjunto o grupo de cables que transportan los datos, las direcciones (ubicaciones) en
las que puede encontrarse informacin especfica, y las seales de control para asegurar que las
diferentes partes del sistema utilizan su ruta compartida sin conflictos.
Los buses se caracterizan por el nmero de bits que pueden transmitir en un determinado
momento. Un equipo con un bus de 8 bits de datos, por ejemplo, transmite 8 bits de datos cada vez,
mientras que uno con un bus de 16 bits de datos transmite 16 bits de datos simultneamente.
Para diferenciar las cuatro funciones diferentes, el bus est dividido en cuatro partes: lneas de
potencia, bus de control, bus de direcciones y bus de datos.
12
Registros de Datos
Funcin
L Low (Baja)
H High (Alta)
AH
AL
AX Acumulador
BH
BL
BX Base
CH
CL
CX Contador
DH
DL
DX Extra
8
bits
8
Bits
Total 16 bits
Registros
Punteros e
Indices
SP
Puntero de Pila
Funcin
Apunta a la posicin de la cima de la pila del segmento de pila en memoria. Es un registro usado
13
Puntero de
Base
Apunta a una zona dentro del segmento de pila dedicada al almacenamiento de datos.
SI
ndice Origen
Es usado como registro ndice en ciertos modos de direccionamiento indirecto. Tambin puede
guardar un valor de desplazamiento indirecto. Se usa para almacenar un desplazamiento que
direcciona la posicin de un operando origen durante operaciones de tratamiento de cadenas.
DI
ndice Destino
16 bits (4 nibbles)
Los registros Indices SI y DI y los registros Punteros SP y BP guardan los valores de desplazamiento
empleados para el acceso a determinadas posiciones de memoria. Una caracterstica importante de los 4
registros es que se pueden usar operaciones aritmticas y lgicas de modo que los valores de
desplazamiento que almacenan pueden ser el resultado de clculos previos.
Funcin
Registros de Segmentos
CS
Segmento de Cdigo
DS
Segmento de Datos
SS
Segmento de Pila
ES
Segmento Extra
16 bits
Las reas de memoria asignadas al cdigo de programa, datos y pila se direccionan por separado
a pesar de poder solaparse. En un momento dado hay siempre 4 bloques disponibles de memoria
direccionable denominadas segmento. Cada uno de los segmento suele tener una longitud de 64k.
Para determinar una direcciones en el segmento de cdigo tendremos que realizar el
desplazamiento de 4 bits hacia la izquierda del registro CS poniendo a 0 los bits 0, 1, 2 y 3. Lo que
equivale a multiplicar CS por 16. Sumando a continuacin el valor de 16 bits almacenado en IP. La
direccin dentro de los otro 3 registros se calcula similarmente.
Las combinaciones de registro de segmento y desplazamiento depende de los tipos de
operaciones que se est ejecutando. Por omisin se asume que la direccin de un operando est en el
segmento de datos y el registro de segmento a usar es por tanto DS con el desplazamiento BX, SI o DI.
Segmento de
Segmento de
Segmento de
Segmento de
14
Cdigo
Stack
Extra de Datos
DS : BX
DS : SI
DS : DI
CS : IP
SS : SP
SS : BP
ES : DI
ES : SI
Puntero de Instruccin
IP
Puntero de
instruccin
16 bits
. 11 10
OF DF
IF TF SF ZF
4
AF
2
PF
0
CF FLAGS: Registro de Indicadores
Los bits 0, 2, 4, 6, 7 y 11 son indicadores de condicin que reflejan los resultados de operaciones del
programa. Los bits del 8 al 10 son indicadores de control. Los indicadores de condicin pueden
comprobarse tras ejecutar determinadas operaciones usando el resultado de la comprobacin en la toma
de decisiones de bifurcacin condicional.
Indicadores de Condicin:
Bit 0. Indicador de acarreo (CF) Se pone a 1 si en una operacin de suma o resta se produce un acarreo
por exceso o por defecto. Si una operacin no produce acarreo estar a 0.
Bit 2. Indicador de paridad (PF) Se pone a 1 si el resultado de una operacin tiene un nmero par de bits a
1. Y se pone a 0 cuando el resultado tiene un nmero impar de bits a 1.
Bit 4
acarreo por exceso o defecto de los 4 bits menos significativos en los valores de BCD (decimal codificado
en binario).
Bit 6
e a 1 si el resultado de una operacin es 0, esto ocurre, por ejemplo,
despus de usar una instruccin de resta o decremento o al hacer una comparacin entre 2 nmero de
igual valor. Para resultados distintos de 0 el indicador estar a 0.
Bit 7. Indicador
aritmticas de complemento a 2. Se usa el bit ms significativo de cualquier nmero en complemento 2
15
para indicar si dicho nmero es positivo cuando est a 0 o negativo cuando est a 1. Y se copia en el bit 7
del registro de indicadores.
Bit 11
operando provoca un desbordamiento (overflow) y activar este indicador a 1.
Registro indicador de Control:
Bit 8
activado, haciendo que el micro-procesador ejecute la instruccin paso a paso. El procesador genera
instruccin una detrs de otra. Un debugging puede usar este rango para procesar un programa
instruccin a instruccin.
Bit 9
activarla. IF se controla con la instruccin CLI (desactiva interrupcin externa) y STI (activa interrupcin
externa).
Bit 10
en relacin con SI y DI. Se pone a 0 para la cadena que se procesa hacia arriba, o sea, hacia direcciones
de memoria ms altas y se pone a 1 para las cadenas que se procesan hacia abajo, o sea, hacia
direcciones ms bajas.
Solo para 80386 / 486.
Los procesadores de este tipo usan registros de 8 y 16 bits igual que el resto de la familia de los 8086.
Todos los registros se extienden a 32 bits excepto los registros de segmento de 16 bits. Los registros
extendidos comienzan con la letra E: el registro extendido de AX es EAX.
Los procesadores 386 / 486 tienen 2 registros de segmento adicionales: FS y GS.
L Low (Baja)
H High (Alta)
AH
AL
EAX: Acumulador
BX
BH
BL
EBX: Base
CX
CH
CL
ECX: Contador
DX
DH
DL
EDX: Extra
8 bits.
8 bits.
16 bits
16 bits
Total 32 bits
L Low (Baja)
H High (Alta)
SP
BP
SI
16
H
16 bits
DI
L
16 bits
Total 32 bits
16 bits
IP
EIP: Reg
16 bits
Total 32 bits
Registro de Segmentos
Extendidos
CS
DS
SS
ES
FS
GS
16 bits
30
19
18
17
16
15
14
13
IOP
12
11
10
OF
DF
1 0
CF
<--- 386/486 ---> <- 286/386/486 --> <--- Para todo los procesadores 8086 ->
Comentario
Ejemplo
17
6. Relativo a la
Base
7. Indexado
Directo
8. Indexado de
Base
PUSH AX
MOV AX, BX
MOV AX, DDDW
MOV SI, 2
MOV AX, DDDZ [SI
Segmento
Direccionamiento Absoluto
Inmediato
DS
MOV al, 0
BX+XX
DS
BP+XX
SS
SI+XX
DS
Denominacin
Ejemplo
18
DI+XX
DS
MOV [di], es
BX+SI+XX
DS
MOV [bx+si-2], cx
BX+DI+XX
DS
BP+SI+XX
SS
BP+DI+XX
SS
Puede apreciarse que todos los modos admiten que despus de obtener el valor de desplazamiento
de un registro o de la suma de dos, se aada una constante a ste, antes de generar la lectura, indicada
por XX. Si se omite el valor XX se generan instrucciones que no aaden ningn valor al desplazamiento
obtenido por los registros.
Cada modo usa un registro de segmento por defecto para componer la direccin completa pero
siempre es posible que le CPU use, no el registro de segmento por defecto, sino uno especificado por
nosotros.
A nivel de lenguaje mquina lo que se hace es aadir a la instruccin un prefijo de 1 byte que modifica
el comportamiento de la siguiente instruccin haciendo que use el registro de segmento correspondiente al
prefijo en lugar del registro por defecto.
Hay 4 prefijos distintos, uno para cada registro de segmento y se denominan Prefijos de Segmento por
convenio se aade el prefijo inmediato antes de la apertura de corchetes o despus de PTR, si este
aparece.
As las siguientes instrucciones acceden a posicin de memoria dentro del segmento de cdigo de
datos extra y segmento de pila, respectivamente.
MOV al, cs:[bx+4]
MOV word ptr ds:[bp-0fh], 0
MOV es:[di], al
MOV word ptr ss:[bx], 0
Es interesante tener en cuenta que por ejemplo:
MOV [bx], ax y MOV ds:[bx], ax son equivalentes. Ya que si no se indica nada el registro por
defecto es DS. Tambin es interesante resaltar que para acceder a una posicin de un vector, que haya
sido previamente definido en el segmento de datos, usamos los corchetes.
Segmento de datos...
tabla word 100 dup (0)
inicial 0.
Segmento de cdigo...
MOV ax, tabla[si]
MOV bx, 0
MOV ax, tabla[5]
MOV ax, tabla+5
1.3 INTERRUPCIONES
Como se mencion anteriormente la PC esta constituida lgicamente por su BIOS y sistema operativo. La
mayora de las rutinas que controlan al computador estn grabadas en el ROM del BIOS, aunque muchas
rutinas son establecidas por el sistema operativo y se cargan en RAM al momento de encender al
computador.
Estas rutinas son denominadas interrupciones y son activadas mediante la instruccin: INT
nmero. Una interrupcin es una operacin que invoca la ejecucin de una rutina especfica que suspende
la ejecucin del programa que la llam, de tal manera que el sistema toma control del computador
colocando en el stack el contenido de los registros CS e IP.
El programa suspendido vuelve a activarse cuando termina la ejecucin de la interrupcin y son
restablecidos los registros salvados. Existen dos razones para ejecutar una interrupcin: (1)
intencionalmente como peticin para la entrada o salida de datos de un dispositivo, y (2) un error serio y
no intencional, como sobreflujo o divisin por cero.
El operando de una interrupcin indica cul es la rutina a activar. La direccin de la rutina es
localizada por medio de una tabla que el sistema mantiene a partir de la direccin 0000:0000h. Existen
256 entradas de 4 bytes de longitud, y cada interrupcin proporciona varias funciones. Las interrupciones
de 00h a 1Fh corresponden al BIOS y de 20h a FFh son del DOS y BASIC.
Una interrupcin es una seal que provoca la suspensin del programa que se estaba ejecutando
y provoca el comienzo de ejecucin de un programa de tratamiento que de solucin a esa interrupcin.
A ese programa se le conoce como RUTINA DE TRATAMIENTO de esa interrupcin.
1.3.1 Hardware
Interrupciones Hardware o Interrupciones Externas, que son aquellas provocadas por los dispositivos
perifricos, controladas por un procesador especial de interrupciones (8259) o IPC (Controlador de
Interrupciones Programable), y la rutina de tratamiento est "cableada".
Interrupciones Internas, que son aquellas provocadas dentro del propio procesador por una situacin
anormal de funcionamiento de alguna de sus partes.
1.3.2 Software
Son aquellas que son programables y que podemos cambiar. Las interrupciones de software podemos
llegar a manejarlas y por ello el ensamblador nos proporciona una instruccin que nos permita poner en
funcionamiento una determinada rutina de interrupcin; esta instruccin es INT.
Interrupcin
Formato
INT nm_entero.
20
Accin
Cdigo
21
INT 21h.
Funcin 09h
INT 21h.
Funcin 4Ch
dosseg
.model small
.stack 100h
.data
Cadena1 DB 'Hola Mundo.$'
.code
programa:
mov ax, @data
mov ds, ax
mov dx, offset Cadena1
mov ah, 09h
int 21h
end programa
1.4.1 Data Segment
Cuando el programa requiere del uso de datos, deben definirse en este segmento, en ensamblador no
existen tipos de datos, solo tamao de datos.
Dato
Tamao
en bits
8
16
32
64
DB
DW
DD
DT
1.4.5 Directivas
El MASM (Macro Assembler, ensamblador) posee un conjunto de instrucciones que no pertenecen al
lenguaje ensamblador propiamente sino que son instrucciones que nicamente son reconocidas por el
ensamblador y que han sido agregadas para facilitar la tarea de ensamblado, tanto para el programador
como para el programa que lo lleva a cabo. Dichas instrucciones son denominadas directivas.
En general, las directivas son usadas para especificar la organizacin de memoria, realizar
ensamblado condicional, definir macros, entrada, salida, control de archivos, listados, cross-reference,
direcciones e informacin acerca de la estructura de un programa y las declaraciones de datos.
Conjunto de instrucciones
Dentro de las directivas ms importantes, tenemos las que establecen el conjunto de instrucciones a
soportar para un microprocesador en especial:
.8086(defecto).- Activa las instrucciones para el 8086 y 8088 e inhibe las del 80186 y 80286.
.8087(defecto).- Activa instrucciones para el 8087 y desactiva las del 80287.
.186.- Activa las instrucciones del 80186.
.286c.- Activa instrucciones del 80286 en modo no protegido.
.286p.- Activa instrucciones del 80286 en modo protegido y no protegido.
.287.- Activa las instrucciones para el 80287.
Declaracin de segmentos
En lo que respecta a la estructura del programa tenemos las directivas SEGMENT y ENDS que
marcan el inicio y final de un segmento del programa. Un segmento de programa es una coleccin de
instrucciones y/o datos cuyas direcciones son todas relativas para el mismo registro de segmento. Su
sintaxis es:
nombre SEGMENT [alineacin] [combinacin] [clase
nombre ENDS
El nombre del segmento es dado por nombre, y debe ser nico. Segmentos con el mismo
nombre se tratan como un mismo segmento. Las opciones alineacin, combinacin, y clase
proporcionan informacin al LINK sobre cmo ajustar los segmentos.
Para alineacin tenemos los siguientes valores: byte (usa cualquier byte de direccin), word
(usa cualquier palabra de direccin, 2 bytes/word), para (usa direcciones de prrafos, 16 bytes/prrafo,
deafult), y page (usa direcciones de pgina, 256 bytes/page).
Combinacin define cmo se combinarn los segmentos con el mismo nombre. Puede asumir
valores de: public (concatena todos los segmentos en uno solo), stack (igual al anterior, pero con
direcciones relativas al registro SS, common (crea segmentos sobrepuestos colocando el inicio de todos
en una misma direccin), memory (indica al LINK tratar los segmentos igual que MASM con public,
at address (direccionamiento relativo a address).
clase indica el tipo de segmento, sealados con cualquier nombre. Cabe sealar que en la
definicin est permitido el anidar segmentos, pero no se permite de ninguna manera el sobreponerlos.
25
Declaracin de estructuras
Para la declaracin de estructuras de datos se emplea la directiva STRUC. Su sintaxis es:
nombre STRUC
campos
nombre ENDS
INTERPRETE
Programa
Fuente
.PAS
.BAS
.CBL
.PRG
.ASM
EJECUCIN
.OBJ
COMPILACION O
ENSAMBLE
Programa
Objeto
.EXE
Programa
Ejecutable
intrprete, cuando se verifica lnea a lnea, y compilado o ensamblado cuando se verifica la totalidad del
programa.
En el caso del intrprete la ejecucin es inmediatamente despus de la verificacin de la lnea,
esto tiene como consecuencia que el programa se ejecutar hasta que encuentre un error y no genera
programa objeto.
En el caso del compilado o ensamblado no es as, una vez que el programa ya no tiene errores
sintcticos, se genera el Programa Objeto, que est escrito en cdigo mquina.
3. El proceso de ligado es el que se lleva a cabo despus del compilado o ensamblado, es este paso, se
determinan las direcciones de las localidades de memoria que utilizar el programa cuando se ejecute.
Se genera el Programa Ejecutable, que al ser llamado directamente de sistema operativo se ejecutar.
PASO 1: EDICION.
Los archivos fuente de cdigo ensamblador deben estar en formato ASCII standard. Para esto
puede usarse cualquier editor que permita crear archivos sin formato, por ejemplo: Edlin, Edit, Write, el
editor del Turbo Pascal, Works, Word. Las declaraciones pueden ser introducidas en maysculas y/o
minsculas. Una buena prctica de programacin es poner todas las palabras reservadas (directivas e
instrucciones) en maysculas y todo lo del usuario en minsculas para fines de facilidad de lectura del
cdigo.
Las sentencias pueden comenzar en cualquier columna, no pueden tener ms de 128 caracteres,
no se permiten lneas mltiples ni cdigos de control, y cada lnea debe ser terminada con una
combinacin de line-feed (avance de linea) y carriage-return (retorno de carro). Los comentarios se
declaran con ; y terminan al final de la lnea.
PASO 2: ENSAMBLADO.
El ensamblado se lleva a cabo invocando al MASM. Este puede ser invocado, usando una lnea
de comando, de la siguiente manera:
MASM archivo [,[objeto][,[listado][,[cross]]]]][opciones][;]
donde:
archivo
objeto
listado.
cross.
opciones.
/MU
/N
/P
/R
/E
/T
/V
/X
/Z
Si el ; al final se omite es necesario poner todas las comas que se indican. Si no se quiere
poner algn valor basta con dejar la coma.
La otra forma de invocar al ensamblador es slo tecleando MASM y respondiendo a la
informacin que se solicita. Para omitir algn valor slo basta teclear ENTER si dar ningn valor.
TERCER PASO: LIGADO
De la misma forma que el ensamblado, la fase de liga se lleva a cabo con el LINK. Este puede ser
invocado de la misma forma que el MASM. Los parmetros que este requiere son:
LINK objeto [,[ejecutable][,[mapa][,[librera]]]]][opciones][;]
donde:
objeto
Es el nombre para el archivo .OBJ
ejecutable
Nombre del archivo .EXE
mapa
Nombre del archivo mapa
librera
Nombre del archivo biblioteca de rutinas
opciones
Pueden ser:
/HELP
muestra lista de opciones
/PAUSE
pausa en el proceso
/EXEPACK
empaca archivo ejecutable
/MAP
crea mapa se smbolos pblicos
/LINENUMBERS
copia nmero de lneas al mapa
/NOIGNORECASE
mantiene sensitividad en nombres
/NODEFAULTLIBRARYSEARCH
no usa bibliotecas por defecto
/STACK:size
fija el tamao del stack a usar
/CPARMAXALLOC:nmero
fija alojacin mxima de espacio
/HIGH
fija la direccin de carga ms alta
/DSALLOCATE
aloja grupo de datos
/NOGROUPASSOCIATION
ignora asociaciones para direcciones
/OVERLAYINTERRUPT:nmero
asigna nuevo nmero a la INT 03Fh
/SEGMENTS:nmero
procesa un nmero de segmentos
/DOSSEG
sigue la convencin de orden de DOS
PASO 4: EJECUCION.
Para la ejecucin del programa simplemente basta teclear su nombre en el prompt de MS-DOS y
teclear ENTER. Con esto el programa ser cargado en memoria y el sistema proceder a ejecutarlo. El
30
proceso completo para poder crear un programa ejecutable con el Microsoft Macro Assembler se
muestra abajo.
PASO 5: DEPURACION.
Para la depuracin de un programa en ensamblador tenemos disponibles dos herramientas. Por
un lado tenemos el debugger que nos proporciona MS-DOS (DEBUG.EXE) y por otro lado tenemos el
que nos proporciona Microsoft (SYMDEB.EXE). Este ltimo trabaja igual que el de MS-DOS pero nos
proporciona muchas ventajas ms. Una de ellas es la facilidad de desplegar el cdigo fuente
correspondiente a la instruccin que se esta ejecutando (si el programa ejecutable fue ensamblado o
compilado con un ensamblador o compilador compatible), nos permite ejecutar comandos del S.O. y nos
permite obtener informacin de las interrupciones de manera simblica.
Otra opcin es usar el programa TD.EXE o Turbo Debugger.
0 Severe Errors
Ensamblado del programa MAIN.ASM
C:\DATA\PROGRAMS\ASM>masm task
Microsoft (R) Macro Assembler Version 4.00
Copyright (C) Microsoft Corp 1981, 1983, 1984, 1985. All rights reserved.
Object filename [task.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
51034 Bytes symbol space free
0 Warning Errors
0 Severe Errors
Ensamblado del programa TASK.ASM
Ligado
C:\DATA\PROGRAMS\ASM>link main+task
Microsoft (R) 8086 Object Linker Version 3.05
Copyright (C) Microsoft Corp 1983, 1984, 1985. All rights reserved.
Run File [MAIN.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
C:\DATA\PROGRAMS\ASM>main
Entrando a un submodulo....
.......saliendo del submodulo.
Ligado de los programas MAIN.OBJ y TASK. OBJ
C:\DATA\PROGRAMS\ASM>
32