Está en la página 1de 198

Lenguaje Ensamblador

Unidad Temas Subtemas


1 Fundamentos. 1.1 Introduccin.
1.1.1 Uso y aplicaciones del
lenguaje ensamblador.
1.1.2 Escalabilidad de los
microprocesadores.
1.1.3 Tipos de lenguajes
ensambladores.
1.1.4 lasi!icacin de "emorias.
1.1.# Unidades de entrada $
salida.
1.2 El microprocesador.
1.2.1 %uses.
1.2.2 &egistros.
1.2.3 "odos de direccionamiento.
1.3 Interrupciones.
1.3.1 'ard(are.
1.3.2 So!t(are.
1.4 Estructura de un programa en
ensamblador.
1.4.1 )ata segment.
1.4.2 Snac* segment.
1.4.3 ode segment.
1.4.4 Instrucciones del programa.
1.4.# )irecti+as.
1.# ,rocedimiento de ensamble- enlace
y ejecucin.
1.. Entorno de programacin.
2 Elementos del lenguaje
2.1 Instrucciones lineales.
2.1.1 "o+imiento.
2.1.2 ,ila.
2.1.3 "atem/ticos.
2.1.4 0justes.
2.1.# omparacin.
2.2 Saltos.
2.2.1 Incondicional.
2.2.2 ondicional.
2.3 Tipos de ciclos.
2.4 1peradores 2gicos.
2.# )espla3amiento.
2.#.1 2ineal.
2.#.2 ircular.
2.. ,rocesos de control.
2...1 %anderas.
2...2 adenas.
2...3 arga.
3 "odulari3acin 3.1 "acros.
3.1.1 nternas.
3.1.2 Externas.
3.2 ,rocedimientos.
3.2.1 Internos.
3.2.2 E4ternos.
4 ,rogramacin 56brida. 4.1Directivas para compilacin hbrida.
4.2Funciones en ensamblador.
4.3Bloques en ensamblador.
4.4Operadores.
4.5ntegrar mdulos de ensamblador en
lenguajes de alto nivel.
Unidad1. Fundamentos.
1.1 Introduccin.
1.1.1 Uso y aplicaciones del lenguaje
ensamblador.
Importancia del Estudio y Uso de Ensamblador
Ayuda a conocer a detalle cmo trabaja un CPU
Util para Electrnica y Sistemas
Desarrolla Habilidades de Programacin Aan!ada
"ejores #portunidades de Empleo en la $ndustria
Aplicaciones del Lenguaje Ensamblador
Sistemas embebidos7impresoras, cmaras, autos, armas,
juguetes, etc.
Tiempo Real% en la industria y manufactura, e.g. adquisicin
datos, control robots
&ransporte% barcos, aviones, sondas espaciales, etc.
Entretenimiento% Graficacin, Multimedia, Cine y VideoJuegos
DSP% Procesamiento de e!ales, Vo" e #mgenes
#tras% Medicina, $erona%tica, $rmamento, etc.
Uso de lenguaje ensamblador
Hay algn debate encima de la utilidad del lenguaje ensamblador. En muchos casos,
compiladores modernos pueden rendir lenguajes de alto nivel en el cdigo como eso corre tan
rpido como la mano que escribe en ensamblador.
Sin embargo, algunos clculos discretos aun pueden darse mas rpidamente corriendo cdigo
en ensamblador, y alguna programacin de bajo nivel es simplemente mas fcil de hacer en
ensamblador. Algunas tareas de sistemas-dependientes realizadas por sistemas operativos
simplemente no pueden ser expresadas en lenguajes de alto nivel. Muchos compiladores
tambin rinden lenguajes de alto nivel en ensamblador antes de compilar completamente,
permitiendo visualizar el cdigo de ensamblador para depurar [debug] y propsito de
optimizacin.
Muchos dispositivos integrados son tambin programados en ensamblador a exprimir la
funcionalidad mxima absoluta fuera de los que es frecuente recursos computacionales muy
limitados, aunque esto esta gradualmente cambiando en algunas reas como mas chips
poderosos volviendo disponible para el mismo mnimo costo.
http://www.geocities.com/SiliconValley/Haven/2037/documentos/Lenguaje_Ensamblador.htm
1.1.2 Escalabilidad de los
microprocesadores.
Al escribir un programa para ser ejecutado por un microprocesador se tienen
tres alternativas: lenguaje de mquina, lenguaje ensamblador y lenguaje de
alto nivel.
Slo programas escritos en lenguaje mquina pueden ser ejecutados por el
procesador. Los programas escritos en lenguaje ensamblador o en lenguaje de
alto nivel tienen que ser traducidos primeramente a lenguaje mquina a fin de
que puedan ser ejecutados.
Escribir un programa en lenguaje ensamblador requiere de conocimientos
acerca del hardware de la computadora, su conjunto de instrucciones, de sus
reglas y usos.
Un estudio de programacin en lenguaje ensamblador puede ser una de las
tareas personalmente ms remuneradas y tcnicamente ms desafiantes que
puedan emprender un ingeniero de software.
El ensamblador bsico es la puerta interior de la PC, el principio de lo que se
puede realizar con el lenguaje ensamblador, se encuentra especialmente
diseado para proporcionar las bases terico - prctico que le permitirn ms
adelante programar el hardware (vdeo, teclado, discos, puertos, etc.)
reconocer y utilizar las memoria del BOS (Sistema Bsico de Entrada y
Salida), aprovechar las estructuras internas del DOS (Sistema Operativo en
Disco), y afirmar y dominar el uso de debugueando codeview y mucho ms.
El disponer de herramientas y conocimientos para combinar sabiamente los
lenguajes de alto nivel en diversas configuraciones del hardware le convierten
en el maestro de la mquina, el lenguaje ensamblador ser un segundo
lenguaje ms potente ya que da al programador acceso directo a registro a
memoria y a la nicas instrucciones orientadas al bit, y es con frecuencia la
nica solucin a las tareas de programacin que prolonga el alcance de la
mayora de los lenguajes de alto nivel.
Un programa en lenguaje ensamblador producen un cdigo ejecutable de
forma ms rpida ya que circunvala el paso de interpretar el lenguaje y el paso
de compilar el lenguaje.
Un programa en lenguaje ensamblador controla al microprocesador en su
propio lenguaje sin la ayuda de comprobaciones del compilador.
HISTORIA DE LOS MICROPROCESADORES.
1971, ntel anunci el primer microprocesador denominado 1001. Este era de 4
bits, construido con tecnologa PMOS. Tena 45 instrucciones, y ejecutaba
60,000 operaciones por segundo.
1972, ntel introdujo el microprocesador 8008, con longitud de palabra de 8 bits;
implantado con tecnologa PMOS. Tena 48 instrucciones, ejecutaba 30,000
operaciones por segundo y direccionaba 16 K bytes de memoria. Requera casi
de 20 circuitos de soporte. El microprocesador contenan compuertas SS
(Small Scale ntegration) y MS (Medium Scale ntegration).
1974, ntel crea el microprocesador 8080, de 8 bits. El 8080 tena 78
instrucciones, con una velocidad de operacin diez veces mayor que la del
8008 y direcionaba hasta 64 Kbytes de memoria. La tecnologa de fabricacin
usada fue la NMOS y gran parte de la lgica de soporte se incluyo en el mismo
circuito de microprocesador; por lo que fue posible construir un sistema con
slo seis circuitos integrados.
1974, Motorola crea un microprocesador de 8 bits con 72 instrucciones, el
6800. Al mismo tiempo apareci una familia de circuitos perifrico diseados
especialmente para conectarse al microprocesador.
1975, Mostechnology anuncio dos microprocesadores, el 6501 que era
compatible pata a pata con el 6800 y el 6202, cuyo circuito integrado inclua,
adems de un 6501, toda la circuitera para generar la seal de reloj. Hasta
entonces, la seal de reloj se haba generado en circuitos externos al
microprocesador.
1976, Zilog introdujo el Z-80, un microprocesador NMOS de 8 bits, requera una
fuente de alimentacin de 5 volts y toda la circuteria de soporte estaba incluida
en el circuito integrado. Contena 158 instrucciones.
Junto con el microprocesador Z-80 (Z80 CPU) Zilog introdujo varios
circuitos perifricos, tales como el controlador de puertos en paralelos
(Z80 PI!, el controlador de puertos en serie (Z80 "I! y el circuito
timer/contador (Z80 #$#!.
1977, ntel anunci el microprocesador 8085, con longitud de palabra de 8 bits,
este combinaba el 8080, el circuito de reloj y el controlador del sistema en un
solo circuito integrado. Fabricado con tecnologa NMOS, y requera un voltaje
nico de 5 volts.
El 8085 se optimizo para que pudiera formar un sistema completo
utilizando dos circuitos perifricos especial, uno de ellos con memoria
RAM, puertos de Entradas y Salida y timer (8155 u 8156) y el otro con
memoria ROM o EPROM y puertos (8355 u 8755).
1978, nace la tercera generacin de microprocesadores cuando ntel desarrolla
el 8086. Este fue un diseo ms avanzado con caractersticas nuevas. Adems
ntel desarrollo el microprocesador 8088 como una variacin al 8086.
Casi al mismo tiempo apareci un primo del 8088%808; la pastilla del
coprocesador matemtico de nmeros reales 808&. Este procesador de datos
numricos estaba dedicado a alta velocidad y clculos matemticos de alta
precisin.
En 1984 se desarrolla el microprocesador 8086, este es compatible con el
8088/8086, soportaba diferentes tipos de datos muy potentes como cadenas
BCD y formatos en puntos flotantes.
Posteriormente se introdujo el 80186, una versin altamente integrada del
8086, es un microprocesador de 16 bits.
El 80286, es una versin mejorada del 8086, que contiene una unidad de
administracin de memoria y direcciona a una memoria de 18 Mbytes. Adems
la velocidad del reloj fue aumentada.
Otro ingreso de ntel es el 80'86, con un bus de datos externos de 32 bits del
80386, doble que el del 80286, puede direcionar 4 gigabytes de memoria.
Uno de los ltimos desarrollos de ntel, es el procesador Pentium II, que es el
procesador ms potente de la familia X86, estos cuentan con una velocidad de
233, 266 y 300 Mhz. Aadido con tecnologa MMX y un cach L de 32 K, y
est compuesta por 12 sistemas MMX a 200 Mhz de fabricantes. Cada
sistema tiene por lo menos 32 MB en RAM, un disco de 2GB o superior, una
unidad de CD-ROM 6X o ms rpido, un sistema de sonido de 16 bits y una
tarjeta grfica super VGA.
1.1.3 Tipos de lenguajes ensambladores.
Este lenguaje da la facilidad y las herramientas necesarias para tomar el
control de todo lo que la PC puede realizar fsicamente. Como resultado de
operaciones muy bsicas suministradas por el ensamblador que realiza tareas
simples de transferencia de datos y operaciones lgicas, una pgina de
cdigos en lenguaje ensamblador palidece en comparacion con una pgina de
cdigo en lenguaje de alto nivel.
Hablar del lenguaje mquina requiere comprender muchos conceptos extraos
para los programadores de alto nivel, el programador de lenguaje ensamblador
debe considerar la segmentacin de memoria; cuando hay control directo del
acceso de memoria deben ser tomadas decisiones al minuto, se debe decidir el
tamao y tipo de cada dato, muchas de estas consideraciones son nicas a la
programacin en lenguaje ensamblador.
ENSAMBLADOR.
Un ensamblador es un software que traduce un programa en memoria escrito
en mnemnicos por el usuario, a lenguaje mquina que pueda ser ejecutado
por el microprocesador. Al programa en mnemnicos se le llama P()(*+*
,-./$. y al programa en lenguaje mquina se le denomina P()(*+*
01.$. Por lo tanto, la entrada al ensamblador es un programa fuente y la
salida es un programa objeto.
FUNCIONES DEL ENSAMBLADOR.
A dems de su tarea principal que es traducir mnemnicos a lenguaje mquina,
un ensamblador generalmente realiza las siguientes funciones:
o Permite al usuario asignar nombres a localidades de memoria,
constantes numricas, dispositivo de E/S y una secuencia de
instrucciones.
o Acepta datos o direcciones en varios sistemas numricos
(decimal y hexadecimal) y las convierte en binario.
o Ejecuta algunas operaciones aritmticas en expresiones como
parte del proceso de ensamblador.
o Permite al usuario designar las reas de memoria donde ser
colocados el programa a los datos en el momento de ejecucin.
o Proporciona la informacin requerida para incluir otros programas
o subrutinas de biblioteca dentro del programa que s esta
realizando.
o Permite al usuario controlar el formato del listado del programa
resultante del ensamblador.
El lenguaje ensamblador utiliza mnemnicos para representar los cdigos de
operacin de las instrucciones y smbolos alfanumricos para representar las
direcciones y los datos del programa. Entonces el programa se puede escribir
como:
"18 09- :1#;<
"18 %9- 09
"18 09- :1#1<
0)) 09- %9
"18 :1#2<- 09
Las direcciones y los datos del programa anterior se expresaron directamente
en hexadecimal. A continuacin se muestra el mismo programa utilizando todas
las propiedades del lenguaje ensamblador.
"18 09- =U"1
"18 %9- 09
"18 09- =U"2
0)) 09- %
"18 SU"0- 09
La ventaja de utilizar nombres simblicos en las instrucciones, en lugar de su
valor numrico, es facilitar la escritura del programa, y tambin simplifica la
insercin y eliminacin de instrucciones, haciendo ms fcil el
redireccionamiento.
La desventaja de un programa en lenguaje ensamblador, es que requiere un
programa especial llamado ./"*+02*3(, que se encarga de traducir los
mnemnicos y los smbolos alfanumricos a lenguaje mquina. Adems sigue
siendo necesario un conocimiento detallado de la arquitectura del
microprocesador.
El lenguaje ensamblador es una variante legible para el ser humano del
lenguaje mquina que usan las computadoras para ejecutar programa. Al
mismo tiempo la mejor manera de comunicarse con la PC y con el lenguaje
mquina de programacin que utilice.
El lenguaje ensamblador resulta indispensable cuando se desea escribir
programas que controlen las E/S de la PC, agregar nuevas interfaces de E/S,
escribir rutinas que aprovechen y maximicen el uso del hardware y en general
realizar cualquier tarea que no pueden llevar acabo los dems lenguajes de
programacin.
El lenguaje ensamblador le brinda la oportunidad de conocer ms afondo la
operacin de su PC esto le permite implementar software o hardware de una
manera ms consiente. El lenguaje ensamblador hace que se conserve el
control total de lo que desea hacer su PC.
Una de las mayores importancias del ensamblador es que uno puede optimizar
al mximo sus programas (tanto tamao, como velocidad de ejecucin). Otra
importancia es la gran velocidad a la que ejecuta el cdigo.
El lenguaje ensamblador permite a los ingenieros de software hacer interfaces
con el sistema operativo y les da control directo de las operaciones de entrada
y salida a monitores, impresoras, y a los importantes dispositivos de memoria
de disco duro/flotante.
Los programadores de aplicaciones con frecuencia tienen que hacer tambin
interfaces directamente con el sistema operativo. Estas rutinas se escriben en
lenguaje ensamblador.
El lenguaje ensamblador es simplemente una representacin simblica del
lenguaje mquina asociado, lo cual permite una programacin menos tediosa
que con el anterior. Sin embargo es necesario un conocimiento de la
arquitectura mecnica subyacente para realizar una programacin efectiva en
cualquiera de estos niveles de lenguaje.

La mayora de los ensambladores son ./"*+02*3(." 3. 3" .$*P*"
(two-pass Asemblers).
La P(I+.(* .$*P* determina la direccin de memoria en la cual es
ensamblado el primer byte de cada instruccin y genera una tabla para los
valores de todos los nombres simblicos y etiquetas definidos en el programa.
El ensamblador posee una tabla de 45digos de o6era4i5ncon una entrada por
cada cdigo de operacin, cada entrada contiene el mnemnico de la
instruccin, su equivalente en lenguaje mquina y el nmero de bytes de la
intruccin.
Tambin el ensamblador tiene un #ontador de lo4ali7a4i5n (2o4ation #ounter8
2#!, el cul al inicio se carga con 0 con el valor especificado por una directiva
ORG, sta corresponde a la direccin inicial u origen del programa y se le
asigna el primer byte de la primera instruccin.
Si un programa tiene una etiqueta, esta se aade a la tabla de smbolos y se le
asocia el valor conteniendo del LC en ese momento.
El cdigo de operacin de la instruccin se extrae de la tabla de cdigo de
operacin incrementando el contador de localizacin igual al nmero de bytes
de la instruccin. Esta etapa termina cuando el ensamblador detecta la
directiva END.
En la SEGUNDA ETAPA, el ensamblador hace un recorrido por el programa,
utilizando la tabla de smbolos de los cdigos de operacin, sustituye el
mnemnico de cada instruccin por su equivalente en el lenguaje de mquina.
1.1.4 lasi!icacin de "emorias.
Las terminales de entrada/salida de un procesador proporcionan un modo
eficiente de comunicacin entre el sistema central y el ambiente exterior. Los
programas y los datos, deben entrarse al computador para el procesamiento y
los resultados deben registrarse o exhibirse para el usuario. Para que esto
suceda, la informacin pasa a travs de la memoria central.


MEMORIA CENTRAL
Tambin denominada memoria principal, es la parte de la CPU de una
computadora donde estn almacenadas las instrucciones y los datos
necesarios para que un determinado proceso pueda ser realizado.
La memoria central est constituida por multitud de celdas o posiciones de
memoria, numeradas de forma consecutiva, capaz de retener mientras la
computadora esta conectada.
La memoria es el centro de actividad, el lugar en donde todo se mantiene
cuando se est trabajando. La memoria proporciona un lugar donde pueden
realizarse los clculos, para la memoria de la computadora no hay diferencia
entre programas y datos, ambos son informacin que debe ser registrada,
almacenada o manipulada.
Esta memoria consiste en una serie de microcircuitos que sirven de soporte
generalmente transitorio de la informacin. Sus caractersticas principales son:
Gran rapidez.
Componentes fijos.
Capacidad mediana.
Reutilizable y de acceso directo.
Su velocidad de proceso se mide en microsegundos (millonsima de segundo),
nanosegundo (milmillonsima de segundo) e incluso picosegundos
(billonsima de segundo).
Es una memoria de acceso directo, puede accederse a una de sus celdas con
slo conocer su posicin, para esta memoria el tiempo de acceso es ms corto
que las memorias auxiliares, por tanto, los datos que manejan los procesos
deben residir en ella en el momento de su ejecucin.
2a memoria central tiene asociados 2 registros para la reali3acin de
operaciones de lectura o escritura y un dispositi+o encargado de
seleccionar una celda de memoria en cada operacin de acceso
sobre la misma.
(.)I"$( 3. 3I(.##I9/ 3. +.+(I* ((3+!. Contiene la direccin
de memoria donde se encuentra o va a ser almacenada la informacin
(instruccin o dato), tanto si se trata de una lectura como de una escritura.
(.)I"$( 3. I/$.(#*+0I 3. +.+(I* ((I+!. Si se trata de una
operacin de lectura, el RM es quin recibe el dato de la memoria sealado
por el RDM, para su posterior envo a uno de los registros de la Unidad
Aritmtica y Lgica. Si se trata de una operacin de escritura, la operacin a
grabar tiene que estar en el RM, para que desde el se transfiera a la posicin
de memoria indicada por el RDM.
".2.#$( 3. +.+(I* ("+!. Es el registro que tras una orden de
lectura o escritura conecta la celda de memoria cuya direccin figura en el
RDM con el RM, posibilitando la transferencia de los datos en un sentido o en
otro.
La Memoria Central suele ser direccionable por octeto o Byte, por tanto; una
celda o posicin de memoria contiene 8 bits. Una de las caractersticas
fundamentales de una computadora es su Capacidad de Memoria nterna
(Memoria Central), la cual se mide en un mltiplo del Byte denominado
Kilobyte, Kbyte, KB O k, y que equivale a 1024 bytes (1024 = 210). Otro
mltiplo utilizado ampliamente en los ltimos tiempos es le Megabyte o mega
que equivale a 1024 * 1024 Bytes.

Las computadoras utilizan 2 tipos de memoria interna:
1. +.+(I* 3. "2 2.#$-(* ((.*3 /2: +.+(:; (+!. Esta
almacena ciertos programas e informacin que necesita la computadora. Estas
instrucciones estn grabadas permanentemente en el chip de ROM y no
pueden ser modificados por el operador, por eso es de slo lectura. Se
conocen tambin como memoria No Voltil por que no desaparece o se borra
cuando se desconecta la electricidad.
Las instrucciones bsicas que se necesitan para arrancar una computadora
estn almacenadas en ROM. Algunos programas de utilera y paquetes de
software tambin lo estn.
Las posiciones altas de la memoria superior son:
ROMBOS
ROM DE NCO
ROM EXTENDDA
Existen otras variedades que permiten algunas manipulaciones:
P(+; Permite programarse una sola vez, una vez decididas sus
caractersticas e instalada, se convierte en una ROM normal.
.P(+; Puede borrarse y reprogramarse varias veces, para ello se
necesitan tcnicas especiales de borrado y escritura.
2. +.+(I* 3. *##." *2.*$(I ((*/3+ *##."" +.+(:;
(*+!. Aqu tambin podemos almacenar ciertos programas para el
funcionamiento de la computadora. Sin embargo, en RAM el usuario puede
cambiar la informacin, almacenarla o borrarla. La capacidad de la RAM afecta
la forma en que se corren los programas del software y la cantidad de datos
que pueden procesarse. Cuando ms fcil de usar sea un programa tanta ms
RAM necesitar generalmente. La RAM es una memoria voltil, a menos que
se guarden en discos, se pierde cuando la computadora se desconecta excepto
en algunos que estn provistos de pilas especiales para mantener el contenido
de la RAM.
Cuando se crea un programa o un documento de aplicacin, el programa que
carga y los datos que se introducen mediante el teclado son almacenados en
forma temporal en la RAM. El trmino aleatorio proviene de la forma en que la
computadora localiza o da acceso a los datos que se encuentran en la
memoria. Si se pasa por todos los datos para encontrar alguna informacin
deseada, esto es acceso secuencial. Si se brinca todos los datos y selecciona
directamente la informacin deseada, sin pasar por los otros datos, a esto se le
llama Acceso Aleatorio o Directo.
La RAM es un dispositivo de estado slido que no tiene partes en movimiento.
Se puede tener acceso a los datos de la RAM a velocidades electrnicos
comparables a la velocidad de la luz. A la memoria RAM tambin se le llama
memoria principal y es un almacenamiento temporal.
Todos los programas y datos introducidos a un dispositivo de entrada (teclado)
o a una memoria magntica (disco) se debe transferir a la RAM antes que se
puedan ejecutar los programas o procesar los datos. La capacidad en RAM se
define en funcin del nmero de caracteres que puede almacenar.
Memoria Convencional. Se le denomina as a la RAM comprendida
entre los 0 y 60 KB.
Memoria Superior. Se le llama as al resto de la memoria RAM hasta 1
MB, es decir al espacio comprendido entre los 640 y 1.024 B, es decir a
los 384 KB.
Memoria Extendida. Es la superior a 1 MB, que llegar a los 16 MB, en
los 286 (AT) y a4.096 MB o 4 GB, en los 386 y 486.
Estas dos ltimas clases de memorias RAM se subdividen en otros tipos:
+emoria .<6andida, Shadow y de Vdeo (la superior) y en memoria alta
(extendida), dependiendo del tipo de procesador.
Cada memoria est formada por bloques de octetos consecutivos, de tamao
de 16 bytes o un mltiplo de ese nmero (16, 32, 48, 64 octetos, etc.).

SALDA.
Son los dispositivos cuya misin es la de recoger y proporcionar al exterior los
datos de salida de cada uno de los trabajos que se realicen en el sistema.
Tambin se denominan Perifricos o Unidades de Salida. La computadora
comunica sus resultados al usuario; por ejemplo, Desplegando la informacin
en un monitor o imprimindola. Estos dispositivos incluyen:
Monitores
mpresoras
Plotters
Graficadores

ENTRADA.
Son los dispositivos perifricos que permiten introducir la informacin a la
computadora para su procesamiento. Algunos de estos dispositivos son:
Teclado
Mouse
Tabletas grficas
Lpiz ptico
Entrada de Voz
Pantallas sensibles al tacto
Lectores pticos
ENTRADA/SALDA
Son dispositivos que efectan tanto tareas de entrada como de salida, estos
incluyen:
Discos duros
CDs
Discos flexibles
1.1.#Unidades de entrada $ salida.
Perifricos% &nidades o dispositivos e'ternos
que se conectan a la computadora central
CP&(Mem, e.g. ratn, monitor, disco(duro,
C), etc.
$nter'a!% *s el medio que permite conectar
un perif+rico a la computadora, e.g. conector,
puerto, tarjeta, etc. *'isten diferentes tipos
de interfaces,
Puerto Paralelo (LPT): cable corto, grueso que
transmite arriba de 16 bits, e.g. impresora, discos
externos, etc.
Puerto Serie (COM): cable largo, delgado que
transmite 1 bit, e.g. mouse, teclado, modem, etc.
Puertos USB, FireWire: tecnologa veloces y
compactas que posiblemente reemplacen al cable
serie/paralelo
nterfaz DE, SCS, PC, ESA: interfaces de bajo
nivel para conectar tarjetas y dispositivos internos,
e.g. discos duros, CD, video, etc.
5ttp7$$pantera.itc5i5ua5ua.edu.m4$apac5eco$e4po$+ie(.
p5p>!?asm@11ApageB
1.2 El microprocesador.
Un microprocesador debe contener al menos: na nidad de control! nidad de
aritm"tica # l$%ica # al%nos re%istros.
Los componentes internos de un microprocesador son:
a) REGSTROS GENERALES
b) REGSTROS APUNTADORES (ESP Y EBP).
c) REGSTROS NDCES (ES Y ED).
d) REGSTRO DE SEGMENTOS (SS, CS, DS, ES.)
e) REGSTRO APUNTADOR DE NSTRUCCONES (P).
f) REGSTRO DE ESTADO (BANDERAS)
g) COLA DE NSTRUCCONES
h) UNDAD DE CONTROL DE LA UNDAD DE EJECUCN
i) BUSES NTERNOS
j) UNDAD ARTMETCA Y LOGCA (ALU)
g< 120 )E I=ST&UI1=ES
Una cola cuya abreviatura es Q de "queue", es una lnea de espera como la
que forman en la caja del supermercado. Algunos de los microprocesadores de
16 bits como el 8086/8088 del ntel o Motorola MC 68000 utilizan tales lneas
de espera para sus instrucciones. Dicho de otra manera sus instrucciones que
han de ejecutarse llegan al microprocesador antes de lo necesario y "esperan"
en una cola de instrucciones en este sistema, poseen la ventaja de que cada
instruccin puede extraerse de memoria mientras otras se estn ejecutando
reducindose en consecuencia el tiempo de proceso, por ejemplo las
instrucciones que incluyen directamente a la velocidad de aquellas otras que
utilizan datos de los registros de la CPU, las colas de instrucciones son
normalmente cartas de 496 octetos en concreto la del 8086 es de 6 octetos,
(tres palabras y la del 8088 es de 4 octetos). La cola de instrucciones es de un
rea de almacenamiento de tipo PEPS (Primero en entrar, primero en salir)
para instrucciones decodificadas y operandos ya disponibles.


5< U=I)0) )E 1=T&12 )E 20 U=I)0) )E ECEUID=
La funcin principal de la UC es dirigir la secuencia de pasos de modo que la
computadora lleve a cabo un ciclo completo de ejecucin de cada una de las
intrusiones del programa. Utiliza seales de reloj, por lo que se considera que
el microprocesador es un dispositivo sncrono. Su actividad es cclica y
consiste en la bsqueda y obtencin de datos e instrucciones, y en la ejecucin
secuencial de stas ltimas.
El corazn de la unidad de control lo constituye el GENERADOR DE CCLO DE
LA MAQUNA (GCM), que se encarga de producir las seales de control,
derivndolas de un reloj u oscilador maestro.
,asos para ejecutar una instruccin cualEuiera7
a) r a la memoria y extraer el cdigo de la siguiente instruccin. Este paso se
llama "ciclo fetch".
b) Decodificar la instruccin ya leda.
c) Ejecutar la instruccin.
d) Prepararse para leer la siguiente casilla de memoria y continuar con el paso
a).

2as principales !unciones de esta unidad son7
a) Leer e interpretar las instrucciones del programa.
b) Dirigir la operacin de los elementos internos del procesador.
c) Controlar el flujo de datos y programas que entran y salen de RAM.

,ara reali3ar su !uncin consta de los siguientes elementos7
Registro de control de secuencia (RCS). Tambin denominado
contador de programa (,), contiene permanentemente la direccin de
memoria de la prxima instruccin a ejecutar. Si la instruccin que se
esta ejecutando en un instante determinado es de salto o de ruptura de
secuencia, el RCS tomara la direccin de la instruccin que se tenga
que ejecutar a continuacin, esta instruccin la traer de la propia
instruccin en curso.
Registro de instruccin (RI). Contiene la intrusin que se esta
ejecutando a cada momento. Esta instruccin llevara consigo el cdigo
de operacin (CO), acin de que se trata y en su caso los operandos o
las direcciones de memoria de los mismos.
Decodificador (D). Se encarga de extraer y analizar el cdigo de
operacin de la instruccin en curso (que est en R) y dar seales
necesarias al resto de los elementos para su ejecucin.
Reloj (R). Proporciona una sucesin de impulsos elctricos a intervalos
constantes (frecuencia constante), que marca los instantes en que se
han de comenzar los distintos pasos de que consta cada instruccin.
Secuencia (S). En este dispositivo se encargan ordenes muy
elementales (microordenes), que sincronizadas por los impulsos del
reloj, hacen que se vaya ejecutando poco a poco la instruccin que esta
encargada en el R.
j< U=I)0) 0&IT"ETI0 F 21GI0 :02U<
La unidad de aritmtica y lgica es un circuito digital que realiza un conjunto de
micro-operaciones aritmticas y lgicas.
Operaciones que realiza una ALU:
1. Suma aritmtica.
2. Funciones lgicas AND, OR y XOR.
3. Complemento.
4. Rotacin hacia la izquierda o derecha.
Esta unidad es un grupo de circuitos electrnicos encargada de realizar las
operaciones elementales de tipo aritmtico (+, -, *, /) y de tipo lgico
(comparaciones), tambin hace comparaciones alfabticas, por ejemplo; Soto,
Snchez.
Para realizar su funcin consta de los siguientes elementos:
anco de Registros! (R): Est constituido por 8, 16, 32 registros de
tipo general que sirve para situar datos antes de cada operacin, para
almacenar datos intermedios en las operaciones y para operaciones
internas del procesador.
Circuito de "#eradores! (CIR"P): Compuesto de uno o varios circuitos
electrnicos que realizan operaciones elementales aritmticas y lgicas
(sumador, complementador, desplazador, etc.).
Registro de Resultados! (RR): Se trata de un registro especial, en el
que se depositan los resultados que producen los circuitos operadores.
Se$ali%ador de Estado! (SE): Registro con un conjunto de biestables en
los que se deja constancia de algunas condiciones que se dieron en la
ltima operacin realizada.
1.2.1 %uses.
i< %USES I=TE&=1S :)0T1S- )I&EI1=ES<.
US! Es un canal o ruta comn de comunicacin entre dispositivos del
hardware, ya sea internamente entre componentes del computador o
externamente entre estaciones de una red de comunicaciones. Los buses
se asemejan a una carretera por la que circulan los bits fsicamente, los
buses son varios hilos paralelos, uno para la transmisin de cada bit.
Cuando la arquitectura del bus es utilizado en un computador, el procesador
o procesadores, los bancos de memoria y las unidades de control perifrica
estn todos interconectados mediante el bus. El bus est dividido en dos
canales, uno para seleccionar donde esta localizado el dato (bus de
direcciones) y otro para transferir el dato (bus de datos).
US DE DAT"S! Circulan los datos con los que va a trabajar el ordenador,
debe estar conectado a la memoria principal, puesto que en ella se encuentran
almacenados los datos, al banco de registro y por supuesto a la unidad
aritmtica y lgica, el bus de datos tiene 8 conectores y es capaz de transportar
8 seales en paralelo, esto significa que el bus de datos puede llevar unidades
de informacin de 8 dgitos binarios, slo una unidad cada vez.
US DE DIRECCI"NES! Se emplea para transmitir la informacin que ha de
reaccionar la memoria. Si el bus de direcciones tiene 16 hilos, se podr
direccionar Z16 direcciones de memoria, es decir, se puede acceder a
cualquier posicin de memoria de 64 KB. Si se considera la cuestin de forma
inversa se precisan dos palabras de 8 bits para conseguir una direccin de
memoria. Llevar seales de control especial que provocan la seleccin de la
informacin a travs de la computadora. Esta informacin se utiliza para
distinguir a la vez entre varios dispositivos de E/S y las miles de celdas de la
memoria de la computadora.
E& US DE C"NTR"&' Sincroniza el sentido de la transferencia de
informacin en el bus de datos (hacia adentro o hacia afuera). Cada una de las
seales del bus de control son unidireccionales.
1.2.2 &egistros.
a< &EGIST&1S GE=E&02ES
Los registros de propsito general son capaces de soportar operandos de
datos de1, 8, 16 y 32 bits, estos registros tambin soportan operandos de
direcciones de 16 y 32 bits. Los 8 registros son AX (acumulador), BX (en base),
CX (contador), DX (datos), SP (puntero de pila), BP (puntero base), S (ndice
fuente) y D (ndice destino).
Para acceder a los 32 bits de un registro todas las referencias a registros debe
comenzar con la letra "E". Cada uno de los 8 registros de propsito general
pueden ser compuestos en sus equivalentes de 16 bits de 8086 bits/80286
referenciando los registros sin usar el prefijo E.
REGISTR" EA( (Acu)ulador)! Generalmente se usa para almacenar
resultados de operaciones aritmticas o lgicas, lectura o escritura desde o
hacia los puertos y como un rea de memoria principal temporal (SCRATCH
PAD). Tambin se direcciona como AX, AH, o AL.
REGISTR" E( ( ase)! Sirve como registro apuntadores base o ndice.
Conserva la direccin base (desplazamiento) de los datos que hay en la
memoria o la direccin base de una tabla de datos. Tambin se direcciona
como BX, BH, o BL.
REGISTR" EC( (Contador)! Se utiliza constantemente en operaciones de
interaccin, como un contador que automticamente se incrementa o
decrementa de acuerdo con el tipo de cada instruccin usada. Tambin es
usado para corrimientos (CL) y rotaciones y ciclos y para las operaciones de
cadena y un contador. Tambin se direcciona como CX, CH, CL.
REGISTR" ED( ( De Datos)! Comnmente se usa como fuente para el
acceso de datos. Tambin se direcciona como DX, DH y DL.


b< &EGIST&1S 0,U=T0)1&ES :ES, F E%,<.
La direccin fsica de cualquier elemento dado en un segmento seleccionado
se obtiene por la combinacin de la direccin del segmento y el
desplazamiento, este desplazamiento puede estar contenido en uno de los
registros puntero, base o ndice.
Las operaciones de la pila son facilitadas por el sector del segmento de pila
(SS) y el par de registros de puntero de pila (SP) o puntero base (BP).
REGISTR" ESP " APUNTAD"R DE PI&A! Apunta a un rea especfica de
memoria que sirve para almacenar datos bajo la estructura LFO (LAST, N,
FRST OUT) mejor conocido como PLA STACK. Esto ocurre cuando se
ejecutan las instrucciones PUSH y POP cuando se llama (CALL) o se regresa
(RET) de una subrutina de un programa principal. Tambin se direcciona como
SP.
REGISTR" EP " ASE! Se usa para manipular la pila sin afectar el registro
de segmentos SS, as como para direccionar una matriz de datos en una pila
de memoria. Tambin se direcciona como BP.

c< &EGIST&1S I=)IES :ESI F E)I<.
Manipulaciones de datos ms complicadas pueden obtenerse utilizando los
registros ndice fuente (ES) e ndice destino (ED) junto al segmento de datos
actualmente activo.
REGISTR" SI! Se emplea para direccionar datos de fuente en forma indirecta
para utilizarlos con las instrucciones de cadenas o arreglos.
REGISTR" DI. Se emplea para direccionar datos destino en forma indirecta
para utilizarlos con las instrucciones de cadenas o arreglos.

d< &EGIST&1 )E SEG"E=T1S :SS- S- )S- ES.<
Un segmento es un mdulo de cdigo que puede ser accesible
simultneamente con los dems. El microprocesador 80386 y 80486 contienen
6 registros segmento de 16 bits, estos mantienen los valores del selector en las
posiciones de memoria actualmente direccionables. En modo de direccin real,
un segmento puede variar desde un byte hasta un tamao de segmento
mximo de 64 Kb.
La figura muestra la representacin grfica de los registros de segmento.
CS (cdigo)! El segmento de cdigo es una seccin de la memoria que
tiene los programas y procedimientos utilizados por los programas. Este
define la direccin inicial de la seccin de memoria que tiene el cdigo.
El segmento de cdigo direcciona a 4Gbytes en el 80386 y 80486.
DS (datos)! Es una seccin de memoria que contiene la mayor parte de
los datos utilizados por un programa.
ES (e*tra o adicional)! El segmento extra o adicional de datos lo utilizan
algunas instruucciones para cadenas.
SS (#ila)! El segmento de pila define la superficie de la memoria
utilizada para la pila. La ubicacin del punto inicial de entrada a la pila,
se determina por el registro apuntador de la pila.
+S , GS! Estos registros de segmento adicionales estn disponibles en
los microprocesadores 80386 y 80486 a fin de contar con dos
segmentos adicionales de memoria para acceso con los programas.
e< &EGIST&1 0,U=T0)1& )E I=ST&UI1=ES :I,<.
El puntero de instrucciones (IP) contiene desplazamiento necesario para
direccionar la siguiente instruccin que se va a ejecutar en el segmento de
cdigo actualmente activo. Para formar la localidad real de la siguiente
instruccin se suma el contenido de P con CS (por) 10H. En general un
puntero de 32 bits a la siguiente instruccin secuencial del programa.
REGSTRO P (NSTRUCCN PONTER). Apunta a la siguiente instruccin
que ser ejecutada en memoria.
!< &EGIST&1 )E EST0)1 :%0=)E&0S<
Las banderas o sealizadores indican la direccin del microprocesador a la vez
que controlan su movimiento. Los bits de banderas cambian despus de
ejecutar muchas de las instalaciones aritmticas y lgicas. En la figura se
muestran claramente.

Registro de banderas
&' &( )* )+ ), )- ). )/ )& )) )' )( '* '+
AC
',
0M
'-
R1
'. '/
2T
'&
IOP
')
IOP
''
O1
'(
D1
*
I1
+
T1
,
S1
-
31
. /
A1
& )
P1
' (
C1
Las banderas indican la condicin del microprocesador a la vez que controlan
su miento. Los bits de bandera cambian despus de ejecutar muchas de las
instrucciones aritmticas y lgicas.
El se$ali%ador de arrastre (C+) se pone a 1 cuando se genera un
arrastre en una operacin aritmtica realizada sobre un operando de 8
16 bits. En cualquier otro caso, est a 0 CF tambin se utiliza en
instrucciones de desplazamiento y rotacin y contiene el bit desplazado
o rotado fuera del registro.
El se$ali%ador de #aridad (P+) se utiliza principalmente para
aplicaciones de comunicaciones de datos y se pone a 1 para generar
paridad impar a 0 para generar paridad par.
El se$ali%ador de arrastre au*iliar (A+) se utiliza en aritmtica BCD
para indicar si ha habido arrastre o prstamo en los dgitos
correspondientes a los 4 bits menos significativos de un valor BCD.
El se$ali%ador de cero (-+)! ndica que el resultado de una operacin
aritmtica o lgica es cero. Si ZF=1, el resultado es cero, y si ZF=0 el
resultado no es cero.
El se$ali%ador de signo (S+) se pone a 1 para resultados negativos y a
0 para resultados positivos. Toma el valor que tiene el registro ms
significativo.
El se$ali%ador de re.ose ("+) indica si una operacin ha generado
arrastre en el bit de orden superior del resultado pero no de un arrastre
de otro bit diferente del orden superior.
Tres de los once sealizadores (T+/ I+ , D+) se utilizan para controlar
ciertas operaciones del procesador.
El se$ali%ador de tra)#a 0 TAP (T+). Cuando s inicializa pone al
microprocesador en modo de paso simple y habilita la depuracin de un
programa.
El se$ali%ador de 1a.ilitacin de interru#cin (I+) habilita
interrupciones externas cuando se pone uno, y las habilita cuando se
pone cero.
La direccin de las operaciones con cadenas est controlada por el
sealizador de direccin (D+)! Con DF a cero, si y/o D son
incrementados automticamente con DF a 1, si O, D son
decrementados automticamente.
Los sealizadores I"P , NT son dos sealizadores nuevos no
suministrados anteriormente y solamente son usados cuando el
microprocesador est en modo protegido, el sealizador de niveles E/S
de privilegio (10 P) se utiliza para garantizar que una instruccin realiza
todas aquellas operaciones que est autorizada a realizar. El sealizador
de tareas (NT) se utiliza para indicar si la ejecucin de la tarea actual
est anidada en otras tareas. Si NT est a uno, la tarea actual anidada
tiene un enlace a la tarea previa.
El sealizador R+ (de resu)en) se usa junto con los "break points" del
registro de operacin a pasos simples. Cuando RF est en uno todos los
fallos de depuracin se ignoran en la siguiente instruccin, entonces, RF
se pondr automticamente a cero (RESET) cuando complete con xito
cada instruccin.
El 23 (se$ali%ador )odo 4irtual) si VM est a uno y el 80386 est en
modo protegido, el microprocesador conmutar a la operacin en modo
virtual del 8086, haciendo que todas las operaciones de segmentos se
ejecuten como si estuvieran corriendo en un 8086.
Sealizador (AC) co)#ro.acin de alineacin!
1.2.3 "odos de direccionamiento.
TEC2ICAS DE DIRECCIO2AMIE2TO.
Una instruccin del 80286/80386/80486 no solamente contiene informacin
sobre la operacin en particular a realizar, sino que tambin incluye las
especificaciones para el tipo de operandos a manipular, as como tambin la
posicin de estos.
La manera en que los operandos se escogen durante la ejecucin del
programa depende del modo de direccionamiento de la instruccin. El modo de
direccionamiento especifica una regla para interpretar o modificar el campo de
direccin de la instruccin antes de que el operando sea en realidad
referenciado.
Se emplear la instruccin "18 (mover datos) para describir los modos de
direccionamiento de datos. En el ejemplo se ilustra la instruccin MOV y define
la direccin del flujo de datos a la fuente a la derecha y el destino a la
izquierda.
MOV destino, fente
MOV A!, B!

Modo I"#$i%ado
En este modo los operandos son especificados implcitamente en la definicin
de la instruccin. Por ejemplo, la instruccin "complemente el acumulador es
una instruccin de modo implicado debido a que el operando en el registro
acumulador est implicado en la definicin de la instruccin.


DIRECCIONAMIENTO DE DATO INMEDIATO
El termino inmediato significa que los datos siguen inmediatamente al cdigo
hexadecimal de operacin en la memoria. El direccionamiento inmediato acta
en byte o palabra de datos. A continuacin se muestra el funcionamiento del
direccionamiento de dato inmediato.

MOV A&,'' (A& se #one a %ero )''*
MOV AL,'+ (AL se %arga %on '''' ','' en binario
MOV A!,'FFFFF&
MOV A!,-'.
En este modo l operando es especificado en la instruccin misma. Esto es,
una instruccin de modo inmediato tiene un campo de operando en vez de un
campo de direccin.
En la modalidad inmediata, el operando se incluye como parte de la instruccin.
Por ejemplo "18 09- #. Aqu el nmero 5 forma parte de instruccin en su
totalidad, en otras palabras, el nmero se especifica como una constante
numrica en la misma instruccin y no hay necesidad de accesar la memoria,
la instruccin mueve el valor de 5 al registro AX.
E/e"#$os0
MOV A!, 1'
MOV B!, ',A
MOV A!, '2-
MOV C!, .BC
MOV D!, ',.-

DIRECCIO2AMIE2TO DIRECTO
Con el direccionamiento directo, el desplazamiento del segmento de operando
est contenido en la instruccin como una cantidad de 16 bits. Este
desplazamiento se suma al contenido desplazado del registro del segmento de
datos (DS) y se devuelve a la EA de 20 bits, o direccin fsica real.
Habitualmente, el operando de direccionamiento directo es un rtulo.
E/e"#$o0
MOV A!, M3DATA
M3DATA
CONT DIR.
'''4
'''+
FF '''-
'' '''.
''',
''''
A!
,,,,,,,,''''''''
En la mayor parte de las instrucciones se puede emplear el modo de
direccionamiento directo de datos, el cual se aplica en muchas instrucciones en
un programa tpico. Hay dos formas bsicas de direccionamiento directo de
datos (1) direccionamiento directo y (2) direccionamiento por desplazamiento;
en este caso el direccionamiento directo solo se permite con una instruccin
"18 que transfiera datos entre una localidad en la memoria, situada dentro de
datos y un registro 02 :H bits<- 09 :1. bits< o E09 :32 bit<. Esta instruccin
siempre tiene una longitud de 3 bytes.
Ejemplo: La instruccin "18 9- 2IST copia el contenido tamao palabra de la
localidad 2IST de la memoria y lo coloca en el registro 9.
MOV A!, DDD5
MOV B!, DDD3
MOV A!, DDDU


DIRECCIO2AMIE2TO DE RE4ISTRO
Transfiere un byte o palabra desde el registro fuente o localidad en la memoria,
hasta el registro o localidad destino en la memoria. Es fcil comprender el
direccionamiento por registro una vez que se aprende los numerosos registros
que hay en los 8086-080486. Los 8086-80286 contienen los siguiente registros
de 8 bits, utilizando con el direccionamiento por registro A&, AL, B&, BL, C&,
CL, D&, 6 DL.
Tambin contienen los siguientes registros de 16 bits A!, B!, C!, D!, S7, B7,
SI # DI. En los 80380/80486 los registros, ampliados de 32 bits son EA!, EB!,
EC!, ED!, ES7, EB7, EDI # ESI. Pero no se debe mezclar un registro de 8 bits
con uno de 16 bits, uno de 8 bits con uno de 32 bits, o uno de 16 bits con uno
de 32 bits porque no lo permite el conjunto de instrucciones de 8086-80486. La
tabla presenta algunas versiones de instruccin MOV entre registros. Es
importante mostrar todas las variables por las numerosas combinaciones
posibles.

Lenga/e
ensa"b$ador
O#era%i8n
MOV AL, BL Co#ia BL en AL
MOV C&, CL Carga CL en C&
MOV A!, C! Carga C! en A!
MOV S7, B7 Carga B7 en S7
MOV DS, A! Carga A! en DS
MOV DI, SI Carga SI en DS
MOV B!, ES Carga ES en B!
MOV EC!, EB! Carga EB! en EC!
MOV ES7, ED! Carga ED! en ES7
MOV ES, DS
No se #er"ite )seg"ento a
seg"ento*
MOV CS, A!
No se #er"ite ) registro de seg"ento
*
MOV BL, B! No se #er"ite )ta"a9o "i:tos*

DIRECCIO2AMIE2TO DE RE4ISTRO I2DIRECTO
Transfiere un byte o palabra entre un registro y una localidad de memoria
direccionada por un registro ndice o base. En lugar de referenciar por un rtulo
la direccin del operando fuente, el valor del operando es sealado por una
direccin de desplazamiento almacenada en uno de los registros siguientes: SI!
DI,B!! o en algunas veces en el B7.
La ventaja de la instruccin de modo de registro indirecto es que el campo de
direccionamiento en la instruccin utiliza menos bits para seleccionar un
registro que lo que hubiera requerido para especificar una direccin. El
microprocesador reconoce el direccionamiento indirecto de registros por la
sintaxis de la instruccin. El designador del operando fuente es reconocido por
corchetes.
E;EM7LOS
MOV B7, <D!=
LEA A!, <CS=
LEA DI, <SS=
DIRECCIO2AMIE2TO DE RE4ISTRO RELATI0O
En este modo el contenido del controlador del programa se suma a la parte de
direccin de la instruccin para obtener una direccin efectiva.
El direccionamiento relativo por registro es similar al direccionamiento base
ms ndice y al direccionamiento por desplazamiento. En el direccionamiento
relativo por registro, para direccionar datos en un segmento de memoria se
agrega un desplazamiento al contenido de un registro base ndice 5B7, B!, DI o
SI6.
E/e"#$o0
MENSA;E, DB >EL LEN?UA;E ENSAMBLADOR ES>, >@>
MENSA;E. DB >RA7IDO 3 EFICIENTEA>,>@>
.
.
LEA B!, MENSA;E,
MOV AL,<B!=B+
La orden 2E0 carga la direccin de desplazamiento en el registro %9. Al
referencias el cuarto elemento de "E=S0CE1 se realiza aadiendo la direccin
base (%9) de "E=S0CE1 al desplazamiento, I4 en la cadena. El ensamblador
reconoce los tres mtodos siguientes para indicar el direccionamiento relativo
base.
LEA <B!=B+
LEA +<B!=
LEA <B!B+=

DIRECCIO2AMIE2TO DE 7ASE I2DE8ADO
RE4ISTRO
Con el direccionamiento base indexado, el operando se localiza en el segmento
seleccionado en un desplazamiento determinado por la suma de los contenidos
del registro base, registro ndice y opcionalmente un desplazamiento
E/e"#$os0
LEA B! M3DATA
MOV SI,.4
MOV A! M3DATA <B!= <SI=

DIRECCIO2AMIE2TO 7ASE I2DE8ADO
Con el direccionamiento base indexado, el direccionamiento se localiza en el
segmento seleccionado en un desplazamiento determinado por la suma de dos
contenidos del registro base, registro ndice y, opcionalmente un
desplazamiento.
E/e"#$o0
LEA B! M3 DATA
MOV SI, .4
MOV A! M3DATA
DIRECCIO2AMIE2TO I2DE8ADO DIRECTO
En el direccionamiento indexado directo, la direccin de desplazamiento del
operando se calcula sumando el desplazamiento a un registro ndice (S o )I)
en el segmento seleccionado, frecuentemente, el direccionamiento indexado
directo se utiliza para acceder a los elementos de un 0&&0F esttico. El valor
del desplazamiento localiza el comienzo del 0&&0F el valor almacenado en el
registro ndice selecciona uno de modo simple en la estructura. Como los
elementos son del mismo tipo de datos y tamao, por moverse a travs del
0&&0F basta en incrementar o decrementar sistemticamente en el
desplazamiento.
E/e"#$o0
MOV SI, +
MOV AL, ARRA3 , <SI=
LEA B! M3DATA
MOV 4,,.4
MOV A! M3DATA <B!= <SI=
nternamente el microprocesador tiene 7 registros rotulados A(para el
acumulador );B, C, D, E, F H y L estos registros tiene 8 bits de ancho y puede
acomodar un bvte . el cdigo de operacin de una instruccin leda de la
memoria durante el ciclo de fetch es transferido al registro de instruccin. Es
entonces decodificada por el control para determinar la secuencia de micro-
operaciones necesarias ejecutar la instruccin.
1.3 Interrupciones.
Una interrupcin es una detensin de la ejecucin del microprocesador para
dar oportunidad a la maquina de comunicarse con los dispositivos perifericos.
Puede decirse que una interrupcin es el elemento ms importante para
ejecutar un programa debido a que estas permiten la interaccin entre el
usuario y la maquina.
Una interrupcin es un mecanismo de control; bsicamente ocasiona que la
CPU detenga la ejecucin del programa actual transfiera el control a una rutina
de servicio y al termino de esta prosigue con la ejecucin del programa
interrumpido a otros mecanismos para transferencia de control tales como las
instrucciones C",022$ &E) siempre se encuentran bajo el control del
programa, la familia de las microcomputadoras y compatibles aceptan dos tipos
de interrupciones las del HARDWARE Y SOFTWARE.
E9ECUCIO2 DE U2A I2TERRUPCIO2
Para :e na interrpci$n se e;ecte correctamente es necesario almacenar el n<mero de
=nci$n en el re%istro acmlador A& 5# demas re%istros de prop$sito %eneral! si as> se
re:iere6! # posteriormente mandar a llamar el tipo de interrpci$n re:erido.
A continuacin se mostrara un fragmento de un programa para ejemplificar
la ejecucin de una interrupcin.
5C"DIG" PARA "RRAR PANTA&&A
3"2 C(/ 6666
3"2 D(/ 789:;
3"2 ;/ 69
3"2 A;/ 6<
3"2 A&/ 66
INT =6;
RET
END

Como puede verse en este ejemplo, para ejecutar la interrupcin 10H,
primero fue necesario cargar el valor de la funcin en el registro acumulador y
los dems atributos en los dems registros de propsito general.
El funcionamiento de una interrupcin existe cuando el microprocesador
concluye al ejecutar la instruccin en curso, entonces para determinar si una
interrupcin esta activa se comprueba:
1. 0lguna instruccin en ejecucin
2. Trampa
3. ="I
4. Sobre!lujo del segmento del procesador
#. I=T&
.. 2a instruccin I=T en el orden citado si est/ presente una o m/s de estas condiciones
de interrupciones ocurre lo siguiente7
1.J Se sal+a el contenido de registro de banderas en pila.
2.J Se desacti+an las banderas de interrupciones IF y TF esto des5abilita la terminal I=T&
y la caracter6stica de trampa-
3.J Se sal+a el contenido de registro S de segmentos de cdigo 5acia la pila-
4.J Se sal+a el contenido del apuntador de instruccin I, en la pila-
#.J Se recupera el contenido del +ector de la interrupcin y se coloca en I, y en S de
modo Eue la siguiente instruccin se ejecuta en el procedimiento de ser+icio de la
interrupcin diseccionada por el +ector.
TIP"S DE INTERRUPCI"NES
Recorde)os >ue las interru#ciones internas , e*ternas se
inician a #artir de se$ales >ue ocurren en la CPU! ? esta se
encuentra lista #ara atender a la interru#cin a >uien le
interru)#i/ #asa el control ala rutina lla)ada )anejador
de interru#ciones/ esta rutina define la causa de las
interru#ciones/ #ro#orciona el ser4icio solicitado , regresa
el control a la CPU #ara >ue esta #ueda #roseguir a lo >ue
esta.a 1aciendo!
INTERNAS (DE& PR"GRA3A)
Surgen debido a la utilizacin ilegal o errnea de una instruccin de datos. La
interrupcin interna tambin se llama trampa. Algunos ejemplos de las
interrupciones preocupadas o condiciones de error internas son los sobre flujos
de registro, intentar dividir entre cero un cdigo de operacin no valido,
desbordamiento de pila y violacin de la Proteccin. Por lo general estas
condiciones de error ocurren, como resultado de una determinacin prematura
de la ejecucin de una instruccin. El programa de servicio que procesa la
interrupcin interna determina la medida correctiva que se debe tomar.
La diferencia entre las interrupciones internas y externas, es que las internas se
inician por una condicin excepcional causada por el programa mismo, mas
bien que por un evento externo. Las interrupciones internas son sincronas con
el programa en tanto que las externas no lo son.

VECTORES PARA INTERRUPCION
NUM. DIRECCION MICROPROCESADOR FUNCION
0 OH 3H 8086-80486 Error al diidir
! 4H-"H 8086-80486 Pa#o a $a#o
% 8H &H 8086-80486 N'i I(). Hard*ar+
3 CH-FH 8086-80486 P,()o d+ r,$),ra
4 !0H-!3H 8086-80486 I(). Por #o-r+ .l,/o
0 !4H-!"H 80%86-80486 I(). d+ &OUND
6 !8H-!&H 80%86-80486 C1di2o i(alido
" !CH-!FH 80%86-80486 I(). D+ +',la3i1(
8 %0H-%3H 80386 -80486 Do-l+ .al)a
4 %4H-%"H 80386- 80486 D+#-orda'i+()o d+ #+2'+()o
!0 %8H-%&H 80386- 80486 S+2'+()o d+ +#)ado d+ )ar+a
!! %CH-%FH 80386- 80486 No 5a6 #+2'+()o
!% 30H-33H 80386- 80486 Falla d+ $ila
!3 34H-3"H 80386- 80486 Falla 2+(+ral d+ $ro)+33i1(
!4 38H-3&H 80386- 80486 Falla d+ $72i(a
!0 3CH-3FH 80386- 80486 R+#+rado
!6 40H-43H 80386- 80486 Error d+ $,()o d+3i'al
!" 44H-4"H 80486S8 i() D+ +ri.i3a3i1( d+ ali(+a3i1(
!8-3! 48H-"FH 8086-80486 R+#+rado
3%-%00 80H-3FFH 8086-80486 I(). Por +l ,#,ario.
I2TERRUPCIO2ES E8TER2AS
Las interrupciones internas provienen de dispositivos de entrada y salida (E/S).
De un dispositivo de temporizacion, de un circuito que monitorea la fuente de
alimentacin de cualquier otra fuente externa. Algunos ejemplos que producen
las interrupciones externas son dispositivos de entrada y salida que terminan la
trasferencia de datos, tiempo transcurrido de un evento o falla de energa.
Puede ocurrir una interrupcin por tiempo ilimitado de un programa que este en
un ciclo que no termina y que, por lo tanto excede su tiempo asignado una
interrupcin por falla de energa puede tener como su rutina de servicio a un
programa que transfiere el estado completo de la CPU. A una memoria no
voltil en pocos segundos anteriores a una falla de energa.

UTI2IK0I1= )E 20S I=TE&&U,I1=ES )E2 %I1S F )E2 "S )1S
Si la pastilla del microprocesador forma el ncleo de la computadora
ciertamente la rutina del BOS Y del DOS son los cerebros de la mquina cada
computadora esta programada con una cierta cantidad de informacin antes de
dejar la factora, esta informacin esta almacenada en el HARDWARE
ROM(memoria slo de lectura).
Tpicamente la mayora de las rutinas del BOS ( sistema bsico de entrada y
salida), esta almacenada en ROM y es permanente.
EL DOS. Sistema Operativo de discos puede ser considerado como una
memoria, aadida en una fecha posterior, realmente es memoria que se aade
cada vez que la computadora se conecta o s inicializa con el DOS, es
memoria no permanente, memoria que puede ser actualizada y cambiada con
cada nueva liberacin del DOS tpicamente las operaciones s del DOS son
almacenadas en RAM(memoria de acceso aleatorio o residen en el disco hasta
que se necesiten).


I=T 10'
La interrupcion de BOS, 1AH, permite leer y escribir la fecha y hora actuales
desde y al reloj del sistema. La tabla siguiente es un listado de las opciones
disponibles con la interrupcin del BOS tipo 1AH.
INTERRUPCION !AH
Valor AH F,(3i1( E()rada Salida
AH90 :++ i(i3iali;a3io( r+lo/ a3),al

C8--&6)+# #,$+rior+# d+l r+lo/
D8--&6)+# i(.+rior+# d+l r+lo/
A:--0<#i )+'$ori;ador (o 5a $a#ado %4 5ora#
AH9! I(i3iali;a r+lo/ a3),al
C89
D89
&6)+# #,$+rior+# d+l r+lo/
&6)+# i(.+rior+# d+l r+lo/
AH9% :++ 5ora--r+lo/ d+ )i+'$o r+al

CH--&CD 5ora#
C:--&CD 'i(,)o#
DH--&CD #+2,(do#
AH93 I(i3iali;a 5ora--r+lo/ d+ )i+'$o r+al
CH9
C:9
DH9
D:9
&CD 5ora#
&CD 'i(,)o#
&CD #+2,(do#
!--5ora d+l dia,(do#
0--5ora +#)a(dar
AH94 :++ .+35a-- r+lo/ d+ )i+'$o r+al.

CH--&CD #i2lo
C:--&CD a=o
DH--&CD '+#
D:--&CD dia
AH90 I(i3ialio;a F+35a--r+lo/ d+ )i+'$o r+al
CH9
C:9
DH9
D:9
&CD #i2lo
&CD a=o
&CD '+#
&CD dia
AH96 I(i3iali;a alar'a >5a#)a %3?04?04@
CH9
C:9
DH9
&CD 5ora#
&CD 'i(,)o#
&CD #+2,(do#
AH9" R+i(i3iali;a alar'a.


NT 10H
Muchas veces cuando se programa, la entrada o salida de la computadora
necesita ser mostrada en la pantalla del monitor. Con frecuencia esto
requerir una simple operacin de borrado de pantalla; en otras ocasiones se
podr desear cambiar los colores o atributos de la pantalla. El control de la
pantalla puede conseguirse fcilmente con las interrupciones del BOS tipo 10H
. La tabla siguiente es un listado de las posibles variaciones programables
con las interrupciones tipo 10H.
INTERRUPCION !0H
Valor AH F,(3i1( Salida E()rada

Co()rol d+ i()+r.a; d+l CRT


AH90 I(i3iali;a +l 'odo d+ i#,ali;ar A:90
A:9!
A:9%
A:93
A:94
A:90
A:96
40A%0 &BC
40A%0 CO:OR
80A%0 &BC
80A%0 CO:OR
3%0A%00 3olor 2r7.i3a#
3%%A%00 &BC 2r7.i3a#
640A%00 &BC 2r7.i3a#
A:9!0 640A300E.D.A.Dra.i3a#
AH9! I(i3iali;a )i$o d+ 3,r#or
CH9
C:9
&i)# 4-0 $ri(3i$io d+ lE(+a $ara +l 3,r#or
&i)# 4-0 .i( d+ li(+a $ara 3,r#or
AH9% I(i3iali;a $o#i3i1( d+ 3,r#or
DH9
D:9
&H9
Fila
Col,'(a
NF'+ro $72i(a d+ $a()alla
AH93
:++ $o#i3i1( d+ 3,r#or >alor+# 5a#)a
+/+3,#io(@
DH9
D:9
CH9
C:9
&H9
Fila
Col,'(a
Modo 3,r#or
Modo 3,r#or
NF'+ro $72i(a d+ $a()alla
AH94
O-)i+(+ $o#i3io( la$i; l,'i(o#o >alor+# 5a#)a
+/+3,#i1(@
AH90
AH9!
DH9
D:9
CH9
&89
Co(',)a3io( (o a-a/oBdi#$aro
R+#$,+#)a# alida#G #i2,+?
Fila
Col,'(a
Dra.o li(+a >0-!44@
Col,'(a Dra.i3a
AH90 I(i3iali;a $72i(a $a()alla a3)ia A:9
Valor (,+a $72i(a
Modo# 0 6 ! >0-"@
Modo# % 6 3 >0-3@
AH96 E(rrola $72i(a a3)ia 5a3ia arri-a
A:9
CH9
C:9
DH9
D:9
&H9
NF'+ro d+ li(+a#G 0 $ara $a()alla +()+ra
Fila< +#H,i(a #,$+rior i;H,i+rda
Col,'(a< +#H,i(a #,$+rior;H,i+rda
Fila<+#H,i(a i(.+rior d+r+35a
Col,'(a< +#H,i(a i(.+rior d+r+35a
A)ri-,)o a #+r ,#ado
AH9" E(rrola $72i(a a3)ia 5a3ia a-a/o
A:9
CH9
C:9
DH9
D:9
&H9
NF'+ro d+ li(+a#G 0 $ara $a()alla +()+ra
Fila< +#H,i(a #,$+rior i;H,i+rda
Col,'(a< +#H,i(a #,$+rior i;H,i+rda
Fila<+#H,i(a i(.+rior d+r+35a
Col,'(a< +#H,i(a i(.+rior d+r+35a
A)ri-,)o a #+r ,#ado

Ma(i$,la3io( d+ 3ara3)+r+#

AH98 :++ a)ri-,)oB3ara3)+r +( $o#i3i1( 3,r#or
&H9
A:9
AH9
P72i(a $a()alla
Cara3)+r l+ido
A)ri-,)o d+ 3ara3)+r
AH94
E#3ri-+ a)ri-,)oB3ara3)+r +( $o#i3io(
3,r#or
&H9
C89
A:9
&:9
P72i(a $a()alla
C,+()a d+ 3ara3)+r+# a +#3ri-ir
Cara3)+r a +#3ri-ir
A)ri-,)o d+ 3ara3)+r
AH9!0 E#3ri-+ 3ara3)+r +( $o#i3i1( 3,r#or
&H 9
C8 9
A: 9
Vi#,ali;a $72i(a
C,+()a d+ 3ara3)+r+# a +#3ri-ir
Cara3)+r a +#3ri-ir

I()+r.a; d+ 2r7.i3o#

AH9!! S+l+33io(a $al+)a 3olor+#
&H 9
&: 9


Pal+)a ID >0-!%"@
Color $ara $al+)a ID
0--Fo(do >0-!0@
!--$al+)a
0--V+rd+>!@<ro/o>%@<a'arillo>3@
!-- C6a( >!@< 'a2+()a >%@<
AH9!% Di-,/a $,()o +( $a()alla
D89
C89
A:9
Fila >0-!44@
Col,'(a >0-3!4B634@
Color d+l $,()o
AH9!3 :++ i(.or'a3io( $,()o
D89
C89
A:9
Fila >0-!44@
Col,'(a >0-3!4B634@
Valor d+l $,()o

Salida )+l+)i$o ASCII

AH9!4 E#3ri-+ a $72i(a a3)ia A:9 Cara3)+r a +#3ri-ir
&:9 Color $ri'+r $la(o
AH9!0 D+,+l)o a +#)ado id+o
A:9
AH9
&H9
Modo a3),al
NF'+ro d+ 3ol,'(a# d+ $a()alla
P72i(a $a()alla a3),al
AH9!6 R+#+rado

AH9!" R+#+rado

AH9!8 R+#+rado

AH9!4 E#3ri-+ 3ad+(a
ES?&P9
C89
D89
&H9
A:90
A:9!
A:9%
A:93
S+=ala a 3ad+(a
:o(2i),d d+ 3ad+(a
Po#i3io( d+ 3,r#or $ara 3o'i+(;o
NF'+ro d+ $72i(a
&:9 a)ri-,)o>3ar<3ar<3ar...3ar@
C,r#or (o )ra(#.+rido
&:9 a)ri-,)o >3ar<3ar<3ar...3ar@
C,r#or +# )ra(#.+rido
>3ar<a)r<3ar...a)r@ C,r#o (o
)ra(#.+rido
>3ar<a)r<3ar...a)r@
C,r#or +# )ra(#.+rido.

I=TE&&U,I1= )E2 )1S : 21'<
La interrupcion 21' del DOS es una interrupcion de llamada a funcion. Las
especificaciones y requerimientos para utilizar esta interrupcion se muestran en
la siguiente tabla:
INTERRUPCION %!H
Valor
AH
F,(3i1( E()rada Salida
AH 9 !
E#$+ra 6 i#,ali;a 3ara3)+r d+ )+3lado
3o( 3o'$ro-a3i1( CTR:-&REAI

A: - Ca3)+r i()rod,3ido
AH 9 %
Vi#,ali;a 3ara3)+r d+ )+3lado 3o(
3o'$ro-a3i1( CTR:-&REAI
D: 9 Cara3)+r a i#,ali;ar
AH 9 3 E()rada a#E(3ro(a d+ 3ara3)+r

A: - Cara3)+r i()rod,3ido
AH 9 4 Salida a#E(3ro(a d+ 3ara3)+r D: 9 Cara3)+r a +(iar
AH 9 0 Cara3)+r a +#3ri-ir D: 9 Cara3)+r a +#3ri-ir
AH 9 6 E()rada 3ara3)+r d+ )+3lado
D: 9
0FFH
Cara3)+r i()rod,3ido
AH 9 "
E#$+ra $ara 3ara3)+r d+ )+3lado >(o
i#,ali;a@
A: - Cara3)+r i()rod,3ido
AH 9 8
E#$+ra $ara 3ara3)+r d+ )+3lado >(o
i#,ali;a-3o'$r,+-a CTR:-&REAI@

A: - Cara3)+r i()rod,3ido
AH 9 4 Vi#,ali;a 3ad+(a DS?D89
Dir+33i1( d+ 3ad+(a. D+-+ .i(ali;ar 3o( 3+()i(+la
J
AH 9 A Cad+(a )+3lado a -,..+r DS?D89
Dir+33i1( d+ -,..+r. Pri'+r -6)+9)a'a=o< #+2,(do
-6)+9(F'+ro d+ 3ara3)+r+# l+ido#
AH 9 & S)a),# d+ +()rada d+ )+3lado

A:-No. 3ara3)+r90FFH Cara3)+r 9 0
AH 9 C &orra -,..+r )+3lado 6 lla'a .,(3i1( A: 9 !<6<"<8<0A - NF'+ro .,(3i1(
AH 9 D U(idad i'$lE3i)a di#3o >r+#+)@ Ni(2,(a Ni(2,(a
AH 9 E U(idad i'$lE3i)a di#3o >#+l+33io(ada@ D: 9 A: - NF'. ,(idad+#
0 - U(idad A
! - U(idad &< +)3.
AH 9 !4 C1di2o ,(idad >E'$li3i)o@

A: - NF'. ,(idad+#
0 - U(idad A
! - U(idad &< +)3.
AH 9 %0 I()+rr,$3i1( >i(i3iali;a@ DS?D8 9 Dir+33i1( d+l +3)or d+ i()+rr,$3i1(
AH9%A F+35a >l++@
A:9

NF'+ro d+ i()+rr,$3i1(
C8--A=o>80 a 44@
DH--M+#
D:--Dia>! a 3!@
AH9%& F+35a >i(i3iali;a@ C8?D8
I2,al H,+ a()+#
A:--0 #i alido
OFF #i (o alido
AH9%C Hora >l++@

CH--Hora# >0-%3@
C:--Mi(,)o#>0-04@
AH9%D Hora >i(i3iali;a@ C8?D8
I2,al H,+ a()+#
A:--0 #i alido
OFF--#i (o alido
AH9%E V+ri.i3a +#)ado>i(i3iali;a@
D:9

0
A:9 0
0G+ri.i3a o..
!G+ri.i3a o(
AH930 Dir+33io( i()+rr,$3io( >l++@ A:9
NF'+ro d+ i()+rr,$3i1(
ES?&8--a$,()a a dir+33io( +3)or
AH936 Di#3o +#$a3io di#$o(i-l+
D:9


U(idad >0--i'$li3i)a<!--A<%--&<+)3.@
A8--#+3)or+#Ba$i=a'i+()o>FFFF #i i(alido@
&8--NF'+ro a$i=a'i+()o li-r+#
C8--&6)+# $or #+3)or
D8--NF'+ro )o)al d+ a$i=a'i+()o#
AH934 Ha3+ dir+3)orio DS?D8 Dir+33i1( d+ 3ad+(a $ara dir+3)orio
AH93A Eli'i(ar dir+3)orio DS?D8 Dir+33i1( d+ 3ad+(a $ara dir+3)orio
AH93& Ca'-ia dir+3)orio DS?D8 Dir+33i1( d+ 3ad+(a $ara (,+o dir+3)orio
AH93C Ar35io >3r+a@
DS?D8
C89
Dir+33i1( d+ 3ad+(a $ara ar35io
A8--R+)or(o 'ai$,la ar35io
A)ri-,)o ar35io
AH93D Ar35io >a-r+@
DS?D8
A:9

Dir+33i1( d+ 3ad+(a $ara ar35io
0--A-r+ $ara l++r
!--A-r+ $ara +#3ri-ir
%--A-r+ $ara a'-o#
A8--R+)or(o 'a(i$,la ar35io
AH93E Ma(i$,la ar35io>3i+rra@ &89 Ma(i$,la ar35io
AH93F Ar35io o di#$o#i)io>l++@
&89
C89
DS?D8
Ma(i$,la ar35io
NF'+ro d+ -6)+# a l++r
Dir+33io( d+ -,..+r
A8--NF'+ro d+ -6)+# a l++r
AH940 Ar35io o di#$o#i)io>+#3ri-+@
&89
C89
DS?D8
Ma(i$,la ar35io
NF'+ro d+ -6)+# a +#3ri-ir
Dir+33i1( d+ da)o# a +#3ri-ir
A8--NF'+ro d+ -6)+# a +#3ri-ir
AH94! Ar35io >#,$ri'+@ DS?D8 Dir+33i1( d+ ar35io# 3ad+(a
AH94% Ar35io >$o(+ a)ri-,)o@
C8?D8
A:90
A:9!
A:9%
D+#$la;a'i+()o +( -6)+#
P,()+ro d+#$la;ado >C8?D8@ -6)+# d+#d+ +l
3o'i+(;o d+l ar35io
P,()+ro a $o#i3i1( a3),al '7# d+#$la;a'i+()o
P,()+ro a EOF '7# d+#$la;a'i+()o
AH943 Ar35io >I(i3iali;a a)ri-,)o@ DS?D8 Dir+33i1( d+ ar35io 3ad+(a
SI A:90< a)ri-,)o d+,+l)o a C8
SI A:9!< i(i3iali;a ar35io 3o( a)ri-,)o d+ C8
AH94" Dir+33io( a3),al
D:9
DS?DI9

NF'+ro U(idad >0--i'$li3i)a<!--,(idad A<%--
,(idad &@
Dir+33i1( -,..+r DS?DI--D+,+l+ dir+33i1( d+
3ad+(a
AH904 V+ri.i3a +#)ado Ni(2,(a
A:--0 #i +ri.i3a o..
! #i +ri.i3a o(
AH906 Ar35io>r+(o'-ra@
DS?D8
ES?DI
Dir+33i1( d+ 3ad+(a $ara i(.or'a3i1( a()i2,a
Dir+33i1( d+ 3ad+(a $ara i(.or'a3i1( (,+a
)e!inicin y Tipos de Interrupciones.
La primera cosa de todas, qu son las interrupciones?, bien, las interrupciones son un
"mecansmo" por medio del cual hacemos que la CPU deje la tarea en la que estaba para que
se vaya a ocupar de otra cosa distinta, es decir, es una forma de llamar la atencin de la CPU
de tal forma que cada dispositivo cuando necesita ser atendido por la CPU, emite una
interrupcin o seal haciendo que la CPU vaya a atenderla de inmediato. Esto es
importantsimo ya que de no existir interrupciones, la CPU debera de ir preguntando, cada
cierto tiempo, a los dispositivos para ver si necesitan de su intervencin y como podeis
suponer, eso significara lentitud, mucha lentitud.
Por tanto, quedaros con que las interrupciones sirven para controlar el hardware, ya que son
las que llaman a la CPU cuando este, el hardware, necesita la intervencin de la misma.
Las interrupciones se pueden dividir en 2 grupos:
1. Interrupciones de So!t(are. Tambin son conocidas como "falsas interrupciones" ya que se
producen como consecuencia de la ejecucin de otra instruccin al no ser el hardware las que
las produce. Otra forma de entender estas interrupciones, es verlas desde el punto de vista de
llamadas a subrutinas, lgicamente, la gracia est en que esas subrutinas no son nuestras,
sino que son las propias de cada sistema operativo, driver o similar tiene. Quedaros pues, con
que somos nostros los que hacemos invocamos a la interrupcin.
Este tipo de interrupcin es el ms habitual en la programacin.
2. Interrupciones de 'ard(are. Este tipo de interrupcin es invocado directamente por los
dispositivos hardware de nuestro ordenador, por lo que "son bastante ms autnticas" que las
anteriores. Al producir algn dispositivo hardware la interrupcin el controlador de
interrupciones o PC se encarga de gestionarla determinando, en el caso de producirse ms de
una interrupcin a la vez, cual de ellas tiene ms prioridad y debe de ser gestionada por la
CPU. El funcionamiento de este tipo de interrupciones es bastante similar y se suele utilizar
mucho para la programacin de sistemas de comunicaciones.
2a Tabla de 8ectores de Interrupciones.
Seguro que alguno se ha preguntado, "si cuando llamamos a una interrupcin se ejecuta una
determinada rutina...dnde narices se encuentra esta rutina?, es ms, cmo sabe nuestra
CPU dnde encontrarla?."
Bien, la respuesta a estas dos preguntas (y muchas ms) se encuentra en la tabla de vectores
de interrupcin. Dicha tabla es una estructura que se crea durante la inicializacin del
ordenador y se coloca, en el principio de nuestra memoria (segmento 0 y desplazamiento 0).
Dicha estrucutura ocupa y de forma justa 1Kb, ya que dispone de 256 entradas de 4 bytes cada
una. Lo importante de todo esto es que, dicha estructura, almacena la direccin, en memoria,
de las distintas rutinas que van ligadas a las distintas interrupciones, de tal modo que cuando
invocamos, mediante interrupcin software, o se invoca, mediante hardware, una interrupcin,
lo que se hace es utilizar un ndice que va ligado a la interrupcin, de tal manera que, con dicho
ndice, se acude a la tabla de vectores de interrupcin para que el sistema encuentre la
direccin de la rutina en dnde se encuentra el verdadero tratamiento a la interrupcin, es decir,
si se produce la interrupcin x, lo que se hace es acudir a la tabla con el ndice x para encontrar
la entrada (recordar que eran 256 entradas con 4 bytes cada una) que contiene la direccin en
memoria de la rutina que sirve para tratar a la interrupcin de ndice x.
Como cada entrada es de 4 bytes, es fcil adivinar que dichos 4 bytes forman la direccin, ya
que 2 de esos bytes se utilizan como segmento y los otros 2 como desplazamiento, total, que
ya tenemos la direccin de memoria con la rutina que hay que utilizar.
Ahora pensar por un momento que somos nostros los que, conociendo la direccin de memoria
de una de esas rutinas, cambiamos dicha rutina por una nuestra para que al producirse una
determinada interrupcin ocurra lo que a nosotros nos interese...Como podis observar, las
posibilidades son muy interesantes, tan slo tenis que mirar el efecto de luz del Visualizator
v:2.0 (ir a senccin de Bjate algo interesante), dicho efecto se consigui poniendo en la rutina
que se encargaba de controlar la interrupcin de reloj del sistema, el cdigo necesario para el
efecto de luz, con lo que al producirse la interrupcin de reloj se ejecutaba tambin el cdigo
del efecto y como la interrupcin de reloj se produce contnuamente, los efectos son muy
buenos, vamos, que si queris hacer ese efecto acudiendo a un bucle =>ile lo llevais claro :-(.
Espero haber despertado, con este artculo, el inters por saber dominar las interrupciones. Si
queris saber ms, tan slo teneis que buscar informacin en libros sobre programacin de
dispositivos tales como ratn, VGA, etc, en los que se acude siempre a ellas. Ahora mismo
estoy pensando el hacer un artculo sobre como controlar el ratn as que puede que aparezca
en esta actualizacin de la revista, adems, es la mejor forma de entender las interrupciones
o no?. ;).
?ttp:@@sarios.l#cos.es@macedoniama%aAine@Barios).?tm
1.3.1 'ard(are.
8er arc5i+o7 Interrupciones 2;;#.p!t
Las interrupciones del HARDWARE son invocadas asincronamente es decir
pueden ocurrir en cualquier momento que no se encuentran bajo el control del
programa con un dispositivo o evento interno.
Interrupciones internas de 5ard(are
Las interrpciones internas son %eneradas por ciertos eBentos :e sr%en
drante la e;ecci$n de n pro%rama.
Este tipo de interrpciones son mane;adas en s totalidad por el ?ardCare # no
es posible modi=icarlas.
Un e;emplo claro de este tipo de interrpciones es la :e actaliAa el contador
del relo; interno de la comptadora! el ?ardCare ?ace el llamado a esta
interrpci$n Barias Beces drante n se%ndo para mantener la ?ora
actaliAada.
An:e no podemos mane;ar directamente esta interrpci$n 5no podemos
controlar por so=tCare las actaliAaciones del relo;6! es posible tiliAar ss
e=ectos en la comptadora para nestro bene=icio! por e;emplo para crear n
Drelo; BirtalD actaliAado continamente %racias al contador del relo; interno.
Unicamente debemos escribir n pro%rama :e lea el Balor actal del contador
# lo tradAca a n =ormato entendible para el sario.
Interrupciones e4ternas de 5ard(are
Las interrpciones eEternas las %eneran los dispositiBos peri=ericos! como
peden ser: teclado! impresoras! tar;etas de comnicaciones! etc. Tambi"n son
%eneradas por los coprocesadores.
2o es posible desactiBar a las interrpciones eEternas.
Estas interrpciones no son enBiadas directamente a la UCP! sino :e se
mandan a n circito inte%rado c#a =nci$n es eEclsiBamente mane;ar este
tipo de interrpciones. El circito! llamado PIC +).*A! si es controlado por la
UCP tiliAando para tal control na serie de Bias de comnicaci$n llamadas
pertos.
http://members.tripod.com/~MoisesRBB/unidad6.htm
1.3.2 So!t(are.
8er arc5i+o7 Interrupciones 2;;#.p!t
Por otro lado las interrupciones del SOFTWARE no interrumpen algo si no son
variantes de las rutinas las cuales pueden invocarse a voluntad y son
controladas por un programa en forma sincrnica o sea, que se conoce con
todo lo relacionado con su ejecucin puesto que el programa controla el
momento y la manera en que son llamadas mediante la secuencia de
instrucciones 022 y &ET, cuando un programa ejecuta una instruccin 022
se conoce previamente la direccin de la rutina llamada de tal forma que la
CPU pueda saltar al cdigo, que se encuentra ah y ejecutarle. En la mayora
de los casos el programa T2I=L.E9E determina y asigna las direcciones de las
rutinas es claro que el enlazador no puede saber de antemano donde se
encuentran las rutinas MS DOS y del BOS en la memoria de la otra cuando un
programa ejecuta una instruccin I=T A de interrupcin en la CPU
automticamente accesa la memoria baja a fin de obtener el desplazamiento
La interrupcin I=T n, llama al procedimiento de servicio de instruccin que
comienza en la direccin representada en el vector nmero n.
La interrupcin RET es una instruccin especial para retorno y se utiliza
para retornar de las instrucciones del Software y Hardware.
Interrupciones de so!t(are
Las interrpciones de so=tCare peden ser actiBadas directamente por el
ensamblador inBocando al n<mero de interrpci$n deseada con la instrcci$n
I2T.
El so de las interrpciones nos a#da en la creaci$n de pro%ramas!
tiliAandolas nestros pro%ramas son mFs cortos! es mFs =Fcil entenderlos #
salmente tienen n me;or desempeGo debido en %ran parte a s menor
tamaGo.
Este tipo de interrpciones podemos separarlas en dos cate%orias: las
interrpciones del sistema operatiBo DOS # las interrpciones del 7IOS.
La di=erencia entre ambas es :e las interrpciones del sistema operatiBo son
mFs =Fciles de sar pero tambi"n son mFs lentas #a :e estas interrpciones
?acen so del 7IOS para lo%rar s cometido! en cambio las interrpciones del
7IOS son mc?o mFs rFpidas pero tienen la desBenta;a :e! como son parte
del ?ardCare son m# espec>=icas # peden Bariar dependiendo inclso de la
marca del =abricante del circito.
La elecci$n del tipo de interrpci$n a tiliAar dependerF nicamente de las
caracteristicas :e le :iera dar a s pro%rama: Belocidad 5tiliAando las del
7IOS6 o portabilidad 5tiliAando las del DOS6.
Interrupcin 21'
Prop$sito: Llamar a diBersas =nciones del DOS.
SintaEis:
Int .,&
2ota: Cando traba;amos en MASM es necesario especi=icar :e el Balor :e
estamos tiliAando es ?eEadecimal.
Esta interrpci$n tiene Barias =nciones! para accesar a cada na de ellas es
necesario :e el el re%istro AH se encentre el n<mero de =nci$n :e se
re:iera al momento de llamar a la interrpci$n.
+unciones #ara des#legar infor)acin al 4ideo!
()H EE?ibe salida
(*H Impresi$n de cadena 5Bideo6
/(H Escritra en dispositiBo@Arc?iBo
+unciones #ara leer infor)acin del teclado!
('H Entrada desde teclado
(AH Entrada desde teclado sando b==er
&1H Lectra desde dispositiBo@arc?iBo
+unciones #ara tra.ajar con arc1i4os!
En esta secci$n nicamente se eEpone la tarea espec>=ica de cada
=nci$n! para na re=erencia acerca de los conceptos empleados
re=ierase a la nidad ,! titlada: DIntrodcci$n al mane;o de arc?iBosD.
3@todo +C
(1H Abrir arc?iBo
'/H Lectra secencial
'.H Escritra secencial
'-H Crear arc?iBo
)'H Lectra aleatoria
))H Escritra aleatoria
;andles
&CH Crear arc?iBo
&DH Abrir arc?iBo
&EH Cierra mane;ador de arc?iBo
&1H Lectra desde arc?iBo@dispositiBo
/(H Escritra en arc?iBo@dispositiBo
/)H MoBer apntador de lectra@escritra en arc?iBo
Funcin ;2'
Uso0
Desplie%a n caracter a la pantalla.
Registros de $$a"ada0
AH H ()H
DL H 0alor del caracter a desple%ar.
Registros de retorno0
2in%no
Esta =nci$n nos desplie%a el caracter c#o codi%o ?eEa%esimal
corresponde al Balor almacenado en el re%istro DL! no se modi=ica nin%<n
re%istro al tiliAar este comando.
Es recomendado el so de la =nci$n /(H de la misma interrpci$n en
l%ar de esta =nci$n.
Funcin ;B'
Uso0
Desplie%a na cadena de carateres en la pantalla.
Registros de $$a"ada0
AH H (*H
DS:D8 H Direcci$n de inicio de na cadena de caracteres
Registros de retorno0
2in%no.
Esta =nci$n desplie%a los caracteres! no a no! desde la direcci$n
indicada en el re%istro DS:D8 ?asta encontrar n caracter C! :e es
interpretado como el =inal de la cadena.
Se recomienda tiliAar la =nci$n /(H en l%ar de esta =nci$n.
Funcin 4;'
Uso0
Escribir a n dispositiBo o a n arc?iBo.
Registros de $$a"ada0
AH H /(H
78 H 0>a de comnicaci$n
C8 H Cantidad de b#tes a escribir
DS:D8 H Direcci$n del inicio de los datos a escribir
Registros de retorno0
C1 H ( si no ?bo error
A8 H 2<mero de b#tes escritos
C1 H ' si ?bo error
A8 H C$di%o de error
El so de esta =nci$n para desple%ar in=ormaci$n en pantalla se realiAa
dandole al re%istro 78 el Balor de ' :e es el Balor preasi%nado al Bideo
por el sistema operatiBo MSIDOS.
Funcin ;1'
Uso0
Leer n caracter del teclado # desple%arlo.
Registros de $$a"ada0
AH H ('H
Registros de retorno0
AL H Caracter le>do
Con esta =nci$n es m# sencillo leer n caracter del teclado! el c$di%o
?eEadecimal del caracter le>do se %arda en el re%istro AL. En caso de :e
sea n caracter eEtendido el re%istro AL contendra el Balor de ( # serF
necesario llamar de neBo a la =nci$n para obtener el c$di%o de este
caracter.
Funcin ;0'
Uso0
Leer caracteres del teclado # almacenarlos en n b==er.
Registros de $$a"ada0
AH H (AH
DS:D8 H Direcci$n del Frea de almacenamiento
7JTE ( H Cantidad de b#tes en el Frea
7JTE ' H Cantidad de b#tes le>dos
desde 7JTE ) ?asta 7JTE ( K ) H caracteres le>dos
Registros de retorno0
2in%no
Los caracteres son le>dos # almacenados en n espacio prede=inido de
memoria. La estrctra de este espacio le indica :e en el primer b#te del
mismo se indican cantos caracteres serFn le>dos. En el se%ndo b#te se
almacena el n<mero de caracteres :e #a se le#eron! # del tercer b#te en
adelante se escriben los caracteres le>dos.
Cando se ?an almacenado todos los caracteres indicados menos no la
bocina sena # cal:ier caracter adicional es i%norado. Para terminar la
captra de la cadena es necesario darle LE2TERM.
Funcin 3F'
Uso0
Leer in=ormaci$n de n dispositiBo o arc?iBo.
Registros de $$a"ada0
AH H &1H
78 H 2<mero asi%nado al dispositiBo
C8 H 2<mero de b#tes a procesar
DS:D8 H Direcci$n del Frea de almacenamiento
Registros de retorno0
C1 H ( si no ?a# error # A8 H n<mero de b#tes leidos.
C1 H ' si ?a# error # A8 contendra el c$di%o del error.
Funcin ;F'
Uso0
Abrir arc?iBo 1C7
Registros de $$a"ada0
AH H (1H
DS:D8 H Apntador a n 1C7
Registros de retorno0
AL H ((H si no ?bo problema! de lo contrario re%resa (11H
Funcin 14'
Uso0
Leer secencialmente n arc?iBo 1C7.
Registros de $$a"ada0
AH H '/H
DS:D8 H Apntador a n 1C7 #a abierto.
Registros de retorno0
AL H ( si no ?bo errores! de lo contrario se re%resara el c$di%o
correspondiente de error: ' error al =inal del arc?iBo! ) error en la estrctra
del 1C7 # & error de lectra parcial.
Esta =nci$n lo :e ?ace es :e lee el si%iente blo:e de in=ormaci$n a
partir de la direcci$n dada por DS:D8! # actaliAa este re%istro.
Funcin 1#'
Uso0
Escribir secencialmente a n arc?iBo 1C7
Registros de $$a"ada0
AH H '.H
DS:D8 H Apntador a n 1C7 #a abierto
Registros de retorno0
AL H ((H si no ?bo errores! de lo contrario contendra el c$di%o del error:
' disco lleno o arc?iBo de solo lectra! ) error en la =ormaci$n o
especi=icaci$n del 1C7.
La =nci$n '.H desp"s de escribir el re%istro al blo:e actal actaliAa el
1C7.
Funcin 1.'
Uso0
Crear n arc?iBo 1C7.
Registros de $$a"ada0
AH H '-H
DS:D8 H Apntador a n 1C7 #a abierto.
Registros de retorno0
AL H ((H si no ?bo errores! de lo contrario contendra el Balor (11H
Se basa en la in=ormaci$n proBeida en n 1C7 para crear n arc?iBo en el
disco.
Funcin 21'
Uso0
Leer en =orma aleatoria n arc?iBo 1C7.
Registros de $$a"ada0
AH H )'H
DS:D8 H Apntador a n 1C7 #a abierto.
Registros de retorno0
A H ((H si no ?bo error! de lo contrario AH contendra el c$di%o del error:
' si es =in de arc?iBo! ) si eEiste error de especi=icaci$n de 1C7 # & si se
le#$ n re%istro parcial o el apntador del arc?iBo se encentra al =inal del
mismo.
Esta =nci$n lee el re%istro especi=icado por los campos del blo:e actal #
re%istro actal de n 1C7 abierto # coloca la in=ormaci$n en el DTA 5Frea
de trans=erencia de disco o DisN Trans=er Area6.
Funcin 22'
Uso0
Escribir en =orma aleatoria en n arc?iBo 1C7.
Registros de $$a"ada0
AH H ))H
DS:D8 H Apntador a n 1C7 abierto.
Registros de retorno0
AL H ((H si no ?bo error! de lo contrario contendrF el c$di%o del error: '
si el disco estF lleno o es arc?iBo de solo lectra # ) si ?a# error en la
especi=icaci$n de 1C7.
Escribe el re%istro especi=icado por los campos del blo:e actal # re%istro
actal de n 1C7 abierto. Escribe dic?a in=ormaci$n a partir del contenido
del DTA 5Frea de trans=erencia de disco6.
Funcin 3'
Uso0
Crear n arc?iBo si no eEiste o de;arlo en lon%itd ( si eEiste. 5Handle6
Registros de $$a"ada0
AH H &CH
CH H Atribto de arc?iBo
DS:D8 H Apntador a na especi=icai$n ASCII3
Registros de retorno0
C1 H ( # A8 el n<mero asi%nado al ?andle si no ?a# error! en caso de
?aberlo C1 serF ' # A8 contendra el c$di%o de error: & rta no encontrada!
/ no ?a# ?andles disponibles para asi%nar # . acceso ne%ado.
Esta =nci$n sstit#e a la '-H. El nombre del arc?iBo es especi=icado en
na cadena ASCII3! la cal tiene como caracter>stica la de ser na cadena
de b#tes conBencional terminada con n caracter (.
El arc?iBo creado contendra los atribtos de=inidos en el re%istro C8 en la
si%iente =orma:
0alor Atribtos
((H 2ormal
()H Escondido
(/H Sistema
(-H Escondido # de sistema
El arc?iBo se crea con los permisos de lectra # escritra. 2o es posible
crear directorios tiliAando esta =nci$n.
Funcin 3)'
Uso0
Abre n arc?iBo # re%rese n ?andle
Registros de $$a"ada0
AH H &DH
AL H modo de acceso
DS:D8 H Apntador a na especi=icaci$n ASCII3
Registros de retorno0
C1 H ( # A8 H n<mero de ?andle si no ?a# errores! de lo contrario C1 H '
# A8 H c$di%o de error: ('H si no es BFlida la =nci$n! ()H si no se
encontr$ el arc?iBo! (&H si no se encontrOo la rta! (/H si no ?a# ?andles
disponibles! (.H en caso de acceso ne%ado! # (CH si el c$di%o de acceso
no es BFlido.
El ?andle re%resado es de '- bits.
El c$di%o de acceso se especi=ica en la si%iente =orma:
7ITS
, - . / & ) '
. . . . ( ( ( Solo lectra
. . . . ( ( ' Solo escritra
. . . . ( ' ( Lectra@Escritra
. . . 8 . . . RESER0ADO
Funcin 3E'
Uso0
Cerrar arc?iBo 5Handle6.
Registros de $$a"ada0
AH H &EH
78 H Handle asi%nado
Registros de retorno0
C1 H ( si no ?bo errores! en caso contrario C1 serF ' # A8 contendrF el
c$di%o de error: (-H si el ?andle es inBFlido.
Esta =nci$n actaliAa el arc?iBo # libera o de;a disponible el ?andle :e
estaba tiliAando.
Funcin 3F'
Uso0
Leer de n arc?iBo abierto na cantdad de=inida de b#tes # los almacena en
n b==er espec>=ico.
Registros de $$a"ada0
AH H &1H
78 H Handle asi%nado
C8 H Cantidad de b#tes a leer
DS:D8 H Apntador a n Frea de traba;o.
Registros de retorno0
C1 H ( # A8 H n<mero de b#tes leidos si no ?bo error! en caso contrario
C1 H ' # A8 H c$di%o de error: (.H si acceso ne%ado # (-H si no es BFlido
el ?andle.
Funcin 4;'
Uso0
Escribe a n arc?iBo #a abierto na cierta cantidad de b#tes a partir del
b==er desi%nado.
Registros de $$a"ada0
AH H /(H
78 H Handle asi%nado
C8 H Cantidad de b#tes a escribir.
DS:D8 H Apntador al b==er de datos.
Registros de retorno0
C1 H ( # A8 H n<mero de b#tes escritos si no ?a# errores! en caso de
eEistir C1 H ' # A8 H c$di%o del error: (.H si el acceso es ne%ado # (-H si
el ?andle es inBFlido.
Funcin 42'
Uso0
MoBer apntador al arc?iBo 5Handle6
Registros de $$a"ada0
AH H /)H
AL H m"todo tiliAado
78 H Handle asi%nado
C8 H La parte mFs si%ni=icatiBa del o==set
D8 H La parte menos si%ni=icatiBa del o==set
Registros de retorno0
C1 H ( # D8:A8 H la neBa posici$n del apntador. En caso de error C1
serF ' # A8 H c$di%o de error: ('H si la =nci$n no es BFlida # (-H si el
?andle no es BFlido.
El m"todo tiliAado se con=i%ra como si%e:
0alor de AL M"todo
((H A partir del principio del arc?iBo
('H A partir de la posici$n actal
()H A partir del =inal del arc?iBo
Interrupcin 1;'
Prop$sito: Llamar a diBersas =nciones de Bideo del 7IOS.
SintaEis:
Int ,'&
Esta interrpci$n tiene diBersas =nciones! todas ellas nos sirBen para
controlar la entrada # salida de Bideo! la =orma de acceso a cada na de las
opciones es por medio del re%istro AH.
En este ttorial nicamente Beremos al%nas de las =nciones de esta
interrpci$n.

1nciones comnes de la interrpci$n '(H.
()H Selecci$n de posici$n del crsor
(*H Escribe atribto # caracter en el crsor
(AH Escribe caracter en la posici$n del crsor
(EH Escritra de caracteres en modo al=anm"rico
Funcin ;2'
Uso0
Posiciona el crsor en la pantalla dentro de las coordenadas BFlidas de
teEto.
Registros de $$a"ada0
AH H ()H
7H H PF%ina de Bideo en la :e se posicionarF el crsor.
DH H 1ila
DL H Colmna
Registros de retorno0
2in%no.
Las posiciones de localiAaci$n del crsor son de=inidas por coordenadas
iniciando en (!(! :e corresponde a la es:ina sperior iA:ierda ?asta
,*!)/ correspondientes a la es:ina in=erior derec?a. Tenemos entonces :e
los Balores :e peden tomar los re%istros DH # DL en modo de teEto de
+( E ). son de ( ?asta )/ # de ( ?asta ,* respectiBamente.
Funcin ;B'
Uso0
Desple%ar n caracter n determinado n<mero de Beces con n atribto
de=inido empeAando en la posici$n actal del crsor.
Registros de $$a"ada0
AH H (*H
AL H Caracter a desple%ar
7H H PF%ina de Bideo en donde se desple%arF
7L H Atribto a sar
2<mero de repeticiones.
Registros de retorno0
2in%no
Esta =nci$n desplie%a n caracter el n<mero de Beces especi=icado en C8
pero sin cambiar la posici$n del crsor en la pantalla.
Funcin ;0'
Uso0
Desple%ar n caracter en la posici$n actal del crsor.
Registros de $$a"ada0
AH H (AH
AL H Caracter a desple%ar
7H H PF%ina en donde desple%ar
7L H Color a sar 5s$lo en %rF=icos6.
C8 H 2<mero de repeticiones
Registros de retorno0
2in%no.
La <nica di=erencia entre esta =nci$n # la anterior es :e "sta no permite
modi=icar los atribtos! simplemente sa los atribtos actales.
Tampoco se altera la posici$n del crsor con esta =nci$n.
Funcin ;E'
Uso0
Deple%ar n caracter en la pantalla actaliAando la posici$n del crsor.
Registros de $$a"ada0
AH H (EH
AL H Caracter a desple%ar
7H H PF%ina donde se desple%ara el caracter
7L H Color a sar 5solo en %rF=icos6
Registros de retorno0
2in%no
Interrupcin 1.'
Prop$sito: Mane;ar la entrada@salida del teclado.
SintaEis:
Int ,1&
0eremos dos opciones de la interrpci$n '-H! estas opciones! al i%al :e
las de otras interrpciones! son llamadas tiliAando el re%istro AH.

1nciones de la interrpci$n '-H
((H Lee n caracter de teclado
('H Lee estado del teclado
Funcin ;;'
Uso0
Leer n caracter del teclado.
Registros de $$a"ada0
AH H ((H
Registros de retorno0
AH H c$di%o de barrido 5scan code6 del teclado
AL H 0alor ASCII del caracter.
Cando se tiliAa esta interrpci$n se detiene la e;ecci$n del pro%rama
?asta :e se introdAca n caracter desde el teclado! si la tecla presionada
es n caracter ASCII s Balor serF %ardado en el re%istro AH! de lo
contrario el c$di%o de barrido serF %ardado en AL # AH contendrF el Balor
((H.
El c$di%o de barrido =" creado para mane;ar las teclas :e no tienen na
representaci$n ASCII como LALTM! LCO2TROLM! las teclas de =nci$n! etc.
Funcin ;1'
Uso0
Leer estado del teclado.
Registros de $$a"ada0
AH H ('H
Registros de retorno0
Si la bandera de cero! 31! estF apa%ada si%ni=ica :e ?a# in=ormaci$n en el
b==er! si se encentra prendida es :e no ?a# teclas pendientes.
En caso de eEistir in=ormaci$n el re%istro AH contendrF el c$di%o de
la tecla %ardada en el b==er.
Interrupcin 1M'
Prop$sito: Mane;ar la entrada@salida de la impresora.
SintaEis:
Int ,D&
Esta interrpci$n es tiliAada para escribir caracteres a la impresora!
inicialiAarla # leer s estado.

1nciones de la interrpci$n '-H
((H Imprime n caracter ASCII
('H InicialiAa la impresora
()H Proporciona el estado de la impresora
Funcin ;;'
Uso0
Escribir n caracter a la impresora.
Registros de $$a"ada0
AH H ((H
AL H Caracter a imprimir
D8 H Perto a tiliAar
Registros de retorno0
AH H Estado de la impresora.
El perto a tiliAar! de=inido en D8! se especi=ica as>: LPT' H (! LPT) H '!
LPT& H ) ...
El estado de la impresora se codi=ica bit por bit como si%e:
7IT '@( SI42I1ICADO
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
( ' Se a%ot$ el tiempo de espera
' I
) I
& ' Error de entrada@salida
/ ' Impresora seleccionada
. ' Papel a%otado
- ' Reconocimiento de comnicaci$n
, ' La impresora se encentra libre
Los bits ' # ) no son releBantes.
La ma#oria de los 7IOS nicamente soportan & pertos paralelos an:e
eEisten al%nos :e soportan /.
Funcin ;1'
Uso0
InicialiAar n perto de impresi$n.
Registros de $$a"ada0
AH H ('H
D8 H Perto a tiliAar
Registros de retorno0
AH H Stats de la impresora
El perto a tiliAar! de=inido en D8! se especi=ica as>: LPT' H (! LPT) H '!
etc.
El estado de la impresora se codi=ica bit por bit como si%e:
7IT '@( SI42I1ICADO
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
( ' Se a%ot$ el tiempo de espera
' I
) I
& ' Error de entrada@salida
/ ' Impresora seleccionada
. ' Papel a%otado
- ' Reconocimiento de comnicaci$n
, ' La impresora se encentra libre
Los bits ' # ) no son releBantes.
La ma#oria de los 7IOS nicamente soportan & pertos paralelos an:e
eEisten al%nos :e soportan /.
Funcin ;2'
Uso0
Obtener el estado de la impresora.
Registros de $$a"ada0
AH H ('H
D8 H Perto a tiliAar
Registros de retorno0
AH H Stats de la impresora.
El perto a tiliAar! de=inido en D8! se especi=ica as>: LPT' H (! LPT) H '!
etc.
El estado de la impresora se codi=ica bit por bit como si%e:
7IT '@( SI42I1ICADO
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
( ' Se a%ot$ el tiempo de espera
' I
) I
& ' Error de entrada@salida
/ ' Impresora seleccionada
. ' Papel a%otado
- ' Reconocimiento de comnicaci$n
, ' La impresora se encentra libre
Los bits ' # ) no son releBantes.
La ma#oria de los 7IOS nicamente soportan & pertos paralelos an:e
eEisten al%nos :e soportan /.
Introduccin
Todo el semestre ?emos sado interrpciones para ?acer llamado a serBicios de DOS #
7IOSP ?asta a?ora! principalmente las ?emos Bisto como =ormas de llamar al sistema
operatiBo.
La raA$n por la :e este sistema es llamado Dinterrpci$nD es precisamente por:e
=ncionan interrmpiendo la e;ecci$n del pro%rama en n pnto dado! e;ectan na
labor determinada # re%resan a donde estaban. Es como estar traba;ando en la tarea!
recibir na llamada tele=$nica! atenderla # al terminar lo%rar re%resar eEactamente al
estado preBio para continar con la tarea
EEisten dos tipos de interrpciones:
Interrpciones de ?ardCare: son las mFs primitiBas # ori%en del concepto. EstFn
diseGadas para :e el procesador peda atender a los dispositiBos a<n a mitad de
la e;ecci$n de n pro%rama :e no estF detectFndolos.
Interrpciones de so=tCare: permiten al so=tCare emlar las operaciones :e se
?acen al atender el ?ardCare. Tambi"n permiten contener na inter=ase niBersal
a los serBicios del sistema operatiBo! :e son independientes de las Bersiones del
sistema operatiBo.
Cando n dispositiBo re:iere atenci$n del CPU! le aBisa por medio de na seGal
5electr$nica6 :e llamamos DInterrpci$nD. Esta seGal =>sicamente lle%a a n pin del
CPUP cando esto ocrre! el CPU termina la instrcci$n :e estaba e;ectando! salBa en
la pila la direcci$n actal 5CS! IP6 para poder continar mFs adelante en el pnto donde
se :ed$! # salta a e;ectar el c$di%o de atenci$n de la interrpci$n! :e %eneralmente
es parte del sistema operatiBo. Dado :e el c$di%o :e atiende la interrpci$n pede
encontrarse en distintos l%ares de memoria! se re:iere al%<n mecanismo para :e el
CPU encentre e=icientemente donde continar la atenci$n de la interrpci$n. Este
mecanismo es conocido como Dtabla de interrpcionesD! # se basa en reconocer por n
c$di%o a cada interrpci$n! el cal serF sado para la b<s:eda en esta tabla. Esta tabla
de interrpciones la encentra el +(E+- al inicio de la memoria! en el primer ' Qb. EstF
=ormada por n arre%lo de ).- direcciones! cada na de &) bits! pes contiene al
se%mento # al desplaAamiento 5en orden inBerso! como es costmbre en Intel6. De modo
:e si se recibe el c$di%o de interrpci$n (! se conslta la in=ormaci$n en la localidad
(:(! # de a?> se obtienen el se%mento # el desplaAamiento correspondientes. Si se recibe
el c$di%o de interrpci$n +! se conslta la in=ormaci$n en la localidad (:)(? 5)(? H &) H
+ por /! dado :e cada entrada en el arre%lo tiene / b#tes6! # de a?> se e;ecta el c$di%o
correspondiente. Al terminar el c$di%o de atenci$n de la interrpci$n! e;ecta na
instrcci$n IRET! :e re%resa el pnto de e;ecci$n a donde se ?ab>a :edado!
1ncionan de n modo similar a las de ?ardCare! solamente :e en BeA de :e n
dispositiBo enB>e la seGal! lo ?ace el pro%rama tiliAando la instrcci$n I2T. Esta
instrcci$n casa :e se e;ecte todo el proceso anterior! pero seGalada por n
pro%rama.
Progra)as residentes A #rogra)as transientes
La ma#or parte de los pro%ramas con los :e ?emos traba;ado son pro%ramas
DtransientesD! es decir! se car%an en memoria! se e;ectan # al terminar s e;ecci$n!
re%resan el control al sistema operatiBo # se eliminan de memoria.
Un pro%rama residente 5Terminate and Sta# Resident! de a?> las si%las TSR
com<nmente sadas6 consiste en :e n pro%rama se car%a en memoria! se e;ecta!
prepara la e;ecci$n de la se%nda secci$n 5por medio de n control =ino sobre las
interrpciones6! # libera solamente la memoria del c$di%o de preparaci$n. De este
modo! na secci$n de s c$di%o :eda DlatenteD! en espera de ser disparado por n
eBento: %eneralmente! na interrpci$n.
Entre las aplicaciones de los pro%ramas residentes tenemos:
El sistema operatiBo DOS: :eda en memoria esperando a :e otro pro%rama lo
llame! para entonces e;ectar n determinado c$di%o.
Pro%ramas :e esperen na combinaci$n de teclas! para entonces realiAar s
acci$n. Por e;emplo! sacar n men< con acciones espec>=icas.
Pro%ramas :e sstit#an la =ncionalidad del sistema operatiBo. Por e;emplo!
las Bersiones ) a & de 2oBell 2etCare se car%aban desp"s de DOS! # le
aneEaban la capacidad de acceder a nidades de red.
Progra)acin de TSRs
Para pro%ramar n TSR! tiliAaremos na serie de serBicios de interrpciones :e nos
=acilitan la capacidad de de;ar na secci$n del pro%rama actiBa! as> como cambiar la
direcci$n a la :e apnta na interrpci$n. Resmiendo! tendremos dos %randes
secciones en n pro%rama residente:
La secci$n transiente! :e lleBa a cabo la inicialiAaci$n re:erida # prepara los
Bectores de interrpci$n 5las direcciones :e estFn en la tabla6! de modo :e
apnten a los procedimientos del pro%rama residente :e Ban a atenderlas.
La secci$n residente! la cal contiene los procedimientos de atenci$n a las
interrpciones. Terminar n pro%rama # de;ar na secci$n residente en memoria.
Cando llamamos al serBicio /C? de la I2T )'?! toda la memoria :e ocp$ nestro
pro%rama se marca como libre # el sistema operatiBo pede retiliAarla. Esto ser>a
desastroso en el caso de n pro%rama residente! pes el c$di%o :e atiende
interrpciones podr>a sobreescribirse! con resltados impredecibles. Por ello! se debe
terminar el pro%rama de modo :e de;e ocpada s memoria. Para ello! eEisten Barias
opciones:
La interrpci$n ),?! :e termina el pro%rama # de;a residente en memoria la
Aona indicada por DS:D8! donde DS apnta al se%mento donde se encentra el
c$di%o! # D8 al desplaAamiento =inal del c$di%o :e debe respetarse. De este
modo! no se liberarF memoria indebidamente.
SerBicios de la )'?! :e no Beremos en este crso.
Interce#tar una interru#cin
Para :e se e;ecte n procedimiento :e nosotros desarrollamos! en atenci$n de na
interrpci$n! es com<n sar la t"cnica de DinterceptarD! :e consiste en %ardar el Bector
anterior de interrpci$n! cambiarlo para :e apnte a nestro pro%rama residente! # al
=inal de nestra rtina residente! llamar al Bector anterior. Esto conserBa la
=ncionalidad re%lar! # al mismo tiempo nos permite realiAar actiBidades adicionales.
Cabe aclarar al%nas de las interrpciones importantes :e no ?emos comentado por no
ser tan sadas en so=tCare:
I2T (+? I es llamada por el relo; del sistema! '+.) Beces por se%ndo! # entre
otras cosas lleBa el tiempo de 7IOS. Podemos interceptarla 5no sstitirla6 para
:e nestro pro%rama realice al%<n proceso peri$dicamente.
I2T (*? I es llamada por el teclado! cada BeA :e se recibe na tecla.
I2T (C? I de so=tCare! es llamada por la interrpci$n del relo;.
ObBiamente ?a# mc?as otras! sirBan estas como e;emplo.
Se peden interceptar las interrpciones %eneradas por pertos seriales! paralelos!
diBisi$n entre (! na instrcci$n inBFlida! etc"tera.
Sustituir una interru#cin
En ocasiones :eremos reemplaAar completamente el =ncionamiento de na
interrpci$nP en tal caso! sstitiremos el Bector de interrpci$n para :e apnte a
nestro c$di%o! # deberemos terminar la e;ecci$n de nestro procedimiento con n
IRET! :e permitirF re%resar al pnto donde se e;ect$ nestra interrpci$n. Por otro
lado! es conBeniente ase%rarnos de conserBar el Balor de los re%istros 5%eneralmente
tiliAando la pila6 :e modi=i:emos! de este modo la interrpci$n no a=ecta la
e;ecci$n de otros procesos. Acciones BFlidas dentro de na interrpci$n En na
interrpci$n podemos tiliAar otros serBicios! principalmente de acceso directo al
?ardCare. Sin embar%o! como DOS es n sistema operatiBo :e no =e diseGado para
ser mltitarea! diBersas =nciones no soportan la capacidad de ser reentrantesP esto es!
no peden ser llamadas otra BeA si estFn a medio e;ectarse. Pero como na interrpci$n
pede ocrrir en cal:ier momento! pede inclso ocrrir cando estF na =nci$n a
medio e;ectarse. Por tanto! esto casar>a inestabilidad del sistema. EEisten dos m"todos
para eBitar esta inestabilidad:
2o sar interrpciones! :e es bastante com<n # apropiado pes tambi"n tiene
%randes bene=icios de desempeGoP cando n pro%rama residente no re:iere
?acer =nciones comple;as :e est"n implementadas en el sistema operatiBo!
sino =nciones simples tales como pintar en pantalla! peden codi=icarse estas
=nciones con acceso directo al ?ardCare # de este modo se eBita el problema.
ReBisar si estF na =nci$n del sistema en e;ecci$n! para no BolBer a llamarla a
mitad de la e;ecci$n. Esto en DOS se ?ace por medio de n m"todo :e drante
mc?o tiempo no estaba docmentado: la bandera InDOS. Para obtenerla! se
llama al serBicio &/? de la interrpci$n )'?! # nos de;a en ES:78 la direcci$n de
n b#te :e es esta bandera InDOS. El =ncionamiento de la bandera es sencillo:
si estF en (! no estamos a media =nci$n de DOS! por lo tanto! podemos sin
problemas e;ectar na =nci$n DOS. De lo contrario! si el Balor es ' o sperior!
no debemos e;ectar la =nci$n DOS en este momento # nestro pro%rama TSR
deberF posponer el so de esta =nci$n! por lo :e probablemente deberemos
mane;ar la interrpci$n del relo; para intentar desp"s de n tiempo.
EEisten al%nas precaciones adicionales :e tomar en TSRs! sin embar%o! como no
siempre son re:eridas! se ?ace la re=erencia al PC Interno # otros libros de la
biblio%ra=>a.
?ttp:@@CCC.siner%iaICeb.com.mE@clases@asm*,(+@Temas@clase)-.?tm
Eje)#los
'. Pro%rama residente m# simple
; RESIDE.ASM: Pequeo programa residente
; Se ejecuta, y cuando se presiona tr! " # in$ierte !os co!ores de
%ondo y %rente
; en toda !a panta!!a, usando !a memoria de $ideo para modi%icar e!
atri&uto.
;
Pus'A Macro
P(S) A*
P(S) +*
P(S) *
P(S) D*
P(S) SI
P(S) DI
P(S) DS
P(S) ES
EndM
P,PA Macro
P,P ES
P,P DS
P,P DI
P,P SI
P,P D*
P,P *
P,P +*
P,P A*
EndM
; +u%%er de! tec!ado de +I,S
+iosData Segment A- ./'
,R0 1A'
)ead D2 3
-ai! D2 3
+u%%er D2 14 D(P 536
+u%%er7End 8a&e! 2ord
+iosData EndS
; Segmento de c9digo
ode Segment
Assume S:ode
Assume DS:ode
Assume SS:ode
Assume ES:ode
,R0 1//'
Start:
:MP Inicio
; ;aria&!es
,!dInt 8a&e! 2ord
DirAnt DD 3
+andera8!eno D+ /
; Rutina de atenci9n de Interrupci9n
ParteRes Proc #ear
Assume S:ode,DS:ode
Pus'A
Pus'<
A88 S:DirAnt ; IMP,R-A#-E: Es una !!amada <AR a !a
rutina que
; anteriormente atend=a a! tec!ado; es
necesaria,
; pues esa rutina se encarga de manejar
e! &u%%er
; de tec!ado y yo !o $oy a usar. ,tros
programas
; posi&!emente en $e> de A88 'agan un
; :MP <AR ?S:DirAnt@
; DESP(AS de rea!i>ar su %unci9n
ASS(ME DS:+iosData
M,; +*,+iosData
M,; DS,+*
M,; +*,-ai!
MP +*,)ead
:E <in
A88 'eca-ec!a
MP A*,B1/E' ; C#
:#E <in
M,; -ai!,+*
; In$ertir co!or de panta!!a
M,; *,D///
M,; A*,/+E//'
M,; ES,A*
M,; DI,/
ic!o:
M,; A*,ES:?DI@
*,R A),/F<' ; In$ierte atri&uto, todos !os &its
correspondientes a co!ores
M,; ES:?DI@,A*
I# DI
I# DI
8,,P ic!o
<in:PopA
IRE-
ParteRes EndP
'eca-ec!a Proc #ear
M,; D*,-ai!
S(+ D*,D
MP D*,,<<SE- +u%%er
:AE ,G
M,; D*,,<<SE- +u%%er7End
S(+ D*,D
,G: M,; +*,D*
M,; A*,?+*@
RE-
'eca-ec!a EndP
Inicio:
P(S) DS
P(S) S
P,P DS
8I
P(S) ES
*,R A*,A*
M,; ES,A*
M,; DI,B4 ; HI. ; Pues estamos interceptando !a interrupci9n H
5re!oj6
8EA +*,ParteRes
M,; A*,ES:?DI@
M,; ,!dInt,A*
M,; ES:?DI@,+*
M,; A*,ES:?DI"D@
M,; ,!dInt"D,A*
M,; ES:?DI"D@,DS
P,P ES
S-I
8EA D*,<inD
I#- DF'
RE-
<inD:
ode EndS
E#D Start
5ttp7$$(((.sinergiaJ
(eb.com.m4$clases$asmBM;H$programa$reside.asm
'. Pro%rama de relo; residente
; Programa de re!oj residente
; +runo 0uardia Ro&!es.
.M,DE8 -I#J ; .,M
; Se ensam&!a con -ASM RE8,:RES
; -8I#G RE8,:RES Kt L ,M 5$er -8I#G para ayuda6
.,DE
Pus'A Macro
P(S) A*
P(S) +*
P(S) *
P(S) D*
P(S) SI
P(S) DI
P(S) DS
P(S) ES
EndM
P,PA Macro
P,P ES
P,P DS
P,P DI
P,P SI
P,P D*
P,P *
P,P +*
P,P A*
EndM
,R0 1//'
Start: :MP Inicia!i>a
; ;aria&!es
)oras D+ 3
Minutos D+ 3
Segundos D+ 3
PM<!ag D+ /
Di$)i D2 /
Di$8o D2 /
Resu!t)i D2 /
Resu!t8o D2 /
Actua! D+ /
Di$isor D+ /
ontador D+ /
8eeRe!oj Proc #ear
; Regresa en D*:A* e! $a!or actua! de! re!oj contador interno
de +I,S.
P(S) ES
M,; A*,./'
M,; ES,A*
M,; DI,4'
M,; A*,ES:?DI@
P(S) A*
ADD DI,D
M,; A*,ES:?DI@
P,P D*
P,P ES
RE-
8eeRe!oj EndP
Do&!eDi$ Proc #ear
; )ace una di$isi9n de Do&!e Pa!a&ra entre +yte dejando Do&!e
Pa!a&ra
; Rutina para estar orgu!!oso, %ue !atosa y estM &asada en
corrimientos, ta!
; como se di$ide &inario a mano.
*,R A*,A*
M,; Actua!,A8
M,; Resu!t8o,A*
M,; Resu!t)i,A*
M,; *,BB ; BD cic!os
ic!o: M,; A8,Actua!
MP A8,Di$isor
P(S)<
:+ #oarry
S- ; Encender e! arry si es mayor o igua!
:MP S),R- Rotar
#oarry: 8 ; Apagar e! arry
Rotar: R8 Resu!t8o,1
R8 Resu!t)i,1
P,P<
:+ ontic!os
; Si Actua! es menor a! Di$isor, restar Di$isor a! Actua!
S(+ A8,Di$isor
M,; Actua!,A8
ontic!os:
; Rotar e! di$idendo
R,8 Di$8o,1
R8 Di$)i,1
; E! &it m s signi%icati$o entra a Actua!
R8 Actua!,1
8,,P ic!o
; En Actua! quedN e! residuo
RE-
Do&!eDi$ EndP
; a!cu!ar !a 'ora en &ase a! $a!or de! contador de re!oj de +I,S
a!cu!aD Proc #ear
; Primero mu!tip!icar D*:A* por O
*)0 A*,D*
P(S) D*
P(S) A*
P(S) D*
P(S) A*
R,8 A*,1
R8 D*,1
R,8 A*,1
R8 D*,1
P,P +*
P,P *
ADD A*,+*
AD D*,*
; A'ora, di$idir D*:A* entre H1
M,; Di$)i,D*
M,; Di$8o,A*
M,; Di$isor,H1
A88 Do&!eDi$
; a!cu!ar e! %actor de correcciNn como ic!osKO/D4H
; AproPimadamente cada O//// cic!os se ade!anta un segundo
; 8as prue&as que 'ice dan resu!tados entre O/D// y O/B//
; omo %actor promedio usarQ O/D4/
; on esto e! error se reduce a 1 segundo, 1 segundo y medio
; E! %actor es m s ePacto por !a noc'e, mientras que e!
; c !cu!o de ic!osIOKH1 es m s ePacto temprano, !o que !os
; equi!i&ra &astante.
P,P A*
P,P D*
M,; *,O/D4/
DI; *
M,; +*,A*
; Sacar e! resu!tado de !a do&!e di$isiNn
M,; D*,Resu!t)i
M,; A*,Resu!t8o
8
S(+ A*,+* ; Restar %actor de correcciNn
S++ D*,/
; Di$idir entre 4/ para o&tener minutos y segundos.
M,; *,4/
DI; *
M,; Segundos,D8
DI; 8
M,; Minutos,A)
M,; )oras,A8
; Esta&!ecer !a &andera de AMKPM
M,; PM<!ag,/
MP )oras,1D
:8 <ina!cu!a
I# PM<!ag
MP )oras,1D
:E <ina!cu!a
S(+ )oras,1D
<ina!cu!a:
RE-
a!cu!aD EndP
; Pintar e! $a!or de dos d=gitos en !a posici9n actua! ES:DI
Desp+yte Proc #ear
M,; 8,1/
*,R A),A)
DI; 8
ADD A*,B/B/'
M,; +8,A)
M,; A),B1 ; +!anco so&re a>u!
M,; ES:?DI@,A*
ADD DI,D
M,; A8,+8
M,; ES:?DI@,A*
ADD DI,D
RE-
Desp+yte EndP
; Pintar e! re!oj por acceso directo a memoria
Desp!iega Proc #ear
P(S) ES
M,; A*,/+E//'
M,; ES,A*
M,; DI,1BE ; o!umna E/R11 de anc'oL4HID &ytes
cKco!umnaL1BE
M,; A8,)oras
A88 Desp+yte
M,; A8,S:S
M,; ES:?DI@,A*
ADD DI,D
M,; A8,Minutos
A88 Desp+yte
M,; A8,S:S
M,; ES:?DI@,A*
ADD DI,D
M,; A8,Segundos
A88 Desp+yte
M,; A8,S S
M,; ES:?DI@,A*
ADD DI,D
M,; A8,SaS
MP PM<!ag,1
:#E ImpAMPM
M,; A8,SpS
ImpAMPM: M,; ES:?DI@,A*
ADD DI,D
M,; A8,SmS
M,; ES:?DI@,A*
P,P ES
RE-
Desp!iega EndP
; Rutina residenteTTT
; Podr=a ser PR,
Inicio: P(S)A ; 0uardar todos !os registros
P(S)< ; y ademMs !as &anderas
A88 8eeRe!oj
A88 a!cu!aD
A88 Desp!iega
Sa!ir: P,P< ; Restaurar &anderas
P,PA ; y registros
IRE- ; -erminar rutina de interrupci9n; esto so!amente
porque es !a
; interrupci9n 1', que no tiene una %unci9n
prede%inida. Si %uera
; otra, 'a&r=a que sa!tar a !a rutina que anteriormente
atend=a !a
; interrupci9n
; Parte no residente de! programa; de&e ponerse a! %ina!, para que se
use !a
; Interrupci9n DF'
Inicia!i>a:
; Ajustar DS
P(S) DS
P(S) S
P,P DS
P(S) ES
; Apuntar ES a! segmento /
*,R A*,A*
M,; ES,A*
; Muy importante: Desacti$ar Interrupciones cuando $amos a
ajustar e! $ector
8I
8EA +*,Inicio
M,; A*,S
; Ajustar e! $ector de interrupci9n de! Re!oj: en +* e!
desp!a>amiento de !a
; rutina que atiende a! re!oj, en A* e! segmento.
M,; ES:?1'I.@,+*
M,; ES:?1'I."D@,A*
S-I
; Restaurar ES
P,P ES
; DS:D* apuntan a! %ina! de !a >ona que $a a quedar residente
8EA D*,Inicia!i>a
I#- DF' ; -erminar pero dejar parte residente
E#D Start
5ttp7$$(((.sinergiaJ
(eb.com.m4$clases$asmBM;H$programa$relojres.asm
1.4 Estructura de un programa en ensamblador.
Un programa en lenguaje ensamblador se compone de las siguientes partes:
rea de comentarios
Definicin del modelo de memoria
rea de datos
Cuerpo del programa
El rea de comentarios sirve para incluir comentarios acerca del programa que
se est elaborando, comienza con la directiva .COMMENT y el comentario es
colocado entre dos caracteres '*'.
La definicin del modelo de memoria es la parte donde se indica que tipo de
cdigo se va generar (16 o 32 bits). En este trabajo slo se escribirn
programas ejecutables .COM, por lo que siempre se usa la directiva .MODEL
TNY.
El rea de datos es el lugar donde deben ser declaradas las constantes y
variables del programa. Las variables son declaradas despus de la
directiva .DATA y las constantes despus de .CONST.
En el cuerpo del programa es donde se colocan las instrucciones en lenguaje
ensamblador que se encargarn de realizar las tareas deseadas. El cuerpo del
programa comienza con la directiva .CODE y termina con la directiva END.
Esta parte corresponde al Begin y End de un programa en lenguaje Pascal.
Adicionalmente se debe indicar un punto de entrada al programa. El punto de
entrada se indica por medio de una etiqueta antes de la primer instruccin real
del programa. En el ejemplo anterior el punto de entrada es NCO: y el punto
final de las instrucciones se indica por medio de la instruccin END NCO.
Cuando se requiere comentar las instrucciones de un programa, se debe
colocar un punto y coma (;) y as el ensamblador interpreta todo lo que sigue
como un comentario de una sola lnea. Si requiere comentarios de ms de una
lnea puede usar la directiva .COMMENT.
1tt#'AABBB!)onografias!co)Atra.ajos==AlenenAlenen!s1t)l
+"R3AT" DE INSTRUCCI"NES!
Un programa en lenguaje ensamblador es una serie de sentencias ejecutables
que le dicen al ensamblador que operaciones tiene que realizar.
Cada sentencia de lenguaje ensamblador esta compuesto de cuatro campos:
0",1 0",1 0",1 0",1
=1"%&E 1,E&0ID= 1,E&0=)1 1"E=T0&I1
Sin embargo, ciertas instrucciones del ensamblador no utilizan todos los
campos. El campo comentario existe para expresar propsitos o
documentacin de programacin interna y es opcional.
0",1 =1"%&E7
El campo del nombre, algunas veces denominado el campo de rtulo, asigna
un nombre simblico, a la direccin de comienzo de memoria real de una
instruccin del ensamblador. Esto permite al programador que referencie una
instruccin por nombre y elimine la necesidad de seguir la pista de direcciones
de las instrucciones, esto es especialmente til al generar cdigo reubicable. Al
utilizar una referencia simblica, el programador permite al enlazador (linker)
seleccionar en que sitio de memoria ser cargado el programa en lenguaje
ensamblador.
Aunque a cualquier instruccin se le puede dar un nombre, este campo
esta habitualmente reservado para aquellas instrucciones que sern
reverenciadas en las definiciones de datos, constantes, lazos, bifurcaciones y
llamadas a subrutinas.
Un nombre debe comenzar con un carcter alfabtico y puede contener
hasta 31 caracteres, incluyendo:
N Todas las letras de la :0 a la K- a a la 3<
N )6gitos numOricos del :; al B<
N 2os s6mbolos especiales siguientes :JP.>QR<
Debe de tenerse precaucin al seleccionar un nombre. No se puede utilizar
un nombre que coincida con una palabra reservada o directivo del
ensamblador. Si el nombre incluye un punto (.), entonces el punto debe ser el
primer carcter.
Un campo nombre puede ser un nombre simblico que represente:
N =ombre de etiEueta
N =ombre de constantes
N =ombre de +ariables
N =ombre de procedimiento
N =ombre de macro

CAMPO OPERACON:
El campo de operacin contiene un mnemotcnico para una instruccin real
del microprocesador. El mnemnico de operacin hace el cdigo ms fcil de
leer y comprender y es solamente una tabla de conversin interna del valor
binario de cdigo mquina real. Una operacin o nemotcnico, puede
representar una instruccin mquina, macroinstruccin o pseudo-operacin.
Ejemplo 7 I=IT027 "18 09- 1'
I=IT02 es un rtulo y "18 es una operacin.
Siguiendo al campo de operacin se encuentra el campo de operando, cada
operacin no solo le dice al ensamblador que instruccin debe ejecutar sino
cuantas operaciones se necesitan y de que tipo. Una operacin puede
contener una referencia a una macro tal referencia indica al ensamblador como
procesar una secuencia predefinida de cdigo.
El campo operacin, esta representado por un mnemnico. Se tienen dos tipos
de mnemnicos:
,seudo J operacin :directi+as<
digo de operacin :instrucciones<
Directivas = la directiva nos sirve para definir, variables, constantes,
macros.
nstrucciones = son los cdigos que se ejecutan durante la ejecucin del
programa.

CAMPO OPERANDO :
El campo operando contiene la posicin o posiciones donde estn los datos
que van hacer manipulados por la instruccin de la operacin, si la instruccin
requiere uno o dos operados. Los operados estn separados de la instruccin
por al menos un espacio en blanco. Si hay operaciones que no requieren
operados.
Cuando una operacin requiere dos operados, el primer operando se
denomina operando destino y el segundo operando fuente. Operaciones de
transferencia de datos, registros, almacenamiento inmediato y almacenamiento
de memoria. Son ejemplos de instrucciones que requieren dos operandos por
ejemplo:
"18 09- H
Este es un ejemplo de operando inmediato. Aqu, el dato a ser manipulado
se incluye como operando fuente y se desplaza al registro 09, u operando
destino.

CAMPO COMENTARO:
El campo comentario es l ultimo de los cuatro campos y puede ser uno de
los mas tiles. El campo comentario se utiliza para documentar internamente el
cdigo fuente del ensamblador. Los comentarios son ignorados por el
ensamblador y son tiles solo al listar el cdigo fuente. Si un comentario se
incluye con una instruccin de operacin entonces debe estar separado del
ltimo campo por al menos un espacio en blanco y comenzar con un punto y
coma (;).
Un comentario debe ser utilizado para describir aquellas lneas de cdigo
fuente que no son comprensibles inmediatamente. Por ejemplo:

"18 0'- 4#' S ,0&0"ET1 ,0&0 2EE& U= 0&0TE&
Como se muestra, el comentario explica por que el registro 0' esta siendo
cargado con 45H. En este caso, el 45H es utilizado para disparar la accin
apropiada cuando se llame a una interrupcin.
Un programa bien documentado no tiene por que incluir comentarios en cada
instruccin y se recomienda:
No utilizar en los comentarios abreviados cuyo significado resulte poco
claro.
Comentar todas las definiciones de smbolos, reservas de memoria,
definicin de constantes, propsito del programa, los subprogramas, etc.
Hacer comentarios escuetos, los detalles se adjuntan en documentos
apartes.
Comentar todos los puntos clave *no comentar instrucciones sin
dificultad en su comprensin.
ndicar en el comentario la tarea que se quiere ejecutar con una
instruccin o secuencia de instrucciones.
Los delimitadores que podemos usar en cada una de las lneas son:
7 :)os puntos< despuOs de una etiEueta
:Espacio< entre el cdigo de operacin y operando
- :oma< entre operando del mismo tipo
S :,unto y coma< precede un comentario
C+"R3AT" DE UN PR"GRA3AD
Existen ciertas normas para crear un programa en lenguaje ensamblador. La
primera se refiere al formato interno de cada instruccin del lenguaje. Toda
lnea de cdigo debe digitarse bajo ciertas reglas, las cuales pueden
considerarse como la sintaxis propia del lenguaje. La segunda norma es el
formato externo del programa, que puede equipararse con una capa que
rodeara al programa para ayudar a definir su entorno.

EL FORMATO EXTERNO
El formato externo esta formado por varios comandos clave que permiten
establecer el entorno operativo del programa.
En el ensamblador se utilizan dos formatos bsicos para desarrollar la
programacin. En un mtodo se utilizan modelos de memoria y, en el otro
definiciones de segmento completo. Los modelos de memoria son exclusivos
del programa MASM para ensamblador. Las definiciones de segmento
completo son comunes para casi todos los ensambladores.
El mtodo que utiliza los modelos de memoria son ms fciles de usar, pero
las definiciones de segmento completo ofrecen mayor control de la tarea del
lenguaje ensamblador.

USO DE MODELOS:
,&1G&0"0 TUE )ES,2IEG0 U=0 0)E=0 E= 20 ,0=T0220
S =ombre del programa 7 EC;20;3.0S"
S Fec5a de creacin 7 0%&I2 1B )E 1BB3
S 0utor 7 C.0. &ojas ,once
S 1bjeti+o 7 )esplegar una cadena
S 1"0=)1 )E E=S0"%2E 7 "0S" EC;20;3 S
S 1"0=)1 )E E=20E 7 2I=L EC;20;3 S
S 1"0=)1 )E ECEUI1= 7 EC;20;3 UE=TE&V
S )e!ine el modelo de memoria
S
. "1)E2 S"022 S "odelo de memoria
. 1)E S 0rea de cdigo
Empie3a 7 S EtiEueta de comien3o de programa
"18 09- Q)0T0 S Iniciali3a )s con la
"18 )S- 09 S )ireccin de Q)0T0
"18 )9- 1FFSET "E=S0CE S )ireccin de mensaje
"18 0'- B S en )9 para poder desplegarlo
I=T 21' S a tra+Os de la Int 21 de "SJ)1S .
"18 09- 4c;;5 S regresa a "SJ)1S por medio de la
I=T 215 S Funcin 4c.
.)0T0 S Segmento de datos
"ensaje )% W'ola- .EuO talX.PW S adena a desplegar
.ST0L S Se necesita una ,I20.
E=) Empie3a S Fin del programa

El primer comando ."1)E2 S"022, es una directiva simplificada que le
indica al ensamblador como sern accesadas las instrucciones y los datos (a
travs de sus segmentos especficos).
El comando .1)E, tambin es una directiva simplificada, le indica al
ensamblador que el siguiente grupo de instrucciones es el cdigo a ejecutar.

Las dos instrucciones siguientes lo nico que hacen es regresar el control a
MS-DOS (despus de ejecutar el programa) siguiendo ciertas normas, que en
este caso consisten en cargar el registro 09 con el cdigo 4C00H (cdigo de
terminacin del programa) y despus hacer la indicacin a travs de la
interrupcin 21'.

El comando .ST0L indica que se necesita reservar un espacio de memoria
para las operaciones de pila, y finalmente el comando E=) Empieza seala el
final del bloque de cdigo y por E=) el final del programa.
Para crear un programa ejecutable en MASM teclee los siguientes comandos
en la lnea de interaccin de MS-DOS:
7Y"0S" Ej;;ca;3
7Y2I=L Ej;;ca;3
DEFNCON DE SEGMENTO COMPLETO
Aqu un programa parece ser ms largo pero esta ms estructurado que en
el mtodo de modelo para inicializar un programa.
El primer segmento definido es el segmento de PI&A, A continuacin el
segmento de DAT"S y que sirve para definir cada uno de los datos a usar en
el programa. Y por ultimo el segmento de C"DIG".

S ,&1G&0"0 ECE",21
ST0L SEG"E=T ,0&0 ZST0L[
)% .4 )U,
ST0L E=)S
)0T0 SEG"E=T ,0&0 W)0T0W
"ES0GE )% Z0'1&0 21 TUE 0%U=)0 ES E2 0"1&[-[P[
)0T0 E=)S
1)E SEG"E=T ,0&0 1)E
"0I= ,&1 F0&
0SSU"E S7 1)E- )S7 )0T0- ES7 )0T0- SS7 ST0L
,US' )S
SU% 09-09
,US' 09
"18 09- )0T0
"18 )S- 09
"18 ES- 09
S &UTI=0 ,0&0 I",&I"I& 20 0)E=0
2E0 )9- "ES0GE
"18 0'- ;B
I=T 21'
&ET
"0I= E=),
1)E E=)S
E=)
Para crear un programa ejecutable se puede utilizar el ensamblador Turbo
Asemblet, para esto teclee los siguientes comandos en la lnea de interaccin
de MS-DOS:
7YT0S" Ejemplo1
7YT2I=L Ejemplo1
Estr%tra de n #rogra"a en ensa"b$ador
Ja ?emos estdiado al%nas partes del pro%rama en len%a;e ensamblador. S$lo nos
=alta conocer la parte mFs importante: las instrcciones. Pero antes de eso! Beremos cal
es la estrctra bFsica de n al%oritmo en c$di%o ensambladora con la =inalidad de ener
claro cal es la estrctra de todos los elemento :e acabamos de Ber. Esto lo Beremos
mFs a =ondo cando Beamos todo lo concerniente a la pro%ramaci$n.
Esta estrctra contiene los si%ientes elementos o partes :e deben ser codi=icadas:
I Comentario descriptiBo del pro%rama 5opcional! pero recomendable6
I De=inir el microcontrolador :e se sarF 5con las directrices LIST e I2CLUDE6.
I Introdcir las opciones de compilaci$n 5:e serFn Bistas mFs adelante65opcional6
I Establecer las constantes :e se sarFn 5con la directriA ERU6.
I ReserBar espacios de memoria 5directriA RES6 5si es necesario6
I Con=i%rar los pertos
I Desarrollar el pro%rama
I Poner comentarios
J s estrctra es:
Figura 41. Esquema de un programa
Hemos Bisto la estrctra %eneral. A?ora Beremos la posici$n de los elementos del
c$di%o por colmnas. Estas se diBiden en catro:

I Colmna ': Eti:eta. Las eti:etas se ri%en por las si%ientes normas:
S Debe sitarse en la primera colmna
S Debe contener <nicamente caracteres al=anm"ricos
S El mFEimo de caracteres es de &'
I Colmna ): Operaci$n. En esta colmna se sitarFn las instrcciones
I Colmna &: Son los re%istros 5=! l o N ! b # C6 donde se almacenarFn los
resltados # con los :e se operarF
I Colmna /: Comentario. A:> se sitarF cal:ier comentario personaliAado
:e deseemos. Estos son <tiles para saber :" ?ace n pro%rama sin tener :e
desci=rar el c$di%o entero. El compilador 5ensamblador6 i%norarF todo teEto mFs
allF del carFcter pnto # coma TPU. Estos comentarios %eneralmente se sit<an en
la carta colmna para describir la acci$n de na l>nea de c$di%o! pero peden
sitarse en cal:ier parte de pro%rama para describir cal:ier otro eBento!
siempre :e est"n desp"s del carFcter TPU 5semicolon en in%l"s6.
0eamos mFs detenidamente cal es s posici$n:

Figura 42. Esquema de un programa por columnas
2ormalmente las colmnas son separadas por na tablaci$n. El espacio m>nimo entre
dos colmnas es de n carFcter! :e pede ser n espacio en BeA de na tablaci$n.
?ttp:@@sarios.l#cos.es@s=risColNer@pic@seis.?tm
er arc(io% EstructuraEnsamblador.pd'
1.4.1 )ata segment.
DS, Data Segment: Es el segmento destinado a ser usado junto con BX, S y D
para apuntar a una direccin de memoria. Tambin puede ser usado con BP y
SP, pero hace falta expresarlo concretamente.
DS L Registro de segmento de datos. ontiene !a direcci9n de! segmento
de datos, es decir, e! Mrea de memoria donde se encuentran !os datos
de! programa.
DS: Data Segment 5Segmento de Datos6
Este registro se!ecciona una secci9n de 4. G&. que se
dedica genera!mente a co!ocar en e!!a nuestras $aria&!es,
por !o cua! toma su nom&re: secci9n de memoria dedicada a
datos.
1.4.2 Snac* segment.
SS, Stack Segment: El segmento de Stack; junto con SP apuntan a la ltima
posicin que fue utilizada para "depositar" datos en el Stack.
SS H Re%istro de se%mento de pila. Contiene la direcci$n del se%mento de pila.
http://www.pablin.com.ar/computer/cursos/varios/introasm.htm
SS: StacU Segment 5Segmento de Pi!a6
Este registro se!ecciona !a regi9n de 4. G&. que $a a
contener !a pi!a de! sistema. omo su nom&re !o indica,
tendremos una estructura de datos, con po!=tica 8I<, 58ast
In, <irst ,ut L E! V!timo e!emento en entrar, es e! primero
en sa!ir6, con instrucciones &Msicas P(S) y P,P para su
manejo. Esta estructura es usada por !os programas de
ap!icaci9n, pero tam&iWn por e! procesador para e! contro!
de instrucciones que !o requieren, ta!es como !as !!amadas
a su&rutinas y!a atenci9n de interrupciones.
5ttp7$$members.tripod.com$\"oises&%%$arEH;4H..5tml
1.4.3 ode segment.
S L Registro de segmento de c9digo. ontiene !a direcci9n de!
segmento de c9digo, !o que son !as instrucciones de! programa.
S: ode Segment 5Segmento de 9digo6
Este registro se!ecciona e! Mrea de 4. G&. que genera!mente
dedicamos a! c9digo. En este caso, e! P( 5espec=%icamente,
e! +I(6, siempre toma !as instrucciones de esta regi9n de
memoria; por !o que cuando requerimos mMs de 4. G&. de
c9digo 5instrucciones6, este registro tendrM que mo$erse,
tomando distintos $a!ores segVn recorremos distintas
regiones de memoria.
'ttp:KK$ictorsanc'e>D.netKtutoria!esKasmKasm//1.'tm
1.4.4 Instrucciones del programa.
La programacin en lenguaje maquina es difcil, por ello se necesitan lenguajes
que permitan simplificar este proceso. Los lenguajes de bajo nivel han sido
diseados para ese fin.
Estos lenguajes dependen de la maquina, es decir, dependen de un conjunto
de instrucciones especificas de la computadora.
Un lenguaje tpico de bajo nivel es el lenguaje ensamblador. En este lenguaje
las instrucciones se escriben en cdigos alfabticos conocidos como
nemotcnicos (abreviaturas de palabras inglesas o espaolas). As, por
ejemplo, nemotcnicos tpicos son:
ADD suma
MPY multiplicar
LDA cargar acumulador
SUB resta
DV dividir
STO almacenar
Las palabras nemotcnicas son mucho ms fciles de recordar que las
secuencias de dgitos 0 y 1. Una instruccin tpica en ensamblador puede ser:
ADD X, Y, Z
Esta instruccin significa que se deben sumar los nmeros almacenados
en las direcciones x, y y almacenar el resultado en la direccin z.
El programa ensamblador traducir la instruccin a cdigo de maquina.
Por ejemplo:
ADD se puede traducir a 1110
x se puede traducir por 1001,
y 1010,
z por 1011.
La instruccin traducida sera:
1110 1001 1010 1011
Despus que un programa ha sido escrito en lenguaje ensamblador, se
necesita un programa --llamado ensamblador-- que lo traduzca a cdigo
mquina:
Figura 1.12. Programa ensamblador.
http://www.monografias.com/trabajos15/el-software/el-software.shtml#
1.4.# )irecti+as.
)irecti+as del lenguaje ensamblador
Adems de los cdigos para instrucciones de mquina, lenguajes de ensamblador tienen
directivas para ensamblar bloques de datos, y asignar localidades de direccin para
instrucciones o cdigo.
Estos usualmente tienen una capacidad simblica simple para definir valores como expresiones
simblicas que se evalan en tiempo de ensamble, haciendo posible escribir cdigo que es
mas fcil de leer y entender.
Como la mayora de lenguajes de computadora, comentarios textuales pueden ser agregados a
el cdigo fuente [source code] que es ignorado por la computadora.
Estos tambin usualmente tienen un macro lenguaje integrado para hacer fcil generar piezas
complejas de cdigo o datos.
En la prctica, la ausencia de comentarios y el reemplazo de smbolos con nmeros actuales
hace la interpretacin humana de cdigo desensamblado considerable mas difcil que el
cdigo fuente original.
Programa fuente
( lenguaje ensamblador)
Programa en
lenguaje de
maquina
Ensamblador
5ttp7$$(((.geocities.com$Silicon8alley$'a+en$2;3M$documentos$2enguaje
@Ensamblador.5tm
)I&ETI80S ,0&0 2IST0&7 ,0GE F TIT2E
La directiva PAGE y TTLE ayudan a controlar el formato de un listado
de un programa en ensamblador. Este es su nico fin, y no tienen
efecto sobre la ejecucin subsecuente del programa.
,0GE. Al inicio de un programa, la directiva PAGE designa el numero
mximo de lneas para listar en una pagina y el numero mximo de
caracteres en una lnea. Su formato general es:

PAGE [longitud][, ancho]
El ejemplo siguiente proporciona 60 lneas por pagina y 132
caracteres por lnea:

PAGE 60, 132
El numero de lneas por pagina puede variar desde 10 hasta 255,
mientras que el numero de caracteres por lnea desde 60 hasta 132.
La omisin de PAGE causa que el ensamblador tome PAGE 50, 80.


TIT2E. Se puede emplear la directiva TTLE para hacer que un titulo
para un programa se imprima en la lnea 2 de cada pagina en el
listado del programa. Puede codificar TTLE de una vez, al inicio del
programa. Su formato general es:

TTLE Texto.
Para el operando texto, una tcnica recomendada es utilizar el nombre
del programa como se registra en el disco. Por ejemplo:

TTLE Prog1 Mi primer programa en ensamblador
)I&ETI80 SEG"E=T
Un programa ensamblado en formato .EXE consiste en uno o mas
segmentos. Un segmento de pila define el almacn de la pila, un
segmento de datos define los elementos de datos y un segmento de
cdigo proporciona un cdigo ejecutable. Las directivas para definir un
segmento, SEGMENT y ENDS tienen el formato siguiente:
El enunciado SEGMENT define el inicio de un segmento. El nombre
del segmento debe estar presente, ser nico y cumplir las
convenciones para nombres del lenguaje. EL enunciado ENDS indica
el final del segmento y contiene el mismo nombre del enunciado
SEGMENT. El tamao mximo de un segmento es de 64K. El
operando de un enunciado SEGMENT puede tener tres tipos de
opciones: alineacin, combinar y clase, codificadas en este formato:

nombre SEGMENT alineacin combinar ' clase '
TI,1 02I=E0I1=. La entrada alineacin indica el limite en el que
inicia el segmento. Para el requerimiento tpico, PARA, alinea el
segmento con el limite de un prrafo, de manera que la direccin
inicial es divisible entre 16, o 10H. En ausencia de un operando hace
que el ensamblador por omisin tome PARA.
TI,1 1"%I=0&. La entrada combinar indica si se combina el
segmento con otros segmentos cuando son enlazados despus de
ensamblar. Los tipos de combinar son STACK, COMMON, PUBLC y
la expresin AT. Por ejemplo, el segmento de la pila por lo comn es
definido como:

nombre SEGMENT PARA STACK
Puede utilizar PUBLC y COMMON en donde tenga el propsito de
combinar de forma separada programas ensamblados cuando los
enlaza. En otros casos, donde un programa no es combinado con
otros, puede omitir la opcin o codificar NONE.
TI,1 20SE. La entrada clase, encerrada entre apstrofos, es
utilizada para agrupar segmentos cuando se enlazan. Se utiliza la
clase 'code' para el segmento de cdigos, 'data' por segmento de
datos y 'stack' para el segmento de la pila. El ejemplo siguiente define
un segmento de pila con tipos alineacin, combinar y clase:

nombre SEGMENT PARA STACK 'Stack'
)I&ETI80 0SSU"E.
Un programa utiliza el registro SS para direccionar la pila, al registro
DS para direccionar el segmento de datos y el registro CS para
direccionar el segmento de cdigo. Para este fin, usted tiene que
indicar al ensamblador el propsito de cada segmento en el programa.
La directiva para este propsito es ASSEME, codificada en el
segmento de cdigo como sigue:

OPERACON OPERANDO
ASSUME SS:nompila, DS:nomsegdatos, CS:
nomsegcodigo,. . .
Los operandos pueden aparecer en cualquier orden. Al igual que otras
directivas, ASSUME es solo un mensaje que ayuda al ensamblador a
convertir cdigo simblico a cdigo maquina; aun puede tener que
codificar instrucciones que fsicamente cargan direcciones en registros
de segmentos en el momento de la ejecucin.


1 PAGE 60,132
2 TTLE P04ASM1 ESTRUCTURA DE UN
PROGRAMA .EXE
3;-------------------------------------------------------------------------------
4 STACKSG SEGMENT PARA STACK 'Stack'
5 ...
6 STACKSG ENDS
7;-------------------------------------------------------------------------------
8 DATASG SEGMENT PARA 'Data'
9 ...
10 DATASG ENDS
11;-------------------------------------------------------------------------------
12 CODESG SEGMENT PARA 'Code'
13 BEGN PROC FAR
14 ASSUME SS:STACKSG,
DS:DATASG,CS:CODESG
15 MOV AX, DATASG ;Obtiene la direccin
del segmento de datos
16 MOV DS, AX ;Almacena direccin en
DS
17 ...
18 MOV AX, 4C00H ;Peticion
19 NT 21H ;Salida al DOS
20 BEGN ENDP
21 CODESG ENDS
22 END BEGN
?ttp:@@CCC.itlp.ed.mE@pblica@ttoriales@ensamblador@tem.V'V.?tm
)I&ETI80S SI",2IFI0)0S )E
SEG"E=T1S
Los ensambladores de MicroSoft y de Borland proporcionan algunas
formas abreviadas para definir segmentos. Para usar estas
abreviaturas, inicialice el modelo de memoria antes de definir algn
segmento. El formato general (incluyendo el punto inicial) es:

."1)E2 modelo de memoria
El modelo de memoria puede ser TNY, SMALL, MEDUM, COMPACT
o LARGE. Los requisitos para cada modelo son:
Puede utilizar cualquiera de estos modelos para un programa
autnomo (esto es, un programa que no este enlazado con algn
otro). El modelo TNY esta destinado para uso exclusivo de programas
.COM, los cuales tienen sus datos, cdigo y pila en un segmento. El
modelo SMALL exige que el cdigo quepa en un segmento de 64K y
los datos en otro segmento de 64K. La directiva .MODELL genera
automticamente el enunciado ASSUME necesario.
Los formatos generales (incluyendo el punto inicial) para las directivas
que define los segmentos de la pila, de datos y de cdigo son:

.ST0L Utama]oV
.)0T0
.1)E UnombreV
Cada una de estas directivas hace que el ensamblador genere el
enunciado SEGMENT necesario y su correspondiente ENDS. Los
nombres por omisin de los segmentos (que usted no tiene que
definir) son STACK, DATA y TEXT (para el segmento de cdigo).
La figura 4.3 proporciona un ejemplo haciendo uso de las directivas
simplificadas de segmento.

page 60,132
TTLE P04ASM2 (EXE) Operaciones de mover y sumar
;-------------------------------------------------------------------------
.MODEL SMALL
.STACK 64 ;Se define la pila
.DATA ;Se definen los datos
FLDA DW 250
FLDB DW 125
FLDC DW ?
;-------------------------------------------------------------------------
.CODE ;Se define el segmento de cdigo
BEGN PROC FAR
MOV AX, @data ;Se asigna la direccin de DATASG
(Prog. anterior)
MOV AX, FLDA ;Mover 0250 a AX
ADD AX, FLDB ;Sumar 0125 a AX
MOV FLDC, AX ;Almacenar suma en FLDC
MOV AX, 4C00H ;Salida a DOS
NT 21H
BEGN ENDP ;Fin de procedimiento
END BEGN ;Fin de programa
?ttp:@@CCC.itlp.ed.mE@pblica@ttoriales@ensamblador@tem.V)V.?tm
Directivas de ensamble (Seudo instrucciones)
Pass32 cuenta con algunas palabras reservadas que cumplen tareas
especiales para facilitar la programacin en ensamblador, estas palabras son
llamadas seudo instrucciones o directivas de ensamble.
La siguiente es una lista de las directivas de ensamble ms utilizadas en
Pass32:
DB Reserva un byte en memoria
DW Reserva una palabra (Word) en memoria o 2 bytes
DD Reserva una palabra doble (Double Word)
.EQU Se utiliza para reemplazar smbolos por valores
PROC-ENDP Se utilizan para declarar procedimientos en los programas
.MACRO-ENDM Se utilizan para declarar macros
DUP Sirve para inicializar cadenas de caracteres o arreglos numricos
.NCLUDE Se utiliza para obtener datos o subrutinas de otros programas
.EXTERN Declara un smbolo como externo, trabaja en conjunto con
.NCLUDE .PUBLC Declara un smbolo como pblico
Los programas incluidos como ejemplos muestran la forma de utilizar estas
directivas.
?ttp:@@CCC.mono%ra=ias.com@traba;os''@lenen@lenen.s?tml

1.# ,rocedimiento de ensamble- enlace y ejecucin.
Proceso de ensa).le , ligado de un #rogra)a
Este #roceso es )u, sencillo , se descri.e a
continuacin'
Si estE tra.ajando en 3S0D"S siga estos #asos'
=!0 Escri.a el #rogra)a/ tal , co)o a#arece en el listado
anterior/ usando su editor de te*to #referido!
7!0 GuErdelo con algFn no).re , la e*tensin !AS3!
G!0 En el sH).olo del 3S0D"S escri.a lo siguiente
C'IPASSG7IINIJPASSG7 No).re!AS3 Kt LEnterJ
8!0 Ejecute el #rogra)a !C"3 >ue se genera!
Para #ro.ar el #rogra)a a.ra una 4entana de 3S0D"S ,
seleccione el #rogra)a 1aciendo do.le clic so.re el icono!
?ttp:@@CCC.mono%ra=ias.com@traba;os''@lenen@lenen.s?tml
PR"CES" DE ENSA3&E ? &IGAD" DE UN PR"GRA3A!
Las instrucciones simblicas que codifica el lenguaje ensamblador son
conocidas como el programa fuente. El programa ensamblador es utilizado
para traducir el programa fuente en cdigo mquina.
Se debe de crear el programa fuente en un editor, por ejemplo el editor de
pascal, el cual genera un archivo en cdigo ASC que debe ser grabado con la
extensin .0S".
El archivo generado, es slo un archivo de texto que no puede ejecutarse,
para esto primero debe ensamblarlo y enlazarlo.
1.- El paso de ensamble consiste en la traduccin del cdigo fuente en cdigo
objeto y la generacin de un archivo intermedio .OBJ mdulo. Una de las
tareas del ensamblador es calcular el desplazamiento de cada elemento en el
segmento de datos y de cada instruccin en el segmento de cdigo. El
ensamblador tambin crea un encabezado al frente del mdulo .OBJ generado,
ste an no est en forma ejecutable.
2.- El paso de enlace implica convertir el mdulo .OBJ en un mdulo de cdigo
de mquina .EXE (ejecutable).
3.- El ltimo paso es cargar el programa para su ejecucin. El cargador
desecha el encabezado y crea un PSP inmediatamente antes del programa
cargando en memoria.

1"1 E=S0"%20& U= ,&1G&0"0 FUE=TE
El programa ensamblador de Microsoft es "0S".E9E, mientras que el
programa de Borland es T0S".E9E. Para teclear el comando para ejecutar
"0S" o T0S" en una lnea de comando o por medio de peticiones. El
formato general para un comando o lnea para ensamblar un programa es :
"0S"$T0S"UopcionesV !uente U-objetoV U-listadoV U-re!cru3adaV
[ ] = Son opcionales.
!uenteJ Es el nombre del archivo que se encuentracon la extension .0S" .
objeto.J Prergunta que nombre le voy a dar al archivo .1%C.
listado.-Si se desea crear un archivo que contenga codigo fuente y codigo
objeto se debe especificar con la extensin 2ST.
F1&"0T1 GE=E&02 ,0&0 E=20K0&
LNK/TLNK ARCHOBJ,ARCHEJE,[,ARCHAMPA] [,ARCHBB1]
LNK=Microsoft
TLNK=Borland
0&'1%C.J dentifica el archivo objeto que ha generado el ensamblador.
0&'ECE.J Se utiliza para archivos ejecutables.
DRECTVAS DE ENSAMBLE
El lenguaje ensamblador permite usar diferentes enunciados que permiten
controlar la manera en que un programa ensambla y lista, llamados directivas.
2as directi+as Eue usa el lenguaje ensamblador son7
,0GE )^ 1"" I=2U)E TIT2E
)) 1""E=T 20%E2 SEG"E=T )F1=ST
.2IST ,&1 )T &EF ."1)E2
0SSU"E )T )0T0 1&G E=)S
E=) ETU )0T0 ,&1E) .02,'0
E&& E=), G&1U,
DIRECTI0AS DE DE1I2ICIW2 DE DATOS 5D7!DX!DD!LA7EL!ERU!ETC.6
DB )definir b6te* .E InicialiAa n b#te completo.
Ejemplo 7
'120 )% 23
"ES0 )% ;0'
0&0TE& )% ZG[
"E=S0CE )% ZS1IE)0) )E E&&1 0KU2[
,E&S1=0 )% ;-1-2-3-4-#-.-M-H-B
'1F )% 4# )U, :ZST0L[<
T0%20 )% #; )U, :;3'<
)I8E&S1S )% ZFES[-34-;F0)'
)^:)e!inir palabra<.J Se utiliza para definir una variable o tabla (palabra).
Ejemplo 7
TEST1 )^ 1 2 3 4
TEST2 )^ ;0%)'
TEST3 )^ 1-22-333-4444
TEST4 )^ 23-112
TEST# )^ 23 )U, :1;;'<
TEST. )^ #; )U, : ><
)):)e!inir doble palabra<.J Se utitliza para definir una variable o tabla para
inicializar una funcin de memoria.
Ejemplo 7
IE21 )) ;FFFFFFFF'
&1S0 )) ;'
F21& )) 1-22-333-4444-#####
SU"0 )) 4#' I 23'
&E02ES )) 2.1M.#4
)EI"02 )) 4.#.ME12
T0%20 )) #; )U, :;3'<
F&0 )) ;.1234#
)T :)e!inir cuadruple palabra<.Jniacializa 4 palabras. Acepta valores de
constantes,numricos,tablas.
Ejemplo 7
T0%20 )T 1;;-2;;;-3;;;;-4;;;;;
"U2TI )T 1;;; )U, :4#..MH<
SU"0 )T J..34#E J# I #.;;;1E4#
20&G1 )T MBHB_12'
)T :)e!inir decabyte<.Jnicializa 10 bytes de asignacin de mamoria.
Ejemplo 7
T0%20 )T 1;;-2;;;-3;;;;-#;;;;;
"U2TI )T 1;;; )U, :4#..MH<
SU"0 )T J..34# E J# I #-;;;1E4#
20&G1 )T MBHB_12
)%IT :%it<.J Define tipo de bits.
TEST1 )%IT ;;;1%
TEST2 )%IT ;11;;1%
TEST3 )^ 1%-;%-1%
TEST4 )^ ;%
ETU.J nicializa una variable con un valor especifico.
Ejemplo 7
SU"0 ETU 1=T0)1&
)IEK ETU 1;
...
I= SU"0
0)) SU"0-)IEK
02,'0.J Ordena alfabeticamente los segementos. Se coloca al inicio del
programa para listar los elementos en forma ordenada.

,U%2I.J Se utiliza para enlazar segmentos dentro de un programa o
programas externos.
Formato 7
,rograma Eue llama 7
)SEG1 SEG"E=T ,0&0 Z1)E[
,U%2I 1=802
...
1=802 )^ >
)SEG1 E=)S
Subprograma llamado 7 E9T&= :=1" 7 TI,1 <
E9T&= 1=802 7 F0&
)SEG2 SEG"E=T ,0&0 Z1)E[
...
"18
...
)SEG2 E=)S
1&G.J Nos permite indicar la direccin especfica de segementos de memoria.
Sirve para cambiar la direccin inicial de localidades, dandole una direccin
especifica de los segmentos.
Ejemplo 7
1&G ; ;;
F2)9 )% > ;1
F2)F )^ > ;2
F2)F2 )% > ;4
1&G PI#
1""E=T.J Sirve para delimitar comentarios.
Ejemplo 7
1""E=T )E2I"IT0)1& )E 1"E=T0&I1
...
)E2I"IT0)1& )E 1"E=T0&I1
=1"%&E G&1U, =1"JSEG-....J Ayuda a agrupar con un nombre a varios
segmentos.
Ejemplo 7
G&1U, G&1U, =1"JSEG1SEG2
SEG1 SEG"ET ,0&0 Z)0T0[
0SSU"E )S 7 G&1U,9
...
SE)G1 E=)S
SEG2 SEG"E=T ,0&0 Z)0T0[
0SSU"E )S 7 G&1U,9
...
SEG E=)S
20%E2.J Redefine el atributo de una variable.
Formato 7
=ombre 20%E2 Especi!icador
&E)EF% )^ 2#32'
&E)EF^ 20%E2 ^1&)
FIE2)% )% 2#'
)% 32'
.
.
.
"18 02-&E)EF%
"18 %9-&E)EF^
DRECTVAS DE DEFNCN DE MEMORA (PROC, SEGMENT, ASSUME,
END, ETC.)
,&1.J ndica la definicin de un procedimiento pude llevar un atributo FAR o
NEAR.
Formato 7
=1"SEGT1 SEG"E=T S 1)E
=1",&1 ,&1 F0&$=E0& S U= ,&1E)I"IE=T1
... S
=1",&1 E=), S )E=T&1
=1"SEGT1 E=)S S )E2 SEG"E=T1 )E D)IG1
SEG"ET :)irecti+a de memoria<.J Nos indica que tanta memoria va a ocupar
y sirva para segmentar la memoria en pila, cdigo, datos y extras.
Formato 7
=1"%&E SEG"E=T :1,I1=ES< S I=II0 E2 SEG"E=T1
.
.
=1"%&E E=)S S FI= )E SEG"E=T1
E=).Jndica fin de programa.
Formato 7
E=)
E=)S.J ndica fin de segmento.
Formato 7
E=)S
E=),.J ndica fin de procedimiento.
Formato 7
E=),
0SSU"E.J Se utiliza para direccionar cada uno de los registros del segmento
a la direccin del segmento ()S-SS-ES-FS-S).
Formato 7
0SSU"E S 7 1)ESG- )S. 7)0T0SG- SS 7 ST0L S... ES 7 )0T0SG
DIRECTI0AS PARA LI4ADO DE U2 PRO4RAMA
TLINF .E ConBierte n pro%rama =ente a n arc?iBo .O79 en n arc?iBo .E8E. Se
pede teclear LI2Q o TLI2Q. EnlaAando con na l>nea de comando o por medio de
peticiones. La l>nea de comando es :
2I=L$T2I=L arc5obj- arc5eje- U- arc5mapaV U-arc5biblV

0rc5obj.Jdentifica al archivo objeto generado por el ensamblador. El
enlazador supone la extensin .OBJ de modo que no tiene que
introducirla. Unidad, subdirectorio y nombre de archivo pueden ser
iguales o diferentes del archivo fuente.
0rc5eje.J Estipula que se genera un archivo .EXE. Unidad, subdirectorio
y nombre del archivo pueden ser iguales o diferentes del archivo fuente.
0rc5mapa.J Estipula que se genera un archivo con extensin MAP que
indica la ubicacin relativa y el tamao de cada segmento y cualquier
error que LNK haya encontrado. Un error comn es el fallo al definir un
segmento de pila. ntroducir CON (por consola) le indica al enlazador
que muestre el mapa en la pantalla ( en lugar de escribirlo en un disco)
de forma que se pueda ver el mapa inmediatamente para los errores.
0rc5bibl.J Estipula la opcin de bibliotecas, que no necesita en estos
primeros pasos de programacin en lenguaje ensamblador.
DRECTVAS DE CONTROL DE LSTADO
.2IST y .92IST.J Se utilizan para controlar el listado del archivo.
.2IST.- Permite listar los cdigod fuente y objeto.
.92IST.Jndica hasta donde se detiene el listado del archivo.

Formato 7
.2IST- .92IST
Ejemplo7
.92IST
"F1)E SEG"E=T ,0&0 Z1)E[
"F,&1 ,&1 F0&
0SSU"E S 7 "F1)E- )S 7 "F)0T0-SS 7 ST0L
,US'
SU%
,US'
,0GE.JDirectiva para listar, inicializa la longitud y achura de cada pgina de
listado.
Formato7
,0GE U21=GITU)V - U0='1V
Ejemplo7
,0GE .;-132
TIT2E.- Permite que sea introducido un ttulo en la segunda lnea de cada
pgina de listado.
Formato 7
TIT2E :cadena<
Ejemplo7
TIT2E ,&1G&0"0 ECE",21
SU%TT2 'ETUE1 )E 1)IG1S )E E&&1&
ST0L SEG"E=T ,0&0 ST0L
)% .4 )U, :`"I,I20`<
ST0L E=)S
....
1U2CIO2AMIE2TO I2TER2O.
Enseguida se ilustra un ejemplo muy claro de cmo sera un programa en
Lenguaje Ensamblador.
Para sumar 5+ 7.
1. Necesitamos 3 casillas, dos para los datos 5 y 7 y uno para depositar el
resultado. 2. Definir las operaciones y su orden, as como obtener una
codificacin adecuada
3. ntroducir los datos en memoria.
Ocupamos una instruccin para llevar el contenido de una celda al acumulador
(o registro contenido en la CPU); otra para hacer la suma y otra para regresar
el contenido del acumulador a una celda de la memoria.
El formato de la instruccin para llevar el contenido de una celda al
acumulador(le llamaremos 0&G0@0) ser como sigue:
0&G0@0 )ireccin
Donde: 0&G0@0 = al nombre de la instruccin.
)ireccin =celda de memoria cuyo valor queremos llevar al
acumulador
0&G0@0, es el nombre mnemnico que daremos a la instruccin, debemos
asignarle un cdigo numrico interno, sin importar ahora cual sea este, ocupar
el contenido de una celda de la memoria. As mismo, la direccin ser un
nmero que ocupar un lugar en otra celda. Es decir, 0&G0@0 ocupar dos
celdas: Una para el cdigo de la operacin y otra para la direccin a la que
hace referencia.
GU0&)0@0- )ireccin; que deposita el valor del acumulador en una celda
de la memoria(esta es la inversa de la anterior).
SU"0 )ireccin; que suma de memoria descrita por la direccin:
Ahora nuestro diccionario ser como sigue:

INSTRUCCIGN
CODI?O
INTERNO
LON?. DE LA
INSTRUCCIGN
CAR4AVAC )' )
4UARDAVAC *- )
SUMA ., )
RESTA /) )
Ahora escribiremos el programa en forma tabular. En la parte izquierda del
rengln pondremos la instruccin mnemnica seguida de la direccin a la que
haga referencia, luego pondremos su equivalente en el cdigo interno extrado
del diccionario y, por ltimo, describiremos el rengln para lo que sigue
suponemos que la celda 21 contiene un 5 y que la celda 22 contiene un 7.

I2STRUCCIW2 DIRECCIO2 CODI4O COME2TARIOS
CAR?AHAC ., .,.,
Co$o%a"os e$ ,er.
NI". En e$
a%"$ador
SUMA .. 4D..
Efe%ta"os $a
s"a
?UARDAHAC .- J1.-
De/a"os e$
res$tado en $a
%asi$$a .-
ALTO K.. D' fina$iLa

02T1= nstruccin nueva para lograr que cuando se ejecute la secuencia,
llegue a su fin. Esta instruccin toma una sola casilla de memoria, ya que no
requiere hacer referencia a algunas direcciones.
Observemos dos nuevos programas; uno escrito en lenguaje mnemnico y otro
escrito en lenguaje numrico. Llamaremos programa fuente al primero y
programa objeto al segundo.
PR"GRA3A +UENTE' Esta escrito en un lenguaje cercano al del ser
humano.
PR"GRA3A "MET"' Este ya est traducido al lenguaje que habla la
mquina.
En este caso escribimos ambos programas, pero en un caso general, el
programador escribir el programa fuente y la computadora lo traducir al
lenguaje objeto.

,0S1S ,0&0 ECEUI1= )E U= ,&1G&0"0
El programa objeto, entonces es: "21215722962370" que, obviamente,
ininteligible para un ser humano. Este programa funciona para sumar cualquier
par de nmeros, siempre y cuando resida en las casillas 21y22.
Ahora introduciremos el programa en la memoria de la computadora, para que
pueda ejecutarse luego. en que seccin de la memoria lo vamos a cargar?,
decidimos hacerlo a partir de la celda 10 (o cualquiera que este desocupada y
disponga de suficientes celdas secuenciales vacas). La forma en que quedara
nuestro programa objeto en la memoria es:

Cod. )' )' ., )) *- )& ,( (. (, Y Z.
Dir.
Me".
'( '' ') '& '/ '. '- Z. )' )) )& Z.
Ya cargado nuestro programa objeto a partir de la celda 10 de la memoria,
tenemos que encontrar un procedimiento para lograr que la computadora
comience la ejecucin del mismo y as poder obtener los resultados deseados.
2a unidad de control :U< ejecutar/ el programa de la siguente !orma7
1. Cuando el programa empieza a partir de la celda 10, indicaremos a la
unidad de control que esta celda contiene las primeras instrucciones por medio
de un apuntador que recibe el nombre de 1=T0)1& )E ,&1G&0"0:,<.
Este es un paso externo, no forma parte del programa.
2. La unidad de control ejecutar el paso a) e ir a la casilla 10 para leer su
contenido que es 21.
3. La unidad de control ejecutar el paso b) con lo que decodifica el 21 recin
ledo y determina que se trata de una operacin 0&G0@0.
4. La unidad de control ejecutar el paso c) con lo que efectuar la operacin
de carga. Para esto la computadora debe ir a la celda 11 y extraer su
contenido, pero ahora ya no lo considerar como instruccin, sino como
direccin, por lo cual ir a la celda 21 para extraer el valor que contenga(que es
5). Esta instruccin completa "21 21" puede leerse as: "Carga el acumulador
con el valor que est contenido en la celda cuya direccin aparece a la derecha
de donde ests leyendo ahora.
5. La unidad de control ejecuta el paso d) para luego ejecutar todo el ciclo de
nuevo. Esto es un ciclo infinito, que slo terminar cuando se ejecute la
instruccin ALTO. El CP=12, o sea apuntar a la celda 12.
6. Se ejecutar(por segunda vez) el paso a) de la unidad de control. Como
CP=12, se leer esa celda, que contiene un 57.
7. Se decodifica esa instruccin que resulta ser SU"0@0, por lo que el CP
se preparar para apuntar a la siguiente celda.
8. Se ejecuta la instruccin 57 con lo que se aade el contenido de la celda 22
al acumulador(la direccin 22 reside en la celda 13, que es a la que
actualmente apunta el contador de programa como resultado del paso
anterior).Ahora el acumulador contendr un 12 (o sea 5+7).
9. El , se actualiza para apuntar a la celda 14, en la cual reside el cdigo de
la siguiente instruccin.
10. Se lee la celda nmero 14 y se extrae su contenido, 96.
11. Se decodifica la instruccin, que resulta ser GU0&)0@0, por lo que ,
se alista para apuntar a la siguiente celda, que contendr la direccin de la
celda en donde se va a guardar el contenido del acumulador.
1.. Entorno de programacin.
Unidad ). Elementos del lenguaje
2.M Instrucciones lineales.
2.M.1"o+imiento.
MoBimiento de datos
En todo pro%rama es necesario moBer datos en la memoria # en los re%istros de la UCPP
eEisten diBersas =ormas de ?acer esto: pede copiar datos de la memoria a al%n
re%istro! de re%istro a re%istro! de n re%istro a na pila! de la pila a n re%istro!
transmitir datos ?acia dispositiBos eEternos asi como recibir datos de dic?os
dispositiBos.
Este moBimiento de datos estF s;eto a re%las # restricciones. Al%nas de ellas son las
:e se citan a continaci$n.
2o es posible moBer datos de na localidad de memoria a otra directamente! es
necesario primero moBer los datos de la localidad ori%en ?acia n re%istro # le%o del
re%istro a la localidad destino.
2o se pede moBer na constante directamente a n re%istro de se%mentos! primero se
debe moBer a n re%istro de la UCP.
Es posible moBer blo:es de datos por medio de las instrcciones moBs! :e copia na
cadena de b#tes o palabrasP moBsb :e copia n b#tes de na localidad a otraP # moBsC
copia n palabras de na localidad a otra. Las dos <ltimas instrcciones toman los Balores
de las direcciones de=inidas por DS:SI como %rpo de datos a moBer # ES:DI como
neBa localiAaci$n de los datos.
Para moBer los datos tambien eEisten las estrctras llamadas pilas! en este tipo de
estrctras los datos se introdcen con la instrcci$n ps? # se eEtraen con la
instrcci$n pop
En na pila el primer dato introdcido es el <ltimo :e podemos sacar! esto es! si en
nestro pro%rama tiliAamos las instrcciones:
PUSH AX
PUSH BX
PUSH CX
Para deBolBer los Balores correctos a cada re%istro al momento de sacarlos de la pila es
necesario ?acerlo en el si%iente orden:
POP CX
POP BX
POP AX
Para la comnicaci$n con dispositiBos eEternos se tiliAan el comando ot para mandar
in=ormaci$n a n perto # el comando IN para leer in=ormaci$n recibida desde al%n
perto.
La sintaEis del comando OU es:
OU DX!AX
Donde DX contiene el Balor del perto :e se tiliAarF para la comnicaci$n # AX
contiene la in=ormaci$n :e se mandarF.
La sintaEis del comando IN es:
IN AX!DX
Donde AX es el re%istro donde se %ardarF la in=ormaci$n :e lle%e # DX contiene la
direcci$n del perto por donde lle%arF la in=ormaci$n.
5ttp7$$usuarios.lycos.es$patricio$ensam$ensam2.5tm
La orden MO0.
La =nci$n de la orden MO0 es! como s nombre da a entender! DmoBerD n
Balor. Pon%amos n e;emplo:
MO0 A8!78
Esta orden en len%a;e Ensamblador! copiarF el contenido de 78 en A8!
conserBando el Balor de 78. He a:> al%<n e;emplo mFs:
MO0 A8!DS
MO0 ES!A8
MO0 D8!A8
MO0 AL!DH
Como se Be! no se pede realiAar MO0 AL!78! #a :e en AL no cabe 78
Tambi"n se pede introdcir n Balor directamente en n re%istro. Ser>a
el caso de:
MO0 A8!(1EA)?
MO0 7L!)..
MO0 DH!('''('('b
Pon%amos e;emplos de c$mo se tiliAa la nmeraci$n. El primero
era n n<mero ?eEadecimal! el se%ndo decimal! :e no Ba acompaGado por
nada para indicarlo! # el tercero binario! con la b al =inal. A Beces!
para representar n n<mero decimal! se pone na [d[ al =inal 5p.e;.! '(d6
MFs tilidades de MO0. Podemos trans=erir b#tes :e est"n en memoria
a n re%istro! o de n re%istro a memoria. 0a#amos con los e;emplos:
MO0 A8!L78M
J pon%amos :e en 78 est" (EEEE?. En BeA de trans=erir a A8 el Balor
(EEEE?! le trans=eriremos el Balor :e ?a#a en la posici$n de memoria
CS:78P si CS por e;emplo Bale ('&/? # 78 (&)'.?! trans=erir>amos el b#te
:e ?a# en ('&/:(&)'.? # el si%iente a A8.
Se pede ?acer tambi"n al reB"sP
MO0 LA8M!C8
Escribir>amos en la direcci$n de memoria CS:A8 el Balor de C8.
J tambi"n podremos sar Balores nm"ricos:
MO0 A8!L)&).?M 5lo :e ?a# en CS:)&).?6
MO0 A8!DS:L)&).?M 5el Balor en DS:)&).?6
MO0 A8!DS:D8 5el Balor en DS:D86
MO0 D8!CS:C8 5a D8! Balor en CS:C86
MO0 78!CS:')/'? 5a 78! Balor en CS:')/'?6
Mc?as Beces! se tiliAa Xord Ptr o 7#te Ptr! :e aclaran el tamaGo a
trans=erir:
MO0 AL!7JTE PTR L78KSII&(?M
MO0 A8!XORD PTR L78KDIM
Como acabamos de Ber! es posible ?acer DsmasD de Balores al bscar
na direcci$n en memoria. Otros e;emplos ser>an:
MO0 A8!L78K&M
MO0 L7PKSIM!AH
J para acabar este apartado! ?e a:> na tablilla de e;emplos sobre MO0s :e se
peden ?acer:
\ 1ormatos de la instrcci$n MO0 \ E;emplos \
\ MO0 re%!re% \ MO0 A8!78 \
\ MO0 mem!re% \ MO0 L78M!AL \
\ MO0 re%!mem \ MO0 CH!L/(11?M \
\ MOM mem!inmed \ MO0 7JTE PTR LDIM!( \
\ MO0 re%!inmed \ MO0 78!(1111? \
\ MO0 se%re%!re%'- \ MO0 DS!A8 \
\ MO0 mem!se%re% \ MO0 LSIM!ES \
\ MO0 se%re%!mem \ MO0 SS!L')&/?M \
re%: re%istro mem:memoria inmed:n<mero inmediato
se%re%: re%istro de se%mento re%'-: re%istro de '- bits
J Bista la orden MO0! se%imos adelante.
La instruccin de transferencia de datos por excelencia es:
MOV destino, fuente
entendiendo por fuente el contenido que se va a transferir a una
determinada zona o registro de memoria denominada destino.
Esta instruccin, por tanto, nos va a permitir transferir informacion
entre registros y memoria, memoria y registros y entre los propios
registros utilizando alguno de los diferentes modos de
direccionamiento. Con la instruccin MOV diremos que se pueden
realizar todo tipo de movimientos teniendo en cuenta las siguientes
restricciones:
1.- No se puede realizar una transferencia de datos entre dos
posiciones de memoria
directamente, por esta razn, siempre que queramos efectuarlas
tendremos que utilizar un registro intermedio que haga de puente.
Por ejemplo, para hacer la operacion DATO1 <-- DATO2, la instruccin
MOV DATO2,DATO1
sera incorrecta. Lo que s sera correcto sera utilizar el registro DX, u
otro, como puente y hacer:
MOV DX,DATO1
MOV DATO2,DX
2.- Tampoco se puede hacer una transferencia directa entre dos
registros de segmento. Por eso, como en el caso anterior, si fuera
preciso se utilizara un registro como puente.
3.- Asimismo, tampoco se puede cargar en los registros de segmento
un dato utilizando direccionamiento inmediato, es decir, una constante,
por lo que tambin habr que recurrir a un registro puente cuando sea
preciso.

Una instruccin util pero no imprescindible es:
XCHG DATO1, DATO2
que intercambia los contenidos de las posiciones de memoria o
registros representadospor DATO1 y DATO2.
Por ejemplo, si queremos intercambiar los contenidos de los registros
AX y BX, podemos hacer:

MOV AUX, AX
MOV AX, BX
MOV BX, AUX
en donde AUX es una variable auxiliar que hace de puente, o
simplemente utilizar:
XCHG AX, BX
Las restricciones que presenta esta operacin es que no se pueden
efectuar intercambios directamente entre posiciones de memoria ni
tampoco entre registros de segmento.
La instruccin XLAT tabla carga en el registro AL el contenido de la
posicin [BX][AL], en donde el registro BX ha de apuntar al comienzo
de una tabla. Dichio de otra manera, AL hace de ndice de la tabla y de
almacn destino del contenido de la tabla.
Por ejemplo, el siguiente programa:
DATOS SEGMENT
TABLA DB 2,3,5,8,16,23
DATOS ENDS
CODGO SEGMENT
MOVE BX, OFFSET TABLA ; nicializa BX con la direccin donde
comienza la tabla
MOVE AL, 5
XLAT TABLA
CODGO ENDS
hace que al final el contenido de AL se 16 ya que es el 5to. elemento
de la tabla y AL antes de XLAT TABLA contenia el valor 5.
Para finalizar con las instrucciones de transferencia veremos un grupo
de tres instrucciones:
- LEA o cargar direccin efectiva.
- LDS o cargar el puntero en DS.
- LES o cargar el puntero en ES.
denominadas de transferencia de direcciones.
La primera, LEA, carga el desplazamiento u OFFSET correspondiente
al operando fuente en el operando destino. Por ejemplo, la instruccin
MOVE BX, OFFSET TABLA del ejemplo anterior sera equivalente a
LEA BX, TABLA.
La segunda, LDS, se utiliza para cargar el valor del segmento de una
variable en el registro DS y el desplazamiento correspondiente en el
registro o posicin de memoria indicada en la instruccin. Por ejemplo,
la instruccin LDS BX, NUM1 hara esquemticamente lo siguiente:
La tercera y ultima de las instrucciones, LES, es similar a LDS, con la
nica salvedad de que el valor del segmento se carga sobre el registro
de segmento ES en vez del DS.

2.M.2,ila.
nstrucciones para la pila
La pila es un grupo de localidades de memoria que se reservan con la finalidad de proporcionar
un espacio para el almacenamiento temporal de informacin.
La pila de los programas es del tipo LFO (Last n First Out, Ultimo en entrar, Primero en salir).
Para controlar la pila el microprocesador cuenta con dos instrucciones bsicas: Push (Meter) y
Pop (sacar).
El formato de estas instrucciones es el siguiente:
Push operando
Pop operando
Cuando se ejecuta la instruccin Push, el contenido del operando se almacena en la ultima
posicin de la pila.
Por ejemplo, si AX se carga previamente con el valor 5, una instruccin Push AX almacenara el
valor 5 en la ultima posicin de la pila.
Por otro lado la instruccin Pop saca el ltimo dato almacenado en la pila y lo coloca en el
operando.
Siguiendo el ejemplo anterior, la instruccin Pop BX obtendra el nmero 5 y lo almacenara en
el registro BX.
El siguiente ejemplo muestra como implementar la instruccin XCHG por medio de las
instrucciones Push y Pop. Recuerde que la instruccin XCHG intercambia el contenido de sus
dos operandos.
.COMMENT
Programa: PushPop.ASM
Autor: Juan Carlos Guzmn C.
Descripcin: Este programa demuestra el uso de las instrucciones para el manejo de la pila,
implementando la instruccin XCHG con Push y Pop
*
.MODEL tiny
.CODE
nicio: ;Punto de entrada al programa
Mov AX,5 ;AX=5
Mov BX,10 ;BX=10
Push AX ;Pila=5
Mov AX,BX ;AX=10
Pop BX ;BX=5
Mov AX,4C00h ;Terminar programa y salir al DOS
nt 21h ;
END nicio
END
I2STRUCCIO2ES DE MA2E9O DE LA PILA.

POP 5eEtraer de la pila6
SintaEis: POP destino
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Trans=iere el elemento palabra :e se encentra en lo alto de la pila 5apntado
por SP6 al operando destino :e a de ser tipo palabra! e incrementa en dos el re%istro SP.
La instrcci$n POP CS! poco <til! no =nciona correctamente en los )+- # speriores.
Ejemp!os: pop aP
pop pepe

PUSH 5introdce en la pila6
SintaEis: PUSH ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Decrementa el pntero de pila 5SP6 en ) # le%o trans=iere la palabra
especi=icada en el operando ori%en a la cima de la pila. El re%istro CS a:> s> se pede
especi=icar como ori%en! al contrario de lo :e a=irman al%nas pblicaciones.
Ejemp!o: pus' cs

POP1 5eEtrae los indicadores de la pila6
SintaEis: POP1
Indicadores: ,< D< I< -< S< X< A< P< <
P P P P P P P P P
Traslada al re%istro de los indicadores la palabra almacenada en la cima de la
pilaP a continaci$n el pntero de pila SP se incrementa en dos.

PUSH1 5introdce los indicadores en la pila6
SintaEis: PUSH1
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Decrementa en dos el pntero de pila # traslada a la cima de la pila el
contenido de los indicadores.
http://meltingpot.fortunecity.com/uruguay/978/libro/04.html
LA 7ILA
La pila es na especie de Dalmac"n de BariablesD :e se encentra en na
direcci$n determinada de memoria.
2os encontramos con dos $rdenes bFsicas respecto a la pila! :e
son PUSH # POP. La orden PUSH emp;a na Bariable a la pila! # la orden POP
la saca. Sin embar%o! no podemos sacar el :e :eramos! no podemos decir
D:iero sacar el Balor de D8 :e ?e metido antes # :e =e el carto :e
met>D! por e;emplo.
La estrctra de la pila se denomina LI1O! si%las in%lesas :e indican
[Last In 1irst Ot[. Esto si%ni=ica :e al ?acer n POP! se sacarF el
<ltimo Balor introdcido en la pila. 0eamos esto con nos e;emplos:
PUSH D8 P Mete en la pila el contenido de D8
PUSH C8 P J a?ora el contenido de C8
POP A8 P A?ora saca el <ltimo Balor introdcido 5 C8 6
P# lo coloca en A8.
POP 7P P J a?ora saca en Balor anterior introdcido! :e
Pes el contenido de D8 cando ?icimos el PUSH D8
P# se lo asi%na a 7P.
A?ora! na rtina al%o mFs detallada:
MO0 D8!(&('? P D8 Bale a?ora (&(' ?eEadecimal.
PUSH D8 P Emp;a D8 a la pila. SP se decrementa en dos.
MO0 D8!(//C/? P A?ora D8 Bale (//C/?
POP C8 P J con esto! C8 Bale (&(' ?eEadecimal! el Balor
:e ?ab>amos introdcido con anterioridad.
Di;imos en la se%nda l>nea: SP se decrementa en dos. Cando por e;emplo
e;ectamos n .COM! SS es el se%mento del pro%rama 5o sea! i%al :e CS!
# si no ?an sido modi=icados! DS # ES6! # SP apnta al =inal! a (1111?.
Cando emp;amos n Balor a la pila! SP se decrementa en dos apntando a
(111D?! # en esta direcci$n :eda el Balor introdcido. Cando lo sa:emos!
se incrementarF de neBo en dos el Balor de SP! # el Balor se sacarF de
la pila.
Se pede operar con esta instrcci$n con los re%istros A8! 78! C8! D8!
SI! DI! 7P! SP! CS! DS # ESP sin embar%o no se pede ?acer n POP CS!
s$lo emp;arlo a la pila.
He a:> n e;emplo de lo :e ?ace en realidad n POP en t"rminos de MO0sP
an:e sea n %asto in<til de c$di%o! tiene s aplicaci$n! por e;emplo! para
saltarse la ?er>stica en n antiBirs! :e bsca n POP 7P # SU7 posterior.
Partamos de :e ?a# cierto Balor en la pila :e :eremos sacar.
MO0 7P!SP P A?ora 7P es i%al al o==set al :e apnta SP
MO0 7P!Xord ptr L7PM P J a?ora 7P Bale el contenido del o==set al
P:e apnta! :e al ser el o==set al :e apnta
Pel de pila! serF el Balor :e sacar>amos
P?aciendo n POP 7P.
ADD SP!) P Para acabarlo! smamos dos al Balor de o==set
Pde la pila.
J esto es lo :e ?ace n POP 7P! simplemente. Para Ber lo :e ?ace n PUSH
no ?abr>a mFs :e inBertir el proceso. 0eFmoslo.
SU7 SP!)
MO0 7P!SP
MO0 Xord ptrL7PM!D8
Como <ltima recomendaci$n! ?a# :e tener bastante cidado con los PUSH
# POP! sacar tantos Balores de la pila como se metan! # estar pendiente de
:e lo :e se saca es lo :e se tiene :e sacar. La pila bien aproBec?ada
es =ndamental para ?acer pro%ramas bien optimiAados! #a :e entre otras
cosas las instrcciones PUSH # POP solo ocpan n b#te.
Es por e;emplo mc?o me;or sar n PUSH al principio # n POP al =inal
en BeA de de;ar partes de c$di%o para almacenar Bariables! mFs Belocidad
# menos tamaGo.
J =inalmente! ?a# otras dos $rdenes interesantes respecto a la pila!
PUSH1 # POP1! :e emp;an el re%istro 5'- bits6 de =la%s # lo sacan!
respectiBamente.
2.M.3"atem/ticos.
Instr%%iones arit"Mti%as
Las catro operaciones aritm"ticas bFsicas son sma! resta! mltiplicaci$n # diBisi$n. La
ma#or>a de las comptadoras proporcionan instrcciones para
las catro operaciones. Al%nas comptadoras pe:eGas s$lo tienen las instrcciones
sma #! tal BeA! resta. La mltiplicaci$n # la diBisi$n deben %enerarse mediante
sbrtinas del so=tCare. Las catro operaciones aritm"ticas bFsicas son s=icientes para
=ormlar solciones a problemas cient>=icos cando se eEpresan en t"rminos de m"todos
de anFlisis nm"rico.
En la tabla +I, se proporciona na lista de las instrcciones aritm"ticas t>picas. La
instrcci$n de incrementar sma ' al Balor almacenado en n re%istro o palabra de
memoria. Una caracter>stica com<n de las operaciones de incrementar! cando se
e;ectan en re%istros de procesador! es :e n n<mero binario :e contiene s$lo d>%itos
'! prodce n resltado de solo d>%itos ( cando se incrementa. La instrcci$n para
Decrementar resta ' de n Balor: almacenado en n re%istro o palabra de memoria. Un
n<mero con s$lo d>%itos (! prodce n n<mero con s$lo d>%itos ' cando se decrementa.


TA7LA +I, Instrcciones aritm"ticas t>picas
2OM7RE M2EMO2ICO
Incrementar I2C
Decrementar DEC
Smar ADD
Restar SU7
Mltiplicar MUL
DiBidir DI0
Smar con acarreo ADDC
Restar con pr"stamo SU77
2e%ar 5complemento a )6 2E4
Las instrcciones smar! restar! mltiplicar # diBidir peden estar disponibles para
di=erentes tipos de datos. Los tipos de datos :e se considera :e estFn en los re%istros
del procesador drante la e;ecci$n de estas operaciones aritm"ticas! se incl#en en la
de=inici$n del c$di%o de operaci$n. Una instrcci$n aritm"tica pede especi=icar datos
de pnto =i;o o =lotante. datos binarios o decimales! datos de precisi$n <nica o de doble
precisi$n. Los di=erentes tipos de datos se presentaron en el cap>tlo &.
2o es eEtraGo encontrar comptadoras con tres o mFs instrcciones de sma: na para
enteros binarios! na para operandos de pnto =lotante # na para operandos decimales.
Ense%ida! se mestran los mnem$nicos para tres instrcciones de sma :e especi=ican
tipos de datos di=erentes.
ADDI Smar dos n<meros enteros de pnto =lotante
ADD1 Smar dos n<meros de pnto =lotante
ADDD Smar dos n<meros decimales en 7CD.
Los al%oritmos para operaciones con enteros! pnto =lotante # aritm"tica ] decimal se
desarrollan en el cap>tlo '(.
La cantidad de bits en cal:ier re%istro es de eEtensi$n =inita #! por lo tanto! los
resltados de las operaciones aritm"ticas son de precisi$n =inita. Al%nas comptadoras
proporcionan operaciones de ?ardCare de doble precisi$n! en las cales el tamaGo de
cada operando es de dos palabras de memoria. La ma#or>a de las comptadoras
pe:eGas proporcionan instrcciones especiales para =acilitar la aritm"tica de doble
precisi$n. Un =lipI=lop especial de acarreo se tiliAa para almacenar el acarreo de na
operaci$n. la instrcci$n Dsmar con acarreoD realiAa la sma de dos operandos mFs el
Balor del acarreo del cFlclo preBio. De i%al manera! la instrcci$n Drestar con
pr"stamoD resta dos palabras # n pr"stamo :e pede ?aberse prodcido de na
operaci$n de resta preBia. La instrcci$n ne%ar =orma el complemento a ) de n
n<mero! inBirtiendo en =orma e=ectiBa el si%no de n entero cando se representa en
=orma de complemento a ) con si%no.
Ntt#0OO"e"bers.fortne%it6.esOro62O%#.Nt"
Las instr%%iones ADD 6 SUB
Se trata de dos operadores :e contiene cal:ier len%a;e de
pro%ramaci$n: la sma # la resta. Tienen dos operandos! no de destino #
otro =ente. Para la sma! se sman los dos operandos # se almacena en
el primero 5destino6! # para la resta! se resta al primero el se%ndo!
almacenFndose en destino! el primero. A:> estFn al%nos =ormatos de estas
instrcciones:
ADD A8!78 P Smar>a A8 # 78 # lo %ardar>a en A8
ADD LA8M!78 P Sma el contenido de la direcci$n de A8 a 78!
P# se almacena en la direcci$n de A8
ADD A8!L78M P Se sman A8 # el contenido de la direcci$n de
P78! # se almacena ^esta sma en A8
ADD A8!& P Lo mismo pero tiliAando n Balor inmediato
Pen BeA de la 78 seGalada anteriormente.
SU7 CL!DL P Resta de CL el Balor de DL! # se almacena en CL
SU7 LC8M!D8 P Se resta al contenido de la direcci$n de C8
Pel Balor de D8! # se almacena en la dir. de C8
SU7 C8!)&? P Se resta de C8 el Balor )&?! # :eda en C8 el
Presltado
YJ si el resltado eEcede lo :e pede contener el b#te! o la palabra_.
Esto se pede saber mediante los =la%s! :e trataremos mFs adelante.
Tambi"n es resaltable :e separa con P los comentarios. 7ien!
"sta es la manera en Ensamblador de poner comentarios! como ser>a en 7asic
la orden DREMD! o en C la conBenci$n D@` L...M `@D
..I&.I 2E4! 2OT # operaciones l$%icas
2e% pone el re%istro o el l%ar al :e apnta en memoria en ne%atiBo
se%<n la aritm"tica de complemento a dos tal :e : 2E4 A8 o 2E4 LA8M
2ot es la :e! como Bimos! DinBierteD los Balores de los bits. J el
resto de operaciones l$%icas tambi"n las Bimos anteriormente. Pondremos a?ora
tan s$lo s sintaEis:
2OT SI P 5o 2ot A8! etc.!... o sea! con n re%istro6
2OT Xord ptr es:LaEM P Lo realiAa sobre la palabra 5 ) b#tes 6
P:e se encentra en es:LaEM
A2D A8!78 P E=ect<a n A2D entre A8 # 78! almacenando
Pel resltado en A8 5 siempre en el primer
Pt"rmino 6
A2D LA8M!78 P Lo dic?o! pero A8 apnta a n l%ar de
Pmemoria
A2D A8!L78M
A2D 7#te ptr L'.M!& P Un A2D en la direcci$n :(('. con lo :e
P?a#a a?a # el Balor D&D
OR A8!78
OR LA8M!78
OR 7#te ptr L'.M!&
OR DH!..? PTambi"n podr>a ?acerse en el A2D! se
Pcon=rontan DH # ..? en n OR.
J todo lo dic?o para OR # A2D Bale para 8OR! de tal manera
:e las operaciones son realiAables entre:
Re%istro # re%istro C8!D8
L%ar de memoria # re%istro LD8M!78
Re%istro # l%ar de memoria A8!LSIM
L%ar de memoria # n<mero Cord ptr ES:LA8M!(D.&&?
Re%istro # n<mero A8!(CD&)?
4.E+.E M$ti#$i%a%i8n 6 diPisi8n, MUL 6 DIV
Estas operaciones mltiplican al acmlador por el operando indicado.
Si el operando es de + bits 5' b#te6! el acmlador es AL. Si el
operando es de '- bits! el acmlador es A8. El resltado se almacena
en A8 o en el par D8IA8 respectiBamente! si el operando es de + bits o
'- bits.
Tambi"n tendremos :e di=erenciar entre dos tipos de mltiplicaciones
# diBisiones :e entiende el procesador. Los :e comienAan con na I
operan con n<meros con si%no! si :eremos sar n<meros ne%atiBos!
# los :e no! con n<meros sin si%no.
0isto esto! podremos decir :e:
MUL 7#te Ptr LC8M
0a a mltiplicar el b#te :e ?a# en la direcci$n :e marca C8 por el
contenido :e ?a# en AL! # na BeA ?ec?o esto! Ba a almacenarlo en A8.
MUL SI
Mltiplicar>a SI por el contenido de A8! almacenFndose en el par A8ID8.
La palabra sperior! de mFs Balor! se deBolBer>a en D8! # la in=erior
en A8.
IMUL SI
Esto # el e;emplo anterior ser>a lo mismo! s$lo :e operando con
n<meros con si%no.
Para la diBisi$n! el diBidendo ?a de estar en A8! # ser '- bits por
tanto. El diBisor se indica en el operando! por e;emplo en DI0 7LP este
diBisor estar>a en 7L. Se diBidir>a A8 entre 7L # el resltado :edar>a en
AL! :edando el resto en AH. 0amos a Ber al%<n e;emplo.
En la diBisi$n de n n<mero de diecis"is bits entre otro de + bits! el
cociente # resto serFn de + bits 5' b#te6. El diBidendo ?a de estar en A8!
# el diBisor es el operando de la instrcci$n! :e pede ser n re%istro o
n sitio en la memoria! # se necesita poner lo de b#te ptr.
O sea! ser>a tal :e:
DI0 CL o IDI0 7JTE PTR ES:L7PM
El resltado se deBelBe en AL! # el resto en AH. Si por e;emplo A8
Baliese .('d # cl Baliese )! al ?acer el DI0 CL! en AL :edar>a ).. # en AH
:edar>a '.
Se pede diBidir tambi"n n n<mero de &) bits 5/ b#tes6 entre otro de
'- bits 5) b#tes6! con lo :e cociente # resto ser>an de '- bits. El
diBidendo estar>a =ormado por el par D8@A8. Al ?acer por e;emplo n:
DI0 SI
Se diBidir>a D8IA8 entre SI! almacenFndose el resltado en A8! # el resto
en D8. Por e;emplo:
Si en D8 estF el Balor ((&1? # en A8 ....?! el par ser>a &1....?! con lo
:e al diBidirlo por SI 5:e pon%amos :e Bale (CCC/?6! se almacenar>a en
A8 el resltado # en D8 el resto.
5ttp7$$platea.pntic.mec.es$\jdelucas$ensamblador.5tm
SU"0 F &EST0.
Las instrucciones ADD y SUB realizan sumas y restas sencillas de
datos binarios. Los nmeros binarios negativos estn representados
en la forma de complemento a dos: nvierta todos los bits del numero
positivo y sume 1. Los formatos generales para las instrucciones ADD
y SUB son:
Como en otras instrucciones, no existen operaciones directas de
memoria a memoria. El ejemplo siguiente utiliza el registro AX para
sumar WORDA a WORDB:

WORDA DW 123 ;Define WORDA
WORDB DW 25 ;Define WORDB
. . .
MOV AX, WORDA ;Mueve WORDA al AX
ADD AX, WORDB ;Suma WORDB al AX
MOV WORDB, AX ;Mueve AX a WORDB
La figura 6.1. proporciona ejemplos de ADD y SUB para el
procesamiento de valores en un byte y en una palabra. El
procedimiento B10ADD utiliza ADD para procesar bytes y el
procedimiento C10SUB utiliza SUB para procesar palabras.

TTLE P13ADD (COM) Operaciones ADD y SUB
.MODEL SMALL
.CODE
ORG 100H
BEGN: JMP SHORT MAN
;----------------------------------------------------------------------------
BYTEA DB 64H ;DATOS
BYTEB DB 40H
BYTEC DB 16H
WORDA DW 4000H
WORDB DW 2000H
WORDC DW 1000H
;----------------------------------------------------------------------------
MAN PROC NEAR ;Procedimiento principal:
CALL B10ADD ;Llama a la rutina ADD
CALL C10SUB ;Llama a la rutina SUB
NT 21H
MAN ENDP
; Ejemplos de suma (ADD) de bytes:
;----------------------------------------------------------------------------
B10ADD PROC
MOV AL, BYTEA
MOV BL, BYTEB
ADD AL, BL ;registro a registro
ADD AL, BYTEC ;memoria a registro
ADD BYTEA, BL ;registro a memoria
ADD BL, 10H ;inmediato a registro
ADD BYTEA, 25H ;inmediato a memoria
RET
B10ADD ENDP
; Ejemplos de resta (SUB) de palabras:
;----------------------------------------------------------
C10SUB PROC
MOV AX, WORDA
MOV BX, WORDB
SUB AX,BX ;Registro a registro
SUB AX,WORDC ;Memora de registro
SUB WORDA, BX ;Registro de memoria
SUB BX, 1000H ;nmediato de registro
SUB WORDA, 256H ;nmediato de memoria
RET
C10SUB ENDP
END BEGN

)esbordamientos
Este alerta con los desbordamientos en las operaciones aritmticas.
Ya que un byte solo permite el uso de un bit de signo y siete de datos
(desde -128 hasta +127), una operacin aritmtica puede exceder con
facilidad la capacidad de un registro de un byte. Y una suma en el
registro AL, que exceda su capacidad puede provocar resultados
inesperados.

Q Q Q S U M A Q Q Q

AAA 5a;ste ASCII para la sma6
SintaEis: AAA
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R 3 3 P 3 P
ConBierte el contenido del re%istro AL en n n<mero 7CD no empa:etado. Si
los catro bits menos si%ni=icatiBos de AL son ma#ores :e * $ si el indicador A1 estF a
'! se sma - a AL! ' a AH! A1 se pone a '! C1 se i%ala a A1 # AL pone ss catro bits
mFs si%ni=icatiBos a (.
Ejemp!o: add a!,&!
aaa
En el e;emplo! tras la sma de dos n<meros 7CD no empa:etados colocados
en AL # 7L! el resltado 5por medio de AAA6 si%e siendo n n<mero 7CD no
empa:etado.

ADC 5sma con acarreo6
SintaEis: ADC destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
Sma los operandos ori%en! destino # el Balor del indicador de acarreo 5( $ '6
# el resltado lo almacena en el operando destino. Se tiliAa normalmente para smar
n<meros %randes! de mFs de '- bits! en Barios pasos! considerando lo que nos lle"amos
5el acarreo6 de la sma anterior.
Ejemp!o: adc aP,&P

ADD 5sma6
SintaEis: ADD destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
Sma los operandos ori%en # destino almacenando el resltado en el operando
destino. Se actiBa el acarreo si se desborda el re%istro destino drante la sma.
Ejemp!os: add aP,&P
add c!,d'

DAA 5a;ste decimal para la sma6
SintaEis: DAA
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R P P P P P
ConBierte el contenido del re%istro AL en n par de Balores 7CD: si los catro
bits menos si%ni=icatiBos de AL son n n<mero ma#or :e *! el indicador A1 se pone a
' # se sma - a AL. De i%al =orma! si los catro bits mFs si%ni=icatiBos de AL tras la
operaci$n anterior son n n<mero ma#or :e *! el indicador C1 se pone a ' # se sma
-(? a AL.
Ejemp!o: add a!,c!
daa
En el e;emplo anterior! si AL # CL conten>an dos n<meros 7CD
empa:etados! DAA ?ace :e el resltado de la sma 5en AL6 si%a siendo tambi"n n
7CD empa:etado.

I2C 5incrementar6
SintaEis: I2C destino
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P R
Incrementa el operando destino. El operando destino pede ser b#te o palabra.
Obs"rBese :e esta instrcci$n no modi=ica el bit de acarreo 5C16 # no es posible
detectar n desbordamiento por este procedimiento 5til>cese 316.
Ejemp!os: inc a!
inc es:?di@
inc ss:?&p".@
inc Yord ptr cs:?&P"di"F@
Q Q Q R E S T A Q Q Q

AAS 5a;ste ASCII para la resta6
SintaEis: AAS
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R 3 3 P 3 P
ConBierte el resltado de la sstracci$n de dos operandos 7CD no
empa:etados para :e si%a siendo n n<mero 7CD no empa:etado. Si el nibble
in=erior de AL tiene n Balor ma#or :e *! de AL se resta -! se decrementa AH! A1 se
pone a ' # C1 se i%ala a A1. El resltado se %arda en AL con los bits de / a , pestos
a (.
Ejemp!o: su& a!,&!
aas
En el e;emplo! tras la resta de dos n<meros 7CD no empa:etados colocados
en AL # 7L! el resltado 5por medio de AAS6 si%e siendo n n<mero 7CD no
empa:etado.

CMP 5comparaci$n6
SintaEis: CMP destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
Resta ori%en de destino sin retornar nin%<n resltado. Los operandos :edan
inalterados! paro los indicadores peden ser consltados mediante instrcciones de
bi=rcaci$n condicional. Los operandos peden ser de tipo b#te o palabra pero ambos de
la misma dimensi$n.
Ejemp!o: cmp &P, mem7pa!
cmp c',c!

DAS 5a;ste decimal para la resta6
SintaEis: DAS
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R P P P P P
Corri%e el resltado en AL de la resta de dos n<meros 7CD empa:etados!
conBirti"ndolo tambi"n en n Balor 7CD empa:etado. Si el nibble in=erior tiene n
Balor ma#or :e * o A1 es '! a AL se le resta -! A1 se pone a '. Si el nibble mas
si%ni=icatiBo es ma#or :e * $ C1 estF a '! entonces se resta -(? a AL # se actiBa
desp"s C1.
Ejemp!o: su& a!,&!
das
En el e;emplo anterior! si AL # 7L conten>an dos n<meros 7CD
empa:etados! DAS ?ace :e el resltado de la resta 5en AL6 si%a siendo tambi"n n
7CD empa:etado.

DEC 5decrementar6
SintaEis: DEC destino
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P R
Resta na nidad del operando destino. El operando pede ser b#te o palabra.
Obs"rBese :e esta instrcci$n no modi=ica el bit de acarreo 5C16 # no es posible
detectar n desbordamiento por este procedimiento 5til>cese 316.
Ejemp!o: dec aP
dec mem7&yte

2E4 5ne%aci$n6
SintaEis: 2E4 destino
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
Calcla el Balor ne%atiBo en complemento a dos del operando # deBelBe el
resltado en el mismo operando.
Ejemp!o: neg a!

S77 5resta con acarreo6
SintaEis: S77 destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
Resta el operando ori%en del operando destino # el resltado lo almacena en el
operando destino. Si estF a ' el indicador de acarreo ademFs resta na nidad mFs. Los
operandos peden ser de tipo b#te o palabra. Se tiliAa normalmente para restar
n<meros %randes! de mFs de '- bits! en Barios pasos! considerando lo que nos lle"amos
5el acarreo6 de la resta anterior.
Ejemp!o: s&& aP,aP
s&& c',d'

SU7 5resta6
SintaEis: SU7 destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
Resta el operando destino al operando ori%en! colocando el resltado en el
operando destino. Los operandos peden tener o no si%no! siendo necesario :e sean del
mismo tipo! b#te o palabra.
Ejemp!os: su& a!,&!
su& dP,dP
Q Q Q M U L T I 7 L I C A C I O N Q Q Q

AAM 5a;ste ASCII para la mltiplicaci$n6
SintaEis: AAM
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R P P 3 P 3
Corri%e el resltado en A8 del prodcto de dos n<meros 7CD no
empa:etados! conBirti"ndolo en n Balor 7CD tambi"n no empa:etado. En AH sit<a
el cociente de AL@'( :edando en AL el resto de dic?a operaci$n.
Ejemp!o: mu! &!
aam
En el e;emplo! tras el prodcto de dos n<meros 7CD no empa:etados
colocados en AL # 7L! el resltado 5por medio de AAA6 si%e siendo! en A8! n
n<mero 7CD no empa:etado.

IMUL 5mltiplicaci$n entera con si%no6
SintaEis: IMUL ori%en 5or#gen no pede ser operando inmediato en +(+-! s> en
)+-6
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R 3 3 3 3 P
Mltiplica n operando ori%en con si%no de lon%itd b#te o palabra por AL o
A8 respectiBamente. Si or#gen es n b#te el resltado se %arda en AH 5b#te mFs
si%ni=icatiBo6 # en AL 5menos si%ni=icatiBo6! si or#gen es na palabra el resltado es
deBelto en D8 5parte alta6 # A8 5parte ba;a6. Si las mitades mFs si%ni=icatiBas son
distintas de cero! independientemente del si%no! C1 # O1 son actiBados.
Ejemp!o: imu! &P
imu! c'

MUL 5mltiplicaci$n sin si%no6
SintaEis: MUL ori%en 5or#gen no pede ser operando inmediato6
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R 3 3 3 3 P
Mltiplica el contenido sin si%no del acmlador por el operando ori%en. Si el
operando destino es n b#te el acmlador es AL %ardando el resltado en AH # AL! si
el contenido de AH es distinto de ( actiBa los indicadores C1 # O1. Cando el operando
ori%en es de lon%itd palabra el acmlador es A8 :edando el resltado sobre D8 #
A8! si el Balor de D8 es distinto de cero los indicadores C1 # O1 se actiBan.
Ejemp!o: mu! &yte ptr ds:?di@
mu! dP
mu! c!
Q Q Q D I V I S I O N Q Q Q

AAD 5a;ste ASCII para la diBisi$n6
SintaEis: AAD
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R P P 3 P 3
ConBierte dos n<meros 7CD no empa:etados contenidos en AH # AL en n
diBidendo de n b#te :e :eda almacenado en AL. Tras la operaci$n AH :eda a cero.
Esta instrcci$n es necesaria A2TES de la operaci$n de diBidir! al contrario :e AAM.
Ejemp!o: aad
di$ &!
En el e;emplo! tras conBertir los dos n<meros 7CD no empa:etados 5en A86
en n diBidendo BFlido! la instrcci$n de diBidir %enera n resltado correcto.

DI0 5diBisi$n sin si%no6
SintaEis: DI0 ori%en 5or#gen no pede ser operando inmediato6
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R 3 3 3 3 3
DiBide! sin considerar el si%no! n n<mero contenido en el acmlador # s
eEtensi$n 5AH! AL si el operando es de tipo b#te o D8! A8 si el operando es palabra6
entre el operando =ente. El cociente se %arda en AL o A8 # el resto en AH o D8
se%<n el operando sea b#te o palabra respectiBamente. D8 o AH deben ser cero antes de
la operaci$n. Cando el cociente es ma#or :e el resltado mFEimo :e pede
almacenar! cociente # resto :edan inde=inidos prodci"ndose na interrpci$n (. En
caso de :e las partes mFs si%ni=icatiBas del cociente ten%an n Balor distinto de cero se
actiBan los indicadores C1 # O1.
Ejemp!o: di$ &!
di$ mem7pa!

IDI0 5diBisi$n entera6
SintaEis: IDI0 ori%en 5or#gen no pede ser operando inmediato6
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R 3 3 3 3 3
DiBide! considerando el si%no! n n<mero contenido en el acmlador # s
eEtensi$n entre el operando =ente. El cociente se almacena en AL o A8 se%<n el
operando sea b#te o palabra # de i%al manera el resto en AH o D8. D8 o AH deben ser
cero antes de la operaci$n. Cando el cociente es positiBo # sperior al Balor mFEimo
:e pede almacenarse 5,=? $ ,===?6! o cando el cociente es ne%atiBo e in=erior al Balor
m>nimo :e pede almacenarse 5+'? +(('?6 entonces cociente # resto :edan
inde=inidos! %enerFndose na interrpci$n (! lo :e tambi"n scede si el diBisor es (.
Ejemp!o: idi$ &!
idi$ &P
Q Q Q C O N V E R S I O N E S Q Q Q

C7X 5conBersi$n de b#te en palabra6
SintaEis: C7X
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Copia el bit , del re%istro AL en todos los bits del re%istro AH! es decir!
eEpande el si%no de AL a A8 como paso preBio a na operaci$n de '- bits.

CXD 5conBersi$n de palabra a doble palabra6
SintaEis: CXD
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
EEpande el si%no del re%istro A8 sobre el re%istro D8! copiando el bit mFs
si%ni=icatiBo de AH en todo D8.
5ttp7$$meltingpot.!ortunecity.com$uruguay$BMH$libro$;4.5
tml
2.M.40justes.
Las instr%%iones INC 6 DEC0
Son las mFs bFsicas a la ?ora de ?acer operaciones con re%istros: I2C
incrementa el Balor de n re%istro!o de cal:ier posici$n en
memoria! en na nidad! # DEC lo decrementa. 0eamos:
I2C A8
Incrementa en no el Balor de A8
I2C XORD PTR L78K/M
Incrementa la palabra sitada en CS:L78K/M en no.
DEC A8
Decrementa A8! le resta no.
DEC XORD PTR L78K/M
Decrementa la palabra sitada en CS:L78K/M en na nidad.
Estas dos instrcciones! e:iBalentes a DaKKD en C! nos
serBirFn bastante como contadores para bcles.
5ttp7$$platea.pntic.mec.es$\jdelucas$ensamblador.5tm
2.M.#omparacin.
INSTRUCCIONES DE COM7ARACION
2os Ban a serBir para realiAar las comparaciones! # son:
CMP # TEST
CMP compara dos re%istros! o n re%istro # na direcci$n de memoria.
Tiene el mismo =ormato :e el SU7 5por e;emplo CMP A8!786! tan s$lo :e
nin%no de los re%istros es alterado. Si por e;emplo son i%ales! el =la%
de cero se pondrF en no. Es en realidad n SU7 del :e no se almacena el
resltado.
TEST! comprobar! se pede realiAar con el mismo =ormato de A2D! #a :e
es e:iBalente a ella! tan s$lo :e no se %arda el resltado! an:e s> se
modi=ican los =la%s.
J en el pr$Eimo cap>tlo Beremos c$mo se aplican estos =la%s! # c$mo
realiAar los saltos comparatiBos.
20 I=ST&UI1= ",
La instruccin CMP pro lo comn es utilizada para comparar dos
campos de datos, uno de los cuales estn contenidos en un registro.
El formato general para CMP es:


| [etiqueta:] | CMP | {registro/memoria},
{registro/memoria/inmediato} |
El resultado de una operacin CMP afecta la banderas AF, CF, OF, PF,
SF y ZF, aunque no tiene que probar estas banderas de forma
individual. El cdigo siguiente prueba el registro BX por un valor cero:
X CMP BX, 00 ;Compara Bx con cero
JZ B50 ;Si es cero salta aB50
. ;(Accin si es diferente de cero)
.
B50: ... ;Destino del salto, si BX es cero
Si el BX tiene cero, cmp establece ZF a 1 y puede o no cambiar la
configuracin de otras banderas. La instruccin JZ (salta si es cero)
solo prueba la bandera ZF. Ya que ZF tiene 1 (que significa una
condicin cero), JZ transfiere el control (salta) a la direccin indicada
por el operando B50.
Observe que la operacin compara el primer operando con el
segundo; por ejemplo, el valor del primer operando es mayor que,
igual o menor que el valor del segundo operando?

20 I=ST&UI1= ",S
CMPS compara el contenido de una localidad de memoria
(direccionada por DS:S). Dependiendo de la bandera de direccin,
CMPS incrementa o disminuye tambin los registros S y D en 1 para
bytes, en 2 para palabras y en 4 para palabras dobles. La operacin
establece las banderas AF, CF, OF, PF, SF y ZF.
Cuando se combinan con un prefijo REP y una longitud en el CX, de
manera sucesiva CMPS puede comparar cadenas de cualquier
longitud.
Pero observe que CMPS proporciona una comparacin alfanumrica,
esto es, una comparacin de acuerdo a con los valores ASC.
Considere la comparacin de dos cadenas que contienen JEAN y
JOAN. Una comparacin de izquierda a derecha, tiene el resultado
siguiente:

J:J guales
E:O Diferentes (E es menor)
A:A guales
N:N guales
Una comparacin de los 4 bytes termina con una comparacin de N
con N (iguales). Ahora ya que los dos nombres no son idnticos, la
operacin debe terminar tan pronto como la comparacin entre 2
caracteres sea diferente.
Algunas derivaciones de CMPS son las siguientes:
CMPSB. Compara bytes.
CMPSD. Compara palabras dobles.
CMPSW. Compara palabras.
A continuacin se muestra la codificacin del uso del CMPS y sus
derivaciones:

TTLE P12CMPST (COM) Uso de CMPS para operaciones en
cadenas
.MODEL SMALL
.CODE
ORG 100H
BEGN: JMP SHORT MAN
;-------------------------------------------------------------------------------------
NOM1 DB 'Assemblers' ;Elementos de datos
NOM2 DB 'Assemblers'
NOM3 DB 10 DUP (' ')
;-------------------------------------------------------------------------------------
MAN PROC NEAR ;Procedimiento principal
CLD ;zquierda a derecha
MOV CX, 10 ;niciar para 10 bytes
LEA D, NOM2
LEA S, NOM1
REPE CMPSB ;Compare NOM1:NOM2
JNE G20 ;No es igual, saltarlo
MOV BH,01 ;gual, fijar BH
G20:
MOV CX, 10 ;niciar para 10 bytes
LEA D, NOM3
LEA S, NOM2
REPE CMPSB ;Compare NOM2:NOM3
JE G30 ;gual, salir
MOV BL, 02 ;No es igual, fijar BL
G30:
MOV AX, 4C00H ;Salir a DOS
NT 21H
MAN ENDP
END BEGN
2.H Saltos.
Salto. Este trmino suele aplicarse sobre todo en programacin, donde suele
distinguirse entre salto incondicional y salto condicional.
El salto incondicional sera aquella instruccin del programa que nos enva a
otra parte del programa sin tener en cuenta ninguna condicin.
Al contrario, el salto condicional sera una, o varias instrucciones, que
comprobaran primero una condicin; si esta condicin es cierta salta a una
parte del programa, si es falsa a otra.
Una instruccin muy conocida en programacin (por aparecer en muchos
lenguajes) es GOTO, que sera la instruccin de salto incondicional por
excelencia. No se suele recomendar mucho su uso (o nada), pues su
utilizacin implica la creacin de un cdigo fuente para el programa, poco
estructurado.
5ttp7$$(((.la(ebdelprogramador.com$diccionario$mostrar.p5p>letra?C
8er arc5i+o7saltos.doc
Saltos! ciclos # procedimientos
Los saltos incondicionales en n pro%rama escrito en len%a;e ensamblador estFn dados
por la instrcci$n ;mp! n salto es alterar el =l;o de la e;ecci$n de n pro%rama
enBiando el control a la direcci$n indicada.
Un ciclo! conocido tambien como iteraci$n! es la repetici$n de n proceso n cierto
n<mero de Beces ?asta :e al%na condici$n se cmpla. En estos ciclos se tiliAan los
brincos condicionales basados en el estado de las banderas. Por e;emplo la instrcci$n
;nA :e salta solamente si el resltado de na operaci$n es di=erente de cero # la
instrcci$n ;A :e salta si el resltado de la operaci$n es cero.
Por <ltimo tenemos los procedimientos o rtinas! :e son na serie de pasos :e se
saran repetidamente en el pro%rama # en l%ar de escribir todo el con;nto de pasos
nicamente se les llama por medio de la instrcci$n call.
Un procedimiento en ensamblador es a:el :e inicie con la palabra Proc # termine con
la palabra ret.
Realmente lo :e scede con el so de la instrcci$n call es :e se %arda en la pila el
re%istro IP # se car%a la direcci$n del procedimiento en el mismo re%istro! conociendo
:e IP contiene la localiAaci$n de la si%iente instrcci$n :e e;ectara la UCP!
entonces podemos darnos centa :e se desB[a el =l;o del pro%rama ?acia la direcci$n
especi=icada en este re%istro. Al momento en :e se lle%a a la palabra ret se saca de la
pila el Balor de IP con lo :e se deBelBe el control al pnto del pro%rama donde se
inBocb al procedimiento.
Es posible llamar a n procedimiento :e se encentre bicado en otro se%mento! para
"sto el contenido de CS 5:e nos indica :e se%mento se estF tiliAando6 es emp;ado
tambi"n en la pila.
5ttp7$$usuarios.lycos.es$patricio$ensam$ensam2.5tm
Hasta este punto los programas que hemos examinado han sido
ejecutados en forma lineal, esto es con una instruccin
secuencialmente a continuacin de otra. Sin embargo, rara vez un
programa programable es tan sencillo. La mayora de los programas
constan de varios ciclos en los que una serie de pasos se repite hasta
alcanzar un requisito especifico y varias pruebas para determinar que
accin se realiza de entre varias posibles.
Requisitos como este implican la transferencia de control a la direccin
de una instruccin que no sigue de inmediato de la que se esta
ejecutando actualmente. Una transferencia de control puede ser hacia
adelante, para ejecutar una serie de pasos nuevos, o hacia atrs, para
volver a ejecutar los mismos pasos.
Ciertas instrucciones pueden transferir el control fuera del flujo
secuencial normal aadiendo un valor de desplazamiento al P.

)irecciones orta- cercana y lejana
Una operacin de salto alcanza una direccin corta por medio de un
desplazamiento de un byte, limitado a una distancia de -128 a 127
bytes. Una operacin de salto alcanza una direccin cercana por
medio de un desplazamiento de una palabra, limitado a una distancia
de -32, 768 a 32, 767 bytes dentro del mismo segmento. Una direccin
lejana puede estar en otro segmento y es alcanzada por medio de una
direccin de segmento y un desplazamiento; CALL es la instruccin
normal para este propsito.
La tabla siguiente indica las reglas sobre distancias para la
operaciones JMP, LOOP y CALL. Hay poca necesidad de memorizar
estas reglas, ya que el uso normal de estas instrucciones en rara
ocasin causa problemas.
EtiEuetas de instrucciones
Las instrucciones JMP, Jnnn (salto condicional) y LOOP requieren un
operando que se refiere a la etiqueta de una instruccin. El ejemplo
siguiente salta a A90, que es una etiqueta dada a una instruccin
MOV:

JMP A90
. . .
A90: MOV AH, 00
. . .
La etiqueta de una instruccin, tal como A90:, terminada con dos
puntos (:) para darle atributo de cercana - esto es, la etiqueta esta
dentro de un procedimiento en el mismo segmento de cdigo.
uidado: Un error comn es la omisin de los dos puntos. Note que
una etiqueta de direccin en un operando de instruccin (como JMP
A90) no tiene un carcter de dos puntos.
2.H.1 Incondicional.
In%ondi%iona$

CALL 5llamada a sbrtina6
SintaEis: CALL destino
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Trans=iere el control del pro%rama a n procedimiento! salBando preBiamente
en la pila la direcci$n de la instrcci$n si%iente! para poder BolBer a ella na BeA
e;ectado el procedimiento. El procedimiento pede estar en el mismo se%mento 5tipo
2EAR6 o en otro se%mento 5tipo 1AR6. A s BeA la llamada pede ser directa a na
eti:eta 5especi=icando el tipo de llamada 2EAR Ipor de=ectoI o 1AR6 o indirecta!
indicando la direcci$n donde se encentra el pntero. Se%<n la llamada sea cercana o
le;ana! se almacena en la pila na direcci$n de retorno de '- bits o dos palabras de '-
bits indicando en este <ltimo caso tanto el o==set 5IP6 como el se%mento 5CS6 a donde
BolBer.
Ejemp!os: ca!! proc1
dir dd /%///eHEF'
ca!! dYord ptr dir
En el se%ndo e;emplo! la Bariable dir almacena la direcci$n a donde saltar. De
esta <ltima manera Iconociendo s direcci$nI pede llamarse tambi"n a n Bector de
interrpci$n! %ardando preBiamente los =la%s en la pila 5PUSH16! por:e la rtina de
interrpci$n retornarF 5con IRET en BeA de con RET16 sacFndolos.

9MP 5salto6
SintaEis: 9MP direcci$n o 9MP SHORT direcci$n
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Trans=iere el control incondicionalmente a la direcci$n indicada en el
operando. La bi=rcaci$n pede ser tambi"n directa o indirecta como anteriormente
Bimos! pero ademFs pede ser corta 5tipo SHORT6 con n desplaAamiento comprendido
entre I')+ # '),P o lar%a! con n desplaAamiento de dos b#tes con si%no. Si se ?ace n
9MP SHORT # no lle%a el salto 5por:e estF demasiado ale;ada esa eti:eta6 el
ensamblador darF error. Los benos ensambladores 5como TASM6 cando dan dos
pasadas colocan all> donde es posible n salto corto! para economiAar memoria! sin :e
el pro%ramador ten%a :e ocparse de poner s$ort. Si el salto de dos b#tes! :e permite
desplaAamientos de -/ Qb en la memoria si%e siendo ins=iciente! se pede indicar con
%ar :e es lar%o 5salto a otro se%mento6.
Ejemp!os: jmp etiqueta
jmp %ar ptr etiqueta

RET @ RET1 5retorno de sbrtina6
SintaEis: RET LBalorM o RET1 LBalorM
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Retorna de n procedimiento eEtra#endo de la pila la direcci$n de la si%iente
direcci$n. Se eEtraerF el re%istro de se%mento # el desplaAamiento en n procedimiento
de tipo 1AR 5dos palabras6 # solo el desplaAamiento en n procedimiento 2EAR 5na
palabra6. si esta instrcci$n es colocada dentro de n blo:e PROCIE2DP 5como se
BerF en el si%iente cap>tlo6 el ensamblador sabe el tipo de retorno :e debe ?acer!
se%<n el procedimiento sea 2EAR o 1AR. En cal:ier caso! se pede =orAar :e el
retorno sea de tipo 1AR con la instrcci$n RET1. &alor! si es indicado permite smar
na cantidad "alor en b#tes a SP antes de retornar! lo :e es =recente en el c$di%o
%enerado por los compiladores para retornar de na =nci$n con parFmetros. Tambi"n se
pede retornar de na interrpci$n con RET1 )! para :e deBelBa el re%istro de estado
sin restararlo de la pila.
Ntt#0OO"e$ting#ot.fortne%it6.%o"Orga6OJD2O$ibroO'+.Nt"$
Condi%iona$
Las si%ientes instrcciones son de trans=erencia condicional de control a la
instrcci$n :e se encentra en la posici$n IPKdesplaAamiento 5desplaAamiento
comprendido entre I')+ # K'),6 si se cmple la condici$n. Al%nas condiciones se
peden denotar de Barias maneras. Todos los saltos son cortos # s# no alcan'a ?a# :e
apaGFrselas como sea. En negrita se realAan las condiciones mFs empleadas. Donde
interBiene S1 se consideran con si%no los operandos implicados en la <ltima
comparaci$n operaci$n aritmeticoIl$%ica! # se indican en la tabla como [c[ 5I')+ a
K'), $ I&),-+ a K&),-,6P en los demFs casos! indicados como [K[! se consideran sin
si%no 5( a ).. $ ( a -..&.6:
;AO;NBE Sa$to si "a6or )aboPe*, si no "enor o iga$ )not be$oR or eSa$*, si CFT' 6 UFT'. K
;AEO;NB Sa$to si "a6or o iga$ )aboPe or eSa$*, si no "enor )not be$oR*, si CFT'. K
;BO;NAEO;C
Sa$to si "enor )be$oR*, si no s#erior ni iga$ )not aboPe or eSa$*, si a%arreo, si
CFT,.
K
;BEO;NA
Sa$to si "enor o iga$ )not be$oR or eSa$*, si no "a6or )not aboPe*, si CFT, 8
UFT,.
K
;C!U Sa$to si C!T'.
;EO;U Sa$to si iga$ )eSa$*, si %ero )Lero*, si UFT,.
94@92LE Salto si ma#or 5%reater6! si no menor ni i%al 5not less or e:al6! si 31H( # S1H(. c
94E@92L Salto si ma#or o i%al 5%reater or e:al6! si no menor 5not less6! si S1H(. c
9L@924E Salto si menor 5less6! si no ma#or ni i%al 5not %reater or e:al6! si S1deO1. c
9LE@924 Salto si menor o i%al 5less or e:al6! si no ma#or 5not %reater6! si 31H( # S1deO1. c
;NC Sa$to si no a%arreo, si CFT'.
;NEO;NU Sa$to si no iga$, si no %ero, si UFT'.
92O Salto si no desbordamiento! si O1H(.
92P@9PO Salto si no paridad! si paridad impar! si P1H(.
92S Salto si no si%no! si positiBo! si S1H(.
9O Salto si desbordamiento! si O1H'.
9P@9PE Salto si paridad! si paridad par! si P1H'.
9S Salto si si%no! si S1H'.
SALTOS INCONDICIONALES
Empecemos por el salto sin condiciones! con el :e podremos cambiar
el control a cal:ier pnto del pro%rama. Ser>a como el D4otoD del 7asic!
simplemente trans=erir el control a otro pnto del pro%rama. La orden es
9MP 5de 9mp! salto6
Si se recerdan los re%istros CS:IP! se podrF Ber :" es
lo :e ?ace realmente la instrcci$n! # no es mFs :e incrementar o
decrementar IP para lle%ar a la Aona del pro%rama a la :e :eremos
trans=erir el control 5IP es el O==set :e indica la Aona de memoria
:e contiene la si%iente instrcci$n a e;ectar! # CS el se%mento6.
El =ormato mFs sencillo para el salto ser>a 9MP (&/)/?! lo :e saltar>a
a esa Aona. Pero es al%o comple;o calclar en :" direcci$n
Ba a estar esa instrcci$n! con lo :e tiliAaremos eti:etas. He a:>
n e;emplo:
MO0 A8!(CC&/?
MO0 CL!))?
9MP PALA2TE
0UEL0E: CMP 78!A8
9MP 1I2
PALA2TE: MO0 78!A8
9MP 0UEL0E
1I2: 8OR C8!C8
A?ora comentaremos n poco el pro%rama. Tras la primera instrcci$n!
A8 Bale (CC&/?! # tras la se%nda! CL Bale ))?. Desp"s se realiAa n salto
a la instrcci$n eti:etada con DPALA2TED. La eti:eta ?a de estar
continada por dos pntos [:[! # pede ser llamada desde cal:ier l%ar del
pro%rama. Tambi"n podremos ?acer n MO0 A8!LPALA2TEM! como ?ac>amos antes
con n MO0 A8!L78M! pero asi%nando a A8 el Balor :e ?a#a en la direcci$n
en la :e estF DPALA2TED.
El caso es :e tras el salto a DPALA2TED! se copia el Balor del re%istro 78
en A8! # se BelBe a D0UEL0ED. Se realiAa na comparaci$n entre A8 # 78! :e
pondrF el =la% de cero a ' 5recordemos la anterior lecci$n6! se saltarF
a D1I2D! donde tan s$lo se realiAarF la orden 8or C8!C8 c#o resltado! por
cierto! es poner C8 a cero! ten%a el Balor :e ten%a.
0olBamos con la sintaEis del 9MP con al%nos e;emplos de c$mo tiliAarlo:
9MP '((?
Salta a la direcci$n '((?. Un arc?iBo .COM comienAa normalmente en esa
direcci$n! as> :e es posible Berlo en al%nos Birs.
9MP ./)A?:'((?
Salta a la direcci$n '((? pero del se%mento ./)A?.
9MP SHORT ))&A?
Salto corto a la direcci$n ))&A?.
9MP 2EAR ..AA?
Salto cercano! es di=erente al corto
9MP L'((?M
Salta a la direcci$n contenida en '((?. Sin embar%o es n error! #a :e
no se especi=ica si es cercano! le;ano! si se lee n solo b#te!es decir!
esta instrcci$n no es BFlida.
9MP XORD PTR L78M
A?ora s> Bale. Salta a la direcci$n contenida en la palabra 5dos
b#tes6 a la :e apnta 78. O sea! si 78 Baliese &((? # en &((? los dos
b#tes =esen (CC&&?! el 9MP saltar>a a esta direcci$n.
9MP DXORD PTR L78KSIK.M
DCord son &) bits! o sea! n salto le;ano. J saltar>a al contenido en
la direcci$n de memoria a la :e apntan la sma de 78!SI # ..
0eamos el si%ni=icado de los saltos le;anos! cercanos # cortos. El
salto corto se realiAa entre el pnto en el :e se estF # K'), o I')+! o
sea! la cantidad :e se pede contener en n b#te con si%no. A Beces
es necesario indicar :e se trata de salto corto! cercano o le;ano.
El salto cercano se realiAa contando como distancia el contenido de dos
b#tes! o sea! :e el ran%o ser>a desde &),-, a I&),-+ b#tes de distancia.
J el le;ano se realiAa contando como distancia el contenido de catro
7#tes.
Por e;emplo! es incorrecto :e ?a#a en la direcci$n '((? na instrcci$n
:e di%a 9MP SHORT .((?! #a :e la distancia no corresponde a n salto
corto. AdemFs! el salto dependiendo de :e sea cercano! corto o lar%o se
codi=ica de manera di=erente en modo ?eEadecimal.
2a instruccin C", :Salto incondicional<
Una instruccin usada comnmente para la transferencia de control es
la instruccin JMP (jump, salto, bifurcacin). Un salto es incondicional,
ya que la operacin transfiere el control bajo cualquier circunstancia.
Tambin JMP vaca el resultado de la instruccin previamente
procesada; por lo que, un programa con muchas operaciones de salto
puede perder velocidad de procesamiento. El formato general para
JMP es:

| [etiqueta] | JMP | direccin corta,
cercana o lejana |

Una operacin JMP dentro del mismo segmento puede ser corta o
cercana (o de manera tcnica, lejana, si el destino es un
procedimiento con el atributo FAR). En su primer paso por un
programa fuente, el ensamblador genera la longitud de cada
instruccin. Sin embargo, una instruccin JMP puede ser de dos o tres
bytes de longitud. Una operacin JMP a una etiqueta dentro de -128 a
+ 127 bytes es un salto corto.
El ensamblador genera un byte para la operacin (EB) y un byte para
el operando. El operando acta como un valor de desplazamiento que
la computadora suma al registro P cuando se ejecuta el programa. El
ensamblador ya puede haber encontrado el operando designado (un
salto hacia atrs) dentro de -128 bytes, como en:

A50:
. . .
JMP A50
En este caso, el ensamblador genera una instruccin de maquina de
dos bytes. Una JMP que excede -128 a 127 bytes se convierte en un
salto cercano, para que el ensamblador genere un cdigo de maquina
diferente (E9) y un operando de dos bytes (procesadores 8088/8086)
o un operando de cuatro bytes (procesadores 80386 y posteriores). En
un salto hacia adelante, el ensamblador aun no ha encontrado el
operando designado:

JMP A90
. . .
A90:
Ya que algunas versiones del ensamblador no saben en este punto si
el salto es corto o cercano, generan de forma automtica una
instruccin de tres bytes.

Page 60,132
TTLE P08JUMP (COM) Uso de JMP para iterar
.MODEL SMALL
.CODE
ORG 100H
MAN PROC NEAR
MOV AX,01 ;niciacin de AX,
MOV BX,01 ;BX y
MOV CX,01 ;CX a 01
A20:
ADD AX, 01 ;Sumar 01 a AX
ADD BX, AX ;Sumar AX a BX
SHL CX, 1 ;Multiplicar por dos a CX
JMP A20 ;Saltar a la etiqueta A20
MAN ENDP
END MAN


2a instruccin 211,
La instruccin LOOP, requiere un valor inicial en el registro CX. En
cada iteracin, LOOP de forma automtica disminuye 1 de CX. Si el
valor en el CX es cero, el control pasa a la instruccin que sigue; si el
valor en el CX no es cero, el control pasa a la direccin del operando.
La distancia debe ser un salto corto, desde -128 hasta +127 bytes.
Para una operacin que exceda este limite, el ensamblador enva un
mensaje como "salto relativo fuera de rango". El formato general de la
instruccin LOOP es:

| [etiqueta:] | LOOP |
direccin corta |

El siguiente programa muestra el funcionamiento de la instruccin
LOOP.


Page 60,132
TTLE P08LOOP (COM) lustracin de LOOP
.MODEL SMALL
.CODE
ORG 100H
MAN PROC NEAR
MOV AX,01 ;niciacin de AX,
MOV BX,01 ;BX y
MOV CX,01 ;CX a 01
MOV CX,10 ;niciar
A20: ;Nmero de iteraciones
ADD AX, 01 ;Sumar 01 a AX
ADD BX, AX ;Sumar AX a BX
SHL DX, 1 ;Multiplicar por dos a DX
LOOP A20 ;terar si es diferente de cero
MOV AX, 4C00H ;Salida a DOS
MAN ENDP
END MAN
Existen dos variaciones de la instruccin LOOP, ambas tambin
decrementan el CX en 1. LOOPE/LOOPZ (repite el ciclo mientras sea
igual o repite el ciclo mientras sea cero) continua el ciclo mientras que
el valor en el CX es cero o la condicin de cero esta establecida.
LOOPNE/LOOPNZ (repite el ciclo mientras no sea igual o repite el
ciclo mientras sea cero) continua el ciclo mientras el valor en el CX no
es cero o la condicin de cero no esta establecida.

2.H.2ondicional.
SALTOS CONDICIONALES
YRecerdan el I1ITHE2IELSE! o el 1OR! o el XHILEIDO _
7ien! pes a:> estF lo :e sple a estas instrcciones en len%a;e
Ensamblador. Se basan completamente en los =la%s! pero estFn simpli=icados.
Los saltos podr>an resmirse en n modo D7asicD de la manera I1ITHE2I4OTO
de =orma :e cando se cmple na condici$n se salta a n sitio
determinado.
He a:> los tipos de saltos condicionales 5las letras en ma#<sclas son
las instrcciones6:
9O: 9mp i= oBer=loC. Salta si el =la% de desbordamiento estF a no
92O: 9mp i= not oBer=loC. Salta si el =la% de desbordamiento estF a
cero.
9C! 92AE! 97: Los tres sirBen para lo mismo. Si%ni=ican: 9mp i= Carr#!
9mp i= 2ot AboBe or E:al # 9mp i= 7eloC. Saltan por lo tanto si al
?aber na comparaci$n el =la% de acarreo se pone a 'P es entonces
e:iBalente a d en na operaci$n sin si%no. 0amos! :e se compara as>:
CMP '&?!'+?! saltarF! #a :e '&? es menor :e '+?. Tambi"n se selen sar
para detectar si ?bo =allo en la operaci$n! #a :e mc?as interrpciones
al acabar en =allo encienden el carr# =la%.
92C! 9AE! 927: Otros tres :e Balen eEactamente para lo mismo. 9mp i=
not Carr#! 9mp i= AboBe or E:al # 9mp i= 2ot 7eloC. Saltan por tanto si
al ?aber na comparaci$n el =la% de acarreo Bale (! o sea! es e:iBalente
al operador eH. En la comparaci$n CMP (!( o CMP '&?!')? saltarF! #a :e el
se%ndo operando es MAJOR O I4UAL :e el primero.
93 o 9E: 9mp i= 3ero o 9mp i= E:al. Salta si el =la% de cero estF a
'! o sea! si las dos instrcciones comparadas son i%ales. Saltar>a en el
caso CMP (!(
923 o 92E: 9mp i= 2ot 3ero o 9mp i= 2ot E:al. Salta si el =la% de cero
est a (! o sea! si las dos instrcciones comparadas no son i%ales.
97E o 92A: 9mp i= 7eloC or E:al o 9mp i= 2ot AboBe. Saltar>a si en
resltado de la comparaci$n el primer miembro es menor o i%al :e el
se%ndo 5 dH 6
9A o 927E: 9mp i= AboBe o 9mp i= 2ot 7eloC o= E:al. 9sto lo contrario
:e la anterior! salta si en el resltado de la comparaci$n el primer
miembro es ma#or al se%ndo.
9S: 9mp i= Si%n. Salta si el =la% de si%no estF a no.
92S: 9mp i= 2ot Si%n. Salta si el =la% de si%no estF a cero.
9P! 9PE: 9mp i= Parit# o 9mp i= Parit# EBen. Salta si el =la% de
paridad estF a no.
92P! 9PO: 9mp i= 2ot Parit#! 9mp i= Parit# Odd. Salta si el =la% de
paridad estF a cero.
9L! 924E: 9mp i= Less! 9mp i= 2ot 4reater o= E:al. Salta si en el
resltado de la comparaci$n! el primer n<mero es in=erior al se%ndo! pero
con n<meros con si%no.
94E! 92L: 9mp i= 4reater or E:al! 9mp i= 2ot Less. Salta si en el
resltado de la comparaci$n! el primer n<mero es ma#or o i%al :e el
se%ndo! pero con n<meros con si%no.
9LE! 924: 9mp i= LoCer or E:al! 9mp i= 2ot 4reater. Salta si en el
resltado de la comparaci$n! el primer n<mero es menor o i%al :e el
se%ndo! pero con n<meros con si%no.
94! 92LE: 9mp i= 4reater! 9mp i= 2ot LoCer or E:al. Salta si en el
resltado de la comparaci$n! el primer n<mero es ma#or :e el se%ndo! para
n<meros con si%no.
0eamos al%nos e;emplos de los mFs tiliAados:
MO0 A8!''''?
MO0 78!''')?
CMP A8!78 P A8 es menor :e 78
97 tirapalante P Saltar a tirapalante
HLT P Esta orden blo:ea el ordenador! ?alt
tirapalante: DEC 78 P A?ora 78 Baldr ''''?
CMP A8!78 P A?ora Balen i%al
92E Acaba P 2o saltarF! #a :e son i%ales
9E Contina P Esta BeA si
Contina: DEC 78 P A?ora 78 Bale '''(?
CMP A8!78
9E Acaba P 2o son i%ales! por tanto no saltarF
97 Acaba P 2o es menor! tampoco salta
94 Acaba P Es ma#or! a?ora SI saltarF
Acaba: 8OR A8!A8
8OR 78!78 P A8 # 78 Balen a?ora cero.
Espero :e con esto ?a#a aclarado n poco la tilidad de los saltos.
EBidentemente! a?ora al escribir sabemos cando no es menor o ma#or! pero
a Beces mediante interrpciones sacaremos Balores :e no conoceremos al ir
a pro%ramar! o :iAF lo ?a%amos de la memoria! # :erremos comprobar si
son i%ales! etc"tera.
Por cierto! :e en los saltos condicionales se pede ?acer como en los
incondicionales! o sea! =ormatos como:
9E (())?
92E ((&(?
92O AL
Sin embar%o! estamos limitados a saltos cortos! o sea! de ran%o a '),
b#tes ?acia delante o ')+ ?acia atrFs! no pdiendo sperar esta distancia.
I=ST&UI1=ES )E S02T1 1=)II1=02
El ensamblador permite usar una variedad de instrucciones de salto
condicional que transfieren el control dependiendo de las
configuraciones en el registro de banderas. Por ejemplo, puede
comparar dos campos y despus saltar de acuerdo con los valores de
las banderas que la comparacin establece. El formato general para el
salto condicional es:

| [etiqueta:] | Jnnn |
direccin corta |

Como ya se explico la instruccin LOOP disminuye el registro CX; si
es diferente de cero, transfiere el control a la direccin del operando.
podra reemplazar el enunciado LOOP A20 de la figura anterior con
dos enunciados - uno que decremente el CX y otro que realice un
salto condicional:

DEC CX ;Equivalente a LOOP
JNZ A20
. . .
DEC y JNZ realizan exactamente lo que hace LOOP. DEC decrementa
en 1 CX y pone a 1 o a 0 la bandera de cero (ZF) en el registro de
banderas. Despus JNZ prueba la configuracin de la bandera de
cero; si el CX es diferente de cero, el control pasa a A20, y si el CX es
cero el control pasa a la siguiente instruccin hacia abajo

)atos con signo y sin signo
Distinguir el propsito de los saltos condicionales debe clarificar su
uso. El tipo de datos (sin signo o con signo) sobre los que se realizan
las comparaciones o la aritmtica puede determinar cual es la
instruccin a utilizar. Un dato sin signo trata todos los bits como bits de
datos; ejemplos tpicos son las cadenas de caracteres, tal como
nombres o direcciones, y valores numricos tal como nmeros de
cliente. Un dato con signo trata el bit de mas a la izquierda como un
signo, en donde 0 es positivo y 1 es negativo.
En el ejemplo siguiente, el AX contiene 11000110 y el BX contiene
00010110. La siguiente instruccin

CMP AX, BX
compara el contenido de AX con el contenido del BX. Para datos sin
signo, el valor AX es mayor; sin embargo, para datos con signo el
valor AX es menor a causa del signo negativo.
Saltos con base en datos sin signo
Las instrucciones siguientes de salto condicional se aplican a datos sin
signo:
Cada una de estas pruebas las puede expresar en uno de dos cdigos
simblicos de operacin.

Saltos con base en datos con signo
Las instrucciones siguientes de salto condicional se aplican a datos
con signo:
,ruebas aritmOticas especiales
Las siguientes instrucciones de salto condicional tienen usos
especiales:
No espere memorizar todas estas instrucciones; sin embargo, como
recordatorio note que un salto para datos sin signo es igual, superior o
inferior, mientras que un salto para datos con signo es igual, mayor
que o menor. Los saltos que prueban banderas de acarreo, de
desbordamiento y de paridad tienen propsitos nicos.

2.B Tipos de ciclos.
?esti8n de b%$e

LOOP 5bcle6
SintaEis: LOOP desplaAamiento
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Decrementa el re%istro contador C8P si C8 es cero! e;ecta la si%iente
instrcci$n! en caso contrario trans=iere el control a la direcci$n resltante de smar a IP
K desplaAamiento. El desplaAamiento debe estar comprendido entre I')+ # K'),.
E;emplo:
mo$ cP,1/
&uc!e: .......
.......
!oop &uc!e
Con las mismas caracter>sticas :e la instrcci$n anterior:

LOOPE@LOOP3 7cle si i%al! si cero. 3H' # C8de(

LOOP2E@LOOP23 7cle si no i%al! si no cero. 3H( # C8de(
BUCLES
He a:> el e:iBalente al 1ORITOI2E8T en Ensamblador! se trata de la
orden LOOP. Lo :e ?ace esta orden es comparar C8 con ceroP si es i%al!
si%e adelante! si no lo es! BelBe al l%ar :e se indica en s operando
decrementando C8 en no. Por lo tanto! C8 serF n contador de las Beces
:e ?a de repetirse el bcle. 0eamos n e;emplo:
MO0 C8!(((.?
bcle: I2C D8
CMP D8!((((?
9E Acaba
LOOP bcle
Acaba: ...
0eamos como =nciona este pro%rama. Se meBe a C8 el Balor .?! :e Ban
a ser las Beces :e se repita el bcle. A?ora! lle%amos al cerpo del bcle.
Se incrementa D8 # se compara con (! cando es i%al salta a DAcabaD. Si
lle%a a la orden LOOP! C8 se decrementarF # saltarF a bcle. Esto se
repetirF cinco Beces. En =in! :e el pro%rama acabarF en el %rpo de
instrcciones de DAcabaD cando la comparaci$n d" n resltado positiBo o
cando el bcle se ?a#a repetido cinco Beces.
Tambi"n tiene la limitaci$n de :e s$lo realiAa saltos cortos! as> como
pede sarse como el 9MP! de la =orma:
LOOP (((&?
LOOP LALM
En resmen! la orden LOOP es la e:iBalente a CMP C8!(@923 par metro!
donde par metro es el operando de LOOP.
2.1; 1peradores 2gicos.
Operaciones l$%icas # aritm"ticas
Las instrcciones de las operaciones l$%icas son: A2D! not! or # Eor! "stas traba;an
sobre los bits de ss operandos.
Para Beri=icar el resltado de operaciones recrrimos a las instrcciones cmp # test.
Las instrcciones tiliAadas para las operaciones al%ebraicas son: para smar add! para
restar sb! para mltiplicar ml # para diBidir diB.
Casi todas las instrcciones de comparaci$n estFn basadas en la in=ormaci$n contenida
en el re%istro de banderas. 2ormalmente las banderas de este re%istro :e peden ser
directamente manipladas por el pro%ramador son la bandera de direcci$n de datos D1!
sada para de=inir las operaciones sobre cadenas. Otra :e tambien pede ser
maniplada es la bandera I1 por medio de las instrcciones sti # cli! para actiBar #
desactiBar respectiBamente las interrpciones.
5ttp7$$usuarios.lycos.es$patricio$ensam$ensam2.5tm
I2STRUCCIO2ES DE OPERACIO2ES LW4ICAS A 2I0EL DE 7IT.

A2D 5# l$%ico6
SintaEis: A2D destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
/ R R R P P 3 P /
RealiAa na operaci$n de J l$%ico entre el operando ori%en # destino
:edando el resltado en el destino. Son BFlidos operandos b#te o palabra! pero ambos
del mismo tipo.
Ejemp!os: and aP,&P
and &!,&yte ptr es:?si"1/'@

2OT 5no l$%ico6
SintaEis: 2OT destino
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
RealiAa el complemento a no del operando destino! inBirtiendo cada no de
ss bits. Los indicadores no resltan a=ectados.
Ejemp!o: not aP

OR 5O l$%ico6
SintaEis: OR destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
/ R R R P P 3 P /
RealiAa na operaci$n O l$%ico a niBel de bits entre los dos operandos!
almacenFndose desp"s el resltado en el operando destino.
Ejemp!o: or aP,&P

TEST 5comparaci$n l$%ica6
SintaEis: TEST destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
/ R R R P P 3 P /
RealiAa na operaci$n J l$%ica entre los dos operandos pero sin almacenar el
resltado. Los indicadores son a=ectados con la operaci$n.
Ejemp!o: test a!,&'

8OR 5O eEclsiBo6
SintaEis: 8OR destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
/ R R R P P 3 P /
Operaci$n OR eEclsiBo a niBel de bits entre los operandos ori%en # destino
almacenFndose el resltado en este <ltimo.
Ejemp!o: Por di,aP
?ttp:@@meltin%pot.=ortnecit#.com@r%a#@*,+@libro@(/.?tml
Instr%%iones $8gi%as 6 de "ani#$a%i8n de bits.
Las instrcciones l$%icas e;ectan operaciones binarias sobre series de bits almacenadas
en re%istros. son <tiles para maniplar bits indiBidales o n %rpo de bits :e
represente in=ormaci$n en c$di%o binario. Las instrcciones l$%icas consideran en
=orma separada cada bit del operando # la tratan como na Bariable booleana. Mediante
na aplicaci$n adecada de las instrcciones l$%icas! es posible cambiar los Balores de
bits! emplear n es :e n %rpo de bits o insertar neBos Balores de bits en los
operandos almacenados en re%istros o palabras de memoria.
Al%nas instrcciones l$%icas # de maniplaci$n de bits t>picas se listan en la tabla +I+.
La instrcci$n de borrar ?ace :e el operando especi=icado se sstit#a con (. La
instrcci$n complementar prodce el complemento a ' al inBertir todos los bits del
operando. Las instrcciones A2D! OR # 8OR prodcen las operaciones l$%icas
correspondientes sobre los bits indiBidales de los operandos. An:e realiAan
operaciones booleanas! deben considerarse :e las instrcciones e;ectan operaciones
de maniplaci$n de bits cando se san en instrcciones de comptadora. EEisten tres
operaciones de maniplaci$n de bits posibles: n bit seleccionado pede borrarse a (!
actiBarse en '! o pede complementarse. Por lo %eneral! se aplican las tres instrcciones
l$%icas para ?acer s$lo eso.
La instrcci$n A2D se tiliAa para borrar n bit o n %rpo seleccionado de bits de n
operando. Para cal:ier Bariable booleana (! las relaciones ()* H ( # ()+ H ( dictan
:e na Bariable binaria ala :e se le ?a#a aplicado n A2D con n ( prodce n (P
pero la Bariable no cambia de Balor cando se le aplica n A2D con n '. Por lo tanto!
la instrcci$n A2D pede tiliAarse para borrar bits de n operando en =orma selectiBa
al aplicar A2D al operando con otro operando :e tiene ( en las posiciones de bit :e
deben borrarse. La instrcci$n A2D tambi"n se llama mFscara! # aritm"tica por:e
enmascara o inserta ( en na parte seleccionada de n operando.
La instrcci$n OR se tiliAa para actiBar n bit o n %rpo seleccionado de bits de n
operando. Para cal:ier Bariable booleana (! las relaciones ( K ' H ' # ( K ( H ( dictan
:e na Bariable binaria ala :e se le aplica OR con n ' prodce n 'P pero la Bariable
no cambia cando se .le aplica OR con n (. Por lo tanto! la instrcci$n OR pede
tiliAarse para actiBar bits de n operando en =orma selectiBa! al aplicar OR con otro
operando Con d>%itos ' en las posiciones de bits :e deben actiBarse en '.

TA7LA +I+ Instrcciones l$%icas # de maniplaci$n de bits t>picas

2OM7RE M2EMO2ICO
7orrar CLR
complementar COM
Aplicar la =nci$n A2D A2D
Aplicar la =nci$n OR OR
Aplicar la =nci$n OR eEclsiBa 8OR
DesactiBar acarreo CLRC
ActiBar acarreo SETC
Complementar acarreo COMC
Habilitar interrpci$n EI
Des?abilitar interrpci$n DI

De i%al =orma! la instrcci$n 8OR se tiliAa para complementar bits de n operando en
=orma selectiBa. Esto se debe a la relaci$n boolena (,-. 'H (/ # ( 5K6 ( H (. Por lo tanto!
na Bariable binaria se complementa cando se le aplica 8OR con n '! pero no cambia
en Balor cando se le aplica 8OR con n (. En la secci$n /I. se mestran e;emplos
nm"ricos de las tres operaciones l$%icas.
En la tabla +I+ se incl#en al%nas otras instrcciones de maniplaci$n de bits. Los bits
indiBidales 5como los de n acarreo6 peden borrarse! actiBarse o complementarse con
las instrcciones apropiadas. Otro e;emplo es n =lipI=lop :e controla la opci$n de
interrpci$n # se ?abilita o des?abilita mediante instrcciones de maniplaci$n de bits.
Ntt#0OO"e"bers.fortne%it6.esOro62O%#.Nt"
2.11 )espla3amiento.
8er arc5i+o7 algo@despla3amientos.pd!
I2STRUCCIO2ES DE ROTACIW2 J DESPLA3AMIE2TO.

RCL 5rotaci$n a la iA:ierda con acarreo6
SintaEis: RCL destino! contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R R R R R P
Rotar a la iA:ierda los bits del operando destino ;nto con el indicador de
acarreo C1 el n<mero de bits especi=icado en el se%ndo operando. Si el n<mero de bits
a desplaAar es '! se pede especi=icar directamente! en caso contrario el Balor debe
car%arse en CL # especi=icar CL como se%ndo operando. 2o es conBeniente :e CL
sea ma#or de ,! en b#tesP $ '.! en palabras.
Ejemp!os: rc! aP,1
rc! a!,c!
rc! di,1

RCR 5rotaci$n a la derec?a con acarreo6
SintaEis: RCR destino! contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R R R R R P
Rotar a la derec?a los bits del operando destino ;nto con el indicador de
acarreo C1 el n<mero de bits especi=icado en el se%ndo operando. Si el n<mero de bits
es ' se pede especi=icar directamenteP en caso contrario s Balor debe car%arse en CL #
especi=icar CL como se%ndo operando:
Ejemp!os: rcr &P,c!
rcr &P,1

ROL 5rotaci$n a la iA:ierda6
SintaEis: ROL destino! contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R R R R R P
Rota a la iA:ierda los bits del operando destino el n<mero de bits especi=icado
en el se%ndo operando! :e pede ser ' $ CL preBiamente car%ado con el Balor del
n<mero de Beces.
Ejemp!os: ro! dP,c!
ro! a',1

ROR 5rotaci$n a la derec?a6
SintaEis: ROR destino! contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R R R R R P
Rota a la derec?a los bits del operando destino el n<mero de bits especi=icado
en el se%ndo operando. Si el n<mero de bits es ' se pede poner directamente! en caso
contrario debe ponerse a traB"s de CL.
Ejemp!os: ror c!,1
ror aP,c!

SAL@SHL 5desplaAamiento aritm"tico a la iA:ierda6
SintaEis: SAL@SHL destino! contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P 3 P P
DesplaAa a la iA:ierda los bits del operando el n<mero de bits especi=icado en
el se%ndo operando :e debe ser CL si es ma#or :e ' los bits desplaAados.

SAR 5desplaAamiento aritm"tico a la derec?a6
SintaEis: SAR destino! contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P 3 P P
DesplaAa a la derec?a los bits del operando destino el n<mero de bits
especi=icado en el se%ndo operando. Los bits de la iA:ierda se rellenan con el bit de
si%no del primer operando. Si el n<mero de bits a desplaAar es ' se pede especi=icar
directamente! si es ma#or se especi=ica a traB"s de CL.
Ejemp!os: sar aP,c!
sar &p,1

SHR 5desplaAamiento l$%ico a la derec?a6
SintaEis: SHR destino! contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P 3 P P
DesplaAa a la derec?a los bits del operando destino el n<mero de los bits
especi=icados en el se%ndo operando. Los bits de la iA:ierda se llena con cero. Si el
n<mero de bits a desplaAar es ' se pede especi=icar directamente en el caso en :e no
ocrra se pone el Balor en CL:
Ejemp!os: s'r aP,c!
s'r c!,1
?ttp:@@meltin%pot.=ortnecit#.com@r%a#@*,+@libro@(/.?tml
2.11.1 2ineal.
Instrucciones de corrimiento
Las instrcciones para recorrer el contenido de n operando son m# <tiles # se o=recen
con =recencia en diBersas Bariaciones. Los corrimientos son operaciones en las cales
los bits de na palabra se recorren a la iA:ierda o derec?a. El bit :e se recorre al
eEtremo de la palabra determina el tipo de corrimiento :e tiliAa. Las instrcciones de
corrimiento peden especi=icar corrimientos l$%icos! aritm"ticos operaciones de tipo
rotatorio. En cal:ier caso! el corrimiento pede ser a la derec?a o a la iA:ierda. !
La tabla +I* lista catro tipos de instrcciones de corrimiento. El corrimiento l$%ico
inserta n ( al de la posici$n =inal de bit. La posici$n =inal es el bit al eEtremo iA:ierdo
para el corrimiento a la derec?a # el bit al eEtremo derec?o para el corrimiento a la
iA:ierda. Por lo %eneral! los corrimientos aritm"ticos se ape%an a las re%las para los
n<meros de complemento a ) con si%no. Estas re%las se proporcionan en la secci$n /I-.
La instrcci$n aritm"tica de corrimiento a la derec?a debe preserBar el bit de si%no en la
posici$n al eEtremo iA:ierdo. El bit de si%no se desplaAa ala derec?a.
TA7LA +I* Instrcciones de corrimiento t>picas
2OM7RE M2EMO2ICO
Corrimiento a la derec?a l$%ico SHR
Corrimiento a la iA:ierda l$%ico SHL
Corrimiento a la derec?a aritm"tico SHRA
Corrimiento a la iA:ierda aritm"tico SHLA
Rotar a la derec?a ROR
Rotar a la iA:ierda ROL
Rotar a la derec?a mediante acarreo RORC
Rotar a la iA:ierda mediante acarreo ROLC
9nto con el resto del n<mero! pero el bit de si%no no cambia. Esta es na operaci$n de
corrimiento a la derec?a en la :e el bit =inal permanece i%al. La instrcci$n de
corrimiento aritm"tico a la iA:ierda inserta ( en la posici$n =ina.f # es id"ntica a la
instrcci$n l$%ica de corrimiento a la iA:ierda. Por esta raA$n mc?as comptadoras
no proporcionan na instrcci$n distinta de corrimiento aritm"tico a la iA:ierda cando
#a estF disponible la instrcci$n de corrimiento l$%ico a la iA:ierda.
Las instrcciones de rotaci$n prodcen n corrimiento circlar. Los bits recorridos en
n eEtremo de la palabra no se pierden en n desplaAamiento l$%ico! pero se ?acen
circlar ?asta el otro eEtremo. La instrcci$n de rotaci$n a traB"s del bit de acarreo trata
al bit de acarreo como na eEtensi$n del re%istro c#a palabra se estF rotando. Por lo
tanto na instrcci$n de rotaci$n ala iA:ierda a traB"s del acarreo trans=iere el. bit de
acarreo a la posici$n de bit a la eEtrema derec?a del re%istro! trans=iere la posici$n de la
eEtrema iA:ierda al acarreo #! al mismo tiempo! recorre todo el re%istro a la iA:ierda.
Al%nas comptadoras tienen n =ormato de campo m<ltiple para las instrcciones de
corrimiento. Un campo contiene el c$di%o de operaci$n # los otros especi=ican el tipo de
corrimiento # la cantidad de Beces :e se Ba a recorrer n operando. Un =ormato de
c$di%o de instrcci$n posible de na instrcci$n de desplaAamiento pede inclir cinco
campos de la manera si%iente.
OP RE4 TJPE RL COU2T
A:> OP es el campo de c$di%o de operaci$nP RE4 es na direcci$n de re%istro :e
especi=ica la posici$n del operandoP TJPE es n campo de ) bits :e especi=ica los
catro di=erentes tipos de corrimientosP LR es n campo de ' bit :e especi=ica n
corrimiento a la derec?a o ala iA:ierda # COU2T es n campo de 0 bits :e especi=ica
?asta 10 I' corrimientos. Con tal =ormato es posible especi=icar el tipo de corrimiento! la
direcci$n # la cantidad de corrimientos! todo en na sola instrcci$n.
1&&I"IE=T1 )E %ITS.
Las instrucciones de corrimiento, que son parte de la capacidad lgica
de la computadora, pueden realizar las siguientes acciones:

1. Hacer referencia a un registro o direccin de memoria.
2. Recorre bits a la izquierda o a la derecha.
3. Recorre hasta 8 bits en un byte, 16 bits en una palabra y 32 bits en
una palabra doble.
4. Corrimiento lgico (sin signo) o aritmtico (con signo).
El segundo operando contiene el valor del corrimiento, que es una
constante (un valor inmediato) o una referencia al registro CL. Para los
procesadores 8088/8086, la constante inmediata solo puede ser 1; un
valor de corrimiento mayor que 1 debe estar contenido en el registro
CL. Procesadores posteriores permiten constantes de corrimiento
inmediato hasta 31.
El formato general para el corrimiento es


| [etiqueta:] | Corrim. | {registro/memoria},
{CL/inmediato} |

orrimiento de bits 5acia la derec5a.
Los corrimientos hacia la derecha (SHR y SAR) mueven los bits hacia
la derecha en el registro designado. El bit recorrido fuera del registro
mete la bandera de acarreo. Las instrucciones de corrimiento a la
derecha estipulan datos lgicos (sin signo) o aritmticos (con signo):


Las siguientes instrucciones relacionadas ilustran SHR y datos con
signo:


I=ST&UI1= 02 1"E=T0&I1
MOV CL, 03
MOV AL, 10110111B ; 10110111
SHR AL, 01 ; 11011011 Un corrimiento a la derecha
SHR AL, CL ; 00001011 Tres corrimientos adicionales a
la derecha
SHR AX, 03 ; Vlido para 80186 y procesadores
posteriores

El primer SHR desplaza el contenido de AL un bit hacia la derecha. El
bit de mas a la derecha es enviado a la bandera de acarreo, y el bit de
mas a la izquierda se llena con un cero. El segundo SHR desplaza
tres bits mas al AL. La bandera de acarreo contiene de manera
sucesiva 1, 1 y 0; adems, tres bits 0 son colocados a la izquierda del
AL.
SAR se difiere de SHR en un punto importante: SAR utiliza el bit de
signo para llenar el bit vacante de mas a la izquierda. De esta manera,
los valores positivos y negativos retienen sus signos. Las siguientes
instrucciones relacionadas ilustran SAR y datos con signo en los que
el signo es un bit 1:

I=ST&UI1= 02 1"E=T0&I1
MOV CL, 03
MOV AL, 10110111B ;; 10110111
SHR AL, 01 ; 11011011 Un corrimiento a la derecha
SHR AL, CL ; 00001011 Tres corrimientos adicionales a la
derecha
SHR AX, 03 ; Vlido para 80186 y procesadores posteriores

En especial, los corrimientos a la derecha son tiles para (dividir entre
2) obtener mitades de valores y son mucho mas rpidas que utilizar
una operacin de divisin.
Al terminar una operacin de corrimiento, puede utilizar la instruccin
JC (Salta si hay acarreo) para examinar el bit desplazado a la bandera
de acarreo.


orrimiento de bits a la i3Euierda.
Los corrimientos hacia la izquierda (SHL y SAL) mueven los bits a la
izquierda, en el registro designado. SHL y SAL son idnticos en su
operacin. El bit desplazado fuera del registro ingresa a la bandera de
acarreo. Las instrucciones de corrimiento hacia la izquierda estipulan
datos lgicos (sin signo) y aritmticos (con signo):

SHL: Desplazamiento lgico a la izquierda SAL: Desplazamiento
aritmtico a la izquierda
Las siguientes instrucciones relacionadas ilustran SHL para datos sin
signo:

I=ST&UI1= 02 1"E=T0&I1
MOV CL, 03
MOV AL, 10110111B ; 10110111
SHR AL, 01 ; 01101110 Un corrimiento a la izquierda
SHR AL, CL ; 01110000 Tres corrimientos mas
SHR AX, 03 ; Vlido para 80186 y procesadores
posteriores


El primer SHL desplaza el contenido de AL un bit hacia la izquierda. El
bit de mas a la izquierda ahora se encuentra en la bandera de acarreo,
y el ultimo bit de la derecha del AL se llena con cero. El segundo SHL
desplaza tres bits mas a el AL. La bandera de acarreo contiene en
forma sucesiva 0, 1 y 1, y se llena con tres ceros a la derecha del AL.
Los corrimientos a la izquierda llenan con cero el bit de mas a la
derecha. Como resultado de esto, SHL y SAL don idnticos. Los
corrimientos a la izquierda en especial son tiles para duplicar valores
y son mucho mas rpidos que usar una operacin de multiplicacin.
Al terminar una operacin de corrimiento, puede utilizar la instruccin
JC (Salta si hay acarreo) para examinar el bit que ingreso a la bandera
de acarreo.
5ttp7$$(((.itlp.edu.m4$publica$tutoriales$ensamblador$
2.11.2 ircular.
& &1T0I1= )E %ITS :)espla3amiento circular<
Las instrucciones de rotacin, que son parte de la capacidad lgica de
la computadora, pueden realizar las siguientes acciones:

1. Hacer referencia a un byte o a una palabra.
2. Hacer referencia a un registro o a memoria.
3. Realizar rotacin a la derecha o a la izquierda. El bit que es
desplazado fuera llena
el espacio vacante en la memoria o registro y tambin se copia en la
bandera de acarreo.
4. Realizar rotacin hasta 8 bits en un byte, 16 bits en una palabra y
32 bits en una palabra doble.
5. Realizar rotacin lgica (sin signo) o aritmtica (con signo).
El segundo operando contiene un valor de rotacin, el cual es una
constante (un valor inmediato) o una referencia al registro CL. Para los
procesadores 8088/8086, la constante inmediata solo puede ser 1; un
valor de rotacin mayor que 1 debe estar contenido en el registro CL.
Procesadores posteriores permiten constantes inmediatas hasta el 31.
El formato general para la rotacin es:


| [etiqueta:] | Rotacin | {registro/memoria},
{CL/inmediato} |

&otacin a la derec5a de bits
Las rotaciones a la derecha (ROR y RCR) desplazan a la derecha los
bits en el registro designado. Las instrucciones de rotacin a la
derecha estipulan datos lgicos (sin signo) o aritmticos (con signo):
Las siguientes instrucciones relacionadas ilustran ROR:
I=ST&UI1= %' 1"E=T0&I1
MOV CL, 03
MOV BH, 10110111B ; 10110111
SHR BH, 01 ; 11011011 Una rotacin a la derecha
SHR BH, CL ; 00001011 Tres rotaciones a la derecha
SHR BX, 03 ; Vlido para 80186 y procesadores
posteriores


El primer ROR desplaza el bit de mas a la derecha del BH a la
posicin vacante de mas a la izquierda. La segunda y tercera
operaciones ROR realizan la rotacin de los tres bits de mas a la
derecha.
RCR provoca que la bandera de acarreo participe en la rotacin. Cada
bit que se desplaza fuera de la derecha se mueve al CF y el bit del CF
se mueve a la posicin vacante de la izquierda.

&otacin a la i3Euierda de bits
Las rotaciones a la izquierda (ROL y RCL) desplazan a la izquierda los
bits del registro designado. Las instrucciones de rotacin a la izquierda
estipulan datos lgicos (sin signo) y aritmticos (con signo):


Las siguientes instrucciones relacionadas ilustran ROL:
I=ST&UI1= %2 1"E=T0&I1
MOV CL, 03
MOV BL, 10110111B ; 10110111
SHR BL, 01 ; 11011011 Una rotacin a la izquierda
SHR BL, CL ; 00001011 Tres rotaciones a la izquierda
SHR BX, 03 ; Vlido para 80186 y procesadores
posteriores

El primer ROL desplaza el bit de mas a la izquierda del BL a la
posicin vacante de mas a la derecha. La segunda y tercera
operaciones ROL realizan la rotacin de los tres bits de mas a la
izquierda.
De manera similar a RCR, RCL tambin provoca que la bandera de
acarreo participe en la rotacin. Cada bit que se desplaza fuera por la
izquierda se mueve al CF, y el bit del CF se mueve a la posicin
vacante de la derecha.
Puede usar la instruccin JC (salta si hay acarreo) para comprobar el
bit rotado hacia la CF en el extremo de una operacin de rotacin.
5ttp7$$(((.itlp.edu.m4$publica$tutoriales$ensamblador$tem.@4@.5tm
3.1 ,rocesos de control.
3.1.1%anderas.
FLA?S
La eEplicaci$n de los D=la%sD estF relacionada con los saltos condicionales.
Los :e ?a#Fis Bisto n m>nimo de otros len%a;es recordar"is las sentencias
1OR # 2E8T 5en 7asic6! o el I1@THE2@ELSE tambi"n en estilo 7asic pero :e
tambi"n se encentran en otros len%a;es. Pes bien! los =la%s # las instrcciones
condicionales Ba a ser lo :e os encontr"is en este cap>tlo.
0eamos el re%istro de =la%s.
A las =la%s! DbanderasD! las a%rpa n solo re%istro de '- bits! an:e
"ste no est" tiliAado por completo! #a :e cada =la% ocpa n solo bit.
YR" son los =la%s_
Se trata de Barios bits! :e! como siempre! peden Baler no o cero! #
dependiendo de s Balor indican Barias cosas. El re%istro de =la%s es como
si%e:
g c g c g c g c g O g D g I g T g S g 3 g c g A g c g P g c g C g
O: OBer=loC D: Direcci$n I: Interrpciones re?abilitadas
T: Trampa S: Si%no 3: Cero
A: Acarreo aEiliar P: Paridad C: Acarreo c: 2o tiliAado
Cada cadro representa n bit como es =Fcil adiBinar. Tambi"n estF claro :e
cada bit :e se tiliAa tiene n nombre! # como se BerF! tambi"n
na tilidad. A:> eEplico el si%ni=icado de los
mFs importantes:
EL FLA? DE ACARREO
Ha# Beces en la operaciones en las :e el n<mero se desborda! o sea! no
cabe en el re%istro o en la posici$n de memoria. Ima%inemos :e tenemos en
A8 el n<mero (1111? # le smamos (CCCC?. Como es l$%ico! el resltado no nos
cabrF en A8. Al realiAar esta sma! tenemos :e tener en centa :e el
si%iente n<mero a (1111? es ((((?! con lo :e podremos Ber el resltado.
I%al pasarF si a ((((? le restamos! por e;emplo! ' 5el resltado serF
(1111?6. Pero de al%na manera nos tenemos :e DAR CUE2TA de :e esto ?a
scedido.
Cando se opera # ?a# acarreo en el <ltimo bit sobre el :e se ?a
operado! el =la% de acarreo se pone a no! es decir! cando ese n<mero se ?a
desbordado. Ha# :e recordar tambi"n :e las instrcciones I2C # DEC no
a=ectan a este =la%. 0eamos los e=ectos de estas operaciones:
MO0 A8!(1111?
I2C A8 P A8 Bale a?ora (! el =la% de acarreo tambi"n
DEC A8 P A8 Bale (1111?! # el =la% si%e inalterado
ADD A8!' P A8 Bale (! # el =la% de acarreo estF a '
MO0 78!((((?
ADD 78!.(? P El =la% de acarreo se pone a (! no ?a ?abido
Pacarreo en esta operaci$n
SU7 A8!' P A?ora A8 Bale otra BeA (1111?! # el =la% de acarreo
Pse pone de neBo a no.
En resmen! se actiBa cando tras na operaci$n ?a# n paso del Balor
mFEimo al m>nimo o BiceBersa.
Este =la% nos Ba a ser tambi"n <til al comprobar errores! etc. Por
e;emplo! si bscamos el primer arc?iBo del directorio # no ?a# nin%no!
este =la% se actiBarF! con lo :e podremos sar los saltos condicionales!
pero esto #a se eEplicarF mFs adelante.
EL FLA? DE SI?NO
A Beces interesa conocer cFndo n n<mero con si%no es ne%atiBo o positiBo.
EBidentemente! esto s$lo tiene e=ecto cando estamos tratando
con n<meros enteros con si%no! en complemento a dos. Indica cando tras na
operaci$n aritm"tica 5ADD! SU7! I2C! DEC o 2E4 o l$%ica 5A2D! OR o 8OR6
el resltado es n n<mero en complemento a dos. En realidad! es la copia del
bit de ma#or peso del b#te! el :e indica cFndo el n<mero es ne%atiBo.
Por lo tanto! cando Bale ' es :e el n<mero es ne%atiBo # si Bale ( es
:e es positiBo.
EL FLA? DE DESBORDAMIENTO )VOPerf$oRV*
Se trata de n =la% bastante parecido al de acarreo! pero :e act<a con
n<meros en complemento a dos # se actiBa cando se pasa del ma#or n<mero
positiBo 5'), en n solo b#te6 al menor ne%atiBo 5I')+ en tamaGo de n
b#te6.
Este =la%! al contrario :e el de acarreo! SI es a=ectado por las
instrcciones de decremento e incremento.
EL FLA? DE CERO
Es de los mFs sencillos de comprender. Simplemente se actiBa cando el
resltado de na operaci$n aritm"tica o l$%ica es cero. Es eBidente la %ran tilidad del
=la%.
Tenemos! por e;emplo! dos re%istros! A8 # C8! :e :eremos comparar para saber si
son i%ales.
Para saberlo! no tendr>amos mFs :e restar no del otro! # si el resltado
es cero 5o sea! si el =la% de cero se pone en no6! podremos ?acer n
salto condicional.
O sea! de n
SU7 C8!A8
Si son i%ales! el =la% de cero se pondrF a no.
EL FLA? DE 7ARIDAD
Se tiliAa especialmente en la transmisi$n de datos para la comprobaci$n
de errores! #a :e compreba si el resltado de la <ltima operaci$n
aritm"tica o l$%ica realiAada tiene n n<mero par o impar de bits pestos
a no. Se pondrF a no cando ?a#a n n<mero par de bits! # a cero cando
sea impar.
RESTO DE FLA?S
2o describir" mFs =la%s detalladamente! #a :e s importancia es casi
nlaP por e;emplo estF el =la% de interrpci$n! :e! cando estF actiBado!
eBita la posibilidad de interrpciones en secciones cr>ticas de c$di%o! o
el de trampa! :e cando estF actiBado proBoca na I2T '? cada BeA :e se
e;ecta otra instrcci$n! pero creo :e s inter"s es escaso! al menos por
el momento.
3.1.2adenas.
INSTRUCCIONES DE CADENA
Son n sbcon;nto de instrcciones m# <tiles para diBersas =nciones:
inicialiAar Aonas de memoria! copiar datos de na Aona a otra! encontrar
Balores determinados o comparar cadenas! etc.! etc.
S comportamiento depende del =la% de direcci$n del :e ?ablFbamos nas
lecciones mFs atrFs! # :e se pede cambiar directamente con estas dos
instrcciones:
STD: SeT Direction =la%! lo pone a no.
CLD: CLear Direction =la%! lo pone a cero.
Las instrcciones :e Bamos a sar como de cadena siempre tienen na S
de Strin% al =inal! # casi siempre ademFs na 7 o na X indicando 7#te o
Xord 5el tamaGo6.
J estas son:
LODS7@LODSX
Lee n b#te@palabra en la direcci$n de memoria dada por DS:SI # la
almacena dependiendo de s tamaGo en AL o A8. Si el =la% de direcci$n estF
a cero! se%<n sea b#te o palabra! SI amentarF en ' o ) nidades 5para
poder continar la operaci$n de lectra6. Si estF a no el =la%! se
decrementarF en ' o ) nidades dependiendo del tamaGo 5b#te@palabra6
STOS7@STOSX
Es el e:iBalente a D%rabarD si lo anterior era Dcar%arD. AlmacenarF el
contenido de AL o A8 5como siempre! dependiendo del tamaGo 6 en ES:DI!
copiando se%<n si es 7 o X no o dos b#tes cada BeA :e se e;ecte.
Si el =la% de direcci$n estF a cero! DI amentarF cada BeA :e se
realice la orden en na o dos nidades 5dependiendo del tamaGo! 7 o X 6.
Si estF a no! decrecerF.
MO0S7@MO0SX
MeBe el b#te o palabra contenido en la direcci$n de memoria a la :e
apnta DS:SI a la direcci$n de memoria de ES:DI.
Si el =la% de direcci$n estF a (! con cada MO0S :e realicemos SI # DI
amentarFn en na nidad 5MO0S76 o dos 5MO0SX6. Si estF a no! se
decrementarFn de i%al manera.
REP
Acabo de ?ablar sobre "l. Pes bien! si se tiliAa como operando s#o
na de estas $rdenes! la repetirF C8 Beces. Por e;emplo! si :eremos
copiar la tabla de Bectores de interrpci$n a n l%ar :e ?emos
reserBado:
cld P A ase%rarnos de :e el =la% de direcci$n estF.
Pa cero.
moB cE!/((?
Eor dE!dE P pone dE a (
ps? dE
pop ds P 2o estF permitido ?acer Eor ds!ds! por lo :e
Pmetemos dE! :e Bale (! en la pila! # sacamos
PDS Baliendo (.
Eor si!si P SI :e Bal%a (.
ps? cs
pop es P 0amos a ase%rarnos de :e ES Bal%a CS! o sea!
Pel se%mento en el :e estF el pro%rama a?ora.
moB di!b==er P DI apnta al l%ar donde Bamos a %ardar la
Ptabla.
rep moBsb P Repite ^esto /((? Beces! # cada BeA :e lo ?ace
Pincrementa DI # SI.
int )(? P Acaba la e;ecci$n.
b==er: db /((? dp 5_6 P Esto de;a n espacio de /((? b#tes :e nos
PBa a serBir para almacenar la tabla de
PBectores de interrpci$n.
Podemos! para empeAar! redcir el /((? a )((? en C8! # ?acer n rep moBsC!
con lo :e trasladaremos de palabra en palabra las instrcciones.
I2STRUCCIO2ES DE MA2IPULACIW2 DE CADE2AS.

CMPS@CMPS7@CMPSX 5compara cadenas6
SintaEis: CMPS cadenaVdestino! cadenaVori%en
CMPS7 5b#tes6
CMPSX 5palabras6
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
Compara dos cadenas restando al ori%en el destino. 2in%no de los operandos
se alteran! pero los indicadores resltan a=ectados. La cadena ori%en se direcciona con
re%istro SI sobre el se%mento de datos DS # la cadena destino se direcciona con el
re%istro DI sobre el se%mento eEtra ES. Los re%istros DI # SI se atoincrementan o
atodecrementan se%<n el Balor del indicador D1 5B"anse CLD # STD6 en na o dos
nidades! dependiendo de si se traba;a con b#tes o con palabras. Cadena or#gen #
cadena dest#no son dos operandos redndantes :e s$lo indican el tipo del dato 5b#te o
palabra6 a comparar! es mFs c$modo colocar CMPS7 o CMPSX para indicar
b#tes@palabras. Si se indica n re%istro de se%mento! "ste sstitirF en la cadena ori%en
al DS ordinario. E;emplo:
!ea si,origen
!ea di,destino
cmps&

LODS@LODS7@LODSX 5car%ar cadena6
SintaEis: LODS cadenaVori%en
LODS7 5b#tes6
LODSX 5palabras6
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Copia en AL o A8 na cadena de lon%itd b#te o palabra direccionada sobre el
se%mento de datos 5DS6 con el re%istro SI. Tras la trans=erencia! SI se incrementa o
decrementa se%<n el indicador D1 5B"anse CLD # STD6 en na o dos nidades! se%<n
se est"n mane;ando b#tes o palabras. Cadena2or#gen es n operando redndante :e
s$lo indica el tipo del dato 5b#te o palabra6 a car%ar! es mFs c$modo colocar LODS7 o
LODSX para indicar b#tes@palabras.
Ejemp!o: c!d
!ea si,origen
!ods&

MO0S@MO0S7@MO0SX 5moBer cadena6
SintaEis: MO0S cadenaVdestino! cadenaVori%en
MO0S7 5b#tes6
MO0SX 5palabras6
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Trans=iere n b#te o na palabra de la cadena ori%en direccionada por DS:SI a
la cadena destino direccionada por ES:DI! incrementando o decrementando a
continaci$n los re%istros SI # DI se%<n el Balor de D1 5B"anse CLD # STD6 en na o
dos nidades! dependiendo de si se traba;a con b#tes o con palabras. Cadena or#gen #
cadena dest#no son dos operandos redndantes :e s$lo indican el tipo del dato 5b#te o
palabra6 a comparar! es mFs c$modo colocar MO0S7 o MO0SX para indicar
b#tes@palabras. Si se indica n re%istro de se%mento! "ste sstitirF en la cadena ori%en
al DS ordinario.
Ejemp!o: !ea si,origen
!ea di,destino
mo$sY

SCAS@SCAS7@SCASX 5eEplorar cadena6
SintaEis: SCAS cadenaVdestino
SCAS7 5b#tes6
SCASX 5palabras6
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
Resta de A8 o AL na cadena destino direccionada por el re%istro DI sobre el
se%mento eEtra. 2in%no de los Balores es alterado pero los indicadores se Ben
a=ectados. DI se incrementa o decrementa se%<n el Balor de D1 5B"anse CLD # STD6 en
na o dos nidades Ise%<n se est" traba;ando con b#tes o palabrasI para apntar al
si%iente elemento de la cadena. Cadena2dest#no es n operando redndante :e s$lo
indica el tipo del dato 5b#te o palabra6! es mFs c$modo colocar SCAS7 o SCASX para
indicar b#tes@palabras.
Ejemp!o: !ea di,destino
mo$ a!,O/
scas&

STOS@STOS7@STOSX 5almacena cadena6
SintaEis: STOS cadenaVdestino
STOS7 5b#tes6
STOSX 5palabras6
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Trans=iere el operando ori%en almacenado en A8 o AL! al destino
direccionado por el re%istro DI sobre el se%mento eEtra. Tras la operaci$n! DI se
incrementa o decrementa se%<n el indicador D1 5B"anse CLD # STD6 para apntar al
si%iente elemento de la cadena. Cadena2dest#no es n operando redndante :e s$lo
indica el tipo del dato 5b#te o palabra6 a car%ar! es mFs c$modo colocar STOS7 o
STOSX para indicar b#tes@palabras.
Ejemp!o: !ea di,destino
mo$ aP,1HH1
stosY

REP@REPE@REP3@REP2E@REP23 5repetir6
REP repetir operaci$n de cadena
REPE@REP3 repetir operaci$n de cadena si i%al@si cero
REP2E@REP23 repetir operaci$n de cadena si no i%al 5si no (6
Estas instrcciones se peden colocar como pre=i;o de otra instrcci$n de
mane;o de cadenas! con ob;eto de :e la misma se repita n n<mero determinado de
Beces incondicionalmente o ?asta :e se Beri=i:e al%na condici$n. El n<mero de
Beces se indica en C8. Por sentido com<n s$lo deben tiliAarse las si%ientes
combinaciones:
Pre%ijo <unci9n
Instrucciones
RRRRRRRRRRR RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRR
REP Repetir * $eces M,;S, S-,S
REPEKREPX Repetir * $eces mientras X<L1 MPS, SAS
REP#EKREP#X Repetir * $eces mientras X<L/ MPS, SAS
E;emplos:
'6 7scar el b#te -* entre las )(( primeras posiciones de ta)la 5se spone
ta)la en el se%mento ES6:
8EA DI,ta&!a
M,; *,D//
M,; A8,4H
8D
REP#E SAS+
:E encontrado
)6 Rellenar de ceros .((( b#tes de na tabla colocada en datos 5se spone
datos en el se%mento ES6:
8EA DI,datos
M,; A*,/
M,; *,DO//
8D
REP S-,S2
&6 Copiar la memoria de pantalla de teEto 5adaptador de color6 de n PC en n
b==er 5se spone )u%%er en el se%mento ES6:
M,; *,/+E//' ; segmento de panta!!a
M,; DS,* ; en DS
8EA DI,&u%%er ; destino en ES:DI
M,; SI,/ ; copiar desde DS:/
M,; *,D/// ; D/// pa!a&ras
8D ; 'acia ade!ante
REP M,;S2 ; copiar * pa!a&ras
?ttp:@@meltin%pot.=ortnecit#.com@r%a#@*,+@libro@(/.?tml
3.1.3arga.
Las primeras dos instrucciones permiten el intercambio de datos entre la memoria y
el registro del procesador.
La instruccion LOAD copia un dato de la memoria al registro, mientras que la
instruccion STORE lo hace en el sentido inerso. La instruccion LOAD! permite
cargar un operando inmediato en el registro, es decir, un alor constante que se
incluye en la instruccion misma. "or e#emplo, LOAD! $ hace que el alor $ se copie
al registro. Obsere la di%erencia con LOAD $, que copia al registro el contenido de
la celda cuya direccion es $.
I2STRUCCIO2ES DE CAR4A DE RE4ISTROS J DIRECCIO2ES.

MO0 5trans=erencia6
SintaEis: MO0 dest! ori%en.
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Trans=iere datos de lon%itd b#te o palabra del operando ori%en al operando
destino. Peden ser operando ori%en # operando destino cal:ier re%istro o posici$n de
memoria direccionada de las =ormas #a Bistas! con la <nica condici$n de :e ori%en #
destino ten%an la misma dimensi$n. EEisten ciertas limitaciones! como :e los re%istros
de se%mento no admiten el direccionamiento inmediato: es incorrecto MO0 DS!/(((?P
pero no lo es por e;emplo MO0 DS!A8 o MO0 DS!0ARIA7LE. 2o es posible! as>
mismo! tiliAar CS como destino 5es incorrecto ?acer MO0 CS!A8 an:e peda
admitirlo al%<n ensamblador6. Al ?acer MO0 ?acia n re%istro de se%mento! las
interrpciones :edan in?ibidas ?asta des#Ms de e;ectarse la si%iente instrcci$n
5+(+-@++ de '*+& # procesadores posteriores6.
Ejemp!os: mo$ ds,aP
mo$ &P,es:?si@
mo$ si,o%%set dato
En el <ltimo e;emplo! no se coloca en SI el Balor de la Bariable dato sino s
direcci$n de memoria o desplaAamiento respecto al se%mento de datos. En otras
palabras! SI es n pntero a dato pero no es dato. En el pr$Eimo cap>tlo se BerF c$mo
se declaran las Bariables.

8CH4 5intercambiar6
SintaEis: 8CH4 destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Intercambia el contenido de los operandos ori%en # destino. 2o peden
tiliAarse re%istros de se%mentos como operandos.
Ejemp!o: Pc'g &!,c'
Pc'g mem7pa!,&P

8LAT 5tradcci$n6
SintaEis: 8LAT tabla
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Se tiliAa para tradcir n b#te del re%istro AL a n b#te tomado de la tabla de
tradcci$n. Los datos se toman desde na direcci$n de la tabla correspondiente a 78 K
AL! donde bE es n pntero a el comienAo de la tabla # AL es n >ndice. Indicar ta)la al
lado de Elat es s$lo na redndancia opcional.
Ejemp!o: mo$ &P,o%%set ta&!a
mo$ a!,.
P!at

LEA 5car%a direcci$n e=ectiBa6
SintaEis: LEA destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Trans=iere el desplaAamiento del operando =ente al operando destino. Otras
instrcciones peden a continaci$n tiliAar el re%istro como desplaAamiento para
acceder a los datos :e constit#en el ob;etiBo. El operando destino no pede ser n
re%istro de se%mento. En %eneral! esta instrcci$n es e:iBalente a 3O&
dest#no!O44SE %uente # de ?ec?o los benos ensambladores 5TASM6 la codi=ican
como MO0 para economiAar n b#te de memoria. Sin embar%o! LEA es en al%nos
casos mFs potente :e MO0 al permitir indicar re%istros de >ndice # desplaAamiento
para calclar el o==set:
!ea dP,datos?si@
En el e;emplo de arriba! el Balor depositado en D8 es el o==set de la eti:eta
datos mFs el re%istro SI. Esa sola instrcci$n es e:iBalente a estas dos:
mo$ dP,o%%set datos
add dP,si

LDS 5car%a n pntero tiliAando DS6
SintaEis: LDS destino! ori%en
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Traslada n pntero de &) bits 5direcci$n completa de memoria compesta por
se%mento # desplaAamiento6! al destino indicado # a DS. A partir de la direcci$n
indicada por el operando ori%en! el procesador toma / b#tes de la memoria: con los dos
primeros =orma na palabra :e deposita en dest#no #! con los otros dos! otra en DS.
Ejemp!o: punt dd 1DB.O4FE'
!ds si,punt
Como resltado de esta instrcci$n! en DS:SI se ?ace re=erencia a la posici$n
de memoria ')&/?:.-,+?P [dd[ sirBe para de=inir na Bariable lar%a de / b#tes
5denominada punt en el e;emplo6 # serF eEplicado en el cap>tlo si%iente.

LES 5car%a n pntero tiliAando ES6
SintaEis: LES destino! ori%en
Esta instrcci$n es anFlo%a a LDS! pero tiliAando ES en l%ar de DS.

LAH1 5car%a AH con los indicadores6
SintaEis: LAH1
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Car%a los bits ,! -! /! ) # ( del re%istro AH con el contenido de los indicadores
S1! 31! A1! P1 J C1 respectiBamente. El contenido de los demFs bits :eda sin de=inir.

SAH1 5copia AH en los indicadores6
SintaEis: SAH1
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R P P P P P
Trans=iere el contenido de los bits ,! -! /! ) # ( a los indicadores S1! 31! A1!
P1 # C1 respectiBamente.
5ttp7$$ing.utalca.cl$\!me3a$cursos$cyp$tema3.pd!
'. La instrcci$n load ,cargar. se ?a sado principalmente para desi%nar na
trans=erencia de memoria an re%istro de pro%ramaci$n! por lo %eneral n
acmlador. La instrcci$n store ,almacenar. representa na trans=erencia de n
re%istro de procesador a la memoria. La instrcci$n moB ,mo"er. se ?a sado en
las comptadoras con re%istros m<ltiples de CPU para desi%nar na trans=erencia
de n re%istro a otro. Tambi"n se ?a sado para trans=erencias de datos entre
re%istros de CPU # la memoria o entre dos palabras de memoria. La instrcci$n
eEc?an%e ,#ntercam)#ar. cambia la in=ormaci$n entre dos re%istros o n re%istro
# na palabra de memoria. Las instrcciones inpt ,#ntroduc#r. # otpt ,sacar.
trans=ieren datos entre re%istros del procesador # terminales de entrada o salida.
Las instrcciones ps? ,empu5ar. # pop ,saltar. trans=ieren datos entres re%istros
del procesador # na pila de memoria.
Debe recordarse :e las instrcciones :e se listan en la tabla +I.! al i%al :e
en las tablas si%ientes en esta secci$n! con =recencia estFn asociadas con
diBersos modos de direccionamiento. Al%nas normas del len%a;e ensamblador
modi=ican el s>mbolo mnem$nico para di=erenciar entre los diBersos modos de
direccionamiento. Por e;emplo! el mnem$nico para

TA7LA +I. Instrcciones de trans=erencia de datos t>pica
2ombre Mnem$nico
Car%ar LD
Almacenar ST
MoBer MO0
Intercambiar 8CH
Entrada I2
Salida OUT
Emp;ar PUSH
Saltar POP








TA7LA +I- Oc?o modos de direccionamiento para la introdcci$n car%ar

"odo on+encin en ensamblador Trans!erencia de registros
)ireccionamiento directo 2) 0)& 0 ? "U"U0)&VV
)ireccionamiento indirecto 2) Q 0)& 0 ? "U"U0)&VV
)ireccionamiento relati+o 2) P 0)& 0 ? "U, I0)&V
1perando inmediato 2) A =%& 0 ? =%&
)ireccionamiento inde4ado 2) 0)& :9< 0 ? "U0)&I 9&V
&egistro 2) &1 0 ? &1
Indirecto por registro 2) :&1< 0 ? " U&1V
0utoincremento 2) :&1< I 0 ? "U&1V- &1 ? &1 I 1
Cargar de #nmed#ato se conBierte en LDI. Otras normas del len%a;e
ensamblador tiliAan n carFcter especial para asi%nar el modo de
direccionamieto. Por e;emplo! el modo inmediato se reconoce por n si%no h
colocado antes del operando. En cal:ier caso! lo importante es entender :e
cada instrcci$n pede ocrrir con diBersos modos de direccionamiento. Como
e;emplo! consideremos la instrcci$n cargar al acumulador cando se sa con
oc?o modos de direccionamiento di=erentes. La tabla +I- mestra la conBenci$n
recomendada del len%a;e ensamblador # la trans=erencia real :e se lo%ra en
cada caso. AD6 representa na direcci$n! NB6 es n n<mero operando! 8 es
n re%istro de >ndice! Rl es n re%istro de procesador! # AC es el re%istro
acmlador. El carFcter + simboliAa na direcci$n indirecta. El carFcter i antes
de na direcci$n ?ace el direccionamiento relatiBo al contador de pro%rama PC.
El carFcter i precede al operando en na instrcci$n de modo inmediato. Una
instrcci$n de modo indeEado se reconoce por n re%istro :e se coloca entre
par"ntesis desp"s de la direcci$n simb$lica. El modo de re%istro se simboliAa al
proporcionar el nombre de n re%istro de procesador. En el modo indirecto por
re%istro! el nombre del re%istro :e contiene la direcci$n de memoria se encierra
entre par"ntesis. El modo de atoincremento se distin%e del modo indirecto por
re%istro al colocar n si%no de mFs desp"s del re%istro entre par"ntesis. A s
BeA el modo de atodecremento tiliAar>a n si%no de menos. Para poder escribir
pro%ramas del len%a;e ensamblador para na comptadora es necesario conocer
el tipo de instrcciones disponibles # tambi"n estar =amiliariAado con .'os
modos de direccionamiento tiliAados en la comptadora particlar.
5ttp7$$members.!ortunecity.es$royH$cpu.5tm
Unidad *. "odulari!acin
3.3 "acros.
MACROS.
Cando n con;nto de instrcciones en ensamblador aparecen =recentemente
repetidas a lo lar%o de n listado! es conBeniente a%rparlas ba;o n nombre simb$lico
:e las sstitirF en a:ellos pntos donde apareAcan. Esta es la misi$n de las macrosP
por el ?ec?o de soportarlas el ensamblador eleBa s cate%or>a a la de
macroensamblador! al ser las macros na ?erramienta m# cotiAada por los
pro%ramadores.
2o conBiene con=ndir las macros con sbrtinas: es estas <ltimas! el con;nto de
instrcciones aparece na sola BeA en todo el pro%rama # le%o se inBoca con CALL.
Sin embar%o! cada BeA :e se re=erencia a na macro! el c$di%o :e "sta representa se
e(pande en el pro%rama de=initiBo! dplicFndose tantas Beces como se se la macro. Por
ello! a:ellas tareas :e pedan ser realiAadas con sbrtinas siempre serF mFs
conBeniente realiAarlas con las mismas! con ob;eto de economiAar memoria. Es cierto
:e las macros son al%o mFs rFpidas :e las sbrtinas 5se a?orra n CALL # n RET6
pero la di=erencia es tan m>nima :e en la prFctica es despreciable en el **!**j de los
casos. Por ello! es absrdo e irracional realiAar ciertas tareas con macros :e peden ser
desarrolladas mc?o mFs e=icientemente con sbrtinas: es na pena :e en mc?os
manales de ensamblador a<n se ?able de macros para realiAar operaciones sobre
cadenas de caracteres! :e %enerar>an pro%ramas %i%antescos con menos de n 'j de
Belocidad adicional.
../.'. I DE1I2ICIW2 J 7ORRADO DE LAS MACROS.
La macro se de=ine por medio de la directiBa MACRO. Es necesario de=inir la macro
antes de tiliAarla. Una macro pede llamar a otra. Con =recencia! las macros se
colocan ;ntas en n =ic?ero independiente # le%o se meAclan en el pro%rama principal
con la directiBa I2CLUDE:
I<1
I#8(DE %ic'ero.ePt
E#DI<
La sentencia I1' ase%ra :e el ensamblador lea el =ic?ero =ente de las macros s$lo
en la primera pasada! para acelerar el ensambla;e # eBitar :e apareAcan en el listado
5%enerado en la se%nda =ase6. ConBiene ?acer ?incapi" en :e la de=inici$n de la macro
no consme memoria! por lo :e en la prFctica es indi=erente declarar cientos :e
nin%na macro:
nom&re7sim&9!ico MAR, ?parMmetros@
...
... ; instrucciones de !a
macro
E#DM
El nombre simb$lico es el :e permitirF en adelante ?acer re=erencia a la macro! # se
constr#e casi con las mismas re%las :e los nombres de las Bariables # demFs
s>mbolos. La macro pede contener parFmetros de manera opcional. A continaci$n
Bienen las instrcciones :e en%loba #! =inalmente! la directiBa E2DM seGala el =inal de
la macro. 2o se debe repetir el nombre simb$lico ;nto a la directiBa E2DM! ello
proBocar>a n error n tanto crioso # eEtraGo por parte del ensamblador 5al%o as> como
k1in del =ic?ero =ente inesperado! =alta directiBa E2Dl6! al menos con MASM ..( #
TASM ).(.
En realidad! # a di=erencia de lo :e scede con los demFs s>mbolos! el nombre de
na macro pede coincidir con el de na instrcci$n mF:ina o na directiBa del
ensamblador: a partir de ese momento! la instrcci$n o directiBa mac$acada pierde s
si%ni=icado ori%inal. El ensamblador darF ademFs n aBiso de adBertencia si se emplea
na instrcci$n o directiBa como nombre de macro! an:e tolerarF la operaci$n.
2ormalmente se las asi%narF nombres normales! como a las Bariables. Sin embar%o! si
al%na BeA se rede=iniera na instrcci$n mF:ina o directiBa! para restarar el
si%ni=icado ori%inal del s>mbolo! la macro pede ser borrada Io simplemente por:e #a
no Ba a ser sada a partir de cierto pnto del listado! # as> #a no consmirF espacio en
las tablas de macros :e mantiene en memoria el ensamblador al ensamblarI. 2o es
necesario borrar las macros antes de rede=inirlas. Para borrarlas! la sintaEis es la
si%iente:
PUR4E nombreVsimb$licoL!nombreVsimb$lico!...M
../.). I E9EMPLO DE U2A MACRO SE2CILLA.
Desde el )+- eEiste na instrcci$n m# c$moda :e introdce en la pila + re%istros!
# otra :e los saca 5PUSHA # POPA6. Rien est" acostmbrado a emplearlas! pede
crear nas macros :e simlen estas instrcciones en los +(+-:
S(PERP(S) MAR,
P(S) A*
P(S) *
P(S) D*
P(S) +*
P(S) SP
P(S) +P
P(S) SI
P(S) DI
E#DM
La creaci$n de SUPERPOP es anFlo%a! sacando los re%istros en orden inBerso. El
orden ele%ido no es por capric?o # se corresponde con el de la instrcci$n PUSHA
ori%inal! para compatibiliAar. A partir de la de=inici$n de esta macro! tenemos a nestra
disposici$n na nue"a #nstrucc#7n m8qu#na 5SUPERPUSH6 :e pede ser sada con
libertad dentro de los pro%ramas.

../.&. I PARmMETROS 1ORMALES J PARmMETROS ACTUALES.
Para :ien no ?a#a tenido relaci$n preBia con al%<n len%a;e estrctrado de alto
niBel! ?ar" n breBe comentario acerca de lo :e son los parFmetros =ormales # actales
en na macro! similar a:> a los procedimientos de los len%a;es de alto niBel.
Cando se llama a na macro se le peden pasar opcionalmente n cierto n<mero de
parFmetros de cierto tipo. Estos parFmetros se denominan par8metros actuales. En la
de=inici$n de la macro! dic?os parFmetros aparecen asociados a ciertos nombres
arbitrarios! c#a <nica misi$n es permitir distin%ir nos parFmetros de otros e indicar
en :" orden son entre%ados: son los par8metros %ormales. Cando el ensamblador
eEpanda la macro al ensamblar! los parFmetros =ormales serFn sstitidos por ss
correspondientes parFmetros actales. Considerar el si%iente e;emplo:
S(MAR MAR, a,&,tota!
P(S) A*
M,; A*,a
ADD A*,&
M,; tota!,A*
P,P A*
E#DM
....
S(MAR positi$os, negati$os, tota!
En el e;emplo! kal! kbl # ktotall son los parFmetros =ormales # kpositiBosl!
kne%atiBosl # ktotall son los parFmetros actales. Tanto kal como kbl peden ser
Bariables! eti:etas! etc. en otro pnto del pro%ramaP sin embar%o! dentro de la macro!
se comportan de manera independiente. El parFmetro =ormal ktotall ?a coincidido en el
e;emplo # por casalidad con s correspondiente actal. El c$di%o :e %enera el
ensamblador al eEpandir la macro serF el si%iente:
P(S) A*
M,; A*,positi$os
ADD A*,negati$os
M,; tota!,A*
P,P A*
Las instrcciones PUSH # POP sirBen para no alterar el Balor de A8 # conse%ir :e
la macro se comporte como na ca5a negraP no es necesario :e esto sea as> pero es na
bena costmbre de pro%ramaci$n para eBitar :e los pro%ramas ?a%an cosas raras. En
%eneral! las macros de este tipo no deber>an alterar los re%istros #! si los cambian! ?a#
:e tener m# claro cFles.
Si se indican mFs parFmetros de los :e na macro necesita! se i%norarFn los
restantes. En cambio! si =altan! el MASM asmirF :e son nlos 5(6 # darF n mensa;e
de adBertencia! el TASM es al%o mFs r>%ido # podr>a dar n error. En %eneral! se trata de
sitaciones at>picas :e deben ser eBitadas.
Tambi"n pede darse el caso de :e no sea posible eEpandir la macro. En el e;emplo!
no ?biera sido posible e;ectar SUMAR A8!78!DL por:e DL es de + bits # la
instrcci$n MO0 DL!A8 ser>a ile%al.
.././. I ETIRUETAS DE2TRO DE MACROS. 0ARIA7LES LOCALES.
Son necesarias normalmente para los saltos condicionales :e conten%an las macros
mFs comple;as. Si se pone na eti:eta a donde saltar! la macro s$lo podr>a ser
empleada na BeA en todo el pro%rama para eBitar :e dic?a eti:eta apareAca
dplicada. La solci$n estF en emplear la directiBa LOCAL :e ?a de ir colocada ;sto
desp"s de la directiBa MACRO:
MI#IM, MAR, dato1, datoD, resu!tado
8,A8 ya7esta
M,; A*,dato1
MP A*,datoD ; Zes dato1 e! menor3
:+ ya7esta ; s=
M,; A*,datoD ; no, es datoD
ya7esta: M,; resu!tado,A*
E#DM
En el e;emplo! al inBocar la macro dos Beces el ensamblador no %enerarF la eti:eta
k#aVestal sino las eti:etas __((((! __((('! ... # as> scesiBamente. La directiBa
LOCAL no s$lo es <til para los saltos condicionales en las macros! tambi"n permite
declarar Bariables internas a los mismos. Se pede indicar n n<mero casi inde=inido de
eti:etas con la directiBa LOCAL! separFndolas por comas.
../... I OPERADORES DE MACROS.
` Operador PP
Indica :e lo :e Biene a continaci$n es n comentario :e no debe aparecer al
eEpansionar la macro. Cando al ensamblar se %enera n listado del pro%rama! las
macros selen aparecer eEpandidas en los pntos en :e se inBocanP sin embar%o s$lo
aparecerFn los comentarios normales :e comiencen por 5P6. Los comentarios
relacionados con el =ncionamiento interno de la macro deber>an ir con 5PP6! los relatiBos
al so # sintaEis de la misma con 5P6. Esto es ademFs conBeniente por:e drante el
ensambla;e son mantenidos en memoria los comentarios de macros 5no los del resto del
pro%rama6 :e comienAan por 5P6! # no conBiene desperdiciar memoria...
` Operador n
UtiliAado para concatenar teEto o s>mbolos. Es necesario para lo%rar :e el
ensamblador sstit#a n parFmetro dentro de na cadena de caracteres o como parte de
n s>mbolo:
SA8(D, MAR, c
M,; A8,[\c[
etiqueta\c: A88 imprimir
E#DM
Al e;ectar SALUDO A se prodcirF la si%iente eEpansi$n:
M,; A8,[A[
etiquetaA: A88 imprimir
Si no se ?biera colocado el n se ?biera eEpandido como MO0 AL!DcD
Cando se tiliAan estrctras repetitiBas REPT! IRP o IRPC 5:e se BerFn mFs
adelante6 eEiste n problema adicional al intentar crear eti:etas! #a :e el ensamblador
se come n n al ?acer la primera sstitci$n! %enerando la misma eti:eta a menos :e
se dpli:e el operador n:
MEM,RIA MAR, P
IRP i, ]1, D^
P\i D+ i
E#DM
E#DM
Si se inBoca MEMORIA ET se prodce el error de Deti:eta ETi repetidaD! :e se
pede salBar aGadiendo tantos [n[ como niBeles de anidamiento ?alla en las estrctras
repetitiBas empleadas! como se e;empli=ica a continaci$n:
MEM,RIA MAR, P
IRP i, ]1, D^
P\\i D+ i
E#DM
E#DM
Lo :e con MEMORIA ET %enerarF correctamente las l>neas:
E-1 D+ 1
E-D D+ D
` Operador f o de
Empleado para indicar :e el carFcter :e Biene a continaci$n debe ser
interpretado literalmente # no como n s>mbolo. Por ello! fP es e:iBalente a dPe.
` Operador j
ConBierte la eEpresi$n :e le si%e I%eneralmente n s>mboloI a n n<meroP la
eEpresi$n debe ser na constante 5no relocaliAable6. S$lo se emplea en los ar%mentos
de macros. Dada la macro si%iente:
PS(M MAR, mensaje, suma
_,(- I mensaje, suma I
E#DM
5EBidentemente! el j :e precede a OUT =orma parte de la directiBa # no se trata
del j operador :e estamos tratando6
Spesta la eEistencia de estos s>mbolos:
SIM1 E`( 1D/
SIMD E`( O//
InBocando la macro con las si%ientes condiciones:
PS(M ] SIM1 " SIMD L ^, 5SIM1"SIMD6
Se prodce la si%iente eEpansi$n:
_,(- I SIM1 " SIMD L 5SIM1"SIMD6 I
Sin embar%o! inBocando la macro de la si%iente manera 5con j6:
PS(M ] SIM1 " SIMD L ^, _5SIM1"SIMD6
Se prodce la eEpansi$n deseada:
_,(- I SIM1 " SIMD L 4D/ I
../.-. I DIRECTI0AS oTILES PARA MACROS.
Estas directiBas peden ser empleadas tambi"n sin las macros! amentando la
comodidad de la pro%ramaci$n! an:e abndan especialmente dentro de las macros.
` REPT Beces ... E2DM 5Repeat6
Permite repetir cierto n<mero de Beces na secencia de instrcciones. El blo:e
de instrcciones se delimita con E2DM 5no con=ndirlo con el =inal de na macro6. Por
e;emplo:
REP- D
,(- D*,A8
E#DM
Esta secencia se trans=ormarF! al ensamblar! en lo si%iente:
,(- D*,A8
,(- D*,A8
Empleando s>mbolos de=inidos con 5H6 # apo#Fndose ademFs en las macros se
pede lle%ar a crear psedoIinstrcciones m# potentes:
S(ESI,# MAR, n
num L /
REP- n
D+ num
num L num " 1
E#DM ; %in de REP-
E#DM ; %in de macro
La sentencia SUCESIO2 & proBocarF la si%iente eEpansi$n:
D+ /
D+ 1
D+ D
` IRP simboloVcontrol! dar%'! ar%)! ...! ar%Vne ... E2DM 5Inde=inite repeat6
Es relatiBamente similar a la instrcci$n 1OR de los len%a;es de alto niBel. Los
Fn%los 5d6 # 5e6 son obli%atorios. El s>mbolo de control Ba tomando scesiBamente los
Balores 5no necesariamente nm"ricos6 ar%'! ar%)! ... # recorre en cada pasada todo el
blo:e de instrcciones ?asta alcanAar el E2DM 5no con=ndirlo con =in de macro6
sstit#endo simboloVcontrol por esos Balores en todos los l%ares en :e aparece:
IRP i, ]1,D,B^
D+ /, i, iIi
E#DM
Al eEpansionarse! este con;nto de instrcciones se conBierte en lo si%iente:
D+ /, 1, 1
D+ /, D, .
D+ /, B, H
2ota: Todo lo encerrado entre los Fn%los se considera n <nico parFmetro. Un 5P6
dentro de los Fn%los no se interpreta como el inicio de n comentario sino como n
elemento mFs. Por otra parte! al emplear macros anidadas! deben indicarse tantos
s>mbolos an%lares [d[ # [e[ consectiBos como niBeles de anidamiento eEistan.
L$%icamente! dentro de na macro tambi"n reslta bastante <til la estrctra IRP:
-E-RA,(- MAR, p1, pD, pB, p., $a!or
P(S) A*
P(S) D*
M,; A8,$a!or
IRP cn, ]p1, pD, pB, p.^
M,; D*, cn
,(- D*, A8
E#DM ; %in de IRP
P,P D*
P,P A*
E#DM ; %in de macro
Al e;ectar TETRAOUT &'+?! 'C*?! )D'?! 'A/?! ', se obtendrF:
P(S) A*
P(S) D*
M,; A8, 1F
M,; D*, B1E'
,(- D*, A8
M,; D*, 1H'
,(- D*, A8
M,; D*, DD1'
,(- D*, A8
M,; D*, 1A.'
,(- D*,A8
P,P D*
P,P A*
Cando se pasan listas como parFmetros ?a# :e encerrarlas entre [d[ # [e[ al
llamar! para no con=ndirlas con elementos independientes. Por e;emplo! spesta la
macro I2CD:
I#D MAR, !ista, p
IRP i, ]!ista^
I# i
E#DM ; %in de IRP
DE p
E#DM ; %in de macro
Se comprende la necesidad de tiliAar los Fn%los:
I2CD A8! 78! C8! D8 se eEpandirF:
I# A*
DE +* ; * y D* se ignoran 5.
parMmetros6
I2CD dA8! 78! C8e! D8 se eEpandirF:
I# A*
I# +*
I# *
DE D* ; 5D parMmetros6
` IRPC simboloVcontrol! dc'c) ... cne ... E2DM 5Inde=inite repeat c?aracter6
Esta directiBa es similar a la anterior! con na salBedad: los elementos sitados
entre los Fn%los 5d6 # 5e6 Ia?ora opcionales! por ciertoI son caracteres ASCII # no Ban
separados por comas:
IRP i, ]E1B^
D+ i
E#DM
El blo:e anterior %enerarF al eEpandirse:
D+ E
D+ 1
D+ B
E;emplo de tiliAaci$n dentro de na macro 5en combinaci$n con el operador n6:
I#IIA8IXA MAR, a, &, c, d
IRP iter, ]\a\&\c\d^
D+ iter
E#DM ; %in de IRP
E#DM ; %in de macro
Al e;ectar I2ICIALI3A ,! '! /! ( se prodce la si%iente eEpansi$n:
D+ F
D+ 1
D+ .
D+ /
` E8ITM
SirBe para abortar la e;ecci$n de n blo:e MACRO! REPT! IRP $ IRPC.
2ormalmente se tiliAa apo#Fndose en na directiBa condicional 5I1...ELSE...E2DI16.
Al salir del blo:e! se pasa al niBel inmediatamente sperior 5:e pede ser otro blo:e
de estos6. Como e;emplo! la si%iente macro reserBa n b#tes de memoria a cero ?asta n
mFEimo de '((! colocando n b#te ).. al =inal del blo:e reserBado:
MA88, MAR, n
maPimoL1//
REP- n
I< maPimo E` / ; Zya $an 1//3
E*I-M ; a&andonar REP-
E#DI<
maPimo L maPimo R 1
D+ / ; reser$ar &yte
E#DM
D+ DOO ; &yte de %in de
&!oque
E#DM
../.,. I MACROS A0A23ADAS CO2 2UMERO 0ARIA7LE DE PARmMETROS.
Como se Bio al estdiar la directiBa I1! eEiste la posibilidad de c?e:ear
condicionalmente la presencia de n parFmetro por medio de I127! o s asencia con
I17. Uniendo esto a la potencia de IRP es posible crear macros eEtraordinariamente
BersFtiles. Como e;emplo! Bal%a la si%iente macro! destinada a introdcir en la pila n
n<mero Bariable de parFmetros 5?asta '(6: es especialmente <til en los pro%ramas :e
%estionan interrpciones:
*P(S) MAR, R1,RD,RB,R.,RO,R4,RF,RE,RH,R1/
IRP reg, ]R1,RD,RB,R.,RO,R4,RF,RE,RH,R1/^
I<#+ ]reg^
P(S) reg
E#DI<
E#DM ; %in de IRP
E#DM ; %in de *P(S)
Por e;emplo! la instrcci$n:
*P(S) A*,+*,DS,ES,;AR1
Se eEpandirF en:
P(S) A*
P(S) A*
P(S) DS
P(S) ES
P(S) ;AR1
El e;emplo anterior es ilstratiBo del mecanismo de comprobaci$n de presencia de
parFmetros. Sin embar%o! este e;emplo pede ser optimiAado notablemente empleando
na lista como <nico parFmetro:
*P(S) MAR, !ista
IRP i, ]!ista^
P(S) i
E#DM
E#DM
*P,P MAR, !ista
IRP i, ]!ista^
P,P i
E#DM
E#DM
La Benta;a es el n<mero inde=inido de parFmetros soportados 5no s$lo '(6. Un
e;emplo de so pede ser el si%iente:
*P(S) ]A*, +*, *^
*P,P ]*, +*, A*^
Re al eEpandirse :eda:
P(S) A*
P(S) +*
P(S) *
P,P *
P,P +*
P,P A*
?ttp:@@meltin%pot.=ortnecit#.com@r%a#@*,+@libro@(..?tmlh(/
"0&1.J Sirve para definir una Macro.
Una macro, es un conjunto de instrucciones que se pueden mandar a llamar
desde cualquier parte del programa.
Para definir una macro, se utiliza la directiva "0&1. El formato de esta
directiva es :
:nombre@de@macro< "0&1 :lista@par/metros<
La macro consta de tres partes esenciales: la cabecera, que contiene el
nombre de la macro, la directiva "0&1 y una lista opcional de parmetros; el
cuerpo, que contiene el cdigo de la macro, y el fin, que contiene simplemente
la directiva E=)".
Ejemplo 7
I=IT2 "0&1
"18 09-)0T0
"18 )S-09
"18 ES-09
E=)"
La mayora de las programas ejecutan conjunto de instrucciones repetitivas.
Por ejemplo para desplegar un mensaje es necesario ejecutas la siguiente
secuencia de instrucciones:
"18 )9- F1ET "E=S0CE
"18 0'- ;B'
I=T 21
Si su programa realiza frecuentemente funciones de entrada/salida, las
macros ofrecen la facilidad de codificar una sola vez un conjunto de
instrucciones y reutilizar el cdigo cuantas veces desee dentro de su programa.
Una macro es una pseudo-op que permite el establecimiento de
operaciones nicas en ensamblador o la inclusin de frecuentes llamadas de
cdigo ensamblador. Una macro tambin se puede definir como un grupo de
instrucciones repetitivas en un programa que se codifica slo una vez y puede
utilizarse cuantas veces sea necesario.
Una macro consta de tres partes esenciales7
a) CAECERA' Contiene el nombre de la macro, la pseudo-op MACRO y
opcionalmente, variables ficticias que sern pasadas desde la macro.
.) CUERP": Contiene el cdigo real que ser insertado en cualquier programa
que llame al nombre de la macro.
c) +IN: Debe incluir la sentencia ENDM.

El !ormato de de!inicin de una macro es 7
NombreMacro "0&1 (parmetro1, parmetro2,..., parmetroN)
CUERPO DE LA MACRO
E=)"
Ejemplo de la definicin de una macro.
I=II1 "0&1 S)EFI=E "0&1
"18 09- )0T0 SUE&,1 )E
"18 )S- 09 S20 )EFI=IID=
"18 ES- 09 S)E 20 "0&1
E=)" SFI= )E 20 "0&1
El nombre de esta macro es NCO, aunque es aceptable cualquier otro
nombre vlido que sea nico. La directiva MACRO en la primer lnea indica al
ensamblador que las instrucciones que siguen, hasta ENDM ("fin de la macro),
son parte de la definicin de la macro.
La directiva E=)" termina la definicin de la macro. Las instrucciones entre
"0&1 y E=)" comprenden el cuerpo de la definicin de la macro.
Los nombres a que se hace referencia en la definicin de la macro,
@datos, AX, DS y ES, deben estar definidos en alguna parte del programa o
deben ser dados a conocer de alguna otra forma al ensamblador. .En forma
subsecuente se puede usar la macroinstruccin NCO en el segmento de
cdigo en donde quiera inicializar los registros. Cuando el ensamblador
encuentra la macroinstruccin NCO, el ensamblador copia el cuerpo de la
macro en la posicin del programa dnde se encuentra la llamada a la macro.
PARMETROS
Un parmetro es una variable que puede tomar un valor diferente cada vez
que se ejecute una subrutina en la que se utiliza tal variable.
Los parmetros son reemplazados por los nombres o valores que
especifique la instruccin que la invoc. La lista de parmetros es opcional y, si
existe, cada parmetro deber estar separado por una coma.
Ejemplo:
)espliega "0&1 "ensaje
Toda macro tiene une definicin inicial que consta del nombre asignado a
ella, el seudocdigo de operacin "0&1 y la lista de parmetros. En la
definicin anterior el nombre de la macro es despliega y su parmetro es
mensaje (el mensaje que se desplegar cada vez que sea invocada la macro).
)espliega "0&1 "ensaje
"18 )9- 1FFSE "ensaje
"18 0'- ;B
I=T 21'
E=)"
Para hacer una macro flexible, podemos definir nombres en ella como
argumentos mudos (ficticios). La definicin de la macro siguiente llamada
,&1",T, proporciona el uso de la funcin 09H del DOS para desplegar
cualquier mensaje, cuando se usa la macro instruccin, el programador tiene
que proporcionar el nombre del mensaje, el cual hace referencia a un rea de
datos determinada por un signo de dlar.
,&1",T "0&1 "E=S0CE S0&GU"E=T1 "U)1
"18 0'-;B'
2E0 )9S"ESSGE
I=T 21'
E=)" SFI= )E 20 "0&1
Un argumento mudo (ficticio) indica al ensamblador que haga coincidir su
nombre con cualquier aparicin del mismo nombre en el cuerpo de la macro.
Por ejemplo el argumento mudo +./"*). tambin aparece en la instruccin
2E0.
Cuando utiliza la macro instruccin P(+P$, usted proporciona un
parmetro como el nombre real del mensaje que ser desplegado, por ejemplo:
,&1",T "ESS0GE2
En este caso MESSAGE2 tiene que estar apropiadamente definido en el
segmento de datos. El parmetro en la macroinstruccin corresponde al
argumento mudo en la definicin original de la macro:
)EFI=IID= )E "0&17 ,&1",T "0&1 "ESS0GE :argumento<
"0&1I=ST&UID=7 ,&1",T "ESS0GE2 :par/metro<
El ensamblador sustituye los parmetros de la macroinstruccin por los
argumentos mudos en la definicin de la macro, entrada por entrada, de
izquierda a derecha.
Ejemplo de parmetros de macros.
TIT2E ,22"0&2 :E9E< US1 )E ,0&a"ET&1S.
I=ITK "0&1 S)EFI=E "0&1
"18 09- )0T0
"18 )S-09
"18 ES-09
E=)" STE&"I=0 "0&1
,&1",T "0&1 "ESSGE S)EFI=E "0&1
"18 0'- ;B'
2E0 )S- "ESSGE
I=T 21'
E=)" STE&"I=0 "0&1
."1)E2 S"022
.ST0L .4
.)0T0
"ESSGE1 )% ZUST1"E& =0"E>[- ZP[
"ESSG2 )% ZUST1"E& 0))&ES[- ZP[
.1)E
%EGI= ,&1 F0&
I=ITK
"18 09- )0T0
"18 )S- 09
"18 ES- 09
,&1",T "ESSG2
"18 0'- ;B'
2E0 )9- "ESSG2
I=T 21'
"18 09- 4;;' SS02E 02 )1S
I=T 21'
%EGI= E=),
E=) %EGI=

ETQUETAS
Una etiqueta es el primer campo de la izquierda de una lnea. Este campo
es opcional, consiste en un conjunto de caracteres y sirve para identificar dicha
lnea.
Cuando en una lnea de instruccin se encuentra una etiqueta el ordenador
guardar dicha etiqueta junto con la direccin que le ha correspondido a la
instruccin para posteriormente ser relacionada con una instruccin de salto a
esa direccin.
Con el uso de etiquetas el programador se despreocupa de las posiciones
de memoria que van a ocupar las instrucciones y coloca etiquetas a las
instrucciones a las que haga referencia en otros puntos del programa.
A continuacin se mencionan algunas ventajas que ofrece el empleo de
etiquetas:
a) Permite localizar y recordar fcilmente una determinada instruccin.
b) Se puede modificar de forma sencilla, en la fase de correccin de un
programa, el punto donde tienen que realizarse uno o ms saltos cambiando la
etiqueta de una instruccin a otra.
c) En caso de que el programa objeto de debe colocar en posiciones de
memoria diferentes de las que en un principio se haba previsto. No hay que
hacer ningn cambio en el programa fuente si se han utilizado etiquetas, pues
al hacer la nueva traduccin asigna automticamente las nuevas posiciones a
las etiquetas. Esto facilita la unin de varios programas que han sido
desarrollados por separado.

Ejemplo de una etiqueta:
)espliega "0&1 "ensaje- 8eces
"18 9- 8eces
1T&07 "18 )9- 1FFSET "ensaje
"18 0'-B
I=T 21'
211, 1T&0
E=)"
La macro anterior despliega el mensaje las veces especificadas. Sin
embargo, qu sucede si invoca usted la macro ms de una vez?. El T0S"
genera un error de etiqueta redefinida porque no se puede definir una etiqueta
con el mismo nombre ms de una vez (la etiqueta de la macro anterior es
OTRA). Las normas para definicin de etiquetas nos dicen que stas deben
tener nombres nicos; lo anterior se debe a que si el T0S" permitiese la
duplicacin de etiquetas, el programa se vera en un predicamento porque no
podra decidir a cul de las etiquetas debe hacerle caso.
Ejemplo:
...D)IG1
.
.
)espliega "0&1 "ensaje- +eces
"18 9- 8eces
1T&07
"18 )9-1FFSET "ensaje
"18 0'-;B
I=T 21'
211, 1T&0
E=)"
..."0S D)IG1
.
.
.
"18 9-1;
1T&07
211, 1T&0
...&EST1 )E2 D)IG1
...E=) ,&1G&0"0
Cuando el programa ejecuta la primera macro todo est bien, pero cuando
intenta ejecutar el cdigo que contiene de nuevo el mismo nombre de etiqueta
se queda perplejo porque no puede decidir si la interaccin se aplica a su
etiqueta 1T&0 o a la etiqueta 1T&0 de la macro procesadora.
Afortunadamente existe una solucin al problema que consiste en usar un
seudocdigo de operacin llamado 210L, el cual enumera todas las
etiquetas utilizadas dentro de una macro. Cada vez que la macro sea
expandida, el T0S" crea un smbolo nico para cada etiqueta enumerada en la
lista de 2102. El formato de 2102 es:
2102 lista de etiEuetas
Donde lista de etiquetas es la lista de los nombres de etiqueta que se
usarn dentro de la macro. 2102 debe ser la primera instruccin que
aparezca tras la definicin de la macro, ya que no pueden haber comentarios
entre la definicin y la especificacin de 2102. Teniendo presente lo anterior
redefinamos la macro anterior.

)espliega "0&1 "ensaje- 8eces
2102 1T&0
"18 9- 8EES
1T&07 "18 )9- 1FFSET "ensaje
"18 0'-B
I=T 21'
211, 1T&0
E=)"
ENSA3&E DE 3ACR"S
Al ensamblarse una macro de un programa en lenguaje ensamblador, lo que
hace l turbo asembler (Tasm) de Borland turbo pascal es: buscar el cdigo de
la macro, copiarlo y pegarlo en cada una de las macros existentes del
programa.
Cuando se crea un programa no es necesario escribir los comentarios que
van despus de las comillas, sin embargo es una tcnica recomendable para
que en caso de errores o mejoras al cdigo sea ms sencillo encontrar la parte
deseada.
Para ensamblar este programa primero se guarda el formato ASC con un
nombre vlido, por ejemplo:
program1.asm
Para ensamblarlo se utiliza el T0S", el comando de ensamble es: T0S"
,rogram1; para enlazarlo y hacerlo ejecutable tecleamos: LNK program1;
Una vez terminados estos pasos es posible ejecutarlo tecleando: program1
[Enter]
Para utilizar el programa directamente en su computadora guarde este
archivo como ASC o texto, llvelo a su PC, con algn editor elimine todos
estos comentarios y los comentarios del principio y ensmblelo.
,&1G&0"07
S I=II1 )E2 ,&;G&0"0- )EFI=I"1S E2 "1)E21 )E "E"1&I0 0 US0& F E2
SEG"E=T1
S )E D)IG1
."1)E2 S"022 S"1)E21 )E "E"1&I0
.1)E Sa&E0 )E D)IG1
I=II17 SETITUET0 )E I=II1 )E2 ,&1G&0"0
"18E 09-)0T0 SI=II02IK0 E2 &EGIST&1 )S 1= 20 )I&EID= )0)0
"18 )S-09 S,1& )0T0 :SEG"E=T1 )E )0T1S<
"18 )9- 1FFSET Titulo S1%TIE=E 20 )I&EID= )E 20 0)E=0 )E
0)E=0 )E 0&0TE&ES
"18 0'-;B SUS0"1S 20 FU=ID= ;B' )E 20 I=TE&&U,ID= 21'
I=T 21' S,0&0 )ES,2EG0& 20 0)E=0 UF0 )I&EID= 1%TU8I"1S
"18 9-1. S1=T0)1& )E 0&0TE&ES TUE SE "1ST&0&a
"18 %9-1FFSET adena S,E&"ITE 0ES1 0 20 0)E=0 )1=)E SE
E=UE=T&0= 21S 8021&ES 0 )ES,2EG0&
I217 SETITUET0 ,0&0 GE=E&0& U= I21
"18 02-2 S1210 E= 02 E2 =b"E&1 0 T&0)UI& F 21 T&0)UE
920T SUS0=)1 20 I=ST&UID= 920T
"18 )2-02 S1210 E= )2 E2 8021& 0 SE& )ES,2EG0)1 ,1& "E)I1 )E
20
"18 0'- ;2 SFU=ID= 2 )E 20 I=TE&&U,ID= 21'
I=T 21' S)ES,2IEG0 E2 0&0TE&
"18 )2-1; SS02T0 U=0 2c=E0 )ES,2EG0=)1 E2 0&aTE& 1;
I=T 21' S)ES,2IEG0 E2 0&0TE&
"18 )2-13 S,&1)UE U= &ET1&=1 )E 0&&1 )ES,2EG0=)1 E2
0&0TE& 13
I=T 21' S)ES,2IEG0 E2 &ET1&=1 )E 0&&1
211, I21 S)E&E"E=T0 E= 1 0 9 F %&I=0 20 ETITUET0 I21
SSIE",&E F U0=)1 9 =1 SE0 IGU02 0 E&1
"18 0'- 4 S UTI2IK0 20 FU=ID= 4 )E 20 I=TE&&U,ID= 21' ,0&0
I=T 21' SFI=02IK0& E2 ,&1G&0"0
VENTAJAS DE LAS MACROS
1: Las macros son rpidas porque se ejecutan en lnea en un programa.
2: Las macros pueden pasar y recibir parmetros que afecten solo la operacin
de las mismas.
3: Las macros pueden ser guardadas en una biblioteca en cdigo fuente, que
puede ser fcilmente editada.
4: La cabecera de programacin puede utilizar macros simple; para una
biblioteca de macros utilizar F1...ENDF.

DESVENTAJAS DE LAS MACROS
1: Las macros hacen ms grande el cdigo fuente, ya que son expandidas
cada vez que son llamadas.
Definicin
Una de las principales desventajas de la programacin en lenguaje
ensamblador es la repeticin constante de ciertos grupos de instrucciones. Por
ejemplo el siguiente conjunto de instrucciones nos permite imprimir una
variable de tipo cadena en la pantalla:
Lea DX,Cadena ;Direccionar la cadena
Mov AH,09h ;Usar la funcin 09h para imprimir cadenas
nt 21h ;llamada a la interrupcin 21h del DOS
Si necesitamos que en nuestro programa se muestren mensajes
constantemente, es obvio que debemos duplicar este conjunto de instrucciones
por cada mensaje que se desea enviar a pantalla.
El principal problema que esto nos ocasiona es que el tamao de nuestro
programa crece considerablemente, y mientras ms grande sea el programa,
ms difcil ser encontrar la causa de algn error cuando ste ocurra.
La mejor solucin en estos casos es el uso de las MACROS. Una macro es un
conjunto de instrucciones que se agrupan bajo un nombre descriptivo
(macroinstruccin) y que slo es necesario declarar una vez (macrodefinicin).
Una vez que la macro ha sido declarada, slo es necesario indicar su nombre
en el cuerpo del programa y el ensamblador se encargara de reemplazar la
macroinstruccin por las instrucciones de la macro (expansin de la macro).
El formato general de una macro es el siguiente:
.MACRO Nombre [(parametro1, parametro2, etc)]
NSTRUCCONES
ENDM
Nuevamente, lo que se encuentra entre parntesis cuadrados es opcional.
De acuerdo con esto, la macro para imprimir cadenas quedara de la siguiente
forma:
.MACRO mprime_Cad(Cadena)
Lea DX,Cadena
Mov Ah,09h
nt 21h
ENDM
Parmetros y etiquetas
Dentro de las propiedades ms importantes de las macros se deben destacar
la posibilidad de utilizar parmetros y etiquetas.
Los parmetros permiten que una misma macro pueda ser usada bajo
diferentes condiciones, por ejemplo, se puede crear una macro para posicionar
el cursor en diferentes coordenadas de la pantalla e indicar sus coordenadas
por medio de parmetros.
La siguiente macro nos muestra esta propiedad:
;Esta macro posiciona el cursor en las coordenadas que se le indican como
;parmetros. Es el equivalente al GotoXY de Pascal.
.MACRO gotoxy (x,y)
xor bh,bh ;Seleccionar pgina cero de video
mov dl,x ;Columna
mov dh,y ;Rengln
mov ah,02h ;Funcin 02h para posicionar cursor
int 10h ;llamada a la int 10h del BOS
ENDM
Tambin existen situaciones en las que los parmetros no son necesarios, es
por esta razn que los parmetros son opcionales en la declaracin de la
macro.
;Esta macro realiza una pausa en el programa hasta que una tecla es
;presionada. Es el equivalente del readkey en Pascal.
.MACRO tecla
mov ah,10h
int 16h
ENDM
Por otro lado, las etiquetas tambin son tiles dentro de las macros. Suponga
que se desea crear una macro que imprima una cadena un numero n de veces,
esta macro podra ser declarada de la siguiente forma:
.MACRO mprime_nCad (Cadena, Cuantos)
Mov CX,Cuantos ;niciar Contador
Lea DX,Cadena ;Direccionar la cadena que se va a imprimir
Mov Ah,09h ;Usar la funcin 09h
Otra: ;Etiqueta interna
nt 21h ;mprimir la Cadena n veces
Loop Otra ;Siguiente mpresin
ENDM
Ensamble de macros
Como ya se mencion antes, una macro es declarada una sola vez y puede ser
llamada cuantas veces sea necesario dentro del cuerpo del programa.
Cada vez que el ensamblador encuentra una macroinstruccin, verifica si sta
fue declarada; si esta verificacin es exitosa, el ensamblador toma las
instrucciones del cuerpo de la macro y las reemplaza en el lugar donde la
macro fue llamada.
El siguiente programa muestra la declaracin y uso de las macros:
.COMMENT
Programa: Macros1.ASM
Autor: Juan Carlos Guzmn C.
Descripcin: Este programa muestra el uso de macros.
.MODEL TNY
; Declaracin de variables
.DATA
cad db 'Ejemplo del uso de macros...',13,10,'$'
cad1 db 'Presiona una tecla...','$'
cad2 db 'Ejemplo del uso de la macro gotoxy...','$'
;Aqu se declaran las macros.
;************************************************************************
;------------------------------------------------------------------------
;Esta macro imprime una cadena pasada como parmetro.
;Utiliza la funcin 09h de la nt 21h del DOS.
.MACRO imprime_cad(cadena)
lea dx,cadena
mov ah,09h
int 21h
ENDM
;------------------------------------------------------------------------
;Esta macro realiza una pausa en el programa hasta que una tecla se
;presione. Es el equivalente del readkey en Pascal.
.MACRO tecla
mov ah,10h
int 16h
ENDM
;------------------------------------------------------------------------
;Esta macro posiciona el cursor en las coordenadas que se le indican como
;parmetros. Es el equivalente al GotoXY de Pascal.
.MACRO gotoxy (x,y)
xor bh,bh
mov dl,x
mov dh,y
mov ah,02h
int 10h
ENDM
;-------------------------------------------------------------
;Esta macro limpia la pantalla.
;Utiliza la funcin 06h de la nt 10h del Bios.
.MACRO limpiar_pantalla
mov ax,0600h
mov bh,17h
mov cx,0000h
mov dx,184fh
int 10h
ENDM
;-------------------------------------------------------------
;Aqu comienza el cuerpo del programa principal
.CODE
inicio: ;Declaracin del punto de entrada
limpiar_pantalla ;Llamada a la macro
gotoxy (0,0) ;Colocar el cursor en 0,0
imprime_cad(cad) ;mprime el primer mensaje
imprime_cad(cad1) ;mprime el segundo mensaje
tecla ;Espera a que se presione una tecla
gotoxy (30,12) ;Colocar el cursor en 30,12
imprime_cad(cad2) ;mprimir el tercer mensaje
gotoxy (50,24) ;Colocar el cursor en 50,24
imprime_cad(cad1) ;mprimir el segundo mensaje
tecla ;Esperar por una tecla
mov ax,4c00h ;Fin del programa y regresar al DOS.
int 21h
END inicio
END
Ventajas y desventajas
Si bien es cierto que las macros proporcionan mayor flexibilidad a la hora de
programar, tambin es cierto que tienen algunas desventajas.
La siguiente es una lista de la principales ventajas y desventajas del uso de las
macros.
Ventajas:
Menor posibilidad de cometer errores por repeticin.
Mayor flexibilidad en la programacin al permitir el uso de parmetros.
Cdigo fuente ms compacto.
Al ser ms pequeo el cdigo fuente, tambin es ms fcil de leer por otros.
Desventajas:
El cdigo ejecutable se vuelve ms grande con cada llamada a la macro.
Las macros deben ser bien planeadas para evitar la redundancia de cdigo.
5ttp7$$(((.monogra!ias.com$trabajos11$lenen$lenen2.s
5tml
onceptos b/sicos
Defini%i8n 6 o#era%i8n
Una macro es n s>mbolo :e representa n blo:e de teEto.
El ensamblador sa las macros de tal manera :e cada BeA :e encentra al s>mbolo :e
de=ine la macro! lo sstit#e por el teEto :e representa.
C8"o %rear "a%ros
Sintaxis:
]#om&re^ MAR, ?parametros@
...
E#DM
Ejemplo:
Dup!icaA8 MAR,
S)8 A8, 1
E#DM
Cdigo ue la usa:
M,; A8, D
Dup!icaA8 ; Esta es !a [!!amada[ a! macro
El ensamblador sstit#e cada BeA :e apareAca la macro
2o es como los procedimientos! :e se DllamanD pero no repiten el c$di%o
E;emplo:
M,; A8, D
Dup!icaA8 ; A88 Dup!ica
Dup!icaA8 ; A88 Dup!ica
Este c$di%o :eda
M,; A8, D
S)8 A8, 1 ; A88 Dup!ica
S)8 A8, 1 ; A88 Dup!ica
CIando sar$as 6 %Iando no
Cando se :iere el c$di%o mFs rFpido # no importa ser repetitiBo 5c$di%o
%rande6
Cando se Ban a %enerar diBersas Bariantes de c$di%o similar
2o cando se :iere c$di%o compacto! eBitando repetir el mismo 5en este caso!
sar procedimientos6
0signacin de +ariables y constantes para el ensamblador
Psedoinstrcciones! pes solamente se san drante el proceso de tradcci$n
Sintaxis:
dSimboloe ERU 0alor
dSimboloe H 0alor
Permiten de=inir constantes # Bariables del ensamblador
La di=erencia es :e 9 pede sarse Barias Beces sobre el mismo s>mbolo 5como na
Bariable6
&E,T
DirectiBa para de=inir blo:es repetitiBos
Permite repetir n c$di%o determinado! tantas Beces como se desee
Sintaxis:
REP- ]n^
...
E#DM
E;emplo:
;a!or L / ; ;aria&!e de ensam&!ador
REP- 1/
D2 ;a!or
;a!or L ;a!or " 1
E#DM
Uso de par/metros en macros
Los macros peden ser adaptatiBosP por e;emplo:
PotenciaD MAR, Registro, ;a!or
REP- ;a!or
S)8 Registro, 1
E#DM
E#DM
Uso:
PotenciaD *, .
Se conBierte en:
S)8 *, 1
S)8 *, 1
S)8 *, 1
S)8 *, 1
5ttp7$$(((.sinergiaJ(eb.com.m4$clases$asmBM;H$Temas$clase1H.5tm
Para cada instruccin simblica que usted codifica, el ensamblador
genera una instruccin de lenguaje de maquina. El ensamblador tiene
facilidades que el programador puede utilizar para definir macros.
Primero hay que definir un nombre especifico para la macro, junto con
el conjunto de instrucciones en lenguaje ensamblador que la macro va
a generar. Despus, siempre que necesite codificar el conjunto de
instrucciones, solo hay que codificar el nombre de la macro y el
ensamblador genera de forma automtica las instrucciones que han
sido definidas en la macro.
Las macros son tiles para los siguientes propsitos:

Simplificar y reducir la cantidad de codificacin repetitiva.
Reducir errores causados por la codificacin repetitiva.
Linealizar un programa en lenguaje ensamblador para hacerlo
mas legible.
Una definicin de macro aparece antes de que cualquier definicin de
segmento. Examinemos una definicin de una macro sencilla que
inicializa los registros de segmento para un programa.EXE:

NCAREGS MACRO ;Define macro
MOV AX, @data ; } Cuerpo de
MOV DS, AX ; } la definicin
MOV ES, AX ; } de la macro
ENDM ; Fin de la macro

El nombre de esta macro es NCAREGS, aunque es aceptable
cualquier otro nombre valido que sea nico. La directiva MACRO en la
primer lnea indica al ensamblador que las instrucciones que siguen,
hasta ENDM ("fin de la macro"), son parte de la definicin de la macro.
La directiva ENDM termina la definicin de la macro.
Los nombres a que se hace referencia en la definicin de la macro,
@data, AX, DS y ES, deben estar definidos en alguna parte del
programa o deben ser dados a conocer de alguna otra forma al
ensamblador.
En forma subsecuente se puede usar la macro-instruccion
NCAREGS en el segmento de cdigo en donde quiera inicializar los
registros. Cuando el ensamblador encuentra la macra-instruccion
NCAREGS, busca en una tabla de instrucciones simblicas y, a falta
de una entrada, busca macroinstrucciones. Ya que el programa
contiene una definicin de la macro NCAREGS, el ensamblador
sustituye el cuerpo de la definicin generando instrucciones: la
expansin de la macro.
Un programa usara la macroinstruccion NCAREGS solo una vez,
aunque otras macros estn diseadas para ser utilizadas cualquier
numero de veces y cada vez el ensamblador genera la misma
expansin.
"0=EC1 )E ,0&0"ET&1S.
Para hacer una macro flexible, puede definir nombres en ella como
argumentos mudos (ficticios).La definicin de la macro siguiente,
llamada DESPLEGAR_MSG, proporciona el uso de la funcin 09H del
DOS para desplegar cualquier mensaje. Cuando se usa la
macroinstruccin el programador tiene que proporcionar el nombre del
mensaje, el cual hace referencia a un rea de datos terminada por un
signo de dlar.

DESPLEGAR_MSG MACRO MENSAJE ; Argumento mudo
MOV AH, 09H
LEA DX, MENSAJE
NT 21H
ENDM ; Fin de la macro

Un argumento mudo en una definicin de macro indica al ensamblador
que haga coincidir su nombre con cualquier aparicin del mismo
nombre en el cuerpo de la macro. Por ejemplo, el argumento mudo
MENSAJE tambin aparece en la instruccin LEA.
Cuando utiliza la macroinstruccin DESPLEGAR_MSG, usted
proporciona un parmetro como el nombre real del mensaje que ser
desplegado, por ejemplo:

DESPLEGAR_MSG MENSAJE2
En este caso, MENSAJE2 tiene que estar apropiadamente definido en
el segmento de dato. El parmetro en la microinstruccin corresponde
al argumento mudo en la definicin original de la macro:
Definicin de macro: DESPLEGAR_MSG MACRO MENSAJE
(Argumento)
Macroinstruccin: DESPLEGAR_MSG MENSAJE2
(Parametro)
El ensamblador ya ha hecho corresponder el argumento en la
definicin original de la macro con la instruccin LEA en el cuerpo de
la macro. Ahora sustituye el (los) parmetro(s) de la macroinstruccin
MENSAJE2 por la presencia de MENSAJE en la instruccin LEA y la
sustituye por cualquier otra aparicin de MENSAJE.
Un argumento mudo puede contener cualquier nombre valido,
incluyendo un nombre de registro tal como CX. Puede definir una
macro con cualquier numero de argumentos mudos, separados por
coma, hasta la columna 120 de una lnea. El ensamblador sustituye
los parmetros de la macro instruccin por los argumentos mudos en
la definicin de la macro, entrada por entrada, de izquierda a derecha.

"0=EC1 )E ETITUET0S 2102ES.
Algunas macros necesitan que se definan elementos de datos y
etiquetas de instrucciones dentro de la definicin de la macro. Si utiliza
la macro mas de una vez en el mismo programa y el ensamblador
define los elementos de datos para cada aparicin, los nombres
duplicados haran que el ensamblador genere un mensaje de error.
Para asegurar que cada nombre generado es nico, hay que codificar
la directiva LOCAL inmediatamente despus de la instruccin
MACRO. Su formato general es:
LOCAL Etiqueta1, Etiqueta2...Etiquetan.

%I%2I1TE0S )E "0&1S.

Definir una macro y usarla solo una vez en un programa no es muy
productivo. El enfoque habitual es catalogar las macros en una
biblioteca en disco bajo un nombre descriptivo, como MACRO.LB.
Usted solo tiene que reunir todas las definiciones de sus macros en un
archivo y almacenar el archivo en disco:

Macro1 MACRO
....
ENDM
Macro2 MACRO
....
ENDM
Para usar cualquiera de las macros catalogadas, en lugar de codificar
las definiciones MACRO al inicio del programa utilice la directiva
NCLUDE as:

NCLUDE C: MACRO.LB
Macro1
Macro2
El ensamblador accesa el archivo llamado MACRO en la unidad C e
incluye ambas definiciones de macro, Macro1 y Macro2, en el
programa. El listado ensamblado contendr una copia de las
definiciones de las macros.
2a )irecti+a ,U&GE.
La ejecucin de una instruccin NCLUDE hace que el ensamblador
incluya todas las definiciones de macros que estn especificadas en la
biblioteca. Sin embargo, suponga que una biblioteca contiene las
macros SUMA, RESTA, DVDE, pero que el programa solo necesita
SUMA. La directiva PURGE permite que usted "elimine" la macros
RESTA y DVDE que no necesita del ensamblado actual:

F1
NCLUDE C:\MACRO.LB ;ncluye la biblioteca completa
ENDF
PURGE RESTA, DVDE ;Elimina la macros no
necesarias
Una operacin PURGE facilita solo el ensamblado de un programa y
no tiene efecto sobre las macros almacenadas en la biblioteca.

3.3.1Internas.
3.3.2E4ternas.
3.4 ,rocedimientos.
Definicin de procedimientos
Un procedimiento es un conjunto de instrucciones que tienen la finalidad de
ejecutar una tarea especifica dentro de un programa. Los procedimientos son
muy similares a las macros.
Un procedimiento se declara una sola vez en el cdigo fuente y cuando el
programa se ensambla y ejecuta, el procedimiento se coloca en memoria para
que pueda ser utilizado por el programa.
Las principales ventajas en el uso de procedimientos son: permiten una
codificacin ms limpia y compacta, es decir el cdigo fuente es ms pequeo;
tambin permiten el ahorro de memoria, esto es porque un mismo
procedimiento puede ser llamado varias veces en el mismo programa y slo
requiere memoria una vez.
Los procedimientos tienen la desventaja de que reducen la velocidad de
ejecucin de los programas, esto se debe a la forma en que los procedimientos
se ejecutan. A continuacin se presentan los pasos necesarios para ejecutar un
procedimiento:
1.- Se encuentra la llamada Call
2.- El microprocesador almacena en la Pila el contenido del P
3.- Se coloca en el P el valor del desplazamiento correspondiente al
Procedimiento
4.- El microprocesador ejecuta las instrucciones del procedimiento
5.- El procedimiento termina cuando se encuentra la instruccin Ret
6.- Se saca de la pila el valor original del P y se continua el flujo del programa
Un procedimiento se declara de la siguiente forma:
PROC nombre
instruccin
instruccin
....
RET
ENDP NOMBRE
En donde PROC es una palabra reservada que indica el inicio de un
procedimiento, RET es una instruccin que indica la terminacin del conjunto
de instrucciones de un procedimiento y finalmente ENDP es la palabra
reservada para fin de procedimiento.
Paso de parmetros
Los procedimientos en lenguaje ensamblador no cuentan con un mecanismo
para el paso de parmetros; por lo cual, la nica forma de lograr esto es
colocando los parmetros que nos interesan en los registros de propsito
general antes de que el procedimiento sea ejecutado.
El siguiente procedimiento coloca el cursor en las coordenadas establecidas en
Dl y Dh.
Proc GotoXY
xor bh,bh
mov ah,02h
int 10h
Ret
Endp GotoXY
En este ejemplo, las coordenadas XY se deben situar en el registro DX antes
de que se llame al procedimiento.
Llamada a procedimientos
Los procedimientos son llamados por los programas por medio de la instruccin
CALL, seguida del nombre del procedimiento.
Ejemplo:
Call GotoXY
El siguiente programa muestra la forma de pasarle parmetros a los
procedimientos por medio de los registros generales. Este programa declara
tres procedimientos:
GotoXY: Coloca el cursor en las coordenadas especificadas
Limpia_Pantalla: Limpia la pantalla
mprime_Cad: mprime una cadena en la posicin actual del cursor
.COMMENT
*
Programa: Proc2.ASM
Autor: Juan Carlos Guzmn C.
Descripcin: Este programa ilustra la forma de utilizar procedimientos en los
programas por medio de la instruccin Call y la forma de pasarles parmetros.
.MODEL TNY
.DATA
Cad1 db 'Esta es una cadena de prueba...',13,10,'$'
.CODE
NCO: ;Punto de entrada al programa
Mov DL,20 ;X=20
Mov DH,10 ;Y=10
Call Gotoxy ;GotoXY 20,10
Lea DX,cad1 ;DX->Cad1
Call mprime_Cad ;mprimir Cad1
Mov Ax,04C00h ;Terminar y regresar al dos
nt 21h ;
END NCO
;*********************************************************************
;Procedimiento: GotoXY
;Descripcin: Coloca el cursor una posicin especifica de la pantalla
;Parmetros: Dl=X, Dh=Y
;*********************************************************************
PROC GotoXY
Xor Bh,Bh
Mov Ah,02h
nt 10h
Ret
ENDP GotoXY
;***********************************************************************
;Procedimiento: Limpia_Pantalla
;Descripcin: mprime una cadena de caracteres en la posicin del cursor
;Parmetros: La direccin de la cadena en DX
;***********************************************************************
PROC mprime_Cad
Mov Ah,09h
nt 21h
Ret
ENDP mprime_Cad
END
5ttp7$$(((.monogra!ias.com$trabajos11$lenen$lenen2.s
5tml
El segmento de cdigo contiene el cdigo ejecutable de un programa.
Tambin tiene uno o mas procedimientos, definidos con la directiva
PROC. Un segmento que tiene solo un procedimiento puede aparecer
como sigue:
=1"%&E 1,E&0I1= 1,E&0=)1 1"E=T0&I1
nomsegmento SEGMENT PARA
nomproc PROC FAR ;Un
. ;procedimiento
. ;dentro
. ;del segmento
nomproc ENDP ;de cdigo
nomsegmento ENDS

El nombre del procedimiento debe estar presente, ser nico y seguir
las reglas para la formacin de nombres del lenguaje. El operando far
en este caso esta relacionado con la ejecucin del programa. Cuando
usted solicita la ejecucin de un programa, el cargador de programas
del DOS utiliza este nombre de procedimiento como el punto de
entrada para la primera instruccin a ejecutar.
La directiva ENDP indica el fin de un procedimiento y contiene el
mismo nombre que el enunciado PROC para permitir que el
ensamblador relacione a los dos. Ya que los procedimientos deben
estar por completo dentro de un segmento, ENDP define el final de un
procedimiento antes que ENDS defina el final de un segmento.

220"0)0 )E ,&1E)I"IE=T1S.
Hasta ahora los segmentos de cdigo han consistido solo en un
procedimiento, codificado como:
BEGN PROC FAR
.
.
.
BEGN ENDP
En este caso el operador FAR informa al sistema que la direccin
indicada es el punto de entrada para la ejecucin del programa,
mientras que la directiva ENDP define el final del procedimiento. Sin
embargo, un segmento de cdigo puede tener cualquier numero de
procedimientos, todos distinguidos por PROC y ENDP. Un
procedimiento llamado (o subrutina) es una seccin de cdigo que
realiza una tarea definida y clara (tal como ubicar el cursor o bien
obtener entrada del teclado).
La organizacin de un programa en procedimientos proporciona los
beneficios siguientes:
1. Reduce la cantidad de cdigo, ya que un procedimiento comn
puede ser llamado desde cualquier lugar en el segmento de cdigo.
2. Fortalece la mejor organizacin del programa.
3. Facilita la depuracin del programa, ya que los errores pueden ser
aislados con mayor claridad.
4. Ayuda en el mantenimiento progresivo de programas, ya que los
procedimientos son identificados de forma rpida para su
modificacin.

1peraciones 022 y &ET
La instruccin CALL transfiere el control a un procedimiento llamado, y
la instruccin RET regresa del procedimiento llamado al procedimiento
original que hizo la llamada. RET debe ser la ultima instruccin en un
procedimiento llamado. Los formatos generales para CALL y RET son:
El cdigo objeto particular que CALL y RET generan depende de si la
operacin implica un procedimiento NEAR (cercano) o un
procedimiento FAR (lejano).

2lamada y regreso cercanos. Una llamada (CALL) a un
procedimiento dentro del mismo segmento es cercana y realiza lo
siguiente:

Disminuye el SP en 2 (una palabra)
Mete el P (que contiene el desplazamiento de la instruccin que
sigue al CALL) en la pila.
nserta la direccin del desplazamiento del procedimiento
llamado en el P (esta operacin vaca el resultado de la
instruccin previamente procesada),
Un RET que regresa desde un procedimiento cercano realiza lo
siguiente:

Saca el antiguo valor de P de la pila y lo enva al P (lo cual
tambin vaca el resultado de la instruccin previamente
procesada).
ncrementa el SP en 2.
Ahora el CS:P apunta a la instruccin que sigue al CALL original en la
llamada del procedimiento, en donde se reasume la ejecucin.
2lamada y regreso lejanos. Una llamada (CALL) lejana llama a un
procedimiento etiquetado con FAR, tal vez en un segmento de cdigo
separado. Un CALL lejano mete a la pila al CS y al P, y RET los saca
de la pila.

page 60,132
TTLE P08CALLP (EXE) Llamada a procedimientos
.MODEL SMALL
.STACK 64
.DATA
;---------------------------------------------------------------------
.CODE
BEGN PROC FAR
CALL B10 ;Llama a B10
; ...
MOV AX,4C00H ;Salida a DOS
NT 21H
BEGN ENDP
;---------------------------------------------------------------------
B10 PROC NEAR
CALL C10 ;Llama a C10
; ...
RET ;De regreso
B10 ENDP ;Quien llama
;---------------------------------------------------------------------
END BEGN
3.4.1Internos.
Procedimientos internos
Los procedimientos internos son aquellos que se declaran y se llaman dentro del mismo
programa, tambin son llamados procedimientos locales.
El listado anterior muestra la forma de utilizar procedimientos internos.
3.4.2E4ternos.
Procedimientos externos
Los procedimientos externos, a diferencia de los internos, se declaran en
mdulos o programas separados al programa donde el procedimiento es
llamado, en otras palabras, la llamada al procedimiento se encuentra en un
programa y el procedimiento en otro.
Para poder utilizar procedimientos externos, es necesario que sean declarados
como pblicos en el programa donde se encuentran y que sean llamados como
externos en el programa donde sern usados. Para lograr esto, Pass32 cuenta
con tres directivas de ensamble: .PUBLC para declarar los procedimientos
como pblicos, .EXTERN para indicar que el procedimiento que se va a usar
est fuera del programa y .NCLUDE para enlazar el programa que contiene los
procedimientos con el programa que los llama.
El siguiente programa muestra el uso de las directivas de inclusin.
Primeramente, el archivo Proc2.ASM se modific para que su variable Cad1
fuera declarada como publica, el programa Proc3.ASM contiene la lnea
.NCLUDE Proc2.ASM, lo cual indica al ensamblador que, en caso de que se
soliciten datos, etiquetas o procedimientos externos, stos se busquen en el
archivo incluido.
Pass32 proporciona grandes facilidades para el manejo de procedimientos; en
este caso, solamente Cad1 debe ser declarada como pblica, puesto que los
procedimientos se buscan y anexan automticamente al programa que los
llama si es que existen.
.COMMENT
*
Programa: Proc3.ASM
Autor: Juan Carlos Guzmn C.
Descripcin: Este programa ilustra la forma de utilizar procedimientos y datos
externos en los programas por medio de las directivas de inclusin include y
public.
.MODEL TNY
.NCLUDE proc2.ASM ;ncluir el archivo proc2.asm
;el cual contiene la variable de cadena
;Cad1 y los procedimientos externos
;usados en este programa.
.DATA
Cad2 db 'Esta es una cadena de prueba 2...',13,10,'$'
.CODE
NCO: ;Punto de entrada al programa
Mov Dl,20 ;X=20
Mov Dh,10 ;Y=10
Call GotoXY ;GotoXY 20,10
Lea DX,Cad2 ;DX->Cad2 en Proc3.asm
Call mprime_Cad ;mprime Cad2
Lea DX,Cad1 ;DX->Cad1 en Proc2.asm
Call mprime_Cad ;mprime Cad1
Mov AX,04C00h ;Fin del programa
nt 21h ;
END NCO
END
.COMMENT
*
Programa: Proc2.ASM
Autor: Juan Carlos Guzmn C.
Descripcin: Este programa ilustra la forma de utilizar procedimientos en los
programas por medio de la instruccin Call y la forma de pasarles parmetros.
.MODEL TNY
.DATA
.PUBLC Cad1 db 'Esta es una cadena de prueba...',13,10,'$'
.CODE
NCO: ;Punto de entrada al programa
Mov DL,20 ;X=20
Mov DH,10 ;Y=10
Call Gotoxy ;GotoXY 20,10
Lea DX,cad1 ;DX->Cad1
Call mprime_Cad ;mprimir Cad1
Mov Ax,04C00h ;Terminar y regresar al dos
nt 21h ;
END NCO
;*********************************************************************
;Procedimiento: GotoXY
;Descripcin: Coloca el cursor una posicin especifica de la pantalla
;Parmetros: Dl=X, Dh=Y
;*********************************************************************
PROC GotoXY
Xor Bh,Bh
Mov Ah,02h
nt 10h
Ret
ENDP GotoXY
;***********************************************************************
;Procedimiento: Limpia_Pantalla
;Descripcin: mprime una cadena de caracteres en la posicin del cursor
;Parmetros: La direccin de la cadena en DX
;***********************************************************************
PROC mprime_Cad
Mov Ah,09h
nt 21h
Ret
ENDP mprime_Cad
END
Con estas capacidades, es fcil crear bibliotecas de procedimientos y macros
que puedan ser utilizados constantemente por los dems programas,
ahorrando con ello tiempo de programacin al reutilizar cdigo fuente.
El siguiente programa muestra la forma de escribir una biblioteca de
procedimientos y la forma de utilizarlos en los programas.
.COMMENT
*
Programa: Proc3.ASM
Autor: Juan Carlos Guzmn C.
Descripcin: Este programa ilustra la forma de utilizar procedimientos y datos
externos en los programas por medio de las directivas de inclusin include y
public.
.MODEL TNY
.NCLUDE proclib.inc ;ncluir el archivo proclib.inc
;el cual contiene la variable de cadena
;Cad1 y los procedimientos externos
;usados en este programa.
.DATA
Cad1 db 'Esta es una cadena de prueba 2...',13,10,'$'
Cad2 db 'Presiona una tecla...','$'
.CODE
NCO: ;Punto de entrada al programa
Call limpia_Pantalla ;
Mov Dl,20 ;X=20
Mov Dh,10 ;Y=10
Call GotoXY ;GotoXY 20,10
Lea DX,Cad1 ;DX->Cad1
Call mprime_Cad ;mprime Cad1
Mov Dl,40 ;
Mov Dh,24 ;
Call GotoXY ;GotoXY 40,25
Lea DX,Cad2 ;
Call mprime_Cad ;mprime Cad2
Call Espera_Tecla ;Esperar por una tecla presionada
Mov AX,04C00h ;Fin del programa
nt 21h ;
END NCO
END
.COMMENT
Biblioteca de Procedimientos en Lenguaje ensamblador
.CODE
;*********************************************************************
;Procedimiento: GotoXY
; Descripcin: Coloca el cursor una posicin especifica de la pantalla
; Parmetros: Dl=X, Dh=Y
;*********************************************************************
PROC GotoXY
Xor Bh,Bh
Mov Ah,02h
nt 10h
Ret
ENDP GotoXY
;***********************************************************************
;Procedimiento: mprime_Cad
; Descripcin: mprime una cadena de caracteres en la posicin del cursor
; Parmetros: La direccin de la cadena en DX
;***********************************************************************
PROC mprime_Cad
nt 21h
Ret
ENDP mprime_Cad
;**********************************************************************
;Procedimiento: Limpia_Pantalla
; Descripcin: Limpia la pantalla de la computadora y coloca el cursor
; en 0,0.
; Parmetros: Ninguno
;**********************************************************************
PROC Limpia_Pantalla
mov ax,0600h
mov bh,17h
mov cx,0000h
mov dx,184fh
int 10h
Mov dx,0000h
Call Gotoxy
Ret
ENDP Limpia_Pantalla
;**********************************************************************
;Procedimiento: Espera_Tecla
; Descripcin: Detiene la ejecucin de un programa hasta que se presiona
; una tecla
; Parmetros: Ninguno
;**********************************************************************
PROC Espera_Tecla
mov ah,10h
int 16h
Ret
ENDP Espera_Tecla
5ttp7$$(((.monogra!ias.com$trabajos11$lenen$lenen2.s
5tml
Unidad +. Programacin (,brida.
Este tipo de programacin se da cuando el programador necesita emplear
elementos que no estan contemplados dentro de los lenguajes de alto nivel que
habitualmente usa.
Por ejemplo, la mayor parte de los lenguajes de alto nivel, no soportan o no
incluyen instrucciones para el manejo del mouse, lpiz pticos, adaptadores de
juegos, etc. Para solucionar este tipo de problemas, el programador tiene que
recurrir a la escritura de parches en lenguaje ensamblador, los cuales
actualmente son fciles de implementar.
El problema mayor, que el programador enfrenta al establecer la interfaz entre
el lenguaje de alto nivel y el lenguaje ensamblador, es el de conectar realmente
los dos programas y pasar las variables de un lado a otro.
Afortunadamente, en la actualidad es muy sencillo realizar las interfaces entre
dos lenguajes, el siguiente objetivo nos muestra mediante ejemplos, la
interconexin entre el Lenguaje Pascal y el Lenguaje ensamblador.
El lenguaje Pascal, y en particular el Turbo Pascal, es el lenguaje de
programacin ms usado en la actualidad. Este lenguaje a partir de sus
versiones 6.0 tiene la ventaja de que los parches que se realizan en lenguaje
ensamblador, ya no sean fuera del cdigo fuente del programa, sino que en el
mismo cdigo se introduzcan las instrucciones en lenguaje ensamblador, las
cuales seran ensambladas al momento de la compilacin.
4.. )irecti+as para compilacin 56brida.
4.M Funciones en ensamblador.
4.H %loEues en ensamblador.
4.B 1peradores.
4.1;Integrar mdulos de ensamblador en lenguajes de
alto ni+el.
"-s in'ormacin en el ac(io%
leng.ensamblador.pd'

También podría gustarte