Está en la página 1de 60

MICROPROCESADORES

PROGRAMACION EN LENGUAJE ENSAMBLADOR

El lenguaje ensamblador: Es un lenguaje de


programación de bajo nivel para los computadores, micro-
procesadores,  microcontroladores y otros circuitos
integrados programables.

Implementa una representación simbólica de los códigos


de máquina binarios y otras constantes necesarias para
programar una arquitectura dada de CPU y constituye la
representación más directa del código máquina específico
para cada arquitectura legible por un programador.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Esta representación es usualmente definida por el


fabricante de hardware, y está basada en
los mnemónicos que simbolizan los pasos de
procesamiento (las instrucciones), los registros del
procesador, las posiciones de memoria y otras
características del lenguaje.

Un lenguaje ensamblador es por lo tanto específico de


cierta arquitectura de computador física (o virtual). Esto
está en contraste con la mayoría de los lenguajes de
programación de alto nivel, que idealmente son portátiles.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Un programa utilitario llamado ensamblador es usado


para traducir sentencias del lenguaje ensamblador al
código de máquina del computador objetivo. El
ensamblador realiza una traducción más o
menos isomorfa (un mapeo de uno a uno) desde las
sentencias mnemónicas a las instrucciones y datos de
máquina. Esto está en contraste con los lenguajes de alto
nivel, en los cuales una sola declaración generalmente da
lugar a muchas instrucciones de máquina.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

FORMATO DE LAS INSTRUCCIONES

Cada instrucción en lenguaje ensamblador del 8088 está compuesta de


4 campos:

etiqueta operación operando comentario


Campo etiqueta: Una etiqueta debe comenzar con un carácter
alfabético y puede contener hasta 31 caracteres, incluyendo:

• Letras de la A a la Z
• Números del 0 al 9
• Los símbolos especiales: - $ . @ %

No se puede utilizar un nombre que coincida con una palabra


reservada o directiva del ensamblador. Si el nombre incluye un punto,
entonces el punto debe ser el primer carácter.
Ing. José Luis Romero Msc.
MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

FORMATO DE LAS INSTRUCCIONES

Cada instrucción en lenguaje ensamblador del 8088 está compuesta de


4 campos:

etiqueta operación operando comentario


Campo operación: Contiene el nemotécnico de la instrucción, que es
de 2 a 6 caracteres.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

FORMATO DE LAS INSTRUCCIONES

Cada instrucción en lenguaje ensamblador del 8088 está compuesta de


4 campos:

etiqueta operación operando comentario


Campo operando: Contiene la posición o posiciones donde están los
datos que van a ser manipulados por la instrucción.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

FORMATO DE LAS INSTRUCCIONES

Cada instrucción en lenguaje ensamblador del 8088 está compuesta de


4 campos:

etiqueta operación operando comentario


Campo comentario: Se utiliza para documentar el código fuente del
ensamblador. Debe separarse del último campo por al menos un
espacio e iniciar con ; Cuando inicia un comentario en una línea ésta
deberá tener en la primera columna el carácter ;

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción MOV

Transfiere un byte desde el operando fuente al operando destino. Tiene


el siguiente formato:

MOV destino, fuente

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Direccionamiento Inmediato

El operando fuente aparece en la instrucción. Un ejemplo, es el que


mueve un valor constante a un registro interno.

MOV AX, 568

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Direccionamiento a Registro

Indica que el operando a ser usado está contenido en uno de los


registros internos de propósito general del CPU. En el caso de los
registros AX, BX, CX o DX de 16 bits o AL, AH, BL, BH, CL, CH, DL Y
DH de 8 bits

Ejemplos:

MOV AX, BX ; AX ‹ BX
MOV AL, BL ; AL ‹ BL

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Direccionamiento Directo

Especifica en la instrucción la localidad de memoria que contiene al


operando. En este tipo de direccionamiento, se forma una dirección de
20 bits.

Ejemplo:

MOV CX, COUNT

El valor de COUNT es una constante. Es usada como el valor de


desplazamiento en el cálculo de la dirección de 20 bits.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Direccionamiento Directo

El registro DS se usa como segmento por omisión pero puede ser


invalidado usando un prefijo de segmento en la instrucción, cualquiera
de los 4 segmentos puede usarse.

Ejemplo:

MOV CX, ES:COUNT

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Direccionamiento de Registro Indirecto

Con el modo de direccionamiento de registro índice, la dirección de


desplazamiento de 16 bits está contenida en un registro base o registro
índice. Esto es, la dirección reside en el registro BX, BP, SI o DI.

Ejemplo:

MOV AX, [SI]

El valor de 16 bits contenido en el registro SI debe ser el desplazamiento


usado para calcular la dirección de 20 bits.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Direccionamiento de Registro Indirecto con Desplazamiento

Este tipo de direccionamiento incluye a los dos modos de


direccionamiento anteriores. La dirección de desplazamiento de 16 bits
se calcula sumando el valor de 16 bits especificado en un registro
interno y una constante.

Por ejemplo, si usamos el registro interno DI y el valor constante COUNT


ha sido previamente definido, el nemotécnico es:

MOV AX, COUNT [DI]

Si: COUNT = 0378H


DI = 04FAH
0872H

Entonces, el desplazamiento de 16 bits es 0872H


Ing. José Luis Romero Msc.
MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Direccionamiento de Registro Indirecto con un Registro Base y un


Registro Índice

Este modo de direccionamiento usa la suma de dos registros internos


para obtener la dirección de desplazamiento de 16 bits a usarse en el
cálculo de la dirección de 20 bits.

Ejemplos:

MOV [BP] [DI], AX ; el desplazamiento es BP + DI


MOV AX, [BX] [SI] ; el desplazamiento es BX + SI

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Direccionamiento de Registro Índice Indirecto con un Registro


Base, un Registro Índice y un Registro Constante

Este es el modo de direccionamiento más complejo. Es idéntico al modo


de direccionamiento anterior, excepto que se suma una constante.

Ejemplo: Suponga que tenemos los siguientes valores en los registros:

DI = 0367H
BX = 7890H
COUNT = 0012H
7C09H
Este modo de direccionamiento indica que el desplazamiento
especificado por la suma de DI + BX + COUNT sea usado para mover el
dato en memoria en el registro AX.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Direccionamiento de Registro Índice Indirecto con un Registro


Base, un Registro Índice y un Registro Constante

MOV AX, COUNT [BX] [DI]

Si el DS contiene 3000H, la dirección completa de 20 bits es:

3000H * 10H + 7C09H = 37C09H

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción IN

La instrucción IN transfiere datos de el dispositivo E/S a el registro AL,


la instrucción puede especificar la dirección de el dispositivo E/S en 2
diferentes maneras :

• Si la dirección de E/S esta en el rango de 0 a 255, la dirección puede


tener un valor inmediato.
• Si la dirección es mayor que 255, la instrucción nombra la dirección
de E/S indirectamente , el registro DX retiene la dirección E/S para la
instrucción indirecta IN.

IN AL, DX ; Carga en AL el valor presente en el puerto


; apuntado por la dirección en el registro DX

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción OUT

La instrucción OUT transfiere datos de el registro AL a el dispositivo E/S,


la instrucción puede especificar la dirección de el dispositivo E/S en 2
diferentes maneras :

• Si la dirección de E/S esta en el rango de 0 a 255, la dirección puede


tener un valor inmediato.
• Si la dirección es mayor que 255, la instrucción nombra la dirección
de E/S indirectamente , el registro DX retiene la dirección E/S para la
instrucción indirecta OUT.

OUT DX, AL ; Envía al puerto apuntado por DX el valor


; almacenado en AL

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción XCHG

La instrucción Exchange ( xchg ) es un simple intercambio de dos


locaciones, la instrucción puede cambiar dos registros o un registro y
una localidad de memoria. Un registro de segmento no puede ser una
de las localidades del intercambio.

XCHG BX, CX ; Intercambia los contenidos de BX y CX

XCHG BX, [1234H] ; Intercambia los contenidos de BX y la


; localidad de memoria con desplazamiento
; 1234

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción PUSH

La instrucción PUSH guarda un registro o localidad de memoria en la


pila decrementa el puntero de pila y copia a la dirección apuntada por él
(SS:SP) el operando origen (de tamaño múltiplo de 16 bits)

PUSH BX ; Empuja el valor de BX a la pila

PUSH [1234H] ; Empuja el valor depositado en la localidad


; [1234H] a la pila

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción PUSHF

La instrucción PUSHF guarda el registro de banderas en la pila


decrementa el puntero de pila y copia a la dirección apuntada por él
(SS:SP)

PUSHF ; Empuja el valor del registro banderas a la


; pila

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción POP

La instrucción POP saca el valor actual en la pila y lo guarda en un


registro o localidad de memoria especificada en el operando, luego
incrementa el puntero de pila.

POP BX ; Saca el valor de la pila y lo guarda en BX

POP [1234H] ; Saca el valor de la pila y lo guarda en la


; localidad con desplazamiento [1234H]

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción POPF

La instrucción POPF saca el valor actual en la pila y lo guarda en el


registro de banderas.

POPF ; Saca el valor de la pila y lo guarda en el


; registro de banderas

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción LAHF

La instrucción LAHF copia las banderas SF, ZF, AF, PF y CF en los bits
7, 6, 4, 2 y 0, respectivamente del registro AH. Los otros bits quedan
indefinidos. El contenido de AH queda, entonces, así:

AH = SF ZF xx AF xx PF xx CF
b7 b6 b5 b4 b3 b2 b1 b0

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción SAHF

La instrucción SAHF Transfiere bits específicos del registro AH a los


registro de banderas SF, ZF, PF y CF.

SF = bit 7
ZF = bit 6
AF = bit 4
PF = bit 2
CF = bit 0

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción XLAT

La instrucción XLAT realiza un posicionamiento sobre una tabla de bytes


para obtener el valor. La instrucción primero suma BX con AL (única
instrucción que suma un registro de 16 bits con una de 8 bits) para
formar una dirección en el segmento de datos, después copia el valor en
esa dirección al registro AL.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción JMP (salto)

La instrucción JMP transfiere el control incondicionalmente a la dirección


indicada. La dirección puede ser una etiqueta.

JMP AX ; Transfiere el control, a la instrucción ubicada en


; el segmento de código con desplazamiento
; igual al contenido de AX.

JMP jose ; Transfiere el control, a la instrucción ubicada en


; la etiqueta jose

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucciones de salto condicional

La instrucción de salto condicional transfieren el control a la dirección


indicada dependiendo que se cumpla alguna condición al evaluar el
registro bandera.

•JE, JZ salta si es igual a cero


•JNE, JNZ salta si no igual a cero
•JS salta si signo negativo
•JNS salta si signo no negativo
•JP, JPE salta si paridad par
•JNP, JOP salta si paridad impar
•JO salta si hay capacidad excedida
•JNO salta si no hay capacidad excedida

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucciones de salto condicional

La instrucción de salto condicional transfieren el control a la dirección


indicada dependiendo que se cumpla alguna condición al evaluar el
registro bandera.

•JB, JNAE salta si por abajo (no encima o igual)


•JNB, JAE salta si no está por abajo (encima o igual)
•JBE, JNA salta si por abajo o igual (no encima)
•JNBE, JA salta si no por abajo o igual (encima)
•JL, JNGE salta si menor que (no mayor o igual)
•JNL, JGE salta si no menor que (mayor o igual)
•JLE, JNG salta si menor que o igual (no mayor)
•JNLE, JG salta si no menor que o igual (mayor)

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción CMP

La instrucción de comparación CMP compara dos valores por medio


de restarlos. CMP descarta el resultado, pero pone las banderas de
estado de acuerdo a el resultado, la instrucción modifica únicamente
las banderas.

CMP AL,BL

Si AL es mayor que BL CF=0 y ZF=0


Si AL es igual a BL CF=0 y ZF=1
Si AL es menor que BL CF=1 y ZF=0

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción CMP

Ejemplos:

CMP AL,BL
CMP AX,BX
CMP AL,24H
CMP AL,[1234H]

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción TEST

Realiza una conjunción, bit por bit, de los operandos, pero a diferencia
de AND esta instrucción no coloca el resultado en el operando destino,
solo tiene efecto sobre el estado de las banderas. A diferencia del
comando CMP se pueden probar cada uno de los bits individualmente.

TEST AL,DL ; Hace un AND entre AL y DL y modifica las


; banderas del registro de banderas.

TEST BX,DX ; Hace un AND entre BX y DX y modifica las


; banderas del registro de banderas.

TEST AL,04H ; Hace un AND entre AL y 04H y modifica las


; banderas del registro de banderas.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción AND

Con esta instrucción se lleva a cabo la operación lógica "y" (conjunción lógica)
de los dos operandos bit a bit.

AND AL, BL ; Realiza un AND entre los registros AL y


; BL y guarda el resultado en AL.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción OR

Con esta instrucción se lleva a cabo la operación lógica “o" (disyunción lógica)
de los dos operandos bit a bit.

OR AL, BL ; Realiza un OR entre los registros AL y


; BL y guarda el resultado en AL.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción XOR

Con esta instrucción se lleva a cabo la operación lógica “o exclusivo" (disyunción


exclusiva) de los dos operandos bit a bit.

XOR AL, BL ; Realiza un XOR entre los registros AL y


; BL y guarda el resultado en AL.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción NOT

Con esta instrucción se lleva a cabo la operación lógica complemento del


operando bit a bit.

NOT AL ; Complementa todos los bits de AL.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción INC

La instrucción suma 1 al operando destino y guarda el resultado en el mismo


operando destino.

INC AL : Incrementa en 1 el registro AL

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción DEC

La instrucción resta 1 al operando destino y guarda el resultado en el mismo


operando destino.

DEC AL : Decrementa en 1 el registro AL

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción NOP

Esta instrucción es nula, o sea que no hace absolutamente nada. Es


utilizada para provocar un retraso en la CPU.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción ADD

Suma los dos operandos y guarda el resultado en el operando destino.

ADD AL,BL ; Suma AL con BL y guarda el resultado en AL.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción SUB

Resta el operando fuente del destino y guarda el resultado en el operando


destino.

SUB AL,BL ; Resta BL de AL y guarda el resultado en AL.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción DIV

División sin signo. El divisor puede ser un byte o palabra y es el


operando que se le da a la instrucción. Si el divisor es de 8 bits se toma
como dividendo el registro de 16 bits AX y si el divisor es de 16 bits se
tomara como dividendo el registro par DX:AX, tomando como palabra
alta DX y como baja AX. Si el divisor fue un byte el cociente se almacena
en el registro AL y el residuo en AH, si fue una palabra el cociente se
guarda en AX y el residuo en DX.

DIV CL ; AX se divide entre CL, el cociente se guarda el


; AL y el resto en AH.

DIV CX ; DX:AX se divide entre CX, el cociente se ;


guarda en AX y el resto en DX.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción MUL

Multiplicación sin signo. El ensamblador asume que el multiplicando será


del mismo tamaño que el del multiplicador, por lo tanto multiplica el valor
almacenado en el registro que se le da como operando por el que se
encuentre contenido en AH si el multiplicador es de 8 bits o por AX si el
multiplicador es de 16 bits. Cuando se realiza una multiplicación con
valores de 8 bits el resultado se almacena en el registro AX y cuando la
multiplicación es con valores de 16 bits el resultado se almacena en el
registro par DX:AX.

MUL CL ; AL se multiplica por CL, el producto se guarda


; en AX.

MUL CX ; AX se multiplica por CX, el producto se guarda


; en DX:AX.
Ing. José Luis Romero Msc.
MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

SUB RUTINAS

Se le llama subrutina a un segmento de código separado del bloque


principal y que puede ser invocado en cualquier momento desde este o
desde otra subrutina. Una subrutina al ser llamada dentro de
un programa hace que el código principal se detenga y se dirija a
ejecutar el código de la subrutina

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción CALL

Bifurca a un procedimiento fuera de línea, salvando previamente en la


pila la dirección de la instrucción siguiente, para poder volver a esta
instrucción una vez ejecutado el procedimiento.

CALL JOSE ; Transfiere el flujo de ejecución a la


; instrucción ubicada en la etiqueta
; JOSE

IP Pila

La dirección de la etiqueta JOSE IP

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción RET

Retorna de un procedimiento, previamente invocado mediante CALL,


utilizando como dirección de retorno la dirección salvada en la pila por
CALL, que corresponde a la instrucción siguiente a dicha sentencia
CALL.

RET ; Transfiere el flujo de ejecución a la instrucción ;


ubicada después del ultimo CALL ubicada en la ;
dirección guardada en la pila.

Pila IP

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción ROL

Rotar a la izquierda los bits del operando destino

ROL AL ; Rota los bits en el registro AL de forma ;


circular a la izquierda

AL
1 1 0 0 0 0 1 0

AL después del ROL


1 0 0 0 0 1 0 1

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción ROR

Rotar a la derecha los bits del operando destino

ROR AL ; Rota los bits en el registro AL de forma ;


circular a la derecha

AL
1 0 0 0 0 1 0 1

AL después del ROR


1 1 0 0 0 0 1 0

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción CLD

Pone a 0 la bandera de dirección (DF), por lo que en la ejecución de las


instrucciones de manejo de cadenas los registros índices SI y/o DI se
autoincrementan en una unidad si el (los) operando(s) son de tipo byte, y en
dos, si son de tipo word.

Instrucción CLI

Borra la bandera de activación de interrupciones (IF) y desactiva las


interrupciones enmascarables (las que aparecen sobre la línea INTR del
procesador). Las interrupciones enmascarables se pueden activar (permitir) o
desactivar (no permitir). Las interrupciones no enmascarables (las que aparecen
sobre la línea NMI) no se pueden desactivar.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción CLC

Borra la bandera de acarreo (CF) sin afectar a ninguna otra bandera.

Instrucción CMC

Complementa la bandera de acarreo (CF); es decir, la pone en el estado


contrario.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción STC

Pone a 1 la bandera de acarreo (CF) sin afectar a ninguna otra bandera.

Instrucción STD

Pone a 1 la bandera de acarreo (DF), por lo que en la ejecución de las


instrucciones de manejo de cadenas los registros índices SI y/o DI se
auto decrementa de modo automático:

•en 1 si el(los) operando(s) son de tipo byte.


•en 2 si el(los) operando(s) son de tipo palabra.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción STI

Pone a 1 la bandera de activación de interrupciones (IF) y activa las


interrupciones enmascarables (las que aparecen sobre la línea INTR del
procesador). Una interrupción pendiente no será reconocida hasta que
no se haya ejecutado la instrucción que sigue a STI.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción LOOP

Mediante esta instrucción es posible implementar bucles. Un bucle es un


conjunto de instrucciones que se ejecutan una serie de veces. LOOP
decrementa el registro contador (CX). Si CX es distinto de cero salta a la
etiqueta especificada en el operando, Si CX es cero, entonces se ejecuta
la siguiente instrucción.

LOOP jose ; Decrementa registro CX, si vale 0 salta a


; la etiqueta jose, de otra forma sigue con la ;
próxima instrucción.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción JCXZ

Transfiere el control a la instrucción ubicada en la etiqueta si se cumple


la condición de CX= 0. Si CX no es 0, no hay transferencia de control.

JCXZ jose ; Salta a la etiqueta jose si el registro CX vale 0


; de otra forma sigue con la próxima instrucción.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Interrupciones

Una interrupción es un suceso que hace que la CPU pare la ejecución


del programa en curso para atender otra actividad requerida. Existen dos
tipos de interrupciones:
Externas (provocadas por periféricos)
Internas (generadas por la propia CPU)

Las internas son cinco :

0 - Error en división
1 - Paso a paso (se para después de la ejecución de una instrucción)
2 - No enmascarable
3 - Breakpoints (se para en puntos determinados del programa)
4 - Desbordamiento o overflow (se dispara por la instrucción INTO)

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Interrupciones

Existen un total de 256 interrupciones (0 a 255). Mediante ese código se


apunta a una tabla de vectores de interrupción. Cada vector de
interrupción contiene la dirección en memoria de la rutina de tratamiento
de dicha interrupción. Algunos de los códigos están reservados.

Los vectores de interrupción se guardan en memoria como


segmento:desplazamiento, siendo el desplazamiento la palabra más baja
y el segmento la más alta (4 bytes en total). Los vectores de interrupción
comienzan en 0000:0000.

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Interrupciones

Proceso de una interrupción:

1. Guarda registro banderas en la pila


2. IF=0, TF=0
3. Guarda CS en la pila
4. CS = NUM_INT x 4 + 2
5. Guarda IP en la pila
6. IP = NUM_INT x 4

La rutina de servicio a la interrupción se busca luego en CS:IP

Ing. José Luis Romero Msc.


MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción INT

Las interrupciones por software ocurren cuando se ejecuta la instrucción


INT tipo. De esta manera se pueden simular interrupciones durante la
depuración de un programa. El tipo de interrupción aparece en la misma
instrucción como una constante de 8 bits. Muchos sistemas operativos
utilizan esta instrucción para llamadas a servicios, lo que permite no
tener que conocer la dirección absoluta del servicio, permitiendo cambios
en el sistema operativo sin tener que cambiar los programas que lo
ejecutan. De esta manera, una de las primeras operaciones que debe
realizar dicho sistema operativo es inicializar la tabla de vectores de
interrupción con los valores apropiados.

INT 1H ; Transfiere el control a la rutina de servicio de la


; interrupción tipo 1.
Ing. José Luis Romero Msc.
MICROPROCESADORES
PROGRAMACION EN LENGUAJE ENSAMBLADOR

Instrucción IRET

Permite retornar de una interrupción, restaura los valores de los registros


IP, CS y el registro de banderas.

Ing. José Luis Romero Msc.

También podría gustarte