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 S nac* segment.
1.4.3 ode segment.
1.4.4 Instrucciones del programa.
1.4.# )irecti+as.
1.# ,rocedimiento de ensamble- enlace
y ejecucin.
1.6 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 /justes.
2.1.# omparacin.
2.2 Saltos.
2.2.1 Incondicional.
2.2.2 ondicional.
2.3 Tipos de ciclos.
2.4 0peradores 1gicos.
2.# )espla2amiento.
2.#.1 1ineal.
2.#.2 ircular.
2.3 ,rocesos de control.
2.3.1 %anderas.
2.3.2 adenas.
2.3.3 arga.
3 "odulari2acin 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:
"08 /9- :1#;<
"08 %9- /9
"08 /9- :1#1<
/)) /9- %9
"08 :1#2<- /9
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.
"08 /9- =U"1
"08 %9- /9
"08 /9- =U"2
/)) /9- %
"08 SU"/- /9
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.
1a memoria central tiene asociados 2 registros para la reali2acin 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< 01/ )E I=ST&UI0=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)/) )E 0=T&01 )E 1/ U=I)/) )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).

1as 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 reali2ar 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)/) /&IT"ETI/ F 10GI/ :/1U<
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&=0S :)/T0S- )I&EI0=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&0S GE=E&/1ES
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&0S /,U=T/)0&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&0S 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&0 )E SEG"E=T0S :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&0 /,U=T/)0& )E I=ST&UI0=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&0 )E EST/)0 :%/=)E&/S<
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
'( ') *+ *, *- *. */ *0 *' ** *( *) (+ (,
AC
(-
1M
(.
R2
(/ (0
3T
('
IOP
(*
IOP
((
O2
()
D2
+
I2
,
T2
-
S2
.
42
/ 0
A2
' *
P2
( )
C2
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.
TEC3ICAS DE DIRECCIO3AMIE3TO.
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 "08 (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 "08 /9- #. 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!, ',.-

DIRECCIO3AMIE3TO 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
"08 que transfiera datos entre una localidad en la memoria, situada dentro de
datos y un registro /1 :H bits<- /9 :13 bits< o E/9 :32 bit<. Esta instruccin
siempre tiene una longitud de 3 bytes.
Ejemplo: La instruccin "08 9- 1IST copia el contenido tamao palabra de la
localidad 1IST de la memoria y lo coloca en el registro 9.
MOV A!, DDD5
MOV B!, DDD3
MOV A!, DDDU


DIRECCIO3AMIE3TO DE RE5ISTRO
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*

DIRECCIO3AMIE3TO DE RE5ISTRO I3DIRECTO
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=
DIRECCIO3AMIE3TO DE RE5ISTRO RELATI1O
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 6B7, B!, DI o
SI7.
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 1E/ carga la direccin de desplazamiento en el registro %9. Al
referencias el cuarto elemento de "E=S/CE1 se realiza aadiendo la direccin
base (%9) de "E=S/CE1 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+=

DIRECCIO3AMIE3TO DE 8ASE I3DE9ADO
RE5ISTRO
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=

DIRECCIO3AMIE3TO 8ASE I3DE9ADO
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
DIRECCIO3AMIE3TO I3DE9ADO 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 /&&/F esttico. El valor
del desplazamiento localiza el comienzo del /&&/F 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
/&&/F 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",/11$ &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.
E:ECUCIO3 DE U3A I3TERRUPCIO3
Para ;!e !na interr!pci%n se e<ec!te correctamente es necesario almacenar el n=mero de
>!nci%n en el re&istro ac!m!lador A& 6$ demas re&istros de prop%sito &eneral" si as? se
re;!iere7" $ posteriormente mandar a llamar el tipo de interr!pci%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. /lguna instruccin en ejecucin
2. Trampa
3. ="I
4. Sobre!lujo del segmento del procesador
#. I=T&
3. 1a 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.
I3TERRUPCIO3ES E9TER3AS
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.

UTI1IK/I0= )E 1/S I=TE&&U,I0=ES )E1 %I0S F )E1 "S )0S
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 1/'
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
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#
A:96
A:9!0
640A%00 &BC 2r7.i3a#
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
&:9
Cara3)+r a +#3ri-ir
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,I0= )E1 )0S : 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.
1a 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?. ;).
@ttpAA!s!arios.l$cos.esAmacedoniama&aBineACarios*.@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 interr!pciones internas son &eneradas por ciertos eCentos ;!e s!r&en
d!rante la e<ec!ci%n de !n pro&rama.
Este tipo de interr!pciones son mane<adas en s! totalidad por el @ardDare $ no
es posible modi>icarlas.
Un e<emplo claro de este tipo de interr!pciones es la ;!e act!aliBa el contador
del relo< interno de la comp!tadora" el @ardDare @ace el llamado a esta
interr!pci%n Carias Ceces d!rante !n se&!ndo para mantener la @ora
act!aliBada.
A!n;!e no podemos mane<ar directamente esta interr!pci%n 6no podemos
controlar por so>tDare las act!aliBaciones del relo<7" es posible !tiliBar s!s
e>ectos en la comp!tadora para n!estro bene>icio" por e<emplo para crear !n
Erelo< Cirt!alE act!aliBado contin!amente &racias al contador del relo< interno.
Unicamente debemos escribir !n pro&rama ;!e lea el Calor act!al del contador
$ lo trad!Bca a !n >ormato entendible para el !s!ario.
Interrupciones e4ternas de 5ard(are
Las interr!pciones eFternas las &eneran los dispositiCos peri>ericos" como
p!eden ser teclado" impresoras" tar<etas de com!nicaciones" etc. Tambi#n son
&eneradas por los coprocesadores.
3o es posible desactiCar a las interr!pciones eFternas.
Estas interr!pciones no son enCiadas directamente a la UCP" sino ;!e se
mandan a !n circ!ito inte&rado c!$a >!nci%n es eFcl!siCamente mane<ar este
tipo de interr!pciones. El circ!ito" llamado PIC ,*/+A" si es controlado por la
UCP !tiliBando para tal control !na serie de Cias de com!nicaci%n llamadas
p!ertos.
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 /11 y &ET, cuando un programa ejecuta una instruccin /11
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 T1I=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 interr!pciones de so>tDare p!eden ser actiCadas directamente por el
ensamblador inCocando al n=mero de interr!pci%n deseada con la instr!cci%n
I3T.
El !so de las interr!pciones nos a$!da en la creaci%n de pro&ramas"
!tiliBandolas n!estros pro&ramas son mGs cortos" es mGs >Gcil entenderlos $
!s!almente tienen !n me<or desempeHo debido en &ran parte a s! menor
tamaHo.
Este tipo de interr!pciones podemos separarlas en dos cate&orias las
interr!pciones del sistema operatiCo DOS $ las interr!pciones del 8IOS.
La di>erencia entre ambas es ;!e las interr!pciones del sistema operatiCo son
mGs >Gciles de !sar pero tambi#n son mGs lentas $a ;!e estas interr!pciones
@acen !so del 8IOS para lo&rar s! cometido" en cambio las interr!pciones del
8IOS son m!c@o mGs rGpidas pero tienen la desCenta<a ;!e" como son parte
del @ardDare son m!$ espec?>icas $ p!eden Cariar dependiendo incl!so de la
marca del >abricante del circ!ito.
La elecci%n del tipo de interr!pci%n a !tiliBar dependerG !nicamente de las
caracteristicas ;!e le ;!iera dar a s! pro&rama Celocidad 6!tiliBando las del
8IOS7 o portabilidad 6!tiliBando las del DOS7.
Interrupcin 21'
Prop%sito Llamar a diCersas >!nciones del DOS.
SintaFis
Int .,&
3ota C!ando traba<amos en MASM es necesario especi>icar ;!e el Calor ;!e
estamos !tiliBando es @eFadecimal.
Esta interr!pci%n tiene Carias >!nciones" para accesar a cada !na de ellas es
necesario ;!e el el re&istro AH se enc!entre el n=mero de >!nci%n ;!e se
re;!iera al momento de llamar a la interr!pci%n.
+unciones #ara des#legar infor)acin al 4ideo!
)*H EF@ibe salida
)+H Impresi%n de cadena 6Cideo7
0)H Escrit!ra en dispositiCoAArc@iCo
+unciones #ara leer infor)acin del teclado!
)(H Entrada desde teclado
)AH Entrada desde teclado !sando b!>>er
'2H Lect!ra desde dispositiCoAarc@iCo
+unciones #ara tra.ajar con arc1i4os!
En esta secci%n !nicamente se eFpone la tarea espec?>ica de cada
>!nci%n" para !na re>erencia acerca de los conceptos empleados
re>ierase a la !nidad -" tit!lada EIntrod!cci%n al mane<o de arc@iCosE.
3@todo +C
)2H Abrir arc@iCo
(0H Lect!ra sec!encial
(/H Escrit!ra sec!encial
(.H Crear arc@iCo
*(H Lect!ra aleatoria
**H Escrit!ra aleatoria
;andles
'CH Crear arc@iCo
'DH Abrir arc@iCo
'EH Cierra mane<ador de arc@iCo
'2H Lect!ra desde arc@iCoAdispositiCo
0)H Escrit!ra en arc@iCoAdispositiCo
0*H MoCer ap!ntador de lect!raAescrit!ra en arc@iCo
Funcin ;2'
Uso0
Desplie&a !n caracter a la pantalla.
Registros de $$a"ada0
AH I )*H
DL I 1alor del caracter a desple&ar.
Registros de retorno0
3in&!no
Esta >!nci%n nos desplie&a el caracter c!$o codi&o @eFa&esimal
corresponde al Calor almacenado en el re&istro DL" no se modi>ica nin&=n
re&istro al !tiliBar este comando.
Es recomendado el !so de la >!nci%n 0)H de la misma interr!pci%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 I )+H
DSD9 I Direcci%n de inicio de !na cadena de caracteres
Registros de retorno0
3in&!no.
Esta >!nci%n desplie&a los caracteres" !no a !no" desde la direcci%n
indicada en el re&istro DSD9 @asta encontrar !n caracter C" ;!e es
interpretado como el >inal de la cadena.
Se recomienda !tiliBar la >!nci%n 0)H en l!&ar de esta >!nci%n.
Funcin 4;'
Uso0
Escribir a !n dispositiCo o a !n arc@iCo.
Registros de $$a"ada0
AH I 0)H
89 I 1?a de com!nicaci%n
C9 I Cantidad de b$tes a escribir
DSD9 I Direcci%n del inicio de los datos a escribir
Registros de retorno0
C2 I ) si no @!bo error
A9 I 3=mero de b$tes escritos
C2 I ( si @!bo error
A9 I C%di&o de error
El !so de esta >!nci%n para desple&ar in>ormaci%n en pantalla se realiBa
dandole al re&istro 89 el Calor de ( ;!e es el Calor preasi&nado al Cideo
por el sistema operatiCo MSJDOS.
Funcin ;1'
Uso0
Leer !n caracter del teclado $ desple&arlo.
Registros de $$a"ada0
AH I )(H
Registros de retorno0
AL I Caracter le?do
Con esta >!nci%n es m!$ sencillo leer !n caracter del teclado" el c%di&o
@eFadecimal del caracter le?do se &!arda en el re&istro AL. En caso de ;!e
sea !n caracter eFtendido el re&istro AL contendra el Calor de ) $ serG
necesario llamar de n!eCo a la >!nci%n para obtener el c%di&o de este
caracter.
Funcin ;/'
Uso0
Leer caracteres del teclado $ almacenarlos en !n b!>>er.
Registros de $$a"ada0
AH I )AH
DSD9 I Direcci%n del Grea de almacenamiento
8KTE ) I Cantidad de b$tes en el Grea
8KTE ( I Cantidad de b$tes le?dos
desde 8KTE * @asta 8KTE ) L * I caracteres le?dos
Registros de retorno0
3in&!no
Los caracteres son le?dos $ almacenados en !n espacio prede>inido de
memoria. La estr!ct!ra de este espacio le indica ;!e en el primer b$te del
mismo se indican c!antos caracteres serGn 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.
C!ando se @an almacenado todos los caracteres indicados menos !no la
bocina s!ena $ c!al;!ier caracter adicional es i&norado. Para terminar la
capt!ra de la cadena es necesario darle ME3TERN.
Funcin 3F'
Uso0
Leer in>ormaci%n de !n dispositiCo o arc@iCo.
Registros de $$a"ada0
AH I '2H
89 I 3=mero asi&nado al dispositiCo
C9 I 3=mero de b$tes a procesar
DSD9 I Direcci%n del Grea de almacenamiento
Registros de retorno0
C2 I ) si no @a$ error $ A9 I n=mero de b$tes leidos.
C2 I ( si @a$ error $ A9 contendra el c%di&o del error.
Funcin ;F'
Uso0
Abrir arc@iCo 2C8
Registros de $$a"ada0
AH I )2H
DSD9 I Ap!ntador a !n 2C8
Registros de retorno0
AL I ))H si no @!bo problema" de lo contrario re&resa )22H
Funcin 14'
Uso0
Leer sec!encialmente !n arc@iCo 2C8.
Registros de $$a"ada0
AH I (0H
DSD9 I Ap!ntador a !n 2C8 $a abierto.
Registros de retorno0
AL I ) si no @!bo errores" de lo contrario se re&resara el c%di&o
correspondiente de error ( error al >inal del arc@iCo" * error en la estr!ct!ra
del 2C8 $ ' error de lect!ra 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 DSD9" $ act!aliBa este re&istro.
Funcin 1#'
Uso0
Escribir sec!encialmente a !n arc@iCo 2C8
Registros de $$a"ada0
AH I (/H
DSD9 I Ap!ntador a !n 2C8 $a abierto
Registros de retorno0
AL I ))H si no @!bo errores" de lo contrario contendra el c%di&o del error
( disco lleno o arc@iCo de solo lect!ra" * error en la >ormaci%n o
especi>icaci%n del 2C8.
La >!nci%n (/H desp!#s de escribir el re&istro al blo;!e act!al act!aliBa el
2C8.
Funcin 13'
Uso0
Crear !n arc@iCo 2C8.
Registros de $$a"ada0
AH I (.H
DSD9 I Ap!ntador a !n 2C8 $a abierto.
Registros de retorno0
AL I ))H si no @!bo errores" de lo contrario contendra el Calor )22H
Se basa en la in>ormaci%n proCeida en !n 2C8 para crear !n arc@iCo en el
disco.
Funcin 21'
Uso0
Leer en >orma aleatoria !n arc@iCo 2C8.
Registros de $$a"ada0
AH I *(H
DSD9 I Ap!ntador a !n 2C8 $a abierto.
Registros de retorno0
A I ))H si no @!bo error" de lo contrario AH contendra el c%di&o del error
( si es >in de arc@iCo" * si eFiste error de especi>icaci%n de 2C8 $ ' si se
le$% !n re&istro parcial o el ap!ntador del arc@iCo se enc!entra al >inal del
mismo.
Esta >!nci%n lee el re&istro especi>icado por los campos del blo;!e act!al $
re&istro act!al de !n 2C8 abierto $ coloca la in>ormaci%n en el DTA 6Grea
de trans>erencia de disco o DisO Trans>er Area7.
Funcin 22'
Uso0
Escribir en >orma aleatoria en !n arc@iCo 2C8.
Registros de $$a"ada0
AH I **H
DSD9 I Ap!ntador a !n 2C8 abierto.
Registros de retorno0
AL I ))H si no @!bo error" de lo contrario contendrG el c%di&o del error (
si el disco estG lleno o es arc@iCo de solo lect!ra $ * si @a$ error en la
especi>icaci%n de 2C8.
Escribe el re&istro especi>icado por los campos del blo;!e act!al $ re&istro
act!al de !n 2C8 abierto. Escribe dic@a in>ormaci%n a partir del contenido
del DTA 6Grea de trans>erencia de disco7.
Funcin 3'
Uso0
Crear !n arc@iCo si no eFiste o de<arlo en lon&it!d ) si eFiste. 6Handle7
Registros de $$a"ada0
AH I 'CH
CH I Atrib!to de arc@iCo
DSD9 I Ap!ntador a !na especi>icai%n ASCII4
Registros de retorno0
C2 I ) $ A9 el n=mero asi&nado al @andle si no @a$ error" en caso de
@aberlo C2 serG ( $ A9 contendra el c%di&o de error ' r!ta no encontrada"
0 no @a$ @andles disponibles para asi&nar $ / acceso ne&ado.
Esta >!nci%n s!stit!$e a la (.H. El nombre del arc@iCo es especi>icado en
!na cadena ASCII4" la c!al tiene como caracter?stica la de ser !na cadena
de b$tes conCencional terminada con !n caracter ).
El arc@iCo creado contendra los atrib!tos de>inidos en el re&istro C9 en la
si&!iente >orma
1alor Atrib!tos
))H 3ormal
)*H Escondido
)0H Sistema
).H Escondido $ de sistema
El arc@iCo se crea con los permisos de lect!ra $ escrit!ra. 3o es posible
crear directorios !tiliBando esta >!nci%n.
Funcin 3)'
Uso0
Abre !n arc@iCo $ re&rese !n @andle
Registros de $$a"ada0
AH I 'DH
AL I modo de acceso
DSD9 I Ap!ntador a !na especi>icaci%n ASCII4
Registros de retorno0
C2 I ) $ A9 I n=mero de @andle si no @a$ errores" de lo contrario C2 I (
$ A9 I c%di&o de error )(H si no es CGlida la >!nci%n" )*H si no se
encontr% el arc@iCo" )'H si no se encontrPo la r!ta" )0H si no @a$ @andles
disponibles" )/H en caso de acceso ne&ado" $ )CH si el c%di&o de acceso
no es CGlido.
El @andle re&resado es de (. bits.
El c%di&o de acceso se especi>ica en la si&!iente >orma
8ITS
- . / 0 ' * (
. . . . ) ) ) Solo lect!ra
. . . . ) ) ( Solo escrit!ra
. . . . ) ( ) Lect!raAEscrit!ra
. . . 9 . . . RESER1ADO
Funcin 3E'
Uso0
Cerrar arc@iCo 6Handle7.
Registros de $$a"ada0
AH I 'EH
89 I Handle asi&nado
Registros de retorno0
C2 I ) si no @!bo errores" en caso contrario C2 serG ( $ A9 contendrG el
c%di&o de error ).H si el @andle es inCGlido.
Esta >!nci%n act!aliBa el arc@iCo $ libera o de<a disponible el @andle ;!e
estaba !tiliBando.
Funcin 3F'
Uso0
Leer de !n arc@iCo abierto !na cantdad de>inida de b$tes $ los almacena en
!n b!>>er espec?>ico.
Registros de $$a"ada0
AH I '2H
89 I Handle asi&nado
C9 I Cantidad de b$tes a leer
DSD9 I Ap!ntador a !n Grea de traba<o.
Registros de retorno0
C2 I ) $ A9 I n=mero de b$tes leidos si no @!bo error" en caso contrario
C2 I ( $ A9 I c%di&o de error )/H si acceso ne&ado $ ).H si no es CGlido
el @andle.
Funcin 4;'
Uso0
Escribe a !n arc@iCo $a abierto !na cierta cantidad de b$tes a partir del
b!>>er desi&nado.
Registros de $$a"ada0
AH I 0)H
89 I Handle asi&nado
C9 I Cantidad de b$tes a escribir.
DSD9 I Ap!ntador al b!>>er de datos.
Registros de retorno0
C2 I ) $ A9 I n=mero de b$tes escritos si no @a$ errores" en caso de
eFistir C2 I ( $ A9 I c%di&o del error )/H si el acceso es ne&ado $ ).H si
el @andle es inCGlido.
Funcin 42'
Uso0
MoCer ap!ntador al arc@iCo 6Handle7
Registros de $$a"ada0
AH I 0*H
AL I m#todo !tiliBado
89 I Handle asi&nado
C9 I La parte mGs si&ni>icatiCa del o>>set
D9 I La parte menos si&ni>icatiCa del o>>set
Registros de retorno0
C2 I ) $ D9A9 I la n!eCa posici%n del ap!ntador. En caso de error C2
serG ( $ A9 I c%di&o de error )(H si la >!nci%n no es CGlida $ ).H si el
@andle no es CGlido.
El m#todo !tiliBado se con>i&!ra como si&!e
1alor de AL M#todo
))H A partir del principio del arc@iCo
)(H A partir de la posici%n act!al
)*H A partir del >inal del arc@iCo
Interrupcin 1;'
Prop%sito Llamar a diCersas >!nciones de Cideo del 8IOS.
SintaFis
Int ,'&
Esta interr!pci%n tiene diCersas >!nciones" todas ellas nos sirCen para
controlar la entrada $ salida de Cideo" la >orma de acceso a cada !na de las
opciones es por medio del re&istro AH.
En este t!torial !nicamente Ceremos al&!nas de las >!nciones de esta
interr!pci%n.

2!nciones com!nes de la interr!pci%n ()H.
)*H Selecci%n de posici%n del c!rsor
)+H Escribe atrib!to $ caracter en el c!rsor
)AH Escribe caracter en la posici%n del c!rsor
)EH Escrit!ra de caracteres en modo al>an!m#rico
Funcin ;2'
Uso0
Posiciona el c!rsor en la pantalla dentro de las coordenadas CGlidas de
teFto.
Registros de $$a"ada0
AH I )*H
8H I PG&ina de Cideo en la ;!e se posicionarG el c!rsor.
DH I 2ila
DL I Col!mna
Registros de retorno0
3in&!no.
Las posiciones de localiBaci%n del c!rsor son de>inidas por coordenadas
iniciando en )")" ;!e corresponde a la es;!ina s!perior iB;!ierda @asta
-+"*0 correspondientes a la es;!ina in>erior derec@a. Tenemos entonces
;!e los Calores ;!e p!eden tomar los re&istros DH $ DL en modo de teFto
de ,) F */ son de ) @asta *0 $ de ) @asta -+ respectiCamente.
Funcin ;B'
Uso0
Desple&ar !n caracter !n determinado n=mero de Ceces con !n atrib!to
de>inido empeBando en la posici%n act!al del c!rsor.
Registros de $$a"ada0
AH I )+H
AL I Caracter a desple&ar
8H I PG&ina de Cideo en donde se desple&arG
8L I Atrib!to a !sar
3=mero de repeticiones.
Registros de retorno0
3in&!no
Esta >!nci%n desplie&a !n caracter el n=mero de Ceces especi>icado en C9
pero sin cambiar la posici%n del c!rsor en la pantalla.
Funcin ;/'
Uso0
Desple&ar !n caracter en la posici%n act!al del c!rsor.
Registros de $$a"ada0
AH I )AH
AL I Caracter a desple&ar
8H I PG&ina en donde desple&ar
8L I Color a !sar 6s%lo en &rG>icos7.
C9 I 3=mero de repeticiones
Registros de retorno0
3in&!no.
La =nica di>erencia entre esta >!nci%n $ la anterior es ;!e #sta no permite
modi>icar los atrib!tos" simplemente !sa los atrib!tos act!ales.
Tampoco se altera la posici%n del c!rsor con esta >!nci%n.
Funcin ;E'
Uso0
Deple&ar !n caracter en la pantalla act!aliBando la posici%n del c!rsor.
Registros de $$a"ada0
AH I )EH
AL I Caracter a desple&ar
8H I PG&ina donde se desple&ara el caracter
8L I Color a !sar 6solo en &rG>icos7
Registros de retorno0
3in&!no
Interrupcin 13'
Prop%sito Mane<ar la entradaAsalida del teclado.
SintaFis
Int ,1&
1eremos dos opciones de la interr!pci%n (.H" estas opciones" al i&!al ;!e
las de otras interr!pciones" son llamadas !tiliBando el re&istro AH.

2!nciones de la interr!pci%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 I ))H
Registros de retorno0
AH I c%di&o de barrido 6scan code7 del teclado
AL I 1alor ASCII del caracter.
C!ando se !tiliBa esta interr!pci%n se detiene la e<ec!ci%n del pro&rama
@asta ;!e se introd!Bca !n caracter desde el teclado" si la tecla presionada
es !n caracter ASCII s! Calor serG &!ardado en el re&istro AH" de lo
contrario el c%di&o de barrido serG &!ardado en AL $ AH contendrG el
Calor ))H.
El c%di&o de barrido >!# creado para mane<ar las teclas ;!e no tienen !na
representaci%n ASCII como MALTN" MCO3TROLN" las teclas de >!nci%n"
etc.
Funcin ;1'
Uso0
Leer estado del teclado.
Registros de $$a"ada0
AH I )(H
Registros de retorno0
Si la bandera de cero" 42" estG apa&ada si&ni>ica ;!e @a$ in>ormaci%n en el
b!>>er" si se enc!entra prendida es ;!e no @a$ teclas pendientes.
En caso de eFistir in>ormaci%n el re&istro AH contendrG el c%di&o de
la tecla &!ardada en el b!>>er.
Interrupcin 1M'
Prop%sito Mane<ar la entradaAsalida de la impresora.
SintaFis
Int ,D&
Esta interr!pci%n es !tiliBada para escribir caracteres a la impresora"
inicialiBarla $ leer s! estado.

2!nciones de la interr!pci%n (.H
))H Imprime !n caracter ASCII
)(H InicialiBa la impresora
)*H Proporciona el estado de la impresora
Funcin ;;'
Uso0
Escribir !n caracter a la impresora.
Registros de $$a"ada0
AH I ))H
AL I Caracter a imprimir
D9 I P!erto a !tiliBar
Registros de retorno0
AH I Estado de la impresora.
El p!erto a !tiliBar" de>inido en D9" se especi>ica as? LPT( I )" LPT* I ("
LPT' I * ...
El estado de la impresora se codi>ica bit por bit como si&!e
8IT (A) SI53I2ICADO
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
) ( Se a&ot% el tiempo de espera
( J
* J
' ( Error de entradaAsalida
0 ( Impresora seleccionada
/ ( Papel a&otado
. ( Reconocimiento de com!nicaci%n
- ( La impresora se enc!entra libre
Los bits ( $ * no son releCantes.
La ma$oria de los 8IOS !nicamente soportan ' p!ertos paralelos a!n;!e
eFisten al&!nos ;!e soportan 0.
Funcin ;1'
Uso0
InicialiBar !n p!erto de impresi%n.
Registros de $$a"ada0
AH I )(H
D9 I P!erto a !tiliBar
Registros de retorno0
AH I Stat!s de la impresora
El p!erto a !tiliBar" de>inido en D9" se especi>ica as? LPT( I )" LPT* I ("
etc.
El estado de la impresora se codi>ica bit por bit como si&!e
8IT (A) SI53I2ICADO
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
) ( Se a&ot% el tiempo de espera
( J
* J
' ( Error de entradaAsalida
0 ( Impresora seleccionada
/ ( Papel a&otado
. ( Reconocimiento de com!nicaci%n
- ( La impresora se enc!entra libre
Los bits ( $ * no son releCantes.
La ma$oria de los 8IOS !nicamente soportan ' p!ertos paralelos a!n;!e
eFisten al&!nos ;!e soportan 0.
Funcin ;2'
Uso0
Obtener el estado de la impresora.
Registros de $$a"ada0
AH I )(H
D9 I P!erto a !tiliBar
Registros de retorno0
AH I Stat!s de la impresora.
El p!erto a !tiliBar" de>inido en D9" se especi>ica as? LPT( I )" LPT* I ("
etc.
El estado de la impresora se codi>ica bit por bit como si&!e
8IT (A) SI53I2ICADO
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
) ( Se a&ot% el tiempo de espera
( J
* J
' ( Error de entradaAsalida
0 ( Impresora seleccionada
/ ( Papel a&otado
. ( Reconocimiento de com!nicaci%n
- ( La impresora se enc!entra libre
Los bits ( $ * no son releCantes.
La ma$oria de los 8IOS !nicamente soportan ' p!ertos paralelos a!n;!e
eFisten al&!nos ;!e soportan 0.
Introduccin
Todo el semestre @emos !sado interr!pciones para @acer llamado a serCicios de DOS $
8IOSQ @asta a@ora" principalmente las @emos Cisto como >ormas de llamar al sistema
operatiCo.
La raB%n por la ;!e este sistema es llamado Einterr!pci%nE es precisamente por;!e
>!ncionan interr!mpiendo la e<ec!ci%n del pro&rama en !n p!nto dado" e<ec!tan !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 eFactamente al
estado preCio para contin!ar con la tarea
EFisten dos tipos de interr!pciones
Interr!pciones de @ardDare son las mGs primitiCas $ ori&en del concepto. EstGn
diseHadas para ;!e el procesador p!eda atender a los dispositiCos a=n a mitad de
la e<ec!ci%n de !n pro&rama ;!e no estG detectGndolos.
Interr!pciones de so>tDare permiten al so>tDare em!lar las operaciones ;!e se
@acen al atender el @ardDare. Tambi#n permiten contener !na inter>ase !niCersal
a los serCicios del sistema operatiCo" ;!e son independientes de las Cersiones del
sistema operatiCo.
C!ando !n dispositiCo re;!iere atenci%n del CPU" le aCisa por medio de !na seHal
6electr%nica7 ;!e llamamos EInterr!pci%nE. Esta seHal >?sicamente lle&a a !n pin del
CPUQ c!ando esto oc!rre" el CPU termina la instr!cci%n ;!e estaba e<ec!tando" salCa en
la pila la direcci%n act!al 6CS" IP7 para poder contin!ar mGs adelante en el p!nto donde
se ;!ed%" $ salta a e<ec!tar el c%di&o de atenci%n de la interr!pci%n" ;!e &eneralmente
es parte del sistema operatiCo. Dado ;!e el c%di&o ;!e atiende la interr!pci%n p!ede
encontrarse en distintos l!&ares de memoria" se re;!iere al&=n mecanismo para ;!e el
CPU enc!entre e>icientemente donde contin!ar la atenci%n de la interr!pci%n. Este
mecanismo es conocido como Etabla de interr!pcionesE" $ se basa en reconocer por !n
c%di&o a cada interr!pci%n" el c!al serG !sado para la b=s;!eda en esta tabla. Esta tabla
de interr!pciones la enc!entra el ,)F,. al inicio de la memoria" en el primer ( Rb. EstG
>ormada por !n arre&lo de */. direcciones" cada !na de '* bits" p!es contiene al
se&mento $ al desplaBamiento 6en orden inCerso" como es cost!mbre en Intel7. De modo
;!e si se recibe el c%di&o de interr!pci%n )" se cons!lta la in>ormaci%n en la localidad
))" $ de a@? se obtienen el se&mento $ el desplaBamiento correspondientes. Si se recibe
el c%di&o de interr!pci%n ," se cons!lta la in>ormaci%n en la localidad )*)@ 6*)@ I '* I
, por 0" dado ;!e cada entrada en el arre&lo tiene 0 b$tes7" $ de a@? se e<ec!ta el c%di&o
correspondiente. Al terminar el c%di&o de atenci%n de la interr!pci%n" e<ec!ta !na
instr!cci%n IRET" ;!e re&resa el p!nto de e<ec!ci%n a donde se @ab?a ;!edado"
2!ncionan de !n modo similar a las de @ardDare" solamente ;!e en CeB de ;!e !n
dispositiCo enC?e la seHal" lo @ace el pro&rama !tiliBando la instr!cci%n I3T. Esta
instr!cci%n ca!sa ;!e se e<ec!te todo el proceso anterior" pero seHalada 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
EtransientesE" es decir" se car&an en memoria" se e<ec!tan $ al terminar s! e<ec!ci%n"
re&resan el control al sistema operatiCo $ se eliminan de memoria.
Un pro&rama residente 6Terminate and Sta$ Resident" de a@? las si&las TSR
com=nmente !sadas7 consiste en ;!e !n pro&rama se car&a en memoria" se e<ec!ta"
prepara la e<ec!ci%n de la se&!nda secci%n 6por medio de !n control >ino sobre las
interr!pciones7" $ libera solamente la memoria del c%di&o de preparaci%n. De este
modo" !na secci%n de s! c%di&o ;!eda ElatenteE" en espera de ser disparado por !n
eCento &eneralmente" !na interr!pci%n.
Entre las aplicaciones de los pro&ramas residentes tenemos
El sistema operatiCo DOS ;!eda en memoria esperando a ;!e otro pro&rama lo
llame" para entonces e<ec!tar !n determinado c%di&o.
Pro&ramas ;!e esperen !na combinaci%n de teclas" para entonces realiBar s!
acci%n. Por e<emplo" sacar !n men= con acciones espec?>icas.
Pro&ramas ;!e s!stit!$an la >!ncionalidad del sistema operatiCo. Por e<emplo"
las Cersiones * a ' de 3oCell 3etDare se car&aban desp!#s de DOS" $ le
aneFaban la capacidad de acceder a !nidades de red.
Progra)acin de TSRs
Para pro&ramar !n TSR" !tiliBaremos !na serie de serCicios de interr!pciones ;!e nos
>acilitan la capacidad de de<ar !na secci%n del pro&rama actiCa" as? como cambiar la
direcci%n a la ;!e ap!nta !na interr!pci%n. Res!miendo" tendremos dos &randes
secciones en !n pro&rama residente
La secci%n transiente" ;!e lleCa a cabo la inicialiBaci%n re;!erida $ prepara los
Cectores de interr!pci%n 6las direcciones ;!e estGn en la tabla7" de modo ;!e
ap!nten a los procedimientos del pro&rama residente ;!e Can a atenderlas.
La secci%n residente" la c!al contiene los procedimientos de atenci%n a las
interr!pciones. Terminar !n pro&rama $ de<ar !na secci%n residente en memoria.
C!ando llamamos al serCicio 0C@ de la I3T *(@" toda la memoria ;!e oc!p% n!estro
pro&rama se marca como libre $ el sistema operatiCo p!ede re!tiliBarla. Esto ser?a
desastroso en el caso de !n pro&rama residente" p!es el c%di&o ;!e atiende
interr!pciones podr?a sobreescribirse" con res!ltados impredecibles. Por ello" se debe
terminar el pro&rama de modo ;!e de<e oc!pada s! memoria. Para ello" eFisten Carias
opciones
La interr!pci%n *-@" ;!e termina el pro&rama $ de<a residente en memoria la
Bona indicada por DSD9" donde DS ap!nta al se&mento donde se enc!entra el
c%di&o" $ D9 al desplaBamiento >inal del c%di&o ;!e debe respetarse. De este
modo" no se liberarG memoria indebidamente.
SerCicios de la *(@" ;!e no Ceremos en este c!rso.
Interce#tar una interru#cin
Para ;!e se e<ec!te !n procedimiento ;!e nosotros desarrollamos" en atenci%n de !na
interr!pci%n" es com=n !sar la t#cnica de EinterceptarE" ;!e consiste en &!ardar el Cector
anterior de interr!pci%n" cambiarlo para ;!e ap!nte a n!estro pro&rama residente" $ al
>inal de n!estra r!tina residente" llamar al Cector anterior. Esto conserCa la
>!ncionalidad re&!lar" $ al mismo tiempo nos permite realiBar actiCidades adicionales.
Cabe aclarar al&!nas de las interr!pciones importantes ;!e no @emos comentado por no
ser tan !sadas en so>tDare
I3T ),@ J es llamada por el relo< del sistema" (,.* Ceces por se&!ndo" $ entre
otras cosas lleCa el tiempo de 8IOS. Podemos interceptarla 6no s!stit!irla7 para
;!e n!estro pro&rama realice al&=n proceso peri%dicamente.
I3T )+@ J es llamada por el teclado" cada CeB ;!e se recibe !na tecla.
I3T )C@ J de so>tDare" es llamada por la interr!pci%n del relo<.
ObCiamente @a$ m!c@as otras" sirCan estas como e<emplo.
Se p!eden interceptar las interr!pciones &eneradas por p!ertos seriales" paralelos"
diCisi%n entre )" !na instr!cci%n inCGlida" etc#tera.
Sustituir una interru#cin
En ocasiones ;!eremos reemplaBar completamente el >!ncionamiento de !na
interr!pci%nQ en tal caso" s!stit!iremos el Cector de interr!pci%n para ;!e ap!nte a
n!estro c%di&o" $ deberemos terminar la e<ec!ci%n de n!estro procedimiento con !n
IRET" ;!e permitirG re&resar al p!nto donde se e<ec!t% n!estra interr!pci%n. Por otro
lado" es conCeniente ase&!rarnos de conserCar el Calor de los re&istros 6&eneralmente
!tiliBando la pila7 ;!e modi>i;!emos" de este modo la interr!pci%n no a>ecta la
e<ec!ci%n de otros procesos. Acciones CGlidas dentro de !na interr!pci%n En !na
interr!pci%n podemos !tiliBar otros serCicios" principalmente de acceso directo al
@ardDare. Sin embar&o" como DOS es !n sistema operatiCo ;!e no >!e diseHado para
ser m!ltitarea" diCersas >!nciones no soportan la capacidad de ser reentrantesQ esto es"
no p!eden ser llamadas otra CeB si estGn a medio e<ec!tarse. Pero como !na interr!pci%n
p!ede oc!rrir en c!al;!ier momento" p!ede incl!so oc!rrir c!ando estG !na >!nci%n a
medio e<ec!tarse. Por tanto" esto ca!sar?a inestabilidad del sistema. EFisten dos m#todos
para eCitar esta inestabilidad
3o !sar interr!pciones" ;!e es bastante com=n $ apropiado p!es tambi#n tiene
&randes bene>icios de desempeHoQ c!ando !n pro&rama residente no re;!iere
@acer >!nciones comple<as ;!e est#n implementadas en el sistema operatiCo"
sino >!nciones simples tales como pintar en pantalla" p!eden codi>icarse estas
>!nciones con acceso directo al @ardDare $ de este modo se eCita el problema.
ReCisar si estG !na >!nci%n del sistema en e<ec!ci%n" para no ColCer a llamarla a
mitad de la e<ec!ci%n. Esto en DOS se @ace por medio de !n m#todo ;!e d!rante
m!c@o tiempo no estaba doc!mentado la bandera InDOS. Para obtenerla" se
llama al serCicio '0@ de la interr!pci%n *(@" $ nos de<a en ES89 la direcci%n de
!n b$te ;!e es esta bandera InDOS. El >!ncionamiento de la bandera es sencillo
si estG en )" no estamos a media >!nci%n de DOS" por lo tanto" podemos sin
problemas e<ec!tar !na >!nci%n DOS. De lo contrario" si el Calor es ( o s!perior"
no debemos e<ec!tar la >!nci%n DOS en este momento $ n!estro pro&rama TSR
deberG posponer el !so de esta >!nci%n" por lo ;!e probablemente deberemos
mane<ar la interr!pci%n del relo< para intentar desp!#s de !n tiempo.
EFisten al&!nas preca!ciones 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.
@ttpAADDD.siner&iaJDeb.com.mFAclasesAasm+-),ATemasAclase*..@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 /",0 /",0 /",0
=0"%&E 0,E&/ID= 0,E&/=)0 0"E=T/&I0
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 =0"%&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 :/ a la K- a a la 2<
N )6gitos numOricos del :; al B<
N 1os 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=IT/17 "08 /9- 0'
I=IT/1 es un rtulo y "08 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:
"08 /9- H
Este es un ejemplo de operando inmediato. Aqu, el dato a ser manipulado
se incluye como operando fuente y se desplaza al registro /9, 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:

"08 /'- 4#' S ,/&/"ET0 ,/&/ 1EE& U= /&/TE&
Como se muestra, el comentario explica por que el registro /' 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:
,&0G&/"/ TUE )ES,1IEG/ U=/ /)E=/ E= 1/ ,/=T/11/
S =ombre del programa 7 EC;2/;3./S"
S Fec5a de creacin 7 /%&I1 1B )E 1BB3
S /utor 7 C./. &ojas ,once
S 0bjeti+o 7 )esplegar una cadena
S 0"/=)0 )E E=S/"%1E 7 "/S" EC;2/;3 S
S 0"/=)0 )E E=1/E 7 1I=L EC;2/;3 S
S 0"/=)0 )E ECEUI0= 7 EC;2/;3 UE=TE&V
S )e!ine el modelo de memoria
S
. "0)E1 S"/11 S "odelo de memoria
. 0)E S /rea de cdigo
Empie2a 7 S EtiEueta de comien2o de programa
"08 /9- Q)/T/ S Iniciali2a )s con la
"08 )S- /9 S )ireccin de Q)/T/
"08 )9- 0FFSET "E=S/CE S )ireccin de mensaje
"08 /'- B S en )9 para poder desplegarlo
I=T 21' S a tra+Os de la Int 21 de "SJ)0S .
"08 /9- 4c;;5 S regresa a "SJ)0S por medio de la
I=T 215 S Funcin 4c.
.)/T/ S Segmento de datos
"ensaje )% W'ola- .EuO talX.PW S adena a desplegar
.ST/L S Se necesita una ,I1/.
E=) Empie2a S Fin del programa

El primer comando ."0)E1 S"/11, 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 .0)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 /9 con el cdigo 4C00H (cdigo de
terminacin del programa) y despus hacer la indicacin a travs de la
interrupcin 21'.

El comando .ST/L 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"/S" Ej;;ca;3
7Y1I=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 ,&0G&/"/ ECE",10
ST/L SEG"E=T ,/&/ ZST/L[
)% 34 )U,
ST/L E=)S
)/T/ SEG"E=T ,/&/ W)/T/W
"ES/GE )% Z/'0&/ 10 TUE /%U=)/ ES E1 /"0&[-[P[
)/T/ E=)S
0)E SEG"E=T ,/&/ 0)E
"/I= ,&0 F/&
/SSU"E S7 0)E- )S7 )/T/- ES7 )/T/- SS7 ST/L
,US' )S
SU% /9-/9
,US' /9
"08 /9- )/T/
"08 )S- /9
"08 ES- /9
S &UTI=/ ,/&/ I",&I"I& 1/ /)E=/
1E/ )9- "ES/GE
"08 /'- ;B
I=T 21'
&ET
"/I= E=),
0)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:
7YT/S" Ejemplo1
7YT1I=L Ejemplo1
Estr%tra de n #rogra"a en ensa"b$ador
Ka @emos est!diado al&!nas partes del pro&rama en len&!a<e ensamblador. S%lo nos
>alta conocer la parte mGs importante las instr!cciones. Pero antes de eso" Ceremos c!al
es la estr!ct!ra bGsica de !n al&oritmo en c%di&o ensambladora con la >inalidad de ener
claro c!al es la estr!ct!ra de todos los elemento ;!e acabamos de Cer. Esto lo Ceremos
mGs a >ondo c!ando Ceamos todo lo concerniente a la pro&ramaci%n.
Esta estr!ct!ra contiene los si&!ientes elementos o partes ;!e deben ser codi>icadas
J Comentario descriptiCo del pro&rama 6opcional" pero recomendable7
J De>inir el microcontrolador ;!e se !sarG 6con las directrices LIST e I3CLUDE7.
J Introd!cir las opciones de compilaci%n 6;!e serGn Cistas mGs adelante76opcional7
J Establecer las constantes ;!e se !sarGn 6con la directriB ESU7.
J ReserCar espacios de memoria 6directriB RES7 6si es necesario7
J Con>i&!rar los p!ertos
J Desarrollar el pro&rama
J Poner comentarios
K s! estr!ct!ra es
Figura 41. Esquema de un programa
Hemos Cisto la estr!ct!ra &eneral. A@ora Ceremos la posici%n de los elementos del
c%di&o por col!mnas. Estas se diCiden en c!atro

J Col!mna ( Eti;!eta. Las eti;!etas se ri&en por las si&!ientes normas
T Debe sit!arse en la primera col!mna
T Debe contener =nicamente caracteres al>an!m#ricos
T El mGFimo de caracteres es de '(
J Col!mna * Operaci%n. En esta col!mna se sit!arGn las instr!cciones
J Col!mna ' Son los re&istros 6>" l o O " b $ D7 donde se almacenarGn los
res!ltados $ con los ;!e se operarG
J Col!mna 0 Comentario. A;!? se sit!arG c!al;!ier comentario personaliBado
;!e deseemos. Estos son =tiles para saber ;!# @ace !n pro&rama sin tener ;!e
desci>rar el c%di&o entero. El compilador 6ensamblador7 i&norarG todo teFto mGs
allG del carGcter p!nto $ coma UQV. Estos comentarios &eneralmente se sit=an en
la c!arta col!mna para describir la acci%n de !na l?nea de c%di&o" pero p!eden
sit!arse en c!al;!ier parte de pro&rama para describir c!al;!ier otro eCento"
siempre ;!e est#n desp!#s del carGcter UQV 6semicolon en in&l#s7.
1eamos mGs detenidamente c!al es s! posici%n

Figura 42. Esquema de un programa por columnas
3ormalmente las col!mnas son separadas por !na tab!laci%n. El espacio m?nimo entre
dos col!mnas es de !n carGcter" ;!e p!ede ser !n espacio en CeB de !na tab!laci%n.
@ttpAA!s!arios.l$cos.esAs>risDolOerApicAseis.@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 S nac* 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 I 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;4H3.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$1enguaje
@Ensamblador.5tm
)I&ETI8/S ,/&/ 1IST/&7 ,/GE F TIT1E
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.
,/GE. 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.


TIT1E. 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&ETI8/ 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,0 /1I=E/I0=. 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,0 0"%I=/&. 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,0 1/SE. 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&ETI8/ /SSU"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
@ttpAADDD.itlp.ed!.mFAp!blicaAt!torialesAensambladorAtem/W(W.@tm
)I&ETI8/S SI",1IFI/)/S )E
SEG"E=T0S
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:

."0)E1 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:

.ST/L Utama]oV
.)/T/
.0)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
@ttpAADDD.itlp.ed!.mFAp!blicaAt!torialesAensambladorAtem/W*W.@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.
@ttpAADDD.mono&ra>ias.comAtraba<os((AlenenAlenen.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!
@ttpAADDD.mono&ra>ias.comAtraba<os((AlenenAlenen.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 ./S".
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.

0"0 E=S/"%1/& U= ,&0G&/"/ FUE=TE
El programa ensamblador de Microsoft es "/S".E9E, mientras que el
programa de Borland es T/S".E9E. Para teclear el comando para ejecutar
"/S" o T/S" en una lnea de comando o por medio de peticiones. El
formato general para un comando o lnea para ensamblar un programa es :
"/S"$T/S"UopcionesV !uente U-objetoV U-listadoV U-re!cru2adaV
[ ] = Son opcionales.
!uenteJ Es el nombre del archivo que se encuentracon la extension ./S" .
objeto.J Prergunta que nombre le voy a dar al archivo .0%C.
listado.-Si se desea crear un archivo que contenga codigo fuente y codigo
objeto se debe especificar con la extensin 1ST.
F0&"/T0 GE=E&/1 ,/&/ E=1/K/&
LNK/TLNK ARCHOBJ,ARCHEJE,[,ARCHAMPA] [,ARCHBB1]
LNK=Microsoft
TLNK=Borland
/&'0%C.J dentifica el archivo objeto que ha generado el ensamblador.
/&'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.
1as directi+as Eue usa el lenguaje ensamblador son7
,/GE )^ 0"" I=1U)E TIT1E
)) 0""E=T 1/%E1 SEG"E=T )F0=ST
.1IST ,&0 )T &EF ."0)E1
/SSU"E )T )/T/ 0&G E=)S
E=) ETU )/T/ ,&0E) ./1,'/
E&& E=), G&0U,
DIRECTI1AS DE DE2I3ICIX3 DE DATOS 6D8"DY"DD"LA8EL"ESU"ETC.7
DB )definir b6te* .E InicialiBa !n b$te completo.
Ejemplo 7
'01/ )% 23
"ES/ )% ;/'
/&/TE& )% ZG[
"E=S/CE )% ZS0IE)/) )E E&&0 /KU1[
,E&S0=/ )% ;-1-2-3-4-#-3-M-H-B
'0F )% 4# )U, :ZST/L[<
T/%1/ )% #; )U, :;3'<
)I8E&S0S )% ZFES[-34-;F/)'
)^:)e!inir palabra<.J Se utiliza para definir una variable o tabla (palabra).
Ejemplo 7
TEST1 )^ 1 2 3 4
TEST2 )^ ;/%)'
TEST3 )^ 1-22-333-4444
TEST4 )^ 23-112
TEST# )^ 23 )U, :1;;'<
TEST3 )^ #; )U, : ><
)):)e!inir doble palabra<.J Se utitliza para definir una variable o tabla para
inicializar una funcin de memoria.
Ejemplo 7
IE10 )) ;FFFFFFFF'
&0S/ )) ;'
F10& )) 1-22-333-4444-#####
SU"/ )) 4#' I 23'
&E/1ES )) 2.1M3#4
)EI"/1 )) 4.#3ME12
T/%1/ )) #; )U, :;3'<
F&/ )) ;.1234#
)T :)e!inir cuadruple palabra<.Jniacializa 4 palabras. Acepta valores de
constantes,numricos,tablas.
Ejemplo 7
T/%1/ )T 1;;-2;;;-3;;;;-4;;;;;
"U1TI )T 1;;; )U, :4#.3MH<
SU"/ )T J3.34#E J# I #.;;;1E4#
1/&G0 )T MBHB_12'
)T :)e!inir decabyte<.Jnicializa 10 bytes de asignacin de mamoria.
Ejemplo 7
T/%1/ )T 1;;-2;;;-3;;;;-#;;;;;
"U1TI )T 1;;; )U, :4#.3MH<
SU"/ )T J3.34# E J# I #-;;;1E4#
1/&G0 )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"/ ETU 0=T/)0&
)IEK ETU 1;
...
I= SU"/
/)) SU"/-)IEK
/1,'/.J Ordena alfabeticamente los segementos. Se coloca al inicio del
programa para listar los elementos en forma ordenada.

,U%1I.J Se utiliza para enlazar segmentos dentro de un programa o
programas externos.
Formato 7
,rograma Eue llama 7
)SEG1 SEG"E=T ,/&/ Z0)E[
,U%1I 0=8/1
...
0=8/1 )^ >
)SEG1 E=)S
Subprograma llamado 7 E9T&= :=0" 7 TI,0 <
E9T&= 0=8/1 7 F/&
)SEG2 SEG"E=T ,/&/ Z0)E[
...
"08
...
)SEG2 E=)S
0&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
0&G ; ;;
F1)9 )% > ;1
F1)F )^ > ;2
F1)F2 )% > ;4
0&G PI#
0""E=T.J Sirve para delimitar comentarios.
Ejemplo 7
0""E=T )E1I"IT/)0& )E 0"E=T/&I0
...
)E1I"IT/)0& )E 0"E=T/&I0
=0"%&E G&0U, =0"JSEG-....J Ayuda a agrupar con un nombre a varios
segmentos.
Ejemplo 7
G&0U, G&0U, =0"JSEG1SEG2
SEG1 SEG"ET ,/&/ Z)/T/[
/SSU"E )S 7 G&0U,9
...
SE)G1 E=)S
SEG2 SEG"E=T ,/&/ Z)/T/[
/SSU"E )S 7 G&0U,9
...
SEG E=)S
1/%E1.J Redefine el atributo de una variable.
Formato 7
=ombre 1/%E1 Especi!icador
&E)EF% )^ 2#32'
&E)EF^ 1/%E1 ^0&)
FIE1)% )% 2#'
)% 32'
.
.
.
"08 /1-&E)EF%
"08 %9-&E)EF^
DRECTVAS DE DEFNCN DE MEMORA (PROC, SEGMENT, ASSUME,
END, ETC.)
,&0.J ndica la definicin de un procedimiento pude llevar un atributo FAR o
NEAR.
Formato 7
=0"SEGT0 SEG"E=T S 0)E
=0",&0 ,&0 F/&$=E/& S U= ,&0E)I"IE=T0
... S
=0",&0 E=), S )E=T&0
=0"SEGT0 E=)S S )E1 SEG"E=T0 )E D)IG0
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
=0"%&E SEG"E=T :0,I0=ES< S I=II/ E1 SEG"E=T0
.
.
=0"%&E E=)S S FI= )E SEG"E=T0
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=),
/SSU"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
/SSU"E S 7 0)ESG- )S. 7)/T/SG- SS 7 ST/L S... ES 7 )/T/SG
DIRECTI1AS PARA LI5ADO DE U3 PRO5RAMA
TLINF .E ConCierte !n pro&rama >!ente a !n arc@iCo .O8: en !n arc@iCo .E9E. Se
p!ede teclear LI3R o TLI3R. EnlaBando con !na l?nea de comando o por medio de
peticiones. La l?nea de comando es
1I=L$T1I=L arc5obj- arc5eje- U- arc5mapaV U-arc5biblV

/rc5obj.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.
/rc5eje.J Estipula que se genera un archivo .EXE. Unidad, subdirectorio
y nombre del archivo pueden ser iguales o diferentes del archivo fuente.
/rc5mapa.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.
/rc5bibl.J Estipula la opcin de bibliotecas, que no necesita en estos
primeros pasos de programacin en lenguaje ensamblador.
DRECTVAS DE CONTROL DE LSTADO
.1IST y .91IST.J Se utilizan para controlar el listado del archivo.
.1IST.- Permite listar los cdigod fuente y objeto.
.91IST.Jndica hasta donde se detiene el listado del archivo.

Formato 7
.1IST- .91IST
Ejemplo7
.91IST
"F0)E SEG"E=T ,/&/ Z0)E[
"F,&0 ,&0 F/&
/SSU"E S 7 "F0)E- )S 7 "F)/T/-SS 7 ST/L
,US'
SU%
,US'
,/GE.JDirectiva para listar, inicializa la longitud y achura de cada pgina de
listado.
Formato7
,/GE U10=GITU)V - U/='0V
Ejemplo7
,/GE 3;-132
TIT1E.- Permite que sea introducido un ttulo en la segunda lnea de cada
pgina de listado.
Formato 7
TIT1E :cadena<
Ejemplo7
TIT1E ,&0G&/"/ ECE",10
SU%TT1 'ETUE0 )E 0)IG0S )E E&&0&
ST/L SEG"E=T ,/&/ ST/L
)% 34 )U, :`"I,I1/`<
ST/L E=)S
....
2U3CIO3AMIE3TO I3TER3O.
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 /&G/@/) ser como sigue:
/&G/@/ )ireccin
Donde: /&G/@/ = al nombre de la instruccin.
)ireccin =celda de memoria cuyo valor queremos llevar al
acumulador
/&G/@/, 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, /&G/@/ ocupar dos
celdas: Una para el cdigo de la operacin y otra para la direccin a la que
hace referencia.
GU/&)/@/- )ireccin; que deposita el valor del acumulador en una celda
de la memoria(esta es la inversa de la anterior).
SU"/ )ireccin; que suma de memoria descrita por la direccin:
Ahora nuestro diccionario ser como sigue:

INSTRUCCIGN
CODI?O
INTERNO
LON?. DE LA
INSTRUCCIGN
CAR5AWAC *( *
5UARDAWAC +. *
SUMA /- *
RESTA 0* *
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.

I3STRUCCIX3 DIRECCIO3 CODI5O COME3TARIOS
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

/1T0= 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.

,/S0S ,/&/ ECEUI0= )E U= ,&0G&/"/
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. *( *( /- ** +. *' -) )/ )- Z [.
Dir.
Me".
() (( (* (' (0 (/ (. [. *( ** *' [.
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.
1a 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 0=T/)0& )E ,&0G&/"/:,<.
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 /&G/@/.
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"/@/, 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 GU/&)/@/, 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.3 Entorno de programacin.
Unidad ). Elementos del lenguaje
2.M Instrucciones lineales.
2.M.1"o+imiento.
MoCimiento de datos
En todo pro&rama es necesario moCer datos en la memoria $ en los re&istros de la UCPQ
eFisten diCersas >ormas de @acer esto p!ede 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 dispositiCos eFternos asi como recibir datos de dic@os
dispositiCos.
Este moCimiento de datos estG s!<eto a re&las $ restricciones. Al&!nas de ellas son las
;!e se citan a contin!aci%n.
3o es posible moCer datos de !na localidad de memoria a otra directamente" es
necesario primero moCer los datos de la localidad ori&en @acia !n re&istro $ l!e&o del
re&istro a la localidad destino.
3o se p!ede moCer !na constante directamente a !n re&istro de se&mentos" primero se
debe moCer a !n re&istro de la UCP.
Es posible moCer blo;!es de datos por medio de las instr!cciones moCs" ;!e copia !na
cadena de b$tes o palabrasQ moCsb ;!e copia n b$tes de !na localidad a otraQ $ moCsD
copia n palabras de !na localidad a otra. Las dos =ltimas instr!cciones toman los Calores
de las direcciones de>inidas por DS:SI como &r!po de datos a moCer $ ES:DI como
n!eCa localiBaci%n de los datos.
Para moCer los datos tambien eFisten las estr!ct!ras llamadas pilas" en este tipo de
estr!ct!ras los datos se introd!cen con la instr!cci%n p!s@ $ se eFtraen con la
instr!cci%n pop
En !na pila el primer dato introd!cido es el =ltimo ;!e podemos sacar" esto es" si en
n!estro pro&rama !tiliBamos las instr!cciones
PUSH AX
PUSH BX
PUSH CX
Para deColCer los Calores 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 com!nicaci%n con dispositiCos eFternos se !tiliBan el comando o!t para mandar
in>ormaci%n a !n p!erto $ el comando IN para leer in>ormaci%n recibida desde al&!n
p!erto.
La sintaFis del comando OU es
OU DX!AX
Donde DX contiene el Calor del p!erto ;!e se !tiliBarG para la com!nicaci%n $ AX
contiene la in>ormaci%n ;!e se mandarG.
La sintaFis del comando IN es
IN AX!DX
Donde AX es el re&istro donde se &!ardarG la in>ormaci%n ;!e lle&!e $ DX contiene la
direcci%n del p!erto por donde lle&arG la in>ormaci%n.
5ttp7$$usuarios.lycos.es$patricio$ensam$ensam2.5tm
La orden MO1.
La >!nci%n de la orden MO1 es" como s! nombre da a entender" EmoCerE !n
Calor. Pon&amos !n e<emplo
MO1 A9"89
Esta orden en len&!a<e Ensamblador" copiarG el contenido de 89 en A9"
conserCando el Calor de 89. He a;!? al&=n e<emplo mGs
MO1 A9"DS
MO1 ES"A9
MO1 D9"A9
MO1 AL"DH
Como se Ce" no se p!ede realiBar MO1 AL"89" $a ;!e en AL no cabe 89
Tambi#n se p!ede introd!cir !n Calor directamente en !n re&istro. Ser?a
el caso de
MO1 A9")2EA*@
MO1 8L"*//
MO1 DH")((()()(b
Pon&amos e<emplos de c%mo se !tiliBa la n!meraci%n. El primero
era !n n=mero @eFadecimal" el se&!ndo decimal" ;!e no Ca acompaHado por
nada para indicarlo" $ el tercero binario" con la b al >inal. A Ceces"
para representar !n n=mero decimal" se pone !na \d\ al >inal 6p.e<." ()d7
MGs !tilidades de MO1. Podemos trans>erir b$tes ;!e est#n en memoria
a !n re&istro" o de !n re&istro a memoria. 1a$amos con los e<emplos
MO1 A9"M89N
K pon&amos ;!e en 89 est# )EEEE@. En CeB de trans>erir a A9 el Calor
)EEEE@" le trans>eriremos el Calor ;!e @a$a en la posici%n de memoria
CS89Q si CS por e<emplo Cale )('0@ $ 89 )'*(/@" trans>erir?amos el b$te
;!e @a$ en )('0)'*(/@ $ el si&!iente a A9.
Se p!ede @acer tambi#n al reC#sQ
MO1 MA9N"C9
Escribir?amos en la direcci%n de memoria CSA9 el Calor de C9.
K tambi#n podremos !sar Calores n!m#ricos
MO1 A9"M*'*/@N 6lo ;!e @a$ en CS*'*/@7
MO1 A9"DSM*'*/@N 6el Calor en DS*'*/@7
MO1 A9"DSD9 6el Calor en DSD97
MO1 D9"CSC9 6a D9" Calor en CSC97
MO1 89"CS(*0(@ 6a 89" Calor en CS(*0(@7
M!c@as Ceces" se !tiliBa Yord Ptr o 8$te Ptr" ;!e aclaran el tamaHo a
trans>erir
MO1 AL"8KTE PTR M89LSIJ')@N
MO1 A9"YORD PTR M89LDIN
Como acabamos de Cer" es posible @acer Es!masE de Calores al b!scar
!na direcci%n en memoria. Otros e<emplos ser?an
MO1 A9"M89L'N
MO1 M8PLSIN"AH
K para acabar este apartado" @e a;!? !na tablilla de e<emplos sobre MO1s ;!e se
p!eden @acer
] 2ormatos de la instr!cci%n MO1 ] E<emplos ]
] MO1 re&"re& ] MO1 A9"89 ]
] MO1 mem"re& ] MO1 M89N"AL ]
] MO1 re&"mem ] MO1 CH"M0)22@N ]
] MOM mem"inmed ] MO1 8KTE PTR MDIN") ]
] MO1 re&"inmed ] MO1 89")2222@ ]
] MO1 se&re&"re&(. ] MO1 DS"A9 ]
] MO1 mem"se&re& ] MO1 MSIN"ES ]
] MO1 se&re&"mem ] MO1 SS"M(*'0@N ]
re& re&istro memmemoria inmedn=mero inmediato
se&re& re&istro de se&mento re&(. re&istro de (. bits
K Cista la orden MO1" 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
I3STRUCCIO3ES DE MA3E:O DE LA PILA.

POP 6eFtraer de la pila7
SintaFis 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 enc!entra en lo alto de la pila 6ap!ntado
por SP7 al operando destino ;!e a de ser tipo palabra" e incrementa en dos el re&istro
SP. La instr!cci%n POP CS" poco =til" no >!nciona correctamente en los *,. $
s!periores.
Ejemp!os: pop aP
pop pepe

PUSH 6introd!ce en la pila7
SintaFis PUSH ori&en
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Decrementa el p!ntero de pila 6SP7 en * $ l!e&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 p!ede
especi>icar como ori&en" al contrario de lo ;!e a>irman al&!nas p!blicaciones.
Ejemp!o: pus' cs

POP2 6eFtrae los indicadores de la pila7
SintaFis POP2
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
pilaQ a contin!aci%n el p!ntero de pila SP se incrementa en dos.

PUSH2 6introd!ce los indicadores en la pila7
SintaFis PUSH2
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Decrementa en dos el p!ntero 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 Ealmac#n de CariablesE ;!e se enc!entra en !na
direcci%n determinada de memoria.
3os encontramos con dos %rdenes bGsicas respecto a la pila" ;!e
son PUSH $ POP. La orden PUSH emp!<a !na Cariable a la pila" $ la orden POP
la saca. Sin embar&o" no podemos sacar el ;!e ;!eramos" no podemos decir
E;!iero sacar el Calor de D9 ;!e @e metido antes $ ;!e >!e el c!arto ;!e
met?E" por e<emplo.
La estr!ct!ra de la pila se denomina LI2O" si&las in&lesas ;!e indican
\Last In 2irst O!t\. Esto si&ni>ica ;!e al @acer !n POP" se sacarG el
=ltimo Calor introd!cido en la pila. 1eamos esto con !nos e<emplos
PUSH D9 Q Mete en la pila el contenido de D9
PUSH C9 Q K a@ora el contenido de C9
POP A9 Q A@ora saca el =ltimo Calor introd!cido 6 C9 7
Q$ lo coloca en A9.
POP 8P Q K a@ora saca en Calor anterior introd!cido" ;!e
Qes el contenido de D9 c!ando @icimos el PUSH D9
Q$ se lo asi&na a 8P.
A@ora" !na r!tina al&o mGs detallada
MO1 D9")')(@ Q D9 Cale a@ora )')( @eFadecimal.
PUSH D9 Q Emp!<a D9 a la pila. SP se decrementa en dos.
MO1 D9")00C0@ Q A@ora D9 Cale )00C0@
POP C9 Q K con esto" C9 Cale )')( @eFadecimal" el Calor
;!e @ab?amos introd!cido con anterioridad.
Di<imos en la se&!nda l?nea SP se decrementa en dos. C!ando por e<emplo
e<ec!tamos !n .COM" SS es el se&mento del pro&rama 6o sea" i&!al ;!e CS"
$ si no @an sido modi>icados" DS $ ES7" $ SP ap!nta al >inal" a )2222@.
C!ando emp!<amos !n Calor a la pila" SP se decrementa en dos ap!ntando a
)222D@" $ en esta direcci%n ;!eda el Calor introd!cido. C!ando lo sa;!emos"
se incrementarG de n!eCo en dos el Calor de SP" $ el Calor se sacarG de
la pila.
Se p!ede operar con esta instr!cci%n con los re&istros A9" 89" C9" D9"
SI" DI" 8P" SP" CS" DS $ ESQ sin embar&o no se p!ede @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 MO1sQ
a!n;!e sea !n &asto in=til de c%di&o" tiene s! aplicaci%n" por e<emplo" para
saltarse la @e!r?stica en !n antiCir!s" ;!e b!sca !n POP 8P $ SU8 posterior.
Partamos de ;!e @a$ cierto Calor en la pila ;!e ;!eremos sacar.
MO1 8P"SP Q A@ora 8P es i&!al al o>>set al ;!e ap!nta SP
MO1 8P"Yord ptr M8PN Q K a@ora 8P Cale el contenido del o>>set al
Q;!e ap!nta" ;!e al ser el o>>set al ;!e ap!nta
Qel de pila" serG el Calor ;!e sacar?amos
Q@aciendo !n POP 8P.
ADD SP"* Q Para acabarlo" s!mamos dos al Calor de o>>set
Qde la pila.
K esto es lo ;!e @ace !n POP 8P" simplemente. Para Cer lo ;!e @ace !n PUSH
no @abr?a mGs ;!e inCertir el proceso. 1eGmoslo.
SU8 SP"*
MO1 8P"SP
MO1 Yord ptrM8PN"D9
Como =ltima recomendaci%n" @a$ ;!e tener bastante c!idado con los PUSH
$ POP" sacar tantos Calores de la pila como se metan" $ estar pendiente de
;!e lo ;!e se saca es lo ;!e se tiene ;!e sacar. La pila bien aproCec@ada
es >!ndamental para @acer pro&ramas bien optimiBados" $a ;!e entre otras
cosas las instr!cciones PUSH $ POP solo oc!pan !n b$te.
Es por e<emplo m!c@o me<or !sar !n PUSH al principio $ !n POP al >inal
en CeB de de<ar partes de c%di&o para almacenar Cariables" mGs Celocidad
$ menos tamaHo.
K >inalmente" @a$ otras dos %rdenes interesantes respecto a la pila"
PUSH2 $ POP2" ;!e emp!<an el re&istro 6(. bits7 de >la&s $ lo sacan"
respectiCamente.
2.M.3"atem.ticos.
Instr%%iones arit"Mti%as
Las c!atro operaciones aritm#ticas bGsicas son s!ma" resta" m!ltiplicaci%n $ diCisi%n. La
ma$or?a de las comp!tadoras proporcionan instr!cciones para
las c!atro operaciones. Al&!nas comp!tadoras pe;!eHas s%lo tienen las instr!cciones
s!ma $" tal CeB" resta. La m!ltiplicaci%n $ la diCisi%n deben &enerarse mediante
s!br!tinas del so>tDare. Las c!atro operaciones aritm#ticas bGsicas son s!>icientes para
>orm!lar sol!ciones a problemas cient?>icos c!ando se eFpresan en t#rminos de m#todos
de anGlisis n!m#rico.
En la tabla ,J- se proporciona !na lista de las instr!cciones aritm#ticas t?picas. La
instr!cci%n de incrementar s!ma ( al Calor almacenado en !n re&istro o palabra de
memoria. Una caracter?stica com=n de las operaciones de incrementar" c!ando se
e<ec!tan en re&istros de procesador" es ;!e !n n=mero binario ;!e contiene s%lo d?&itos
(" prod!ce !n res!ltado de solo d?&itos ) c!ando se incrementa. La instr!cci%n para
Decrementar resta ( de !n Calor almacenado en !n re&istro o palabra de memoria. Un
n=mero con s%lo d?&itos )" prod!ce !n n=mero con s%lo d?&itos ( c!ando se decrementa.


TA8LA ,J- Instr!cciones aritm#ticas t?picas
3OM8RE M3EMO3ICO
Incrementar I3C
Decrementar DEC
S!mar ADD
Restar SU8
M!ltiplicar MUL
DiCidir DI1
S!mar con acarreo ADDC
Restar con pr#stamo SU88
3e&ar 6complemento a *7 3E5
Las instr!cciones s!mar" restar" m!ltiplicar $ diCidir p!eden estar disponibles para
di>erentes tipos de datos. Los tipos de datos ;!e se considera ;!e estGn en los re&istros
del procesador d!rante la e<ec!ci%n de estas operaciones aritm#ticas" se incl!$en en la
de>inici%n del c%di&o de operaci%n. Una instr!cci%n aritm#tica p!ede especi>icar datos
de p!nto >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?t!lo '.
3o es eFtraHo encontrar comp!tadoras con tres o mGs instr!cciones de s!ma !na para
enteros binarios" !na para operandos de p!nto >lotante $ !na para operandos decimales.
Ense&!ida" se m!estran los mnem%nicos para tres instr!cciones de s!ma ;!e especi>ican
tipos de datos di>erentes.
ADDI S!mar dos n=meros enteros de p!nto >lotante
ADD2 S!mar dos n=meros de p!nto >lotante
ADDD S!mar dos n=meros decimales en 8CD.
Los al&oritmos para operaciones con enteros" p!nto >lotante $ aritm#tica ^ decimal se
desarrollan en el cap?t!lo ().
La cantidad de bits en c!al;!ier re&istro es de eFtensi%n >inita $" por lo tanto" los
res!ltados de las operaciones aritm#ticas son de precisi%n >inita. Al&!nas comp!tadoras
proporcionan operaciones de @ardDare de doble precisi%n" en las c!ales el tamaHo de
cada operando es de dos palabras de memoria. La ma$or?a de las comp!tadoras
pe;!eHas proporcionan instr!cciones especiales para >acilitar la aritm#tica de doble
precisi%n. Un >lipJ>lop especial de acarreo se !tiliBa para almacenar el acarreo de !na
operaci%n. la instr!cci%n Es!mar con acarreoE realiBa la s!ma de dos operandos mGs el
Calor del acarreo del cGlc!lo preCio. De i&!al manera" la instr!cci%n Erestar con
pr#stamoE resta dos palabras $ !n pr#stamo ;!e p!ede @aberse prod!cido de !na
operaci%n de resta preCia. La instr!cci%n ne&ar >orma el complemento a * de !n
n=mero" inCirtiendo en >orma e>ectiCa el si&no de !n entero c!ando 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 c!al;!ier len&!a<e de
pro&ramaci%n la s!ma $ la resta. Tienen dos operandos" !no de destino $
otro >!ente. Para la s!ma" se s!man los dos operandos $ se almacena en
el primero 6destino7" $ para la resta" se resta al primero el se&!ndo"
almacenGndose en destino" el primero. A;!? estGn al&!nos >ormatos de estas
instr!cciones
ADD A9"89 Q S!mar?a A9 $ 89 $ lo &!ardar?a en A9
ADD MA9N"89 Q S!ma el contenido de la direcci%n de A9 a 89"
Q$ se almacena en la direcci%n de A9
ADD A9"M89N Q Se s!man A9 $ el contenido de la direcci%n de
Q89" $ se almacena _esta s!ma en A9
ADD A9"' Q Lo mismo pero !tiliBando !n Calor inmediato
Qen CeB de la 89 seHalada anteriormente.
SU8 CL"DL Q Resta de CL el Calor de DL" $ se almacena en CL
SU8 MC9N"D9 Q Se resta al contenido de la direcci%n de C9
Qel Calor de D9" $ se almacena en la dir. de C9
SU8 C9"*'@ Q Se resta de C9 el Calor *'@" $ ;!eda en C9 el
Qres!ltado
ZK si el res!ltado eFcede lo ;!e p!ede contener el b$te" o la palabra`.
Esto se p!ede saber mediante los >la&s" ;!e trataremos mGs adelante.
Tambi#n es resaltable ;!e separa con Q los comentarios. 8ien"
#sta es la manera en Ensamblador de poner comentarios" como ser?a en 8asic
la orden EREME" o en C la conCenci%n EAa M...N aAE
/.J'.J 3E5" 3OT $ operaciones l%&icas
3e& pone el re&istro o el l!&ar al ;!e ap!nta en memoria en ne&atiCo
se&=n la aritm#tica de complemento a dos tal ;!e 3E5 A9 o 3E5 MA9N
3ot es la ;!e" como Cimos" EinCierteE los Calores de los bits. K el
resto de operaciones l%&icas tambi#n las Cimos anteriormente. Pondremos a@ora
tan s%lo s! sintaFis
3OT SI Q 6o 3ot A9" etc."... o sea" con !n re&istro7
3OT Yord ptr esMaFN Q Lo realiBa sobre la palabra 6 * b$tes 7
Q;!e se enc!entra en esMaFN
A3D A9"89 Q E>ect=a !n A3D entre A9 $ 89" almacenando
Qel res!ltado en A9 6 siempre en el primer
Qt#rmino 7
A3D MA9N"89 Q Lo dic@o" pero A9 ap!nta a !n l!&ar de
Qmemoria
A3D A9"M89N
A3D 8$te ptr M(/N"' Q Un A3D en la direcci%n ))(/ con lo ;!e
Q@a$a a@b $ el Calor E'E
OR A9"89
OR MA9N"89
OR 8$te ptr M(/N"'
OR DH"//@ QTambi#n podr?a @acerse en el A3D" se
Qcon>rontan DH $ //@ en !n OR.
K todo lo dic@o para OR $ A3D Cale para 9OR" de tal manera
;!e las operaciones son realiBables entre
Re&istro $ re&istro C9"D9
L!&ar de memoria $ re&istro MD9N"89
Re&istro $ l!&ar de memoria A9"MSIN
L!&ar de memoria $ n=mero Dord ptr ESMA9N")D/''@
Re&istro $ n=mero A9")CD'*@
4.E+.E M$ti#$i%a%i8n 6 diPisi8n, MUL 6 DIV
Estas operaciones m!ltiplican al ac!m!lador por el operando indicado.
Si el operando es de , bits 6( b$te7" el ac!m!lador es AL. Si el
operando es de (. bits" el ac!m!lador es A9. El res!ltado se almacena
en A9 o en el par D9JA9 respectiCamente" si el operando es de , bits o
(. bits.
Tambi#n tendremos ;!e di>erenciar entre dos tipos de m!ltiplicaciones
$ diCisiones ;!e entiende el procesador. Los ;!e comienBan con !na I
operan con n=meros con si&no" si ;!eremos !sar n=meros ne&atiCos"
$ los ;!e no" con n=meros sin si&no.
1isto esto" podremos decir ;!e
MUL 8$te Ptr MC9N
1a a m!ltiplicar el b$te ;!e @a$ en la direcci%n ;!e marca C9 por el
contenido ;!e @a$ en AL" $ !na CeB @ec@o esto" Ca a almacenarlo en A9.
MUL SI
M!ltiplicar?a SI por el contenido de A9" almacenGndose en el par A9JD9.
La palabra s!perior" de mGs Calor" se deColCer?a en D9" $ la in>erior
en A9.
IMUL SI
Esto $ el e<emplo anterior ser?a lo mismo" s%lo ;!e operando con
n=meros con si&no.
Para la diCisi%n" el diCidendo @a de estar en A9" $ ser (. bits por
tanto. El diCisor se indica en el operando" por e<emplo en DI1 8LQ este
diCisor estar?a en 8L. Se diCidir?a A9 entre 8L $ el res!ltado ;!edar?a en
AL" ;!edando el resto en AH. 1amos a Cer al&=n e<emplo.
En la diCisi%n de !n n=mero de diecis#is bits entre otro de , bits" el
cociente $ resto serGn de , bits 6( b$te7. El diCidendo @a de estar en A9"
$ el diCisor es el operando de la instr!cci%n" ;!e p!ede ser !n re&istro o
!n sitio en la memoria" $ se necesita poner lo de b$te ptr.
O sea" ser?a tal ;!e
DI1 CL o IDI1 8KTE PTR ESM8PN
El res!ltado se deC!elCe en AL" $ el resto en AH. Si por e<emplo A9
Caliese /)(d $ cl Caliese *" al @acer el DI1 CL" en AL ;!edar?a *// $ en AH
;!edar?a (.
Se p!ede diCidir tambi#n !n n=mero de '* bits 60 b$tes7 entre otro de
(. bits 6* b$tes7" con lo ;!e cociente $ resto ser?an de (. bits. El
diCidendo estar?a >ormado por el par D9AA9. Al @acer por e<emplo !n
DI1 SI
Se diCidir?a D9JA9 entre SI" almacenGndose el res!ltado en A9" $ el resto
en D9. Por e<emplo
Si en D9 estG el Calor ))'2@ $ en A9 ////@" el par ser?a '2////@" con lo
;!e al diCidirlo por SI 6;!e pon&amos ;!e Cale )CCC0@7" se almacenar?a en
A9 el res!ltado $ en D9 el resto.
5ttp7$$platea.pntic.mec.es$\jdelucas$ensamblador.5tm
SU"/ F &EST/.
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 6a<!ste ASCII para la s!ma7
SintaFis AAA
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R 3 3 P 3 P
ConCierte el contenido del re&istro AL en !n n=mero 8CD no empa;!etado.
Si los c!atro bits menos si&ni>icatiCos de AL son ma$ores ;!e + % si el indicador A2
estG a (" se s!ma . a AL" ( a AH" A2 se pone a (" C2 se i&!ala a A2 $ AL pone s!s
c!atro bits mGs si&ni>icatiCos a ).
Ejemp!o: add a!,&!
aaa
En el e<emplo" tras la s!ma de dos n=meros 8CD no empa;!etados colocados
en AL $ 8L" el res!ltado 6por medio de AAA7 si&!e siendo !n n=mero 8CD no
empa;!etado.

ADC 6s!ma con acarreo7
SintaFis ADC destino" ori&en
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
S!ma los operandos ori&en" destino $ el Calor del indicador de acarreo 6) % (7
$ el res!ltado lo almacena en el operando destino. Se !tiliBa normalmente para s!mar
n=meros &randes" de mGs de (. bits" en Carios pasos" considerando lo que nos lle"amos
6el acarreo7 de la s!ma anterior.
Ejemp!o: adc aP,&P

ADD 6s!ma7
SintaFis ADD destino" ori&en
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
S!ma los operandos ori&en $ destino almacenando el res!ltado en el operando
destino. Se actiCa el acarreo si se desborda el re&istro destino d!rante la s!ma.
Ejemp!os: add aP,&P
add c!,d'

DAA 6a<!ste decimal para la s!ma7
SintaFis DAA
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R P P P P P
ConCierte el contenido del re&istro AL en !n par de Calores 8CD si los c!atro
bits menos si&ni>icatiCos de AL son !n n=mero ma$or ;!e +" el indicador A2 se pone a
( $ se s!ma . a AL. De i&!al >orma" si los c!atro bits mGs si&ni>icatiCos de AL tras la
operaci%n anterior son !n n=mero ma$or ;!e +" el indicador C2 se pone a ( $ se s!ma
.)@ a AL.
Ejemp!o: add a!,c!
daa
En el e<emplo anterior" si AL $ CL conten?an dos n=meros 8CD
empa;!etados" DAA @ace ;!e el res!ltado de la s!ma 6en AL7 si&a siendo tambi#n !n
8CD empa;!etado.

I3C 6incrementar7
SintaFis I3C destino
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P R
Incrementa el operando destino. El operando destino p!ede ser b$te o palabra.
Obs#rCese ;!e esta instr!cci%n no modi>ica el bit de acarreo 6C27 $ no es posible
detectar !n desbordamiento por este procedimiento 6!til?cese 427.
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 6a<!ste ASCII para la resta7
SintaFis AAS
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R 3 3 P 3 P
ConCierte el res!ltado de la s!stracci%n de dos operandos 8CD no
empa;!etados para ;!e si&a siendo !n n=mero 8CD no empa;!etado. Si el nibble
in>erior de AL tiene !n Calor ma$or ;!e +" de AL se resta ." se decrementa AH" A2 se
pone a ( $ C2 se i&!ala a A2. El res!ltado se &!arda en AL con los bits de 0 a - p!estos
a ).
Ejemp!o: su& a!,&!
aas
En el e<emplo" tras la resta de dos n=meros 8CD no empa;!etados colocados
en AL $ 8L" el res!ltado 6por medio de AAS7 si&!e siendo !n n=mero 8CD no
empa;!etado.

CMP 6comparaci%n7
SintaFis 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 res!ltado. Los operandos ;!edan
inalterados" paro los indicadores p!eden ser cons!ltados mediante instr!cciones de
bi>!rcaci%n condicional. Los operandos p!eden ser de tipo b$te o palabra pero ambos de
la misma dimensi%n.
Ejemp!o: cmp &P, mem7pa!
cmp c',c!

DAS 6a<!ste decimal para la resta7
SintaFis DAS
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R P P P P P
Corri&e el res!ltado en AL de la resta de dos n=meros 8CD empa;!etados"
conCirti#ndolo tambi#n en !n Calor 8CD empa;!etado. Si el nibble in>erior tiene !n
Calor ma$or ;!e + o A2 es (" a AL se le resta ." A2 se pone a (. Si el nibble mas
si&ni>icatiCo es ma$or ;!e + % C2 estG a (" entonces se resta .)@ a AL $ se actiCa
desp!#s C2.
Ejemp!o: su& a!,&!
das
En el e<emplo anterior" si AL $ 8L conten?an dos n=meros 8CD
empa;!etados" DAS @ace ;!e el res!ltado de la resta 6en AL7 si&a siendo tambi#n !n
8CD empa;!etado.

DEC 6decrementar7
SintaFis 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 p!ede ser b$te o palabra.
Obs#rCese ;!e esta instr!cci%n no modi>ica el bit de acarreo 6C27 $ no es posible
detectar !n desbordamiento por este procedimiento 6!til?cese 427.
Ejemp!o: dec aP
dec mem7&yte

3E5 6ne&aci%n7
SintaFis 3E5 destino
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
Calc!la el Calor ne&atiCo en complemento a dos del operando $ deC!elCe el
res!ltado en el mismo operando.
Ejemp!o: neg a!

S88 6resta con acarreo7
SintaFis S88 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 res!ltado lo almacena en el
operando destino. Si estG a ( el indicador de acarreo ademGs resta !na !nidad mGs. Los
operandos p!eden ser de tipo b$te o palabra. Se !tiliBa normalmente para restar
n=meros &randes" de mGs de (. bits" en Carios pasos" considerando lo que nos lle"amos
6el acarreo7 de la resta anterior.
Ejemp!o: s&& aP,aP
s&& c',d'

SU8 6resta7
SintaFis SU8 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 res!ltado en el
operando destino. Los operandos p!eden 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 6a<!ste ASCII para la m!ltiplicaci%n7
SintaFis AAM
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R P P 3 P 3
Corri&e el res!ltado en A9 del prod!cto de dos n=meros 8CD no
empa;!etados" conCirti#ndolo en !n Calor 8CD tambi#n no empa;!etado. En AH sit=a
el cociente de ALA() ;!edando en AL el resto de dic@a operaci%n.
Ejemp!o: mu! &!
aam
En el e<emplo" tras el prod!cto de dos n=meros 8CD no empa;!etados
colocados en AL $ 8L" el res!ltado 6por medio de AAA7 si&!e siendo" en A9" !n
n=mero 8CD no empa;!etado.

IMUL 6m!ltiplicaci%n entera con si&no7
SintaFis IMUL ori&en 6or#gen no p!ede ser operando inmediato en ,),." s? en
*,.7
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R 3 3 3 3 P
M!ltiplica !n operando ori&en con si&no de lon&it!d b$te o palabra por AL o
A9 respectiCamente. Si or#gen es !n b$te el res!ltado se &!arda en AH 6b$te mGs
si&ni>icatiCo7 $ en AL 6menos si&ni>icatiCo7" si or#gen es !na palabra el res!ltado es
deC!elto en D9 6parte alta7 $ A9 6parte ba<a7. Si las mitades mGs si&ni>icatiCas son
distintas de cero" independientemente del si&no" C2 $ O2 son actiCados.
Ejemp!o: imu! &P
imu! c'

MUL 6m!ltiplicaci%n sin si&no7
SintaFis MUL ori&en 6or#gen no p!ede ser operando inmediato7
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R 3 3 3 3 P
M!ltiplica el contenido sin si&no del ac!m!lador por el operando ori&en. Si el
operando destino es !n b$te el ac!m!lador es AL &!ardando el res!ltado en AH $ AL"
si el contenido de AH es distinto de ) actiCa los indicadores C2 $ O2. C!ando el
operando ori&en es de lon&it!d palabra el ac!m!lador es A9 ;!edando el res!ltado
sobre D9 $ A9" si el Calor de D9 es distinto de cero los indicadores C2 $ O2 se
actiCan.
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 6a<!ste ASCII para la diCisi%n7
SintaFis AAD
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R P P 3 P 3
ConCierte dos n=meros 8CD no empa;!etados contenidos en AH $ AL en !n
diCidendo de !n b$te ;!e ;!eda almacenado en AL. Tras la operaci%n AH ;!eda a cero.
Esta instr!cci%n es necesaria A3TES de la operaci%n de diCidir" al contrario ;!e AAM.
Ejemp!o: aad
di$ &!
En el e<emplo" tras conCertir los dos n=meros 8CD no empa;!etados 6en A97
en !n diCidendo CGlido" la instr!cci%n de diCidir &enera !n res!ltado correcto.

DI1 6diCisi%n sin si&no7
SintaFis DI1 ori&en 6or#gen no p!ede ser operando inmediato7
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R 3 3 3 3 3
DiCide" sin considerar el si&no" !n n=mero contenido en el ac!m!lador $ s!
eFtensi%n 6AH" AL si el operando es de tipo b$te o D9" A9 si el operando es palabra7
entre el operando >!ente. El cociente se &!arda en AL o A9 $ el resto en AH o D9
se&=n el operando sea b$te o palabra respectiCamente. D9 o AH deben ser cero antes de
la operaci%n. C!ando el cociente es ma$or ;!e el res!ltado mGFimo ;!e p!ede
almacenar" cociente $ resto ;!edan inde>inidos prod!ci#ndose !na interr!pci%n ). En
caso de ;!e las partes mGs si&ni>icatiCas del cociente ten&an !n Calor distinto de cero se
actiCan los indicadores C2 $ O2.
Ejemp!o: di$ &!
di$ mem7pa!

IDI1 6diCisi%n entera7
SintaFis IDI1 ori&en 6or#gen no p!ede ser operando inmediato7
Indicadores: ,< D< I< -< S< X< A< P< <
3 R R R 3 3 3 3 3
DiCide" considerando el si&no" !n n=mero contenido en el ac!m!lador $ s!
eFtensi%n entre el operando >!ente. El cociente se almacena en AL o A9 se&=n el
operando sea b$te o palabra $ de i&!al manera el resto en AH o D9. D9 o AH deben
ser cero antes de la operaci%n. C!ando el cociente es positiCo $ s!perior al Calor
mGFimo ;!e p!ede almacenarse 6->@ % ->>>@7" o c!ando el cociente es ne&atiCo e
in>erior al Calor m?nimo ;!e p!ede almacenarse 6,(@ ! ,))(@7 entonces cociente $ resto
;!edan inde>inidos" &enerGndose !na interr!pci%n )" lo ;!e tambi#n s!cede si el diCisor
es ).
Ejemp!o: idi$ &!
idi$ &P
Q Q Q C O N V E R S I O N E S Q Q Q

C8Y 6conCersi%n de b$te en palabra7
SintaFis C8Y
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"
eFpande el si&no de AL a A9 como paso preCio a !na operaci%n de (. bits.

CYD 6conCersi%n de palabra a doble palabra7
SintaFis CYD
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
EFpande el si&no del re&istro A9 sobre el re&istro D9" copiando el bit mGs
si&ni>icatiCo de AH en todo D9.
5ttp7$$meltingpot.!ortunecity.com$uruguay$BMH$libro$;4.5
tml
2.M.4/justes.
Las instr%%iones INC 6 DEC0
Son las mGs bGsicas a la @ora de @acer operaciones con re&istros I3C
incrementa el Calor de !n re&istro"o de c!al;!ier posici%n en
memoria" en !na !nidad" $ DEC lo decrementa. 1eamos
I3C A9
Incrementa en !no el Calor de A9
I3C YORD PTR M89L0N
Incrementa la palabra sit!ada en CSM89L0N en !no.
DEC A9
Decrementa A9" le resta !no.
DEC YORD PTR M89L0N
Decrementa la palabra sit!ada en CSM89L0N en !na !nidad.
Estas dos instr!cciones" e;!iCalentes a EaLLE en C" nos
serCirGn bastante como contadores para b!cles.
5ttp7$$platea.pntic.mec.es$\jdelucas$ensamblador.5tm
2.M.#omparacin.
INSTRUCCIONES DE COM7ARACION
3os Can a serCir para realiBar 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 SU8 6por e<emplo CMP A9"897" tan s%lo ;!e
nin&!no de los re&istros es alterado. Si por e<emplo son i&!ales" el >la&
de cero se pondrG en !no. Es en realidad !n SU8 del ;!e no se almacena el
res!ltado.
TEST" comprobar" se p!ede realiBar con el mismo >ormato de A3D" $a ;!e
es e;!iCalente a ella" tan s%lo ;!e no se &!arda el res!ltado" a!n;!e s? se
modi>ican los >la&s.
K en el pr%Fimo cap?t!lo Ceremos c%mo se aplican estos >la&s" $ c%mo
realiBar los saltos comparatiCos.
1/ I=ST&UI0= ",
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?

1/ I=ST&UI0= ",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 estGn dados
por la instr!cci%n <mp" !n salto es alterar el >l!<o de la e<ec!ci%n de !n pro&rama
enCiando 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 Ceces @asta ;!e al&!na condici%n se c!mpla. En estos ciclos se !tiliBan los
brincos condicionales basados en el estado de las banderas. Por e<emplo la instr!cci%n
<nB ;!e salta solamente si el res!ltado de !na operaci%n es di>erente de cero $ la
instr!cci%n <B ;!e salta si el res!ltado de la operaci%n es cero.
Por =ltimo tenemos los procedimientos o r!tinas" ;!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 instr!cci%n call.
Un procedimiento en ensamblador es a;!el ;!e inicie con la palabra Proc $ termine con
la palabra ret.
Realmente lo ;!e s!cede con el !so de la instr!cci%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 localiBaci%n de la si&!iente instr!cci%n ;!e e<ec!tara la UCP"
entonces podemos darnos c!enta ;!e se desC\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 Calor de IP con lo ;!e se deC!elCe el control al p!nto del pro&rama donde se
inCocc al procedimiento.
Es posible llamar a !n procedimiento ;!e se enc!entre !bicado en otro se&mento" para
#sto el contenido de CS 6;!e nos indica ;!e se&mento se estG !tiliBando7 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 6llamada a s!br!tina7
SintaFis 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" salCando preCiamente
en la pila la direcci%n de la instr!cci%n si&!iente" para poder ColCer a ella !na CeB
e<ec!tado el procedimiento. El procedimiento p!ede estar en el mismo se&mento 6tipo
3EAR7 o en otro se&mento 6tipo 2AR7. A s! CeB la llamada p!ede ser directa a !na
eti;!eta 6especi>icando el tipo de llamada 3EAR Jpor de>ectoJ o 2AR7 o indirecta"
indicando la direcci%n donde se enc!entra el p!ntero. 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 6IP7 como el se&mento 6CS7 a donde
ColCer.
Ejemp!os: ca!! proc1
dir dd /%///eHEF'
ca!! dYord ptr dir
En el se&!ndo e<emplo" la Cariable dir almacena la direcci%n a donde saltar. De
esta =ltima manera Jconociendo s! direcci%nJ p!ede llamarse tambi#n a !n Cector de
interr!pci%n" &!ardando preCiamente los >la&s en la pila 6PUSH27" por;!e la r!tina de
interr!pci%n retornarG 6con IRET en CeB de con RET27 sacGndolos.

:MP 6salto7
SintaFis :MP direcci%n o :MP 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 p!ede ser tambi#n directa o indirecta como anteriormente
Cimos" pero ademGs p!ede ser corta 6tipo SHORT7 con !n desplaBamiento comprendido
entre J(*, $ (*-Q o lar&a" con !n desplaBamiento de dos b$tes con si&no. Si se @ace !n
:MP SHORT $ no lle&a el salto 6por;!e estG demasiado ale<ada esa eti;!eta7 el
ensamblador darG error. Los b!enos ensambladores 6como TASM7 c!ando dan dos
pasadas colocan all? donde es posible !n salto corto" para economiBar memoria" sin ;!e
el pro&ramador ten&a ;!e oc!parse de poner s$ort. Si el salto de dos b$tes" ;!e permite
desplaBamientos de .0 Rb en la memoria si&!e siendo ins!>iciente" se p!ede indicar con
%ar ;!e es lar&o 6salto a otro se&mento7.
Ejemp!os: jmp etiqueta
jmp %ar ptr etiqueta

RET A RET2 6retorno de s!br!tina7
SintaFis RET MCalorN o RET2 MCalorN
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Retorna de !n procedimiento eFtra$endo de la pila la direcci%n de la si&!iente
direcci%n. Se eFtraerG el re&istro de se&mento $ el desplaBamiento en !n procedimiento
de tipo 2AR 6dos palabras7 $ solo el desplaBamiento en !n procedimiento 3EAR 6!na
palabra7. si esta instr!cci%n es colocada dentro de !n blo;!e PROCJE3DP 6como se
CerG en el si&!iente cap?t!lo7 el ensamblador sabe el tipo de retorno ;!e debe @acer"
se&=n el procedimiento sea 3EAR o 2AR. En c!al;!ier caso" se p!ede >orBar ;!e el
retorno sea de tipo 2AR con la instr!cci%n RET2. &alor" si es indicado permite s!mar
!na cantidad "alor en b$tes a SP antes de retornar" lo ;!e es >rec!ente en el c%di&o
&enerado por los compiladores para retornar de !na >!nci%n con parGmetros. Tambi#n se
p!ede retornar de !na interr!pci%n con RET2 *" para ;!e deC!elCa el re&istro de estado
sin resta!rarlo de la pila.
Ntt#0OO"e$ting#ot.fortne%it6.%o"Orga6OJD2O$ibroO'+.Nt"$
Condi%iona$
Las si&!ientes instr!cciones son de trans>erencia condicional de control a la
instr!cci%n ;!e se enc!entra en la posici%n IPLdesplaBamiento 6desplaBamiento
comprendido entre J(*, $ L(*-7 si se c!mple la condici%n. Al&!nas condiciones se
p!eden denotar de Carias maneras. Todos los saltos son cortos $ s# no alcan'a @a$ ;!e
apaHGrselas como sea. En negrita se realBan las condiciones mGs empleadas. Donde
interCiene S2 se consideran con si&no los operandos implicados en la =ltima
comparaci%n ! operaci%n aritmeticoJl%&ica" $ se indican en la tabla como \d\ 6J(*, a
L(*- % J'*-., a L'*-.-7Q en los demGs casos" indicados como \L\" se consideran sin
si&no 6) a *// % ) a .//'/7
;AO;NBE Sa$to si "a6or )aboPe*, si no "enor o iga$ )not be$oR or eSa$*, si CFT' 6 UFT'. L
;AEO;NB Sa$to si "a6or o iga$ )aboPe or eSa$*, si no "enor )not be$oR*, si CFT'. L
;BO;NAEO;C
Sa$to si "enor )be$oR*, si no s#erior ni iga$ )not aboPe or eSa$*, si a%arreo, si
CFT,.
L
;BEO;NA
Sa$to si "enor o iga$ )not be$oR or eSa$*, si no "a6or )not aboPe*, si CFT, 8
UFT,.
L
;C!U Sa$to si C!T'.
;EO;U Sa$to si iga$ )eSa$*, si %ero )Lero*, si UFT,.
:5A:3LE Salto si ma$or 6&reater7" si no menor ni i&!al 6not less or e;!al7" si 42I) $ S2I). d
:5EA:3L Salto si ma$or o i&!al 6&reater or e;!al7" si no menor 6not less7" si S2I). d
:LA:35E Salto si menor 6less7" si no ma$or ni i&!al 6not &reater or e;!al7" si S2efO2. d
:LEA:35 Salto si menor o i&!al 6less or e;!al7" si no ma$or 6not &reater7" si 42I) $ S2efO2. d
;NC Sa$to si no a%arreo, si CFT'.
;NEO;NU Sa$to si no iga$, si no %ero, si UFT'.
:3O Salto si no desbordamiento" si O2I).
:3PA:PO Salto si no paridad" si paridad impar" si P2I).
:3S Salto si no si&no" si positiCo" si S2I).
:O Salto si desbordamiento" si O2I(.
:PA:PE Salto si paridad" si paridad par" si P2I(.
:S Salto si si&no" si S2I(.
SALTOS INCONDICIONALES
Empecemos por el salto sin condiciones" con el ;!e podremos cambiar
el control a c!al;!ier p!nto del pro&rama. Ser?a como el E5otoE del 8asic"
simplemente trans>erir el control a otro p!nto del pro&rama. La orden es
:MP 6de :!mp" salto7
Si se rec!erdan los re&istros CSIP" se podrG Cer ;!# es
lo ;!e @ace realmente la instr!cci%n" $ no es mGs ;!e incrementar o
decrementar IP para lle&ar a la Bona del pro&rama a la ;!e ;!eremos
trans>erir el control 6IP es el O>>set ;!e indica la Bona de memoria
;!e contiene la si&!iente instr!cci%n a e<ec!tar" $ CS el se&mento7.
El >ormato mGs sencillo para el salto ser?a :MP )'0*0@" lo ;!e saltar?a
a esa Bona. Pero es al&o comple<o calc!lar en ;!# direcci%n
Ca a estar esa instr!cci%n" con lo ;!e !tiliBaremos eti;!etas. He a;!?
!n e<emplo
MO1 A9")CC'0@
MO1 CL"**@
:MP PALA3TE
1UEL1E CMP 89"A9
:MP 2I3
PALA3TE MO1 89"A9
:MP 1UEL1E
2I3 9OR C9"C9
A@ora comentaremos !n poco el pro&rama. Tras la primera instr!cci%n"
A9 Cale )CC'0@" $ tras la se&!nda" CL Cale **@. Desp!#s se realiBa !n salto
a la instr!cci%n eti;!etada con EPALA3TEE. La eti;!eta @a de estar
contin!ada por dos p!ntos \\" $ p!ede ser llamada desde c!al;!ier l!&ar del
pro&rama. Tambi#n podremos @acer !n MO1 A9"MPALA3TEN" como @ac?amos antes
con !n MO1 A9"M89N" pero asi&nando a A9 el Calor ;!e @a$a en la direcci%n
en la ;!e estG EPALA3TEE.
El caso es ;!e tras el salto a EPALA3TEE" se copia el Calor del re&istro 89
en A9" $ se C!elCe a E1UEL1EE. Se realiBa !na comparaci%n entre A9 $ 89" ;!e
pondrG el >la& de cero a ( 6recordemos la anterior lecci%n7" se saltarG
a E2I3E" donde tan s%lo se realiBarG la orden 9or C9"C9 c!$o res!ltado" por
cierto" es poner C9 a cero" ten&a el Calor ;!e ten&a.
1olCamos con la sintaFis del :MP con al&!nos e<emplos de c%mo !tiliBarlo
:MP ())@
Salta a la direcci%n ())@. Un arc@iCo .COM comienBa normalmente en esa
direcci%n" as? ;!e es posible Cerlo en al&!nos Cir!s.
:MP /0*A@())@
Salta a la direcci%n ())@ pero del se&mento /0*A@.
:MP SHORT **'A@
Salto corto a la direcci%n **'A@.
:MP 3EAR //AA@
Salto cercano" es di>erente al corto
:MP M())@N
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 instr!cci%n no es CGlida.
:MP YORD PTR M89N
A@ora s? Cale. Salta a la direcci%n contenida en la palabra 6dos
b$tes7 a la ;!e ap!nta 89. O sea" si 89 Caliese '))@ $ en '))@ los dos
b$tes >!esen )CC''@" el :MP saltar?a a esta direcci%n.
:MP DYORD PTR M89LSIL/N
DDord son '* bits" o sea" !n salto le<ano. K saltar?a al contenido en
la direcci%n de memoria a la ;!e ap!ntan la s!ma de 89"SI $ /.
1eamos el si&ni>icado de los saltos le<anos" cercanos $ cortos. El
salto corto se realiBa entre el p!nto en el ;!e se estG $ L(*- o J(*," o
sea" la cantidad ;!e se p!ede contener en !n b$te con si&no. A Ceces
es necesario indicar ;!e se trata de salto corto" cercano o le<ano.
El salto cercano se realiBa contando como distancia el contenido de dos
b$tes" o sea" ;!e el ran&o ser?a desde '*-.- a J'*-., b$tes de distancia.
K el le<ano se realiBa contando como distancia el contenido de c!atro
8$tes.
Por e<emplo" es incorrecto ;!e @a$a en la direcci%n ())@ !na instr!cci%n
;!e di&a :MP SHORT /))@" $a ;!e la distancia no corresponde a !n salto
corto. AdemGs" el salto dependiendo de ;!e sea cercano" corto o lar&o se
codi>ica de manera di>erente en modo @eFadecimal.
1a 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


1a instruccin 100,
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
ZRec!erdan el I2JTHE3JELSE" o el 2OR" o el YHILEJDO `
8ien" p!es a;!? estG lo ;!e s!ple a estas instr!cciones en len&!a<e
Ensamblador. Se basan completamente en los >la&s" pero estGn simpli>icados.
Los saltos podr?an res!mirse en !n modo E8asicE de la manera I2JTHE3J5OTO
de >orma ;!e c!ando se c!mple !na condici%n se salta a !n sitio
determinado.
He a;!? los tipos de saltos condicionales 6las letras en ma$=sc!las son
las instr!cciones7
:O :!mp i> oCer>loD. Salta si el >la& de desbordamiento estG a !no
:3O :!mp i> not oCer>loD. Salta si el >la& de desbordamiento estG a
cero.
:C" :3AE" :8 Los tres sirCen para lo mismo. Si&ni>ican :!mp i> Carr$"
:!mp i> 3ot AboCe or E;!al $ :!mp i> 8eloD. Saltan por lo tanto si al
@aber !na comparaci%n el >la& de acarreo se pone a (Q es entonces
e;!iCalente a e en !na operaci%n sin si&no. 1amos" ;!e se compara as?
CMP ('@"(,@" saltarG" $a ;!e ('@ es menor ;!e (,@. Tambi#n se s!elen !sar
para detectar si @!bo >allo en la operaci%n" $a ;!e m!c@as interr!pciones
al acabar en >allo encienden el carr$ >la&.
:3C" :AE" :38 Otros tres ;!e Calen eFactamente para lo mismo. :!mp i>
not Carr$" :!mp i> AboCe or E;!al $ :!mp i> 3ot 8eloD. Saltan por tanto si
al @aber !na comparaci%n el >la& de acarreo Cale )" o sea" es e;!iCalente
al operador fI. En la comparaci%n CMP )") o CMP ('@"(*@ saltarG" $a ;!e el
se&!ndo operando es MAKOR O I5UAL ;!e el primero.
:4 o :E :!mp i> 4ero o :!mp i> E;!al. Salta si el >la& de cero estG a
(" o sea" si las dos instr!cciones comparadas son i&!ales. Saltar?a en el
caso CMP )")
:34 o :3E :!mp i> 3ot 4ero o :!mp i> 3ot E;!al. Salta si el >la& de cero
est a )" o sea" si las dos instr!cciones comparadas no son i&!ales.
:8E o :3A :!mp i> 8eloD or E;!al o :!mp i> 3ot AboCe. Saltar?a si en
res!ltado de la comparaci%n el primer miembro es menor o i&!al ;!e el
se&!ndo 6 eI 7
:A o :38E :!mp i> AboCe o :!mp i> 3ot 8eloD o> E;!al. :!sto lo contrario
;!e la anterior" salta si en el res!ltado de la comparaci%n el primer
miembro es ma$or al se&!ndo.
:S :!mp i> Si&n. Salta si el >la& de si&no estG a !no.
:3S :!mp i> 3ot Si&n. Salta si el >la& de si&no estG a cero.
:P" :PE :!mp i> Parit$ o :!mp i> Parit$ ECen. Salta si el >la& de
paridad estG a !no.
:3P" :PO :!mp i> 3ot Parit$" :!mp i> Parit$ Odd. Salta si el >la& de
paridad estG a cero.
:L" :35E :!mp i> Less" :!mp i> 3ot 5reater o> E;!al. Salta si en el
res!ltado de la comparaci%n" el primer n=mero es in>erior al se&!ndo" pero
con n=meros con si&no.
:5E" :3L :!mp i> 5reater or E;!al" :!mp i> 3ot Less. Salta si en el
res!ltado 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.
:LE" :35 :!mp i> LoDer or E;!al" :!mp i> 3ot 5reater. Salta si en el
res!ltado de la comparaci%n" el primer n=mero es menor o i&!al ;!e el
se&!ndo" pero con n=meros con si&no.
:5" :3LE :!mp i> 5reater" :!mp i> 3ot LoDer or E;!al. Salta si en el
res!ltado de la comparaci%n" el primer n=mero es ma$or ;!e el se&!ndo" para
n=meros con si&no.
1eamos al&!nos e<emplos de los mGs !tiliBados
MO1 A9"((((@
MO1 89"(((*@
CMP A9"89 Q A9 es menor ;!e 89
:8 tirapalante Q Saltar a tirapalante
HLT Q Esta orden blo;!ea el ordenador" @alt
tirapalante DEC 89 Q A@ora 89 Caldr ((((@
CMP A9"89 Q A@ora Calen i&!al
:3E Acaba Q 3o saltarG" $a ;!e son i&!ales
:E Contin!a Q Esta CeB si
Contin!a DEC 89 Q A@ora 89 Cale ((()@
CMP A9"89
:E Acaba Q 3o son i&!ales" por tanto no saltarG
:8 Acaba Q 3o es menor" tampoco salta
:5 Acaba Q Es ma$or" a@ora SI saltarG
Acaba 9OR A9"A9
9OR 89"89 Q A9 $ 89 Calen a@ora cero.
Espero ;!e con esto @a$a aclarado !n poco la !tilidad de los saltos.
ECidentemente" a@ora al escribir sabemos c!ando !no es menor o ma$or" pero
a Ceces mediante interr!pciones sacaremos Calores ;!e no conoceremos al ir
a pro&ramar" o ;!iBG lo @a&amos de la memoria" $ ;!erremos comprobar si
son i&!ales" etc#tera.
Por cierto" ;!e en los saltos condicionales se p!ede @acer como en los
incondicionales" o sea" >ormatos como
:E ))**@
:3E ))')@
:3O AL
Sin embar&o" estamos limitados a saltos cortos" o sea" de ran&o a (*-
b$tes @acia delante o (*, @acia atrGs" no p!diendo s!perar esta distancia.
I=ST&UI0=ES )E S/1T0 0=)II0=/1
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 6b!cle7
SintaFis LOOP desplaBamiento
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Decrementa el re&istro contador C9Q si C9 es cero" e<ec!ta la si&!iente
instr!cci%n" en caso contrario trans>iere el control a la direcci%n res!ltante de s!mar a IP
L desplaBamiento. El desplaBamiento debe estar comprendido entre J(*, $ L(*-.
E<emplo
mo$ cP,1/
&uc!e: .......
.......
!oop &uc!e
Con las mismas caracter?sticas ;!e la instr!cci%n anterior

LOOPEALOOP4 8!cle si i&!al" si cero. 4I( $ C9ef)

LOOP3EALOOP34 8!cle si no i&!al" si no cero. 4I) $ C9ef)
BUCLES
He a;!? el e;!iCalente al 2ORJTOJ3E9T en Ensamblador" se trata de la
orden LOOP. Lo ;!e @ace esta orden es comparar C9 con ceroQ si es i&!al"
si&!e adelante" si no lo es" C!elCe al l!&ar ;!e se indica en s! operando
decrementando C9 en !no. Por lo tanto" C9 serG !n contador de las Ceces
;!e @a de repetirse el b!cle. 1eamos !n e<emplo
MO1 C9")))/@
b!cle I3C D9
CMP D9"))))@
:E Acaba
LOOP b!cle
Acaba ...
1eamos como >!nciona este pro&rama. Se m!eCe a C9 el Calor /@" ;!e Can
a ser las Ceces ;!e se repita el b!cle. A@ora" lle&amos al c!erpo del b!cle.
Se incrementa D9 $ se compara con )" c!ando es i&!al salta a EAcabaE. Si
lle&a a la orden LOOP" C9 se decrementarG $ saltarG a b!cle. Esto se
repetirG cinco Ceces. En >in" ;!e el pro&rama acabarG en el &r!po de
instr!cciones de EAcabaE c!ando la comparaci%n d# !n res!ltado positiCo o
c!ando el b!cle se @a$a repetido cinco Ceces.
Tambi#n tiene la limitaci%n de ;!e s%lo realiBa saltos cortos" as? como
p!ede !sarse como el :MP" de la >orma
LOOP )))'@
LOOP MALN
En res!men" la orden LOOP es la e;!iCalente a CMP C9")A:34 par metro"
donde par metro es el operando de LOOP.
2.1; 0peradores 1gicos.
Operaciones l%&icas $ aritm#ticas
Las instr!cciones de las operaciones l%&icas son A3D" not" or $ For" #stas traba<an
sobre los bits de s!s operandos.
Para Ceri>icar el res!ltado de operaciones rec!rrimos a las instr!cciones cmp $ test.
Las instr!cciones !tiliBadas para las operaciones al&ebraicas son para s!mar add" para
restar s!b" para m!ltiplicar m!l $ para diCidir diC.
Casi todas las instr!cciones de comparaci%n estGn basadas en la in>ormaci%n contenida
en el re&istro de banderas. 3ormalmente las banderas de este re&istro ;!e p!eden ser
directamente manip!ladas por el pro&ramador son la bandera de direcci%n de datos D2"
!sada para de>inir las operaciones sobre cadenas. Otra ;!e tambien p!ede ser
manip!lada es la bandera I2 por medio de las instr!cciones sti $ cli" para actiCar $
desactiCar respectiCamente las interr!pciones.
5ttp7$$usuarios.lycos.es$patricio$ensam$ensam2.5tm
I3STRUCCIO3ES DE OPERACIO3ES LX5ICAS A 3I1EL DE 8IT.

A3D 6$ l%&ico7
SintaFis A3D destino" ori&en
Indicadores: ,< D< I< -< S< X< A< P< <
/ R R R P P 3 P /
RealiBa !na operaci%n de K l%&ico entre el operando ori&en $ destino
;!edando el res!ltado en el destino. Son CGlidos operandos b$te o palabra" pero ambos
del mismo tipo.
Ejemp!os: and aP,&P
and &!,&yte ptr es:?si"1/'@

3OT 6no l%&ico7
SintaFis 3OT destino
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
RealiBa el complemento a !no del operando destino" inCirtiendo cada !no de
s!s bits. Los indicadores no res!ltan a>ectados.
Ejemp!o: not aP

OR 6O l%&ico7
SintaFis OR destino" ori&en
Indicadores: ,< D< I< -< S< X< A< P< <
/ R R R P P 3 P /
RealiBa !na operaci%n O l%&ico a niCel de bits entre los dos operandos"
almacenGndose desp!#s el res!ltado en el operando destino.
Ejemp!o: or aP,&P

TEST 6comparaci%n l%&ica7
SintaFis TEST destino" ori&en
Indicadores: ,< D< I< -< S< X< A< P< <
/ R R R P P 3 P /
RealiBa !na operaci%n K l%&ica entre los dos operandos pero sin almacenar el
res!ltado. Los indicadores son a>ectados con la operaci%n.
Ejemp!o: test a!,&'

9OR 6O eFcl!siCo7
SintaFis 9OR destino" ori&en
Indicadores: ,< D< I< -< S< X< A< P< <
/ R R R P P 3 P /
Operaci%n OR eFcl!siCo a niCel de bits entre los operandos ori&en $ destino
almacenGndose el res!ltado en este =ltimo.
Ejemp!o: Por di,aP
@ttpAAmeltin&pot.>ort!necit$.comA!r!&!a$A+-,AlibroA)0.@tml
Instr%%iones $8gi%as 6 de "ani#$a%i8n de bits.
Las instr!cciones l%&icas e<ec!tan operaciones binarias sobre series de bits almacenadas
en re&istros. son =tiles para manip!lar bits indiCid!ales o !n &r!po de bits ;!e
represente in>ormaci%n en c%di&o binario. Las instr!cciones l%&icas consideran en
>orma separada cada bit del operando $ la tratan como !na Cariable booleana. Mediante
!na aplicaci%n adec!ada de las instr!cciones l%&icas" es posible cambiar los Calores de
bits" emplear !n es ;!e !n &r!po de bits o insertar n!eCos Calores de bits en los
operandos almacenados en re&istros o palabras de memoria.
Al&!nas instr!cciones l%&icas $ de manip!laci%n de bits t?picas se listan en la tabla ,J,.
La instr!cci%n de borrar @ace ;!e el operando especi>icado se s!stit!$a con ). La
instr!cci%n complementar prod!ce el complemento a ( al inCertir todos los bits del
operando. Las instr!cciones A3D" OR $ 9OR prod!cen las operaciones l%&icas
correspondientes sobre los bits indiCid!ales de los operandos. A!n;!e realiBan
operaciones booleanas" deben considerarse ;!e las instr!cciones e<ec!tan operaciones
de manip!laci%n de bits c!ando se !san en instr!cciones de comp!tadora. EFisten tres
operaciones de manip!laci%n de bits posibles !n bit seleccionado p!ede borrarse a )"
actiCarse en (" o p!ede complementarse. Por lo &eneral" se aplican las tres instr!cciones
l%&icas para @acer s%lo eso.
La instr!cci%n A3D se !tiliBa para borrar !n bit o !n &r!po seleccionado de bits de !n
operando. Para c!al;!ier Cariable booleana (! las relaciones ()* I ) $ ()+ I ( dictan
;!e !na Cariable binaria ala ;!e se le @a$a aplicado !n A3D con !n ) prod!ce !n )Q
pero la Cariable no cambia de Calor c!ando se le aplica !n A3D con !n (. Por lo tanto"
la instr!cci%n A3D p!ede !tiliBarse para borrar bits de !n operando en >orma selectiCa
al aplicar A3D al operando con otro operando ;!e tiene ) en las posiciones de bit ;!e
deben borrarse. La instr!cci%n A3D tambi#n se llama mGscara" $ aritm#tica por;!e
enmascara o inserta ) en !na parte seleccionada de !n operando.
La instr!cci%n OR se !tiliBa para actiCar !n bit o !n &r!po seleccionado de bits de !n
operando. Para c!al;!ier Cariable booleana (! las relaciones ( L ( I ( $ ( L ) I ( dictan
;!e !na Cariable binaria ala ;!e se le aplica OR con !n ( prod!ce !n (Q pero la Cariable
no cambia c!ando se .le aplica OR con !n ). Por lo tanto" la instr!cci%n OR p!ede
!tiliBarse para actiCar bits de !n operando en >orma selectiCa" al aplicar OR con otro
operando Con d?&itos ( en las posiciones de bits ;!e deben actiCarse en (.

TA8LA ,J, Instr!cciones l%&icas $ de manip!laci%n de bits t?picas

3OM8RE M3EMO3ICO
8orrar CLR
complementar COM
Aplicar la >!nci%n A3D A3D
Aplicar la >!nci%n OR OR
Aplicar la >!nci%n OR eFcl!siCa 9OR
DesactiCar acarreo CLRC
ActiCar acarreo SETC
Complementar acarreo COMC
Habilitar interr!pci%n EI
Des@abilitar interr!pci%n DI

De i&!al >orma" la instr!cci%n 9OR se !tiliBa para complementar bits de !n operando en
>orma selectiCa. Esto se debe a la relaci%n boolena (,-. (I (/ $ ( 6L7 ) I (. Por lo tanto"
!na Cariable binaria se complementa c!ando se le aplica 9OR con !n (" pero no cambia
en Calor c!ando se le aplica 9OR con !n ). En la secci%n 0J/ se m!estran e<emplos
n!m#ricos de las tres operaciones l%&icas.
En la tabla ,J, se incl!$en al&!nas otras instr!cciones de manip!laci%n de bits. Los bits
indiCid!ales 6como los de !n acarreo7 p!eden borrarse" actiCarse o complementarse con
las instr!cciones apropiadas. Otro e<emplo es !n >lipJ>lop ;!e controla la opci%n de
interr!pci%n $ se @abilita o des@abilita mediante instr!cciones de manip!laci%n de bits.
Ntt#0OO"e"bers.fortne%it6.esOro62O%#.Nt"
2.11 )espla2amiento.
8er arc5i+o7 algo@despla2amientos.pd!
I3STRUCCIO3ES DE ROTACIX3 K DESPLA4AMIE3TO.

RCL 6rotaci%n a la iB;!ierda con acarreo7
SintaFis RCL destino" contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R R R R R P
Rotar a la iB;!ierda los bits del operando destino <!nto con el indicador de
acarreo C2 el n=mero de bits especi>icado en el se&!ndo operando. Si el n=mero de bits
a desplaBar es (" se p!ede especi>icar directamente" en caso contrario el Calor debe
car&arse en CL $ especi>icar CL como se&!ndo operando. 3o es conCeniente ;!e CL
sea ma$or de -" en b$tesQ % (/" en palabras.
Ejemp!os: rc! aP,1
rc! a!,c!
rc! di,1

RCR 6rotaci%n a la derec@a con acarreo7
SintaFis 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 C2 el n=mero de bits especi>icado en el se&!ndo operando. Si el n=mero de bits
es ( se p!ede especi>icar directamenteQ en caso contrario s! Calor debe car&arse en CL $
especi>icar CL como se&!ndo operando
Ejemp!os: rcr &P,c!
rcr &P,1

ROL 6rotaci%n a la iB;!ierda7
SintaFis ROL destino" contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R R R R R P
Rota a la iB;!ierda los bits del operando destino el n=mero de bits especi>icado
en el se&!ndo operando" ;!e p!ede ser ( % CL preCiamente car&ado con el Calor del
n=mero de Ceces.
Ejemp!os: ro! dP,c!
ro! a',1

ROR 6rotaci%n a la derec@a7
SintaFis 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 p!ede poner directamente" en caso
contrario debe ponerse a traC#s de CL.
Ejemp!os: ror c!,1
ror aP,c!

SALASHL 6desplaBamiento aritm#tico a la iB;!ierda7
SintaFis SALASHL destino" contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P 3 P P
DesplaBa a la iB;!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 desplaBados.

SAR 6desplaBamiento aritm#tico a la derec@a7
SintaFis SAR destino" contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P 3 P P
DesplaBa 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 iB;!ierda se rellenan con el bit de
si&no del primer operando. Si el n=mero de bits a desplaBar es ( se p!ede especi>icar
directamente" si es ma$or se especi>ica a traC#s de CL.
Ejemp!os: sar aP,c!
sar &p,1

SHR 6desplaBamiento l%&ico a la derec@a7
SintaFis SHR destino" contador
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P 3 P P
DesplaBa 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 iB;!ierda se llena con cero. Si el
n=mero de bits a desplaBar es ( se p!ede especi>icar directamente en el caso en ;!e no
oc!rra se pone el Calor en CL
Ejemp!os: s'r aP,c!
s'r c!,1
@ttpAAmeltin&pot.>ort!necit$.comA!r!&!a$A+-,AlibroA)0.@tml
2.11.1 1ineal.
Instrucciones de corrimiento
Las instr!cciones para recorrer el contenido de !n operando son m!$ =tiles $ se o>recen
con >rec!encia en diCersas Cariaciones. Los corrimientos son operaciones en las c!ales
los bits de !na palabra se recorren a la iB;!ierda o derec@a. El bit ;!e se recorre al
eFtremo de la palabra determina el tipo de corrimiento ;!e !tiliBa. Las instr!cciones de
corrimiento p!eden especi>icar corrimientos l%&icos" aritm#ticos ! operaciones de tipo
rotatorio. En c!al;!ier caso" el corrimiento p!ede ser a la derec@a o a la iB;!ierda. "
La tabla ,J+ lista c!atro tipos de instr!cciones de corrimiento. El corrimiento l%&ico
inserta !n ) al de la posici%n >inal de bit. La posici%n >inal es el bit al eFtremo iB;!ierdo
para el corrimiento a la derec@a $ el bit al eFtremo derec@o para el corrimiento a la
iB;!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 0J..
La instr!cci%n aritm#tica de corrimiento a la derec@a debe preserCar el bit de si&no en la
posici%n al eFtremo iB;!ierdo. El bit de si&no se desplaBa ala derec@a.
TA8LA ,J+ Instr!cciones de corrimiento t?picas
3OM8RE M3EMO3ICO
Corrimiento a la derec@a l%&ico SHR
Corrimiento a la iB;!ierda l%&ico SHL
Corrimiento a la derec@a aritm#tico SHRA
Corrimiento a la iB;!ierda aritm#tico SHLA
Rotar a la derec@a ROR
Rotar a la iB;!ierda ROL
Rotar a la derec@a mediante acarreo RORC
Rotar a la iB;!ierda mediante acarreo ROLC
:!nto 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 instr!cci%n de
corrimiento aritm#tico a la iB;!ierda inserta ) en la posici%n >ina.g $ es id#ntica a la
instr!cci%n l%&ica de corrimiento a la iB;!ierda. Por esta raB%n m!c@as comp!tadoras
no proporcionan !na instr!cci%n distinta de corrimiento aritm#tico a la iB;!ierda c!ando
$a estG disponible la instr!cci%n de corrimiento l%&ico a la iB;!ierda.
Las instr!cciones de rotaci%n prod!cen !n corrimiento circ!lar. Los bits recorridos en
!n eFtremo de la palabra no se pierden en !n desplaBamiento l%&ico" pero se @acen
circ!lar @asta el otro eFtremo. La instr!cci%n de rotaci%n a traC#s del bit de acarreo trata
al bit de acarreo como !na eFtensi%n del re&istro c!$a palabra se estG rotando. Por lo
tanto !na instr!cci%n de rotaci%n ala iB;!ierda a traC#s del acarreo trans>iere el. bit de
acarreo a la posici%n de bit a la eFtrema derec@a del re&istro" trans>iere la posici%n de la
eFtrema iB;!ierda al acarreo $" al mismo tiempo" recorre todo el re&istro a la iB;!ierda.
Al&!nas comp!tadoras tienen !n >ormato de campo m=ltiple para las instr!cciones de
corrimiento. Un campo contiene el c%di&o de operaci%n $ los otros especi>ican el tipo de
corrimiento $ la cantidad de Ceces ;!e se Ca a recorrer !n operando. Un >ormato de
c%di&o de instr!cci%n posible de !na instr!cci%n de desplaBamiento p!ede incl!ir cinco
campos de la manera si&!iente.
OP RE5 TKPE RL COU3T
A;!? OP es el campo de c%di&o de operaci%nQ RE5 es !na direcci%n de re&istro ;!e
especi>ica la posici%n del operandoQ TKPE es !n campo de * bits ;!e especi>ica los
c!atro di>erentes tipos de corrimientosQ LR es !n campo de ( bit ;!e especi>ica !n
corrimiento a la derec@a o ala iB;!ierda $ COU3T es !n campo de 0 bits ;!e especi>ica
@asta 10 J( corrimientos. Con tal >ormato es posible especi>icar el tipo de corrimiento" la
direcci%n $ la cantidad de corrimientos" todo en !na sola instr!cci%n.
0&&I"IE=T0 )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&UI0= /1 0"E=T/&I0
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&UI0= /1 0"E=T/&I0
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 i2Euierda.
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&UI0= /1 0"E=T/&I0
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.
' &0T/I0= )E %ITS :)espla2amiento 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&UI0= %' 0"E=T/&I0
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 i2Euierda 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&UI0= %1 0"E=T/&I0
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$tem3@4@.5tm
3.1 ,rocesos de control.
3.1.1%anderas.
FLA?S
La eFplicaci%n de los E>la&sE estG relacionada con los saltos condicionales.
Los ;!e @a$Gis Cisto !n m?nimo de otros len&!a<es recordar#is las sentencias
2OR $ 3E9T 6en 8asic7" o el I2ATHE3AELSE tambi#n en estilo 8asic pero ;!e
tambi#n se enc!entran en otros len&!a<es. P!es bien" los >la&s $ las instr!cciones
condicionales Ca a ser lo ;!e os encontr#is en este cap?t!lo.
1eamos el re&istro de >la&s.
A las >la&s" EbanderasE" las a&r!pa !n solo re&istro de (. bits" a!n;!e
#ste no est# !tiliBado por completo" $a ;!e cada >la& oc!pa !n solo bit.
ZS!# son los >la&s`
Se trata de Carios bits" ;!e" como siempre" p!eden Caler !no o cero" $
dependiendo de s! Calor indican Carias cosas. El re&istro de >la&s es como
si&!e
h d h d h d h d h O h D h I h T h S h 4 h d h A h d h P h d h C h
O OCer>loD D Direcci%n I Interr!pciones re@abilitadas
T Trampa S Si&no 4 Cero
A Acarreo a!Filiar P Paridad C Acarreo d 3o !tiliBado
Cada c!adro representa !n bit como es >Gcil adiCinar. Tambi#n estG claro ;!e
cada bit ;!e se !tiliBa tiene !n nombre" $ como se CerG" tambi#n
!na !tilidad. A;!? eFplico el si&ni>icado de los
mGs importantes
EL FLA? DE ACARREO
Ha$ Ceces 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
A9 el n=mero )2222@ $ le s!mamos )CCCC@. Como es l%&ico" el res!ltado no nos
cabrG en A9. Al realiBar esta s!ma" tenemos ;!e tener en c!enta ;!e el
si&!iente n=mero a )2222@ es ))))@" con lo ;!e podremos Cer el res!ltado.
I&!al pasarG si a ))))@ le restamos" por e<emplo" ( 6el res!ltado serG
)2222@7. Pero de al&!na manera nos tenemos ;!e DAR CUE3TA de ;!e esto @a
s!cedido.
C!ando se opera $ @a$ acarreo en el =ltimo bit sobre el ;!e se @a
operado" el >la& de acarreo se pone a !no" es decir" c!ando ese n=mero se @a
desbordado. Ha$ ;!e recordar tambi#n ;!e las instr!cciones I3C $ DEC no
a>ectan a este >la&. 1eamos los e>ectos de estas operaciones
MO1 A9")2222@
I3C A9 Q A9 Cale a@ora )" el >la& de acarreo tambi#n
DEC A9 Q A9 Cale )2222@" $ el >la& si&!e inalterado
ADD A9"( Q A9 Cale )" $ el >la& de acarreo estG a (
MO1 89"))))@
ADD 89"/)@ Q El >la& de acarreo se pone a )" no @a @abido
Qacarreo en esta operaci%n
SU8 A9"( Q A@ora A9 Cale otra CeB )2222@" $ el >la& de acarreo
Qse pone de n!eCo a !no.
En res!men" se actiCa c!ando tras !na operaci%n @a$ !n paso del Calor
mGFimo al m?nimo o CiceCersa.
Este >la& nos Ca a ser tambi#n =til al comprobar errores" etc. Por
e<emplo" si b!scamos el primer arc@iCo del directorio $ no @a$ nin&!no"
este >la& se actiCarG" con lo ;!e podremos !sar los saltos condicionales"
pero esto $a se eFplicarG mGs adelante.
EL FLA? DE SI?NO
A Ceces interesa conocer c!Gndo !n n=mero con si&no es ne&atiCo o positiCo.
ECidentemente" esto s%lo tiene e>ecto c!ando estamos tratando
con n=meros enteros con si&no" en complemento a dos. Indica c!ando tras !na
operaci%n aritm#tica 6ADD" SU8" I3C" DEC o 3E5 o l%&ica 6A3D" OR o 9OR7
el res!ltado 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 c!Gndo el n=mero es ne&atiCo.
Por lo tanto" c!ando Cale ( es ;!e el n=mero es ne&atiCo $ si Cale ) es
;!e es positiCo.
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 actiCa c!ando se pasa del ma$or n=mero
positiCo 6(*- en !n solo b$te7 al menor ne&atiCo 6J(*, en tamaHo de !n
b$te7.
Este >la&" al contrario ;!e el de acarreo" SI es a>ectado por las
instr!cciones de decremento e incremento.
EL FLA? DE CERO
Es de los mGs sencillos de comprender. Simplemente se actiCa c!ando el
res!ltado de !na operaci%n aritm#tica o l%&ica es cero. Es eCidente la &ran !tilidad del
>la&.
Tenemos" por e<emplo" dos re&istros" A9 $ C9" ;!e ;!eremos comparar para saber si
son i&!ales.
Para saberlo" no tendr?amos mGs ;!e restar !no del otro" $ si el res!ltado
es cero 6o sea" si el >la& de cero se pone en !no7" podremos @acer !n
salto condicional.
O sea" de !n
SU8 C9"A9
Si son i&!ales" el >la& de cero se pondrG a !no.
EL FLA? DE 7ARIDAD
Se !tiliBa especialmente en la transmisi%n de datos para la comprobaci%n
de errores" $a ;!e compr!eba si el res!ltado de la =ltima operaci%n
aritm#tica o l%&ica realiBada tiene !n n=mero par o impar de bits p!estos
a !no. Se pondrG a !no c!ando @a$a !n n=mero par de bits" $ a cero c!ando
sea impar.
RESTO DE FLA?S
3o describir# mGs >la&s detalladamente" $a ;!e s! importancia es casi
n!laQ por e<emplo estG el >la& de interr!pci%n" ;!e" c!ando estG actiCado"
eCita la posibilidad de interr!pciones en secciones cr?ticas de c%di&o" o
el de trampa" ;!e c!ando estG actiCado proCoca !na I3T (@ cada CeB ;!e se
e<ec!ta otra instr!cci%n" pero creo ;!e s! inter#s es escaso" al menos por
el momento.
3.1.2adenas.
INSTRUCCIONES DE CADENA
Son !n s!bcon<!nto de instr!cciones m!$ =tiles para diCersas >!nciones
inicialiBar Bonas de memoria" copiar datos de !na Bona a otra" encontrar
Calores determinados o comparar cadenas" etc." etc.
S! comportamiento depende del >la& de direcci%n del ;!e @ablGbamos !nas
lecciones mGs atrGs" $ ;!e se p!ede cambiar directamente con estas dos
instr!cciones
STD SeT Direction >la&" lo pone a !no.
CLD CLear Direction >la&" lo pone a cero.
Las instr!cciones ;!e Camos a !sar como de cadena siempre tienen !na S
de Strin& al >inal" $ casi siempre ademGs !na 8 o !na Y indicando 8$te o
Yord 6el tamaHo7.
K estas son
LODS8ALODSY
Lee !n b$teApalabra en la direcci%n de memoria dada por DSSI $ la
almacena dependiendo de s! tamaHo en AL o A9. Si el >la& de direcci%n estG
a cero" se&=n sea b$te o palabra" SI a!mentarG en ( o * !nidades 6para
poder contin!ar la operaci%n de lect!ra7. Si estG a !no el >la&" se
decrementarG en ( o * !nidades dependiendo del tamaHo 6b$teApalabra7
STOS8ASTOSY
Es el e;!iCalente a E&rabarE si lo anterior era Ecar&arE. AlmacenarG el
contenido de AL o A9 6como siempre" dependiendo del tamaHo 7 en ESDI"
copiando se&=n si es 8 o Y !no o dos b$tes cada CeB ;!e se e<ec!te.
Si el >la& de direcci%n estG a cero" DI a!mentarG cada CeB ;!e se
realice la orden en !na o dos !nidades 6dependiendo del tamaHo" 8 o Y 7.
Si estG a !no" decrecerG.
MO1S8AMO1SY
M!eCe el b$te o palabra contenido en la direcci%n de memoria a la ;!e
ap!nta DSSI a la direcci%n de memoria de ESDI.
Si el >la& de direcci%n estG a )" con cada MO1S ;!e realicemos SI $ DI
a!mentarGn en !na !nidad 6MO1S87 o dos 6MO1SY7. Si estG a !no" se
decrementarGn de i&!al manera.
REP
Acabo de @ablar sobre #l. P!es bien" si se !tiliBa como operando s!$o
!na de estas %rdenes" la repetirG C9 Ceces. Por e<emplo" si ;!eremos
copiar la tabla de Cectores de interr!pci%n a !n l!&ar ;!e @emos
reserCado
cld Q A ase&!rarnos de ;!e el >la& de direcci%n estG.
Qa cero.
moC cF"0))@
For dF"dF Q pone dF a )
p!s@ dF
pop ds Q 3o estG permitido @acer For ds"ds" por lo ;!e
Qmetemos dF" ;!e Cale )" en la pila" $ sacamos
QDS Caliendo ).
For si"si Q SI ;!e Cal&a ).
p!s@ cs
pop es Q 1amos a ase&!rarnos de ;!e ES Cal&a CS" o sea"
Qel se&mento en el ;!e estG el pro&rama a@ora.
moC di"b!>>er Q DI ap!nta al l!&ar donde Camos a &!ardar la
Qtabla.
rep moCsb Q Repite _esto 0))@ Ceces" $ cada CeB ;!e lo @ace
Qincrementa DI $ SI.
int *)@ Q Acaba la e<ec!ci%n.
b!>>er db 0))@ d!p 6`7 Q Esto de<a !n espacio de 0))@ b$tes ;!e nos
QCa a serCir para almacenar la tabla de
QCectores de interr!pci%n.
Podemos" para empeBar" red!cir el 0))@ a *))@ en C9" $ @acer !n rep moCsD"
con lo ;!e trasladaremos de palabra en palabra las instr!cciones.
I3STRUCCIO3ES DE MA3IPULACIX3 DE CADE3AS.

CMPSACMPS8ACMPSY 6compara cadenas7
SintaFis CMPS cadenaWdestino" cadenaWori&en
CMPS8 6b$tes7
CMPSY 6palabras7
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. 3in&!no de los operandos
se alteran" pero los indicadores res!ltan 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 eFtra ES. Los re&istros DI $ SI se a!toincrementan o
a!todecrementan se&=n el Calor del indicador D2 6C#anse CLD $ STD7 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 red!ndantes ;!e s%lo indican el tipo del dato 6b$te o
palabra7 a comparar" es mGs c%modo colocar CMPS8 o CMPSY para indicar
b$tesApalabras. Si se indica !n re&istro de se&mento" #ste s!stit!irG en la cadena ori&en
al DS ordinario. E<emplo
!ea si,origen
!ea di,destino
cmps&

LODSALODS8ALODSY 6car&ar cadena7
SintaFis LODS cadenaWori&en
LODS8 6b$tes7
LODSY 6palabras7
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Copia en AL o A9 !na cadena de lon&it!d b$te o palabra direccionada sobre
el se&mento de datos 6DS7 con el re&istro SI. Tras la trans>erencia" SI se incrementa o
decrementa se&=n el indicador D2 6C#anse CLD $ STD7 en !na o dos !nidades" se&=n
se est#n mane<ando b$tes o palabras. Cadena2or#gen es !n operando red!ndante ;!e
s%lo indica el tipo del dato 6b$te o palabra7 a car&ar" es mGs c%modo colocar LODS8 o
LODSY para indicar b$tesApalabras.
Ejemp!o: c!d
!ea si,origen
!ods&

MO1SAMO1S8AMO1SY 6moCer cadena7
SintaFis MO1S cadenaWdestino" cadenaWori&en
MO1S8 6b$tes7
MO1SY 6palabras7
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 DSSI a
la cadena destino direccionada por ESDI" incrementando o decrementando a
contin!aci%n los re&istros SI $ DI se&=n el Calor de D2 6C#anse CLD $ STD7 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 red!ndantes ;!e s%lo indican el tipo del dato 6b$te o
palabra7 a comparar" es mGs c%modo colocar MO1S8 o MO1SY para indicar
b$tesApalabras. Si se indica !n re&istro de se&mento" #ste s!stit!irG en la cadena ori&en
al DS ordinario.
Ejemp!o: !ea si,origen
!ea di,destino
mo$sY

SCASASCAS8ASCASY 6eFplorar cadena7
SintaFis SCAS cadenaWdestino
SCAS8 6b$tes7
SCASY 6palabras7
Indicadores: ,< D< I< -< S< X< A< P< <
P R R R P P P P P
Resta de A9 o AL !na cadena destino direccionada por el re&istro DI sobre el
se&mento eFtra. 3in&!no de los Calores es alterado pero los indicadores se Cen
a>ectados. DI se incrementa o decrementa se&=n el Calor de D2 6C#anse CLD $ STD7 en
!na o dos !nidades Jse&=n se est# traba<ando con b$tes o palabrasJ para ap!ntar al
si&!iente elemento de la cadena. Cadena2dest#no es !n operando red!ndante ;!e s%lo
indica el tipo del dato 6b$te o palabra7" es mGs c%modo colocar SCAS8 o SCASY para
indicar b$tesApalabras.
Ejemp!o: !ea di,destino
mo$ a!,O/
scas&

STOSASTOS8ASTOSY 6almacena cadena7
SintaFis STOS cadenaWdestino
STOS8 6b$tes7
STOSY 6palabras7
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Trans>iere el operando ori&en almacenado en A9 o AL" al destino
direccionado por el re&istro DI sobre el se&mento eFtra. Tras la operaci%n" DI se
incrementa o decrementa se&=n el indicador D2 6C#anse CLD $ STD7 para ap!ntar al
si&!iente elemento de la cadena. Cadena2dest#no es !n operando red!ndante ;!e s%lo
indica el tipo del dato 6b$te o palabra7 a car&ar" es mGs c%modo colocar STOS8 o
STOSY para indicar b$tesApalabras.
Ejemp!o: !ea di,destino
mo$ aP,1HH1
stosY

REPAREPEAREP4AREP3EAREP34 6repetir7
REP repetir operaci%n de cadena
REPEAREP4 repetir operaci%n de cadena si i&!alAsi cero
REP3EAREP34 repetir operaci%n de cadena si no i&!al 6si no )7
Estas instr!cciones se p!eden colocar como pre>i<o de otra instr!cci%n de
mane<o de cadenas" con ob<eto de ;!e la misma se repita !n n=mero determinado de
Ceces incondicionalmente o @asta ;!e se Ceri>i;!e al&!na condici%n. El n=mero de
Ceces se indica en C9. Por sentido com=n s%lo deben !tiliBarse 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
(7 8!scar el b$te .+ entre las *)) primeras posiciones de ta)la 6se s!pone
ta)la en el se&mento ES7
8EA DI,ta&!a
M,; *,D//
M,; A8,4H
8D
REP#E SAS+
:E encontrado
*7 Rellenar de ceros /))) b$tes de !na tabla colocada en datos 6se s!pone
datos en el se&mento ES7
8EA DI,datos
M,; A*,/
M,; *,DO//
8D
REP S-,S2
'7 Copiar la memoria de pantalla de teFto 6adaptador de color7 de !n PC en !n
b!>>er 6se s!pone )u%%er en el se&mento ES7
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
@ttpAAmeltin&pot.>ort!necit$.comA!r!&!a$A+-,AlibroA)0.@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 $.
I3STRUCCIO3ES DE CAR5A DE RE5ISTROS K DIRECCIO3ES.

MO1 6trans>erencia7
SintaFis MO1 dest" ori&en.
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Trans>iere datos de lon&it!d b$te o palabra del operando ori&en al operando
destino. P!eden ser operando ori&en $ operando destino c!al;!ier re&istro o posici%n de
memoria direccionada de las >ormas $a Cistas" con la =nica condici%n de ;!e ori&en $
destino ten&an la misma dimensi%n. EFisten ciertas limitaciones" como ;!e los re&istros
de se&mento no admiten el direccionamiento inmediato es incorrecto MO1 DS"0)))@Q
pero no lo es por e<emplo MO1 DS"A9 o MO1 DS"1ARIA8LE. 3o es posible" as?
mismo" !tiliBar CS como destino 6es incorrecto @acer MO1 CS"A9 a!n;!e p!eda
admitirlo al&=n ensamblador7. Al @acer MO1 @acia !n re&istro de se&mento" las
interr!pciones ;!edan in@ibidas @asta des#Ms de e<ec!tarse la si&!iente instr!cci%n
6,),.A,, de (+,' $ procesadores posteriores7.
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 Calor de la Cariable dato sino s!
direcci%n de memoria o desplaBamiento respecto al se&mento de datos. En otras
palabras" SI es !n p!ntero a dato pero no es dato. En el pr%Fimo cap?t!lo se CerG c%mo
se declaran las Cariables.

9CH5 6intercambiar7
SintaFis 9CH5 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. 3o p!eden
!tiliBarse re&istros de se&mentos como operandos.
Ejemp!o: Pc'g &!,c'
Pc'g mem7pa!,&P

9LAT 6trad!cci%n7
SintaFis 9LAT tabla
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Se !tiliBa para trad!cir !n b$te del re&istro AL a !n b$te tomado de la tabla de
trad!cci%n. Los datos se toman desde !na direcci%n de la tabla correspondiente a 89 L
AL" donde bF es !n p!ntero a el comienBo de la tabla $ AL es !n ?ndice. Indicar ta)la al
lado de Flat es s%lo !na red!ndancia opcional.
Ejemp!o: mo$ &P,o%%set ta&!a
mo$ a!,.
P!at

LEA 6car&a direcci%n e>ectiCa7
SintaFis LEA destino" ori&en
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Trans>iere el desplaBamiento del operando >!ente al operando destino. Otras
instr!cciones p!eden a contin!aci%n !tiliBar el re&istro como desplaBamiento para
acceder a los datos ;!e constit!$en el ob<etiCo. El operando destino no p!ede ser !n
re&istro de se&mento. En &eneral" esta instr!cci%n es e;!iCalente a 3O&
dest#no!O44SE %uente $ de @ec@o los b!enos ensambladores 6TASM7 la codi>ican
como MO1 para economiBar !n b$te de memoria. Sin embar&o" LEA es en al&!nos
casos mGs potente ;!e MO1 al permitir indicar re&istros de ?ndice $ desplaBamiento
para calc!lar el o>>set
!ea dP,datos?si@
En el e<emplo de arriba" el Calor depositado en D9 es el o>>set de la eti;!eta
datos mGs el re&istro SI. Esa sola instr!cci%n es e;!iCalente a estas dos
mo$ dP,o%%set datos
add dP,si

LDS 6car&a !n p!ntero !tiliBando DS7
SintaFis LDS destino" ori&en
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Traslada !n p!ntero de '* bits 6direcci%n completa de memoria comp!esta por
se&mento $ desplaBamiento7" al destino indicado $ a DS. A partir de la direcci%n
indicada por el operando ori&en" el procesador toma 0 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 res!ltado de esta instr!cci%n" en DSSI se @ace re>erencia a la posici%n
de memoria (*'0@/.-,@Q \dd\ sirCe para de>inir !na Cariable lar&a de 0 b$tes
6denominada punt en el e<emplo7 $ serG eFplicado en el cap?t!lo si&!iente.

LES 6car&a !n p!ntero !tiliBando ES7
SintaFis LES destino" ori&en
Esta instr!cci%n es anGlo&a a LDS" pero !tiliBando ES en l!&ar de DS.

LAH2 6car&a AH con los indicadores7
SintaFis LAH2
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R R R R R R
Car&a los bits -" ." 0" * $ ) del re&istro AH con el contenido de los indicadores
S2" 42" A2" P2 K C2 respectiCamente. El contenido de los demGs bits ;!eda sin de>inir.

SAH2 6copia AH en los indicadores7
SintaFis SAH2
Indicadores: ,< D< I< -< S< X< A< P< <
R R R R P P P P P
Trans>iere el contenido de los bits -" ." 0" * $ ) a los indicadores S2" 42" A2"
P2 $ C2 respectiCamente.
5ttp7$$ing.utalca.cl$\!me2a$cursos$cyp$tema3.pd!
(. La instr!cci%n load ,cargar. se @a !sado principalmente para desi&nar !na
trans>erencia de memoria a!n re&istro de pro&ramaci%n" por lo &eneral !n
ac!m!lador. La instr!cci%n store ,almacenar. representa !na trans>erencia de !n
re&istro de procesador a la memoria. La instr!cci%n moC ,mo"er. se @a !sado en
las comp!tadoras 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 instr!cci%n
eFc@an&e ,#ntercam)#ar. cambia la in>ormaci%n entre dos re&istros o !n re&istro
$ !na palabra de memoria. Las instr!cciones inp!t ,#ntroduc#r. $ o!tp!t ,sacar.
trans>ieren datos entre re&istros del procesador $ terminales de entrada o salida.
Las instr!cciones p!s@ ,empu5ar. $ pop ,saltar. trans>ieren datos entres re&istros
del procesador $ !na pila de memoria.
Debe recordarse ;!e las instr!cciones ;!e se listan en la tabla ,J/" al i&!al ;!e
en las tablas si&!ientes en esta secci%n" con >rec!encia estGn asociadas con
diCersos modos de direccionamiento. Al&!nas normas del len&!a<e ensamblador
modi>ican el s?mbolo mnem%nico para di>erenciar entre los diCersos modos de
direccionamiento. Por e<emplo" el mnem%nico para

TA8LA ,J/ Instr!cciones de trans>erencia de datos t?pica
3ombre Mnem%nico
Car&ar LD
Almacenar ST
MoCer MO1
Intercambiar 9CH
Entrada I3
Salida OUT
Emp!<ar PUSH
Saltar POP








TA8LA ,J. Oc@o modos de direccionamiento para la introd!cci%n car&ar

"odo on+encin en ensamblador Trans!erencia de registros
)ireccionamiento directo 1) /)& / ? "U"U/)&VV
)ireccionamiento indirecto 1) Q /)& / ? "U"U/)&VV
)ireccionamiento relati+o 1) P /)& / ? "U, I/)&V
0perando inmediato 1) A =%& / ? =%&
)ireccionamiento inde4ado 1) /)& :9< / ? "U/)&I 9&V
&egistro 1) &1 / ? &1
Indirecto por registro 1) :&1< / ? " U&1V
/utoincremento 1) :&1< I / ? "U&1V- &1 ? &1 I 1
Cargar de #nmed#ato se conCierte en LDI. Otras normas del len&!a<e
ensamblador !tiliBan !n carGcter especial para asi&nar el modo de
direccionamieto. Por e<emplo" el modo inmediato se reconoce por !n si&no i
colocado antes del operando. En c!al;!ier caso" lo importante es entender ;!e
cada instr!cci%n p!ede oc!rrir con diCersos modos de direccionamiento. Como
e<emplo" consideremos la instr!cci%n cargar al acumulador c!ando se !sa con
oc@o modos de direccionamiento di>erentes. La tabla ,J. m!estra la conCenci%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" 9 es
!n re&istro de ?ndice" Rl es !n re&istro de procesador" $ AC es el re&istro
ac!m!lador. El carGcter , simboliBa !na direcci%n indirecta. El carGcter j antes
de !na direcci%n @ace el direccionamiento relatiCo al contador de pro&rama PC.
El carGcter j precede al operando en !na instr!cci%n de modo inmediato. Una
instr!cci%n de modo indeFado 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 simboliBa 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 a!toincremento se distin&!e del modo indirecto por
re&istro al colocar !n si&no de mGs desp!#s del re&istro entre par#ntesis. A s!
CeB el modo de a!todecremento !tiliBar?a !n si&no de menos. Para poder escribir
pro&ramas del len&!a<e ensamblador para !na comp!tadora es necesario conocer
el tipo de instr!cciones disponibles $ tambi#n estar >amiliariBado con .(os
modos de direccionamiento !tiliBados en la comp!tadora partic!lar.
5ttp7$$members.!ortunecity.es$royH$cpu.5tm
Unidad *. "odulari!acin
3.3 "acros.
MACROS.
C!ando !n con<!nto de instr!cciones en ensamblador aparecen >rec!entemente
repetidas a lo lar&o de !n listado" es conCeniente a&r!parlas ba<o !n nombre simb%lico
;!e las s!stit!irG en a;!ellos p!ntos donde apareBcan. Esta es la misi%n de las macrosQ
por el @ec@o de soportarlas el ensamblador eleCa s! cate&or?a a la de
macroensamblador" al ser las macros !na @erramienta m!$ cotiBada por los
pro&ramadores.
3o conCiene con>!ndir las macros con s!br!tinas es estas =ltimas" el con<!nto de
instr!cciones aparece !na sola CeB en todo el pro&rama $ l!e&o se inCoca con CALL.
Sin embar&o" cada CeB ;!e se re>erencia a !na macro" el c%di&o ;!e #sta representa se
e(pande en el pro&rama de>initiCo" d!plicGndose tantas Ceces como se !se la macro. Por
ello" a;!ellas tareas ;!e p!edan ser realiBadas con s!br!tinas siempre serG mGs
conCeniente realiBarlas con las mismas" con ob<eto de economiBar memoria. Es cierto
;!e las macros son al&o mGs rGpidas ;!e las s!br!tinas 6se a@orra !n CALL $ !n RET7
pero la di>erencia es tan m?nima ;!e en la prGctica es despreciable en el ++"++k de los
casos. Por ello" es abs!rdo e irracional realiBar ciertas tareas con macros ;!e p!eden ser
desarrolladas m!c@o mGs e>icientemente con s!br!tinas es !na pena ;!e en m!c@os
man!ales de ensamblador a=n se @able de macros para realiBar operaciones sobre
cadenas de caracteres" ;!e &enerar?an pro&ramas &i&antescos con menos de !n (k de
Celocidad adicional.
/.0.(. J DE2I3ICIX3 K 8ORRADO DE LAS MACROS.
La macro se de>ine por medio de la directiCa MACRO. Es necesario de>inir la macro
antes de !tiliBarla. Una macro p!ede llamar a otra. Con >rec!encia" las macros se
colocan <!ntas en !n >ic@ero independiente $ l!e&o se meBclan en el pro&rama principal
con la directiCa I3CLUDE
I<1
I#8(DE %ic'ero.ePt
E#DI<
La sentencia I2( ase&!ra ;!e el ensamblador lea el >ic@ero >!ente de las macros s%lo
en la primera pasada" para acelerar el ensambla<e $ eCitar ;!e apareBcan en el listado
6&enerado en la se&!nda >ase7. ConCiene @acer @incapi# en ;!e la de>inici%n de la macro
no cons!me memoria" por lo ;!e en la prGctica 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 permitirG en adelante @acer re>erencia a la macro" $ se
constr!$e casi con las mismas re&las ;!e los nombres de las Cariables $ demGs
s?mbolos. La macro p!ede contener parGmetros de manera opcional. A contin!aci%n
Cienen las instr!cciones ;!e en&loba $" >inalmente" la directiCa E3DM seHala el >inal de
la macro. 3o se debe repetir el nombre simb%lico <!nto a la directiCa E3DM" ello
proCocar?a !n error !n tanto c!rioso $ eFtraHo por parte del ensamblador 6al&o as? como
l2in del >ic@ero >!ente inesperado" >alta directiCa E3Dm7" al menos con MASM /.) $
TASM *.).
En realidad" $ a di>erencia de lo ;!e s!cede con los demGs s?mbolos" el nombre de
!na macro p!ede coincidir con el de !na instr!cci%n mG;!ina o !na directiCa del
ensamblador a partir de ese momento" la instr!cci%n o directiCa mac$acada pierde s!
si&ni>icado ori&inal. El ensamblador darG ademGs !n aCiso de adCertencia si se emplea
!na instr!cci%n o directiCa como nombre de macro" a!n;!e tolerarG la operaci%n.
3ormalmente se las asi&narG nombres normales" como a las Cariables. Sin embar&o" si
al&!na CeB se rede>iniera !na instr!cci%n mG;!ina o directiCa" para resta!rar el
si&ni>icado ori&inal del s?mbolo" la macro p!ede ser borrada Jo simplemente por;!e $a
no Ca a ser !sada a partir de cierto p!nto del listado" $ as? $a no cons!mirG espacio en
las tablas de macros ;!e mantiene en memoria el ensamblador al ensamblarJ. 3o es
necesario borrar las macros antes de rede>inirlas. Para borrarlas" la sintaFis es la
si&!iente
PUR5E nombreWsimb%licoM"nombreWsimb%lico"...N
/.0.*. J E:EMPLO DE U3A MACRO SE3CILLA.
Desde el *,. eFiste !na instr!cci%n m!$ c%moda ;!e introd!ce en la pila , re&istros"
$ otra ;!e los saca 6PUSHA $ POPA7. S!ien est# acost!mbrado a emplearlas" p!ede
crear !nas macros ;!e sim!len estas instr!cciones 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 anGlo&a" sacando los re&istros en orden inCerso. El
orden ele&ido no es por capric@o $ se corresponde con el de la instr!cci%n PUSHA
ori&inal" para compatibiliBar. A partir de la de>inici%n de esta macro" tenemos a n!estra
disposici%n !na nue"a #nstrucc#7n m8qu#na 6SUPERPUSH7 ;!e p!ede ser !sada con
libertad dentro de los pro&ramas.

/.0.'. J PARnMETROS 2ORMALES K PARnMETROS ACTUALES.
Para ;!ien no @a$a tenido relaci%n preCia con al&=n len&!a<e estr!ct!rado de alto
niCel" @ar# !n breCe comentario acerca de lo ;!e son los parGmetros >ormales $ act!ales
en !na macro" similar a;!? a los procedimientos de los len&!a<es de alto niCel.
C!ando se llama a !na macro se le p!eden pasar opcionalmente !n cierto n=mero de
parGmetros de cierto tipo. Estos parGmetros se denominan par8metros actuales. En la
de>inici%n de la macro" dic@os parGmetros aparecen asociados a ciertos nombres
arbitrarios" c!$a =nica misi%n es permitir distin&!ir !nos parGmetros de otros e indicar
en ;!# orden son entre&ados son los par8metros %ormales. C!ando el ensamblador
eFpanda la macro al ensamblar" los parGmetros >ormales serGn s!stit!idos por s!s
correspondientes parGmetros act!ales. 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" lam" lbm $ ltotalm son los parGmetros >ormales $ lpositiCosm"
lne&atiCosm $ ltotalm son los parGmetros act!ales. Tanto lam como lbm p!eden ser
Cariables" eti;!etas" etc. en otro p!nto del pro&ramaQ sin embar&o" dentro de la macro"
se comportan de manera independiente. El parGmetro >ormal ltotalm @a coincidido en el
e<emplo $ por cas!alidad con s! correspondiente act!al. El c%di&o ;!e &enera el
ensamblador al eFpandir la macro serG el si&!iente
P(S) A*
M,; A*,positi$os
ADD A*,negati$os
M,; tota!,A*
P,P A*
Las instr!cciones PUSH $ POP sirCen para no alterar el Calor de A9 $ conse&!ir ;!e
la macro se comporte como !na ca5a negraQ no es necesario ;!e esto sea as? pero es !na
b!ena cost!mbre de pro&ramaci%n para eCitar ;!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 c!Gles.
Si se indican mGs parGmetros de los ;!e !na macro necesita" se i&norarGn los
restantes. En cambio" si >altan" el MASM as!mirG ;!e son n!los 6)7 $ darG !n mensa<e
de adCertencia" el TASM es al&o mGs r?&ido $ podr?a dar !n error. En &eneral" se trata
de sit!aciones at?picas ;!e deben ser eCitadas.
Tambi#n p!ede darse el caso de ;!e no sea posible eFpandir la macro. En el e<emplo"
no @!biera sido posible e<ec!tar SUMAR A9"89"DL por;!e DL es de , bits $ la
instr!cci%n MO1 DL"A9 ser?a ile&al.
/.0.0. J ETISUETAS DE3TRO DE MACROS. 1ARIA8LES LOCALES.
Son necesarias normalmente para los saltos condicionales ;!e conten&an las macros
mGs comple<as. Si se pone !na eti;!eta a donde saltar" la macro s%lo podr?a ser
empleada !na CeB en todo el pro&rama para eCitar ;!e dic@a eti;!eta apareBca
d!plicada. La sol!ci%n estG en emplear la directiCa LOCAL ;!e @a de ir colocada <!sto
desp!#s de la directiCa 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 inCocar la macro dos Ceces el ensamblador no &enerarG la eti;!eta
l$aWestam sino las eti;!etas ``))))" ``)))(" ... $ as? s!cesiCamente. La directiCa
LOCAL no s%lo es =til para los saltos condicionales en las macros" tambi#n permite
declarar Cariables internas a los mismos. Se p!ede indicar !n n=mero casi inde>inido de
eti;!etas con la directiCa LOCAL" separGndolas por comas.
/.0./. J OPERADORES DE MACROS.
a Operador QQ
Indica ;!e lo ;!e Ciene a contin!aci%n es !n comentario ;!e no debe aparecer al
eFpansionar la macro. C!ando al ensamblar se &enera !n listado del pro&rama" las
macros s!elen aparecer eFpandidas en los p!ntos en ;!e se inCocanQ sin embar&o s%lo
aparecerGn los comentarios normales ;!e comiencen por 6Q7. Los comentarios
relacionados con el >!ncionamiento interno de la macro deber?an ir con 6QQ7" los relatiCos
al !so $ sintaFis de la misma con 6Q7. Esto es ademGs conCeniente por;!e d!rante el
ensambla<e son mantenidos en memoria los comentarios de macros 6no los del resto del
pro&rama7 ;!e comienBan por 6Q7" $ no conCiene desperdiciar memoria...
a Operador o
UtiliBado para concatenar teFto o s?mbolos. Es necesario para lo&rar ;!e el
ensamblador s!stit!$a !n parGmetro 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<ec!tar SALUDO A se prod!cirG la si&!iente eFpansi%n
M,; A8,[A[
etiquetaA: A88 imprimir
Si no se @!biera colocado el o se @!biera eFpandido como MO1 AL"EcE
C!ando se !tiliBan estr!ct!ras repetitiCas REPT" IRP o IRPC 6;!e se CerGn mGs
adelante7 eFiste !n problema adicional al intentar crear eti;!etas" $a ;!e el ensamblador
se come !n o al @acer la primera s!stit!ci%n" &enerando la misma eti;!eta a menos ;!e
se d!pli;!e el operador o
MEM,RIA MAR, P
IRP i, ]1, D^
P\i D+ i
E#DM
E#DM
Si se inCoca MEMORIA ET se prod!ce el error de Eeti;!eta ETi repetidaE" ;!e se
p!ede salCar aHadiendo tantos \o\ como niCeles de anidamiento @alla en las estr!ct!ras
repetitiCas empleadas" como se e<empli>ica a contin!aci%n
MEM,RIA MAR, P
IRP i, ]1, D^
P\\i D+ i
E#DM
E#DM
Lo ;!e con MEMORIA ET &enerarG correctamente las l?neas
E-1 D+ 1
E-D D+ D
a Operador g o ef
Empleado para indicar ;!e el carGcter ;!e Ciene a contin!aci%n debe ser
interpretado literalmente $ no como !n s?mbolo. Por ello" gQ es e;!iCalente a eQf.
a Operador k
ConCierte la eFpresi%n ;!e le si&!e J&eneralmente !n s?mboloJ a !n n=meroQ la
eFpresi%n debe ser !na constante 6no relocaliBable7. 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
6ECidentemente" el k ;!e precede a OUT >orma parte de la directiCa $ no se trata
del k operador ;!e estamos tratando7
S!p!esta la eFistencia de estos s?mbolos
SIM1 E`( 1D/
SIMD E`( O//
InCocando la macro con las si&!ientes condiciones
PS(M ] SIM1 " SIMD L ^, 5SIM1"SIMD6
Se prod!ce la si&!iente eFpansi%n
_,(- I SIM1 " SIMD L 5SIM1"SIMD6 I
Sin embar&o" inCocando la macro de la si&!iente manera 6con k7
PS(M ] SIM1 " SIMD L ^, _5SIM1"SIMD6
Se prod!ce la eFpansi%n deseada
_,(- I SIM1 " SIMD L 4D/ I
/.0... J DIRECTI1AS pTILES PARA MACROS.
Estas directiCas p!eden ser empleadas tambi#n sin las macros" a!mentando la
comodidad de la pro&ramaci%n" a!n;!e ab!ndan especialmente dentro de las macros.
a REPT Ceces ... E3DM 6Repeat7
Permite repetir cierto n=mero de Ceces !na sec!encia de instr!cciones. El blo;!e
de instr!cciones se delimita con E3DM 6no con>!ndirlo con el >inal de !na macro7. Por
e<emplo
REP- D
,(- D*,A8
E#DM
Esta sec!encia se trans>ormarG" al ensamblar" en lo si&!iente
,(- D*,A8
,(- D*,A8
Empleando s?mbolos de>inidos con 6I7 $ apo$Gndose ademGs en las macros se
p!ede lle&ar a crear pse!doJinstr!cciones 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 SUCESIO3 ' proCocarG la si&!iente eFpansi%n
D+ /
D+ 1
D+ D
a IRP simboloWcontrol" ear&(" ar&*" ..." ar&Wnf ... E3DM 6Inde>inite repeat7
Es relatiCamente similar a la instr!cci%n 2OR de los len&!a<es de alto niCel. Los
Gn&!los 6e7 $ 6f7 son obli&atorios. El s?mbolo de control Ca tomando s!cesiCamente los
Calores 6no necesariamente n!m#ricos7 ar&(" ar&*" ... $ recorre en cada pasada todo el
blo;!e de instr!cciones @asta alcanBar el E3DM 6no con>!ndirlo con >in de macro7
s!stit!$endo simboloWcontrol por esos Calores en todos los l!&ares en ;!e aparece
IRP i, ]1,D,B^
D+ /, i, iIi
E#DM
Al eFpansionarse" este con<!nto de instr!cciones se conCierte en lo si&!iente
D+ /, 1, 1
D+ /, D, .
D+ /, B, H
3ota Todo lo encerrado entre los Gn&!los se considera !n =nico parGmetro. Un 6Q7
dentro de los Gn&!los no se interpreta como el inicio de !n comentario sino como !n
elemento mGs. Por otra parte" al emplear macros anidadas" deben indicarse tantos
s?mbolos an&!lares \e\ $ \f\ consec!tiCos como niCeles de anidamiento eFistan.
L%&icamente" dentro de !na macro tambi#n res!lta bastante =til la estr!ct!ra 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<ec!tar TETRAOUT '(,@" (C+@" *D(@" (A0@" (- se obtendrG
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*
C!ando se pasan listas como parGmetros @a$ ;!e encerrarlas entre \e\ $ \f\ al
llamar" para no con>!ndirlas con elementos independientes. Por e<emplo" s!p!esta la
macro I3CD
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 !tiliBar los Gn&!los
I3CD A9" 89" C9" D9 se eFpandirG
I# A*
DE +* ; * y D* se ignoran 5.
parMmetros6
I3CD eA9" 89" C9f" D9 se eFpandirG
I# A*
I# +*
I# *
DE D* ; 5D parMmetros6
a IRPC simboloWcontrol" ec(c* ... cnf ... E3DM 6Inde>inite repeat c@aracter7
Esta directiCa es similar a la anterior" con !na salCedad los elementos sit!ados
entre los Gn&!los 6e7 $ 6f7 Ja@ora opcionales" por ciertoJ son caracteres ASCII $ no Can
separados por comas
IRP i, ]E1B^
D+ i
E#DM
El blo;!e anterior &enerarG al eFpandirse
D+ E
D+ 1
D+ B
E<emplo de !tiliBaci%n dentro de !na macro 6en combinaci%n con el operador o7
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<ec!tar I3ICIALI4A -" (" 0" ) se prod!ce la si&!iente eFpansi%n
D+ F
D+ 1
D+ .
D+ /
a E9ITM
SirCe para abortar la e<ec!ci%n de !n blo;!e MACRO" REPT" IRP % IRPC.
3ormalmente se !tiliBa apo$Gndose en !na directiCa condicional 6I2...ELSE...E3DI27.
Al salir del blo;!e" se pasa al niCel inmediatamente s!perior 6;!e p!ede ser otro blo;!e
de estos7. Como e<emplo" la si&!iente macro reserCa n b$tes de memoria a cero @asta !n
mGFimo de ())" colocando !n b$te *// al >inal del blo;!e reserCado
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
/.0.-. J MACROS A1A34ADAS CO3 3UMERO 1ARIA8LE DE PARnMETROS.
Como se Cio al est!diar la directiCa I2" eFiste la posibilidad de c@e;!ear
condicionalmente la presencia de !n parGmetro por medio de I238" o s! a!sencia con
I28. Uniendo esto a la potencia de IRP es posible crear macros eFtraordinariamente
CersGtiles. Como e<emplo" Cal&a la si&!iente macro" destinada a introd!cir en la pila !n
n=mero Cariable de parGmetros 6@asta ()7 es especialmente =til en los pro&ramas ;!e
&estionan interr!pciones
*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 instr!cci%n
*P(S) A*,+*,DS,ES,;AR1
Se eFpandirG en
P(S) A*
P(S) A*
P(S) DS
P(S) ES
P(S) ;AR1
El e<emplo anterior es il!stratiCo del mecanismo de comprobaci%n de presencia de
parGmetros. Sin embar&o" este e<emplo p!ede ser optimiBado notablemente empleando
!na lista como =nico parGmetro
*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 Centa<a es el n=mero inde>inido de parGmetros soportados 6no s%lo ()7. Un
e<emplo de !so p!ede ser el si&!iente
*P(S) ]A*, +*, *^
*P,P ]*, +*, A*^
S!e al eFpandirse ;!eda
P(S) A*
P(S) +*
P(S) *
P,P *
P,P +*
P,P A*
@ttpAAmeltin&pot.>ort!necit$.comA!r!&!a$A+-,AlibroA)/.@tmli)0
"/&0.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. El formato de esta
directiva es :
:nombre@de@macro< "/&0 :lista@par.metros<
La macro consta de tres partes esenciales: la cabecera, que contiene el
nombre de la macro, la directiva "/&0 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
"08 /9-)/T/
"08 )S-/9
"08 ES-/9
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:
"08 )9- F0ET "E=S/CE
"08 /'- ;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 (parmetro1, parmetro2,..., parmetroN)
CUERPO DE LA MACRO
E=)"
Ejemplo de la definicin de una macro.
I=II0 "/&0 S)EFI=E "/&0
"08 /9- )/T/ SUE&,0 )E
"08 )S- /9 S1/ )EFI=IID=
"08 ES- /9 S)E 1/ "/&0
E=)" SFI= )E 1/ "/&0
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 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 "ensaje
Toda macro tiene une definicin inicial que consta del nombre asignado a
ella, el seudocdigo de operacin "/&0 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 "ensaje
"08 )9- 0FFSE "ensaje
"08 /'- ;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
,&0",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.
,&0",T "/&0 "E=S/CE S/&GU"E=T0 "U)0
"08 /'-;B'
1E/ )9S"ESSGE
I=T 21'
E=)" SFI= )E 1/ "/&0
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
1E/.
Cuando utiliza la macro instruccin P(+P$, usted proporciona un
parmetro como el nombre real del mensaje que ser desplegado, por ejemplo:
,&0",T "ESS/GE2
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 "/&07 ,&0",T "/&0 "ESS/GE :argumento<
"/&0I=ST&UID=7 ,&0",T "ESS/GE2 :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.
TIT1E ,22"/&2 :E9E< US0 )E ,/&a"ET&0S.
I=ITK "/&0 S)EFI=E "/&0
"08 /9- )/T/
"08 )S-/9
"08 ES-/9
E=)" STE&"I=/ "/&0
,&0",T "/&0 "ESSGE S)EFI=E "/&0
"08 /'- ;B'
1E/ )S- "ESSGE
I=T 21'
E=)" STE&"I=/ "/&0
."0)E1 S"/11
.ST/L 34
.)/T/
"ESSGE1 )% ZUST0"E& =/"E>[- ZP[
"ESSG2 )% ZUST0"E& /))&ES[- ZP[
.0)E
%EGI= ,&0 F/&
I=ITK
"08 /9- )/T/
"08 )S- /9
"08 ES- /9
,&0",T "ESSG2
"08 /'- ;B'
1E/ )9- "ESSG2
I=T 21'
"08 /9- 4;;' SS/1E /1 )0S
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 "ensaje- 8eces
"08 9- 8eces
0T&/7 "08 )9- 0FFSET "ensaje
"08 /'-B
I=T 21'
100, 0T&/
E=)"
La macro anterior despliega el mensaje las veces especificadas. Sin
embargo, qu sucede si invoca usted la macro ms de una vez?. El T/S"
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 T/S" 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)IG0
.
.
)espliega "/&0 "ensaje- +eces
"08 9- 8eces
0T&/7
"08 )9-0FFSET "ensaje
"08 /'-;B
I=T 21'
100, 0T&/
E=)"
..."/S D)IG0
.
.
.
"08 9-1;
0T&/7
100, 0T&/
...&EST0 )E1 D)IG0
...E=) ,&0G&/"/
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 0T&/ o a la etiqueta 0T&/ de la macro procesadora.
Afortunadamente existe una solucin al problema que consiste en usar un
seudocdigo de operacin llamado 10/L, el cual enumera todas las
etiquetas utilizadas dentro de una macro. Cada vez que la macro sea
expandida, el T/S" crea un smbolo nico para cada etiqueta enumerada en
la lista de 10/1. El formato de 10/1 es:
10/1 lista de etiEuetas
Donde lista de etiquetas es la lista de los nombres de etiqueta que se
usarn dentro de la macro. 10/1 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 10/1. Teniendo presente lo anterior
redefinamos la macro anterior.

)espliega "/&0 "ensaje- 8eces
10/1 0T&/
"08 9- 8EES
0T&/7 "08 )9- 0FFSET "ensaje
"08 /'-B
I=T 21'
100, 0T&/
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 T/S", el comando de ensamble es: T/S"
,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.
,&0G&/"/7
S I=II0 )E1 ,&;G&/"/- )EFI=I"0S E1 "0)E10 )E "E"0&I/ / US/& F E1
SEG"E=T0
S )E D)IG0
."0)E1 S"/11 S"0)E10 )E "E"0&I/
.0)E Sa&E/ )E D)IG0
I=II07 SETITUET/ )E I=II0 )E1 ,&0G&/"/
"08E /9-)/T/ SI=II/1IK/ E1 &EGIST&0 )S 0= 1/ )I&EID= )/)/
"08 )S-/9 S,0& )/T/ :SEG"E=T0 )E )/T0S<
"08 )9- 0FFSET Titulo S0%TIE=E 1/ )I&EID= )E 1/ /)E=/ )E
/)E=/ )E /&/TE&ES
"08 /'-;B SUS/"0S 1/ FU=ID= ;B' )E 1/ I=TE&&U,ID= 21'
I=T 21' S,/&/ )ES,1EG/& 1/ /)E=/ UF/ )I&EID= 0%TU8I"0S
"08 9-13 S0=T/)0& )E /&/TE&ES TUE SE "0ST&/&a
"08 %9-0FFSET adena S,E&"ITE /ES0 / 1/ /)E=/ )0=)E SE
E=UE=T&/= 10S 8/10&ES / )ES,1EG/&
I107 SETITUET/ ,/&/ GE=E&/& U= I10
"08 /1-1 S010/ E= /1 E1 =b"E&0 / T&/)UI& F 10 T&/)UE
91/T SUS/=)0 1/ I=ST&UID= 91/T
"08 )1-/1 S010/ E= )1 E1 8/10& / SE& )ES,1EG/)0 ,0& "E)I0 )E
1/
"08 /'- ;2 SFU=ID= 2 )E 1/ I=TE&&U,ID= 21'
I=T 21' S)ES,1IEG/ E1 /&/TE&
"08 )1-1; SS/1T/ U=/ 1c=E/ )ES,1EG/=)0 E1 /&aTE& 1;
I=T 21' S)ES,1IEG/ E1 /&/TE&
"08 )1-13 S,&0)UE U= &ET0&=0 )E /&&0 )ES,1EG/=)0 E1
/&/TE& 13
I=T 21' S)ES,1IEG/ E1 &ET0&=0 )E /&&0
100, I10 S)E&E"E=T/ E= 1 / 9 F %&I=/ 1/ ETITUET/ I10
SSIE",&E F U/=)0 9 =0 SE/ IGU/1 / E&0
"08 /'- 4 S UTI1IK/ 1/ FU=ID= 4 )E 1/ I=TE&&U,ID= 21' ,/&/
I=T 21' SFI=/1IK/& E1 ,&0G&/"/
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 teFto.
El ensamblador !sa las macros de tal manera ;!e cada CeB ;!e enc!entra al s?mbolo ;!e
de>ine la macro" lo s!stit!$e por el teFto ;!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 s!stit!$e cada CeB ;!e apareBca la macro
3o es como los procedimientos" ;!e se EllamanE 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
C!ando se ;!iere el c%di&o mGs rGpido $ no importa ser repetitiCo 6c%di&o
&rande7
C!ando se Can a &enerar diCersas Cariantes de c%di&o similar
3o c!ando se ;!iere c%di&o compacto" eCitando repetir el mismo 6en este caso"
!sar procedimientos7
/signacin de +ariables y constantes para el ensamblador
Pse!doinstr!cciones" p!es solamente se !san d!rante el proceso de trad!cci%n
Sintaxis:
eSimbolof ESU 1alor
eSimbolof I 1alor
Permiten de>inir constantes $ Cariables del ensamblador
La di>erencia es ;!e 9 p!ede !sarse Carias Ceces sobre el mismo s?mbolo 6como !na
Cariable7
&E,T
DirectiCa para de>inir blo;!es repetitiCos
Permite repetir !n c%di&o determinado" tantas Ceces 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 p!eden ser adaptatiCosQ por e<emplo
PotenciaD MAR, Registro, ;a!or
REP- ;a!or
S)8 Registro, 1
E#DM
E#DM
Uso:
PotenciaD *, .
Se conCierte 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.
"/=EC0 )E ,/&/"ET&0S.
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.

"/=EC0 )E ETITUET/S 10/1ES.
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%1I0TE/S )E "/&0S.

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.
1a )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:
=0"%&E 0,E&/I0= 0,E&/=)0 0"E=T/&I0
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.

11/"/)/ )E ,&0E)I"IE=T0S.
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.

0peraciones /11 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).

1lamada 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.
1lamada 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.3 )irecti+as para compilacin 56brida.
4.M Funciones en ensamblador.
4.H %loEues en ensamblador.
4.B 0peradores.
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