Vous êtes sur la page 1sur 31

Universidad Nacional de San Agustn

Fa c u l t a d d e I n g e n i e r a d e Pro d u c c i n y S e r v i c i o s
Escuela Profesional de Ingeniera Electrnica

Curso:
Arquitectura De
Computadoras
LABORATORIO N 3
Ensamblador 8088/8086, direccionamiento
y programacin, juego de instrucciones
manual INTEL (Windows y Linux Ubuntu)
Integrantes:

y las dems con pantaln negro y blusa.

Champi Gutierrez Luis Miguel 20101147

Mendoza Lima Juan Carlos


20100686

Salinas Castillo Howard


20102181

GRUPO: 4

Fecha de Entrega: 5 de Octubre del 2015


A R E Q U I PA - P E R U

2015

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS

Contenido:
1

Introduccin.............................................................................................

Tamao De Los Datos...............................................................................

Almacenamiento De Datos......................................................................

Registros..................................................................................................
4.1

Registros De Propsito General.........................................................

4.2

Registros ndice.................................................................................

4.3

Registros Apuntadores.......................................................................

4.4

Registros De Banderas.......................................................................

4.5

Registros De Segmento.....................................................................

4.6

Registro Apuntador De Instrucciones.................................................

Acceso A Memoria Y A Puertos.................................................................

Segmentacin..........................................................................................

Modos De Direccionamiento..................................................................
7.1

Direccionamiento Inmediato............................................................

7.2

Direccionamiento A Registro............................................................

7.2.1

Direccionamiento De Registro Directo......................................

7.2.2

Direccionamiento De Registro Indirecto....................................

DIRECCIONAMIENTO DE REGISTRO INDIRECTO CON


DESPLAZAMIENTO.....................................................................................
DIRECCIONAMIENTO DE REGISTRO INDIRECTO CON UN
REGISTRO BASE Y UN REGISTRO NDICE...................................................
DIRECCIONAMIENTO DE REGISTRO INDIRECTO CON UN
REGISTRO BASE Y UN REGISTRO NDICE Y UN REGISTRO
CONSTANTE...............................................................................................
8

Instrucciones..........................................................................................
8.1 Instrucciones De Transferencia De Datos (No Afectan
Flags)........................................................................................................
8.2 Instrucciones Aritmeticas (Afectan los flags AF, CF, OF,
PF, SF, ZF).................................................................................................
8.3

Instrucciones Logicas (Afectan AF, CF, OF, PF, SF, ZF)....................


2

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
8.4

Instrucciones De Manipulacion De Cadenas:...................................

8.5 Instrucciones De Transferencia De Control (No afectan


los flags):..................................................................................................
8.6
9

Instrucciones De Control Del Procesador.........................................

Bibliografia.............................................................................................

1 Introduccin
El lenguaje Ensamblador como cualquier lenguaje de
programacin es un conjunto de palabras que le indican al
ordenador lo que tiene que hacer. Sin embargo la diferencia
fundamental es que cada instruccin escrito en el lenguaje
ensamblador tiene una correspondencia exacta con una
operacin del procesador. Por lo que son operaciones muy
sencillas tales como: Cargar 32 en el registro BX o transferir
el contenido del registro CL al CH. As pues, las palabras del
lenguaje ensamblador son nemotcnicos que representan el
cdigo maquina lenguaje que entiendo el procesador.

2 Tamao De Los Datos


En el 8086/88 se definen los siguientes tamaos de datos:
4 bits :nibble
8 bits :byte
16 bits : word
32 bits : dword

3 Almacenamiento De Datos
El 8086/88 usa el formato de almacenamiento denominado
little endian, esto quiere decir que el byte menos
significativa (LSB) del dato es guardada en la parte baja de
la memoria. Por ejemplo el dato 0x1122 ser almacenado
en memoria:

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
Es importante tener esto en cuanta a la hora de acceder a
los datos para operar con ellos.

4 Registros

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
Los registros del i8086 e i8088 se basaron en el diseo del Intel
8080 y el Intel 8085, y de hecho son compatibles a nivel de
lenguaje ensamblador con el i8080. El conjunto de registros
tambin es similar al del i8080, pero ampliados a 16 bits. Tanto
el i8086 como el i8088 tienen cuatro registros de propsito
general de 16 bits, que tambin pueden ser accedidos como
ocho registros de 8 bits, y tienen cuatro registros ndices de 16
bits (incluyendo el puntero de pila). Los registros de datos se
usan a veces de forma implcita por las instrucciones, haciendo
ms difcil la organizacin de los registros para emplearlos con
valores temporales.Los registros del procesador, se usan para
Registros
de propsito
general ya que el acceso
contener los datos
con que
se est trabajando
a los registros es mucho mas rpido que los accesos a
AH
AL
AX (Acumulador)
memoria. Se pueden
realizar
operaciones
aritmticas y lgicas,
comparaciones, entre otras. Se pueden hacer estas
BH
BL
BX (Base)
operaciones con todos los registros excepto los de segmento, el
IP, y los flags. CH
CL
CX (Contador)
DH

DL

DX (Datos)

Registros ndices

4.1 Registros De
General
SI Propsito
Source
Index
(ndice origen)

Los registros de propsito general son el AX, BX, CX, y


Index
DX, de 16DIbits. CadaDestination
uno de ellos
se divide en dos
(ndice
Destino)
registros de 8 bits, llamados AH y AL, BH y BL, CH y
CL, y, DH y DL, H significando Hight (alto) y L
BP Low (bajo),Base
Pointer la parte alta o la
significando
indicando
(Puntero
Base)
parte baja del registro correspondiente
de 16 bits (ver
esquema). Un programa poda usar tanto los registros
Stack Pointer
de 16 bitsSP
como los registros de 8 bits. Aparte del uso
(Puntero de Pila)
general de los registros
para hacer clculos
aritmticos
y
lgicos,
existen
instrucciones
que usan
Registro de Bandera
estos registros con un uso particular especializado,
como
se indica
- - - - OD
I TSZ- Aa- Pcontinuacin:
- C Flags (Banderas)

Registros AX:
de Segmentos
Registro
El registro AX es el registro
acumulador, es utilizado para operaciones que
CS
Code Segment
implican
entrada/salida,
y multiplicacin y
(Segmento
divisin (estas dos
ltimasde
en conjunto con el
Cdigo)
registro DX)

Registro BX: El registro BX es el registro base,


(Segmento de
y es el nico registro de propsito general que
Datos)
puede ser un ndice para direccionamiento
indexado
ES
ExtraSegment

Registro CX: El registro CX es conocido como


el registro
contador.
contener un valor
SS
Stack Puede
Segment

DS

Data Segment

(Segmento Extra)

(Segmento de Pila)

Registro apuntador de
instrucciones

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
para controlar el nmero de veces que un ciclo
se repite o un valor para corrimiento de bits

Registro DX: El registro DX es el registro de


datos. En algunas operaciones se indica
mediante este registro el nmero de puerto de
entrada/salida, y en las operaciones de
multiplicacin y divisin de 16 bits se utiliza
junto con el acumulador AX

4.2 Registros ndice


Los registros SI y DI estn disponibles para
direccionamiento indexado y para operaciones de
cadenas de caracteres.

Registro SI: El registro ndice fuente de 16


bits es requerido por algunas operaciones con
cadenas de caracteres. El SI est asociado con
el segmento DS.

Registro DI: El registro ndice destino tambin


es requerido por algunas operaciones con
cadenas de caracteres. El DI est asociado con
el segmento ES.

4.3 Registros Apuntadores


Los registros SP (apuntador de pila) y BP (apuntador
base) estn asociados con el registro SS y permiten al
sistema acceder a datos en el segmento de la pila.

Registro SP: El apuntador de pila de 16 bits


est asociado con el segmento SS y
proporciona un valor de desplazamiento que se
refiere a la palabra actual que est siendo
procesada en la pila. El sistema maneja de
manera automtica este registro, aunque el
programa puede hacer ciertas manipulaciones
con l.

Registro BP: El apuntador base de 16 bits


facilita la referencia de parmetros dentro de la
pila.

4.4 Registros De Banderas


Es un registro de 16 bits, de los cuales nueve sirven
para indicar el estado actual de la mquina y el
6

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
resultado del procesamiento. Muchas instrucciones
aritmticas y de comparacin cambian el estado de
las banderas y apoyndose en ellas se pueden tomar
decisiones para determinar la accin subsecuente.
La tabla contiene 16 posiciones (de 0 a 15), que son
los 16 bits del registro de banderas, numeradas de
derecha a izquierda. La posicin 0 la encontraremos a
la derecha y la posicin 15 a la izquierda.
- - - -

O D I T S Z
A
P
C
F F F F F F
F
F
F

Los bits de las banderas son las siguientes:

OF (overflow, desbordamiento): Indica


desbordamiento del bit de mayor orden
despus de una operacin aritmtica de
nmeros con signo (1=existe overflow; 0=no
existe overflow). Para operaciones sin signo, no
se toma en cuenta esta bandera.

DF (direccin): Controla la seleccin de


incremento o decremento de los registros SI y
DI en las operaciones con cadenas de
caracteres
(1=decremento
automtico;
0=incremento). La bandera DF se controla con
las instrucciones STD y CLD.

IF (interrupcin): Controla el disparo de las


interrupciones (1=habilita las interrupciones;
0=deshabilita
las
interrupciones).
La
interrupcin no enmascarable es la nica que
no puede ser bloqueada por esta bandera. El
estado de la bandera IF se controla con las
instrucciones STI y CLI.

TF (trampa): Permite la operacin del


procesador en modo de depuracin (paso a
paso)

SF (signo): Contiene el signo resultante de


una
operacin
aritmtica
(0=positivo;
1=negativo).

ZF (cero): Indica el resultado de una


operacin aritmtica o de comparacin
(0=resultado diferente de cero; 1=resultado
igual a cero).
7

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS

AF (acarreo auxiliar): Contiene el acarreo del


bit 3. Esta bandera se prueba con las
instrucciones DAA y DAS para ajustar el valor
de AL despus de una suma o resta BCD.

PF (paridad): Indica si el nmero de bits 1,


del byte menos significativos de una operacin,
es par (0=nmero de bits 1 es impar;
1=nmero de bits 1 es par).

CF (acarreo): Contiene el acarreo del bit de


mayor orden despus de una operacin
aritmtica; tambin almacena el contenido del
ltimo bit en una operacin de desplazamiento
o de rotacin.

4.5 Registros De Segmento


Definen reas de 64 Kb dentro del espacio de
direcciones de 1 Mb del 8086. Estas reas pueden
solaparse total o parcialmente. No es posible acceder
a una posicin de memoria no definida por algn
segmento: si es preciso, habr de moverse alguno.

Registro CS: El DOS almacena la direccin


inicial del segmento de cdigo de un programa
en el registro CS. Esta direccin de segmento,
ms un valor de desplazamiento en el registro
apuntador de instruccin (IP), indica la
direccin de una instruccin que es buscada
para su ejecucin. Para propsitos de
programacin
normal,
no
se
necesita
referenciar el registro CS.

Registro DS: La direccin inicial de un


segmento
de
datos
de
programa
es
almacenada en el registro DS. Esta direccin,
ms un valor de desplazamiento en una
instruccin, genera una referencia a la
localidad de un byte especfico en el segmento
de datos.

Registro SS: El registro SS permite la


colocacin en memoria de una pila, para
almacenamiento temporal de direcciones y
datos. El DOS almacena la direccin de inicio
del segmento de pila de un programa en el
registro SS. Esta direccin de segmento, ms
un valor de desplazamiento en el registro del
apuntador de la pila (SP), indica la palabra
8

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
actual en la pila que est siendo direccionada.
Para propsitos de programacin normal, no se
necesita referenciar el registro SS.

Registro ES: Algunas operaciones con


cadenas de caracteres utilizan el registro extra
de segmento para manejar el direccionamiento
de memoria. El registro ES est asociado con el
registro DI (ndice). Un programa que requiere
el uso del registro ES puede inicializarlo con
una direccin de segmento apropiada.

4.6 Registro Apuntador De Instrucciones


El registro IP de 16 bits contiene el desplazamiento de direccin
de la siguiente instruccin que se ejecuta. El IP est asociado
con el registro CS en el sentido de que el IP indica la instruccin
actual dentro del segmento de cdigo que se est ejecutando
actualmente en la memoria.

5 Acceso A Memoria Y A Puertos


Ambos microprocesadores tienen un rango de 65536
direcciones de entrada/salida que se pueden accesar como
puertos de 8 16 bits. En la parte baja de la memoria hay 256
vectores de interrupcin. Estos procesadores usaban 20 bits de
direccin que les permita accesar hasta 1 MB de memoria. Sus
registros internos eran de solo 16 bits, por lo que se desarroll
un mecanismo usando registros de segmento para poder
accesar el megabyte de memoria. El 8086 y el 8088 tenan
cuatro registros de segmento de 16 bits (CS, DS, ES y SS). En
lugar de suministrar los 4 bits faltantes para direccionar los 20
bits, como la mayora de los procesadores segmentados, el
8086 y el 8088 desplazan el contenido del registro de
segmento 4 bits hacia la izquierda y lo suman a una direccin
de memoria de 16 bits proveniente de registros ndice (BX, SI,
DI, BP, SP, IP) y opcionalmente una constante, siendo el
resultado la direccin efectiva. Esto suele ser considerado
como un mal diseo, aunque puede ser aceptable, e incluso til
en el lenguaje ensamblador. Por el contrario, provoca confusin
cuando se hace un uso extensivo de los punteros (como en el
lenguaje C), debido a que es posible que dos punteros con
diferentes valores apunten a la 9
misma direccin de memoria.

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
Este esquema de segmentos se cambi en el Intel 80286 y
luego en el Intel 80386.

6 Segmentacin

Clculo de la direccin efectiva mediante el uso de un


segmento y un offset. El segmento (de 16 bits) se desplaza 4
bits a la izquierda (se multiplica por 16), y se le suma el
registro de direccionamiento (de 16 bits), dando por resultado
una direccin lineal de 20 bits.
Segmentacin de memoria del x86
Haba tambin cuatro registros de 16 bits de segmento que
permitan al 8086 y 8088 tener acceso a un megabyte de
memoria de una manera inusual. En vez de concatenar el
registro de segmento con el registro de direccin, como en la
mayora de los procesadores cuyo espacio de direccin exceda
su tamao de registro, el 8086 y el 8088 desplazaban el
segmento de 16 bits solo cuatro bits hacia la izquierda antes de
sumarlo un offset de 16 bits (16segmento + offset),
produciendo una direccin externa (efectiva o fsica) de 20 bits
a partir del par segmento:offset de 32 bits. Consecuentemente,
cada direccin externa poda ser referida por 2 12 = 4096
diferentes pares segmento:offset. La separacin de 16 bytes
entre las bases del segmento (debido al desplazamiento de 4
bits) fue llamada un prrafo. Aunque fue considerado
complicado e incmodo por muchos programadores, este
esquema tambin tena ventajas; un pequeo programa
(menos de 64 KB) poda ser cargado comenzando en un offset
fijo (como 0) en su propio segmento, evitando la necesidad de
relocalizacin, con a lo ms 15 bytes de alineacin
desperdiciados.
Los compiladores para la familia 8086 comnmente soportaban
dos tipos de punteros, cerca y lejos (near y far). Los punteros
10

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
near eran offset de 16 bits implcitamente asociados con el
segmento del cdigo y/o de datos del programa y as podan
ser usados solo dentro de partes de un programa
suficientemente pequeo para caber en un segmento. Los
punteros far eran pares segmento:offset de 32 bits que se
resolvan en direcciones externas de 20 bits. Algunos
compiladores tambin soportaban punteros enormes (huge),
que eran como los punteros far salvo que la aritmtica de
puntero en un puntero huge lo trataba como un puntero lineal
de 20 bits, mientras que la aritmtica de puntero en un puntero
huge daba vueltas (wrapped around) dentro de su offset de 16
bits sin tocar la parte del segmento de la direccin.
Para evitar la necesidad de especificar near y far en numerosos
punteros, estructuras de datos, y funciones, los compiladores
tambin soportan los "modelos de memoria" que especifican
tamaos de puntero por defecto. Los modelos minsculo (tiny)
(64K mximo), pequeo (small) (128K mximo), compacto
(compact) (datos > 64K), medio (medium) (cdigo > 64K),
grande (large) (cdigo y datos > 64K), y enorme (huge)
(arreglos individuales > 64K), cubran las combinaciones de
punteros near. far y enorme para cdigo y datos. El modelo tiny
significaba que el cdigo y los datos estaban compartidos en
un solo segmento, justo como en la mayora de los
procesadores basados en 8 bits, y poda ser usado para
construir archivos .com por ejemplo. Las bibliotecas
precompiladas vinieron a menudo en varias versiones
compiladas para diversos modelos de memoria.
Segn Morse y otros, los diseadores comtemplaban realmente
usar un desplazamiento de 8 bits (en vez de 4 bits), para crear
un espacio de direccin fsica de 16 MB. Sin embargo, pues que
esto habra forzado a los segmentos comenzar lmites de 256
bytes, y, alrededor de 1976, 1 MB era considerado muy grande
para un microprocesador, la idea fue descartada. Tambin, no
haba suficientes pines disponibles en un paquete barato de 40
pines.
En principio, el espacio de direccin de la serie x86 pudo
haberse extendido en procesadores posteriores, aumentando el
valor del desplazamiento, mientras las aplicaciones obtuvieran
sus segmentos del sistema operativo y no hicieran asunciones
11

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
sobre la equivalencia de diferentes pares segmento:offset. En
la prctica el uso de punteros huge y de mecanismos
similares era amplio y la direccin plana de 32 bits se hizo
posible, con los registros de offset de 32 bits en el 80386,
eventualmente extender el lmite del rango de direcciones en
una forma ms general.
Portando software viejo
Los pequeos programas podan ignorar la segmentacin y solo
usar la direccin plana de 16 bits. Este permita al software de
8 bits ser portado con bastante facilidad al 8086 y 8088. Los
autores del MS-DOS tomaron ventaja de esto proporcionando
una Interface de programacin de aplicaciones muy similar a la
del CP/M as como incluyendo el simple formato de archivo
ejecutable .com, idntico al del CP/M. Esto era importante
cuando el 8086/8088 y el MS-DOS eran nuevos, porque
permiti que muchas aplicaciones existentes de CP/M (y otros)
hacerse rpidamente disponibles, facilitando grandemente la
aceptacin de la nueva plataforma.
Direccin de la primera instruccin ejecutable: FFFF:0
Los procesadores 8088 y 8086, por diseo de su hardware,
ejecutaban su primera instruccin en la direccin FFFF:0 (16
bytes por abajo del tope de su capacidad de memoria de 1 MB
con sus 20 bits de direccionamiento). En esta rea debe haber
una ROM para poder ejecutar sus instrucciones al encender o
reiniciar el computador (o dispositivo). En el caso del IBM PC,
en esa rea estaba el IBM PC ROM BIOS, y la primera
instruccin que ste ejecutaba era un salto (JMP) al inicio del
cdigo del Power On Self Test (POST), donde haba cdigo para
revisar el CPU y revisar e inicializar los diferentes componentes
del hardware y el propio BIOS del computador, y al final se
ejecutaba Boot Strap Loader, que iniciaba el Bootstrap. Los
microprocesadores de la lnea x86 han heredado esta direccin
de memoria (FFFF:0) para la primera instruccin ejecutable.

12

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS

7 Modos De Direccionamiento
Generacin de la direccin de la instruccin:
Todos los registros internos del 8086/8088 son de 16 bits.
El bus de direccin es de 20 bits, por lo que se usa ms de
un registro interno para generar la direccin de 20 bits.

Los 2 registros usados para la direccin de la instruccin


son el IP y el CS. Se combinan en una forma especial para
generar la direccin de 20 bits.
direccin de 20 bits = 1610 * CS + IP
Por ejemplo: Si los registros CS e IP contienen los
valores:
CS = 1000H
IP = 0414 H
La direccin de 20 bits es:
1610 * 1000H + 0414H = 10000H + 0414H
= 10414H
Esta es la direccin en memoria desde la cual la nueva
instruccin debe buscarse.
Al registro IP se le refiere como offset, el registro CS *
1610 apunta a la direccin de inicio o segmento en
memoria desde el cual se calcula el offset. La Figura A
muestra grficamente cmo se calcula la direccin de 20
bits.

13

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS

Cada direccin generada por el 8086/8088 usa uno de


los 4 registros de segmento. Este registro de segmento es
recorrido 4 bits hacia la izquierda antes de ser sumado al
offset.
La instruccin del CPU especfica cules registros internos
se usa para generar el offset.
Vamos a ver los diferentes modos de direccionamiento
tomando como ejemplo la instruccin MOV.
Instruccin MOV
Transfiere un byte desde el operando fuente al operando
destino. Tiene el siguiente formato:
MOV

destino, fuente

7.1 Direccionamiento Inmediato


El operando fuente aparece en la instruccin. Un
ejemplo, es el que mueve un valor constante a un
registro interno.
MOV AX, 568

7.2 Direccionamiento A Registro


Indica que el operando a ser usado est contenido en
uno de los registros internos de propsito general del
14

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
CPU. En el caso de los registros AX, BX, CX o DX los
registros pueden ser de 8 a 16 bits

Ejemplos:

MOV AX, BX

; AX BX

MOV AL, BL

; AL BL

Cuando usamos direccionamiento a registro, el CPU


realiza las operaciones internamente, es decir, no se
genera direccin de 20 bits para especificar el
operando fuente
7.2.1 Direccionamiento De Registro Directo
Especifica en la instruccin la localidad de memoria que
contiene

al

operando.

En

este

tipo

de

direccionamiento, se forma una direccin de 20 bits.


Ejemplo:
MOV CX, COUNT
El valor de COUNT es una constante. Es usada como el
valor offset en el clculo de la direccin de 20 bits
El 8086/8088 siempre usa un registro de segmento
cuando calcula una direccin fsica. Cul registro se
debe usar para esta instruccin? Respuesta: DS
En la Figura B, se muestra el clculo de la direccin
desde la cual se tomar el dato que se carga en CX.

15

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS

Cuando accedamos datos, el registro DS se usa


con un offfset para calcular la direccin de 20
bits, ste es el segmento por omisin. Puede
ser invalidado por usar un prefijo de segmento
en la instruccin.
Ejemplo:
MOV CX, ES: COUNT
Uso del segmento de datos y una constante
para desplazamiento
Este es el segmento por omisin que se usa. Sin
embargo, cualquiera de los 4 segmentos puede
usarse. Esto se efecta especificando el registro
apropiado en la instruccin.
Por ejemplo, suponga que deseamos usar el registro
ES en lugar del DS:
MOV CX, ES: COUNT

7.2.2 Direccionamiento De Registro Indirecto


Con el modo de direccionamiento de registro ndice,
la direccin offset de 16 bits est contenida en
un registro base o registro ndice. Esto es, la
direccin reside en el registro
BX, BP, SI o DI.

16

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
Ejemplo:
MOV AX, [SI]
El valor de 16 bits contenido en el registro SI debe ser
el offset usado para calcular la direccin de 20 bits.
Otra vez, debe usarse un registro de segmento para
generar la direccin final. El valor de 16 bits en SI se
combina con el segmento apropiado para generar la
direccin.
DIRECCIONAMIENTO DE REGISTRO INDIRECTO
CON DESPLAZAMIENTO
Este tipo de direccionamiento incluye a los dos modos de
direccionamiento anteriores. La direccin offset 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 (desplazamiento), donde

COUNT

ha

sido

previamente

definido,

nemotcnico para esta construccin es:


MOV AX, COUNT [DI]
Si:COUNT = 0378H
DI =

04FAH
0872H

Entonces, la direccin offset de 16 bits es 0872H


DIRECCIONAMIENTO DE REGISTRO INDIRECTO
CON UN REGISTRO BASE Y UN REGISTRO NDICE

17

el

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
Este modo de direccionamiento usa la suma de dos
registros internos para obtener la direccin offset de
16 bits a usarse en el clculo de la direccin de 20
bits.
Ejemplos:
MOV

[BP] [DI], AX

; el offset

AX, [BX] [SI]

; el offset

es BP + DI
MOV
es BX + SI
Este es el modo de direccionamiento ms complejo. Es
idntico 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
DIRECCIONAMIENTO DE REGISTRO INDIRECTO
CON UN REGISTRO BASE Y UN REGISTRO NDICE
Y UN REGISTRO CONSTANTE.
Este modo de direccionamiento indica que el offset
especificado por la suma de DI + BX + COUNT sea
usado para mover el dato en memoria en el registro
AX.
MOV AX, COUNT [BX] [DI]

18

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
La direccin offset de 16 bits es 7C09H. La
direccin completa en 20 bits se calcula de la
expresin:
1610*DS + 7C09H
Si el DS contiene 3000H, la direccin completa de 20
bits es:
3000H + 7C09H = 37C09H

8 Instrucciones
8.1 Instrucciones De Transferencia De Datos
(No Afectan Flags)
MOV dest,src
Copia el contenido del operando fuente (src) en el
destino (dest).
Operacin: dest <- src
Las posibilidades son:
1. MOV reg,{reg|mem|inmed}
2. MOV mem,{reg|inmed}
3. MOV {reg16|mem16},{CS|DS|ES|SS}
4. MOV {DS|ES|SS},{reg16|mem16}
PUSH src
Pone el valor en el tope del stack.
Operacin: SP <- SP - 2, [SP+1:SP] <- src donde src =
{reg16|mem16|CS|DS|ES|SS}.
POP dest
Retira el valor del tope del stack ponindolo en el lugar
indicado.
Operacin: dest <- [SP+1:SP], SP <- SP + 2 donde dest
= {reg16|mem16|DS|ES|SS}.
XCHG reg,{reg|mem}
Intercambia ambos valores.
19

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
IN {AL|AX},{DX|inmed (1 byte)}
Pone en el acumulador el valor hallado en el port
indicado.
OUT {DX|inmed (1 byte)},{AL|AX}
Pone en el port indicado el valor del acumulador.
XLAT
Realiza una operacin de traduccin de un cdigo de un
byte a otro cdigo de un byte mediante una tabla.
Operacin: AL <- [BX+AL]
LEA reg,mem
Almacena la direccin efectiva del operando de memoria
en un registro.
Operacin: reg <- direccin mem
LDS reg,mem32
Operacin: reg <- [mem], DS <- [mem+2]
LES reg,mem32
Operacin: reg <- [mem], ES <- [mem+2]
LAHF
Copia en el registro AH la imagen de los ocho bits menos
significativos del registro de indicadores.
Operacin: AH <- SF:ZF:X:AF:X:PF:X:CF
SAHF
Almacena en los ocho bits menos significativos del
registro de indicadores el valor del registro AH.
Operacin: SF:ZF:X:AF:X:PF:X:CF <- AH
PUSHF
Almacena los flags en la pila.
Operacin: SP <- SP - 2, [SP+1:SP] <- Flags.
POPF
Pone en los flags el valor que hay en la pila.
Operacin: Flags <- [SP+1:SP], SP <- SP + 2
20

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS

8.2 Instrucciones Aritmeticas (Afectan los flags


AF, CF, OF, PF, SF, ZF)
ADD dest,src
Operacin: dest <- dest + src.
ADC dest,src
Operacin: dest <- dest + src + CF.
SUB dest,src
Operacin: dest <- dest - src.
SBB dest,src
Operacin: dest <- dest - src - CF.
CMP dest,src
Operacin: dest - src (slo afecta flags).
INC dest
Operacin: dest <- dest + 1 (no afecta CF).
DEC dest
Operacin: dest <- dest - 1 (no afecta CF).
NEG dest
Operacin: dest <- - dest.
donde dest = {reg|mem} y src = {reg|mem|inmed} no
pudiendo ambos operandos estar en memoria.
DAA
Corrige el resultado de una suma de dos valores BCD
empaquetados en el registro AL (debe estar
inmediatamente despus de una instruccin ADD o
ADC). OF es indefinido despus de la operacin.
DAS
Igual que DAA pero para resta (debe estar
inmediatamente despus de una instruccin SUB o SBB).
AAA
21

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
Lo mismo que DAA para nmeros BCD
desempaquetados.
AAS
Lo mismo que DAS para nmeros BCD
desempaquetados.
AAD
Convierte AH:AL en BCD desempaquetado a AL en
binario.
Operacin: AL <- AH * 0Ah + AL, AH <- 0. Afecta PF, SF,
ZF, mientras que AF, CF y OF quedan indefinidos.
AAM
Convierte AL en binario a AH:AL en BCD
desempaquetado.
Operacin: AH <- AL / 0Ah, AL <- AL mod 0Ah. Afecta PF,
SF, ZF, mientras que AF, CF y OF quedan indefinidos.
MUL {reg8|mem8}
Realiza una multiplicacin con operandos no signados de
8 por 8 bits.
Operacin: AX <- AL * {reg8|mem8}. CF=OF=0 si AH =
0, CF=OF=1 en caso contrario. AF, PF, SF, ZF quedan
indefinidos.
MUL {reg16|mem16}
Realiza una multiplicacin con operandos no signados de
16 por 16 bits.
Operacin: DX:AX <- AX * {reg16|mem16}. CF=OF=0 si
DX = 0, CF=OF=1 en caso contrario. AF, PF, SF, ZF
quedan indefinidos.
IMUL {reg8|mem8}
Realiza una multiplicacin con operandos con signo de 8
por 8 bits.
Operacin: AX <- AL * {reg8|mem8} realizando la
multiplicacin con signo. CF = OF = 0 si el resultado
entra en un byte, en caso contrario valdrn 1. AF, PF, SF,
ZF quedan indefinidos.
IMUL {reg16|mem16}
22

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
Realiza una multiplicacin con operandos con signo de
16 por 16 bits.
Operacin: DX:AX <- AX * {reg16|mem16} realizando la
multiplicacin con signo. CF = OF = 0 si el resultado
entra en dos bytes, en caso contrario valdrn 1. AF, PF,
SF, ZF quedan indefinidos.
CBW
Extiende el signo de AL en AX. No se afectan los flags.
CWD
Extiende el signo de AX en DX:AX. No se afectan flags.

8.3 Instrucciones Logicas (Afectan AF, CF, OF,


PF, SF, ZF)
AND dest,src
Operacin: dest <- dest and src.
TEST dest,src
Operacin: dest and src. Slo afecta flags.
OR dest,src
Operacin: dest <- dest or src.
XOR dest,src
Operacin: dest <- dest xor src.
Las cuatro instrucciones anteriores ponen CF = OF = 0, AF
queda indefinido y PF, SF y ZF dependen del resultado.
NOT dest
Operacin: dest <- Complemento a 1 de dest. No afecta
los flags.
SHL/SAL dest,{1|CL}
Realiza un desplazamiento lgico o aritmtico a la
izquierda.
SHR dest,{1|CL}
Realiza un desplazamiento lgico a la derecha.
SAR dest,{1|CL}

23

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
Realiza un desplazamiento aritmtico a la derecha.
ROL dest,{1|CL}
Realiza una rotacin hacia la izquierda.
ROR dest,{1|CL}
Realiza una rotacin hacia la derecha.
RCL dest,{1|CL}
Realiza una rotacin hacia la izquierda usando el CF.
RCR dest,{1|CL}
Realiza una rotacin hacia la derecha usando el CF.
En las siete instrucciones anteriores la cantidad de veces que
se rota o desplaza puede ser un bit o la cantidad de bits
indicado en CL.

8.4 Instrucciones De Manipulacion De Cadenas:


MOVSB
Copiar un byte de la cadena fuente al destino.
Operacin:
1. ES:[DI] <- DS:[SI] (un byte)
2. DI <- DI1
3. SI <- SI1
MOVSW
Copiar dos bytes de la cadena fuente al destino.
Operacin:
1. ES:[DI] <- DS:[SI] (dos bytes)
2. DI <- DI2
3. SI <- SI2
LODSB
Poner en el acumulador un byte de la cadena fuente.
Operacin:
24

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
1. AL <- DS:[SI] (un byte)
2. SI <- SI1
LODSW
Poner en el acumulador dos bytes de la cadena fuente.
Operacin:
1. AX <- DS:[SI] (dos bytes)
2. SI <- SI2
STOSB
Almacenar en la cadena destino un byte del acumulador.
Operacin:
1. ES:[DI] <- AL (un byte)
2. DI <- DI1
STOSW
Almacenar en la cadena destino dos bytes del
acumulador.
Operacin:
1. ES:[DI] <- AX (dos bytes)
2. DI <- DI2
CMPSB
Comparar un byte de la cadena fuente con el destino.
Operacin:
1. DS:[SI] - ES:[DI] (Un byte, afecta slo los flags)
2. DI <- DI1
3. SI <- SI1
CMPSW
Comparar dos bytes de la cadena fuente con el destino.
Operacin:
1. DS:[SI] - ES:[DI] (Dos
25 bytes, afecta slo los flags)

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
2. DI <- DI2
3. SI <- SI2
SCASB
Comparar un byte del acumulador con la cadena destino.
Operacin:
1. AL - ES:[DI] (Un byte, afecta slo los flags)
2. DI <- DI1
SCASW
Comparar dos bytes del acumulador con la cadena
destino.
Operacin:
1. AX - ES:[DI] (Dos byte, afecta slo los flags)
2. DI <- DI2
En todos los casos el signo + se toma si el indicador DF vale
cero. Si vale 1 hay que tomar el signo -.
Prefijo para las instrucciones MOVSB, MOVSW, LODSB, LODSW,
STOSB y STOSW:

REP: Repetir la instruccin CX veces.

Prefijos para las instrucciones CMPSB, CMPSW, SCASB, SCASW:

REPZ/REPE: Repetir mientras que sean iguales hasta un


mximo de CX veces.

REPNZ/REPNE: Repetir mientras que sean diferentes


hasta un mximo de CX veces.

8.5 Instrucciones De Transferencia De Control


(No afectan los flags):
JMP label
Saltar hacia la direccin label.
CALL label
26

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
Ir al procedimiento cuyo inicio es label. Para llamadas
dentro del mismo segmento equivale a PUSH IP: JMP
label, mientras que para llamadas entre segmentos
equivale a PUSH CS: PUSH IP: JMP label.
RET
Retorno de procedimiento.
RET inmed
Retorno de procedimiento y SP <- SP + inmed.
Variaciones de la instruccin de retorno:
RETN [inmed]
En el mismo segmento de cdigo. Equivale a POP IP [:SP
<- SP + inmed].
RETF [inmed]
En otro segmento de cdigo. Equivale a POP IP: POP
CS [:SP <- SP + inmed]
Saltos condicionales aritmticos (usar despus de CMP):

Aritmtica signada (con nmeros positivos, negativos y


cero)
JL etiqueta/JNGE etiqueta
Saltar a etiqueta si es menor.
JLE etiqueta/JNG etiqueta
Saltar a etiqueta si es menor o igual.
JE etiqueta
Saltar a etiqueta si es igual.
JNE etiqueta
Saltar a etiqueta si es distinto.
JGE etiqueta/JNL etiqueta
Saltar a etiqueta si es mayor o igual.
JG etiqueta/JNLE etiqueta
27

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
Saltar a etiqueta si es mayor.

Aritmtica sin signo (con nmeros positivos y cero)


JB etiqueta/JNAE etiqueta
Saltar a etiqueta si es menor.
JBE etiqueta/JNA etiqueta
Saltar a etiqueta si es menor o igual.
JE etiqueta
Saltar a etiqueta si es igual.
JNE etiqueta
Saltar a etiqueta si es distinto.
JAE etiqueta/JNB etiqueta
Saltar a etiqueta si es mayor o igual.
JA etiqueta/JNBE etiqueta
Saltar a etiqueta si es mayor.

Saltos condicionales segn el valor de los indicadores:


JC label
Saltar si hubo arrastre/prstamo (CF = 1).
JNC label
Saltar si no hubo arrastre/prstamo (CF = 0).
JZ label
Saltar si el resultado es cero (ZF = 1).
JNZ label
Saltar si el resultado no es cero (ZF = 0).
JS label
Saltar si el signo es negativo (SF = 1).
JNS label
Saltar si el signo es positivo
28 (SF = 0).

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
JP/JPE label
Saltar si la paridad es par (PF = 1).
JNP/JPO label
Saltar si la paridad es impar (PF = 0).
Saltos condicionales que usan el registro CX como
contador:
LOOP label
Operacin: CX <- CX-1. Saltar a label si CX<>0.
LOOPZ/LOOPE label
Operacin: CX <- CX-1. Saltar a label si CX <> 0 y ZF =
1.
LOOPNZ/LOOPNE label
Operacin: CX <- CX-1. Saltar a label si CX <> 0 y ZF =
0.
JCXZ label
Operacin: Salta a label si CX = 0.
Interrupciones:
INT nmero
Salva los flags en la pila, hace TF=IF=0 y ejecuta la
interrupcin con el nmero indicado.
INTO
Interrupcin condicional. Si OF = 1, hace INT 4.
IRET
Retorno de interrupcin. Restaura los indicadores del
stack.

8.6 Instrucciones De Control Del Procesador


CLC
CF <- 0.
STC
29

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS
CF <- 1.
CMC
CF <- 1 - CF.
NOP
No hace nada.
CLD
DF <- 0 (Direccin ascendente).
STD
DF <- 1 (Direccin descendente).
CLI
IF <- 0 (Deshabilita interrupciones enmascarables).
STI
IF <- 1 (Habilita interrupciones enmascarables).
HLT
Detiene la ejecucin del procesador hasta que llegue una
interrupcin externa.
WAIT
Detiene la ejecucin del procesador hasta que se active
el pin TEST del mismo.
LOCK
Prefijo de instruccin que activa el pin LOCK del
procesador.

9 Bibliografia
-

http://www.wikipedia.org
http://www.intel.com
http://www.slideshare.net
http://www.alpertron.com.ar/INST8088.HTM
http://www.monografias.com

30

ESCUELA PROFESIONAL DE INGENIERIA ELECTRNICA


ARQUITECTURA DE COMPUTADORAS

31

Vous aimerez peut-être aussi