You are on page 1of 12

7.

Registros del 8088


Para una mejora en las variables de memoria y en su funcionamiento
general, el microprocesador dispone de una serie de variables
internas de nombres fijos que son los registros internos, cada uno
poseedor de una funcin concreta. Estos se dividen a su vez por reas
de funcionalidad:
Registros de almacenamiento temporal
- AX (registro Acumulador): Este registro es usado, sobre todo, en
operaciones aritmticas como primer operando y tambin como
registro de propsito general a disposicin del programador.
- BX (registro Base): Se usa principalmente para indicar posiciones de
memoria.
- CX (registro Contador): Este registro se usa siempre que se necesite
un contador en operaciones repetitivas y bucles.
- DX (registro Dato): Se usa como registro auxiliar en operaciones
aritmticas y como contenedor de datos a la hora de usar
instrucciones de comunicacin de puertos.
Estos cuatro registros, como todos los restantes, son de 16 bits, pero
para permitir la realizacin de operaciones de tipo byte (8 bits) cada
uno de estos registros est dividido en dos subregistros de 8 bits a los
que se puede acceder de forma independiente.
Registros de la pila
La pila es un rea de memoria importante. Tiene, en vez de uno, dos
registros que se usan como desplazamiento (offset) para apuntar su
contenido. Se usan como complemento al registro SS y son:
- SP (Stack Pointer): Es el registro que se reserva el procesador para
uso propio en instrucciones de manipulacin de la pila.
- BP (Base Pointer): Se usa como registro auxiliar.
Registros de segmento
Son cuatro registros de 16 bits usados para indicar direcciones de
memoria:
- CS (Code Segment): Este registro es usado por el procesador, junto
con el registro IP, para conocer dnde est la instruccin actual que
est siendo ejecutada.
- DS (Data Segment): Se usa para indicar dnde estn todos los datos
del programa en ejecucin.
- SS (Stack Segment): En este registro se indica al procesador dnde
est la zona de memoria que se usa como segmento de pila.

- ES (Extra Segment): Es el registro que referencia al segmento extra,


y se usa como apuntador de memoria auxiliar en operaciones
complejas donde se necesitan dos punteros de datos simultneos.
Registros ndices.
Se utilizan como desplazamientos complementarios para DS y ES a la
hora de indicar la posicin donde se encuentran los datos a los que se
desea acceder. Son:
- SI (Source index): Se usa como puntero origen en operaciones de
desplazamiento de datos entre dos zonas de memoria.
- DI (Destination index). Se usa como destino en operaciones de
desplazamiento de datos.
Registros de instruccin:
Slo hay uno, el registro IP (Instruction Pointer), es usado por la CPU
para conocer la posicin relativa a la base CS donde se encuentra la
instruccin que se est ejecutando actualmente.
Este registro no puede ser modificado directamente por parte del
programador. Este puntero cambia su contenido automticamente
cada vez que se ejecuta una instruccin o cuando se salta a otro punto
del programa mediante una instruccin de salto.
Registro de Banderas:
Este registro es usado para tener el control de estado y control de las
operaciones. La mayora de sus 16 bits se utiliza para representar un
estado concreto:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
CF -- PF -- AF -- ZF SF TF IF DF OF -- -- -- -.
- Bit 0 - CF (Carry Flag): Es la bandera de acarreo. Se pone a 1 cuando
se produce un resultado con acarreo tras una operacin aritmtica.
- Bit 1: No usado.
- Bit 2 - PF (Parity Flag): Cuando est a 1, indica que hay un nmero
par de bits activos.
- Bit 3: No usado.
- Bit 4 - AF (Auxiliar Flag): Se usa como bandera auxiliar. Se pone a 1
cuando hay necesidad de realizar ajustes tras una operacin de tipo
BCD.
- Bit 5: No usado.

- Bit 6 - ZF (Zero Flag): Indica si se ha producido un resultado cero o


una comparacin con operadores iguales.
- Bit 7 - SF (Sign Flag): Indica si se ha producido un resultado negativo
o comparacin menor.
- Bit 8 - TF (Trap Flag): Es la bandera de atrape, usada en procesos de
depuracin de cdigo.
- Bit 9 - IF (Interrupt Flag): Si est a 1, indica que est permitida la
generacin de interrupciones hardware que generan algunos
perifricos, como la que realiza el teclado cada vez que una tecla es
pulsada.
- Bit 10 - DF (Direction Flag): Indica a la CPU hacia donde se
desplazan los punteros relativos en operaciones repetitivas de cadenas
de datos.
- Bit 11 - OF (Overflow Flag): Indica si se ha producido un
desbordamiento aritmtico.
- Bit 12 al 15: No usados.
A continuacin se muestra la estructura de los registros mencionados:

8. Modos de direccionamiento
Los llamados modos de direccionamiento son las diferentes maneras
de especificar en informtica un operando dentro de una instruccin en
lenguaje ensamblador. Son medios que facilitan la tarea de
programacin, permitiendo el acceso a los datos de una manera
natural y eficiente. Estos indican al procesador como calcular la
direccin absoluta (real o efectiva) donde se encuentran los datos.
Diversas arquitecturas de computadores estn en desacuerdo en gran
proporcin en cuanto al nmero de modos de direccionamiento que

ofrecen desde el hardware. No tener en cuenta los modos de


direccionamiento ms complejos podra presentar una serie de
beneficios, aunque podra requerir de instrucciones adicionales, e
incluso de otro registro. Se ha comprobado que el diseo de CPUs
segmentadas es mucho ms fcil si los nicos modos de
direccionamiento que proporcionan son simples.
Generalmente, consideramos
direccionamiento como:

los

objetivos

de

los

modos

de

Reducir el espacio ocupado en memoria por las instrucciones.


Permitir la reubicacin del cdigo.
Facilitar el manejo de las estructuras de datos.
Existen cinco modos de direccionamiento bsicos: son el inmediato, el
implcito o indexado, el de registro, el directo y el indirecto. A su vez,
estos medios se subdividen en otras clasificaciones ms particulares.
Direccionamiento inmediato
El operando es un nmero que forma parte de la instruccin. No se
necesita calcular la direccin absoluta. La instruccin contiene al
propio objeto. Se emplea cuando la instruccin contiene un valor
constante. El tamao del operando viene determinado por el espacio
reservado para l en el formato de instruccin.
Ejemplos:
ADD BX, 2h
SUB CX, 100h
Direccionamiento directo
La direccin del operando viene incluida en la instruccin, aqu el
procesador calcula la direccin real ([DS]+Dir).
Ejemplo:
MOV AX, DATO
ADD AX, [100]
Direccionamiento de registro
Los operandos o datos se encuentran en registros. No se necesita
calcular la direccin Absoluta. Transfiere un byte o palabra desde el
registro fuente o localidad en memoria, hasta el registro o localidad
destino en la memoria. Ejemplo: OVCX,DX copia el contenido de
tamao de palabra en el registro DX y lo pasa al registro CX.

Ejemplo:
ADD BX, CX
MOV BX, AX
SUB DX, BX
Direccionamiento indexado
El procesador calcula la direccin efectiva (real o absoluta sumando a
DS o a ES SI o DI respectivamente) ms un desplazamiento. Similar al
direccionamiento relativo a registro base: El operando se encuentra en
memoria y por ser un registro ndice: se modifica a menudo en la
ejecucin del programa.
Ejemplo:
MOV SI,2
MOV AX, DATO [SI]
Direccionamiento indirecto
El operando se encuentra en memoria. La instruccin contiene una
direccin que se emplea para leer en memoria una direccin
intermedia que ser la verdadera direccin del objeto buscado.
Ejemplo:
MOV BX, OFFSET DATO (LEA BX, DATO)
MOV AX,[BX]
9. Set de instrucciones del 8088
Inst. Operandos
Bytes Ciclos 8088 Ciclos 286 Ciclos
------ ----------------------------------- ------- --------------- ------------ ------------ -----------AAA
1
8
3
4
3
AAD
2
60
14
19
14
AAM
2
83
16
17
15
AAS
1
8
3
4
3
ADC
registro, registro
2
3
2
2
1
ADC
registro, memoria
2-4
9(13)+EA
7#
6
ADC
memoria, registro
2-4
16(24)+EA
7#
7
ADC
registro, inmediato
3-4
4
3
2
1
ADC
memoria, inmediato
3-6
17(25)+EA
7#
7
ADC
acumulador, inmediato
2-3
4
3
2
1
ADD
registro, registro
2
3
2
2
1
ADD
registro, memoria
2-4
9(13)+EA
7#
6
ADD
memoria, registro
2-4
16(24)+EA
7#
7
ADD
registro, inmediato
3-4
4
3
2
1
ADD
memoria, inmediato
3-6
17(25)+EA
7#
7
ADD
acumulador, inmediato
2-3
4
3
2
1
AND
registro, registro
2
3
2
2
1
AND
registro, memoria
2-4
9(13)+EA
7#
6
AND
memoria, registro
2-4
16(24)+EA
7#
7
AND
registro, inmediato
3-4
4
3
2
1
AND
memoria, inmediato
3-6
17(25)+EA
7#
7
AND
acumulador, inmediato
2-3
4
3
2
1
BOUND registro16, memoria16
2-4
(no existe)
13 #
10
BOUND registro32, memoria32
2-6
(no existe) (no existe)
10

386

2
3
3
2
3
3
2
3
3
7

Ciclos 486

BSF
registro16, registro16
3
(no existe) (no existe)
10+3*n
6-42
BSF
registro16, memoria16
5-7
(no existe) (no existe)
10+3*n
7-43
BSF
registro32, registro32
3
(no existe) (no existe)
10+3*n
6-42
BSF
registro32, memoria32
5-7
(no existe) (no existe)
10+3*n
7-43
BSR
registro16, registro16
3
(no existe) (no existe)
10+3*n
6-42
BSR
registro16, memoria16
5-7
(no existe) (no existe)
10+3*n
7-43
BSR
registro32, registro32
3
(no existe) (no existe)
10+3*n
6-42
BSR
registro32, memoria32
5-7
(no existe) (no existe)
10+3*n
7-43
BT
registro16, registro16
3
(no existe) (no existe)
3
3
BT
memoria16, registro16
5-7
(no existe) (no existe)
12
8
BT
registro32, registro32
3
(no existe) (no existe)
3
3
BT
memoria32, registro32
5-7
(no existe) (no existe)
12
8
BT
registro16, inmediato8
4
(no existe) (no existe)
3
3
BT
memoria16, inmediato8
6-8
(no existe) (no existe)
6
3
BT
registro32, inmediato8
4
(no existe) (no existe)
3
3
BT
memoria32, inmediato8
6-8
(no existe) (no existe)
6
3
BTC
registro16, registro16
3
(no existe) (no existe)
6
6
BTC
memoria16, registro16
5-7
(no existe) (no existe)
13
13
BTC
registro32, registro32
3
(no existe) (no existe)
6
6
BTC
memoria32, registro32
5-7
(no existe) (no existe)
13
13
BTC
registro16, inmediato8
4
(no existe) (no existe)
6
6
BTC
memoria16, inmediato8
6-8
(no existe) (no existe)
8
8
BTC
registro32, inmediato8
4
(no existe) (no existe)
6
6
BTC
memoria32, inmediato8
6-8
(no existe) (no existe)
8
8
BTR
registro16, registro16
3
(no existe) (no existe)
6
6
BTR
memoria16, registro16
5-7
(no existe) (no existe)
13
13
BTR
registro32, registro32
3
(no existe) (no existe)
6
6
BTR
memoria32, registro32
5-7
(no existe) (no existe)
13
13
BTR
registro16, inmediato8
4
(no existe) (no existe)
6
6
BTR
memoria16, inmediato8
6-8
(no existe) (no existe)
8
8
BTR
registro32, inmediato8
4
(no existe) (no existe)
6
6
BTR
memoria32, inmediato8
6-8
(no existe) (no existe)
8
8
BTS
registro16, registro16
3
(no existe) (no existe)
6
6
BTS
memoria16, registro16
5-7
(no existe) (no existe)
13
13
BTS
registro32, registro32
3
(no existe) (no existe)
6
6
BTS
memoria32, registro32
5-7
(no existe) (no existe)
13
13
BTS
registro16, inmediato8
4
(no existe) (no existe)
6
6
BTS
memoria16, inmediato8
6-8
(no existe) (no existe)
8
8
BTS
registro32, inmediato8
4
(no existe) (no existe)
6
6
BTS
memoria32, inmediato8
6-8
(no existe) (no existe)
8
8
CALL procedimiento near (intrasegmento) 3
23
7+m
7+m
3
CALL procedimiento far (intersegmento) 5
36
13+m
17+m
18
CALL intrasegmento indirecto a memoria 2-4
29+EA
11+m
10+m
5
CALL intrasegmento indirecto a registro 2
24
7+m
7+m
5
CALL intersegmento indirecto a memoria 2-4
57+EA
16+m
22+m
17
CBW
1
2
2
3
3
CDQ
1
(no existe) (no existe)
2
3
CLC
1
2
2
2
2
CLD
1
2
2
2
2
CLI
1
2
3
3
5
CMC
1
2
2
2
2
CMP
registro, registro
2
3
2
2
1
CMP
registro, memoria
2-4
9(13)+EA
6#
6
2
CMP
memoria, registro
2-4
9(13)+EA
7#
5
2
CMP
registro, inmediato
3-4
4
3
2
1
CMP
memoria, inmediato
3-6
10(14)+EA
6#
5
2
CMP
acumulador, inmediato
2-3
4
3
2
1
CMPS
1
22(30)
8
10
8
CMPS (REP)
1
9+22(30)*n
5+9*n
5+9*n 5 (CX=0) 7+7*n
CWD
1
5
2
2
3
CWDE
1
(no existe) (no existe)
3
3
DAA
1
4
3
4
2
DAS
1
4
3
4
2
DEC
registro byte
2
3
2
2
1
DEC
registro palabra
1
2
2
2
1
DEC
memoria
2-4
15(23)+EA
7#
6
3
DIV
registro byte
2
80-90
14
14
16
DIV
registro palabra
2
144-162
22
22
24
DIV
registro32
2
(no existe) (no existe)
38
40
DIV
byte de memoria
2-4
86-96+EA
17 #
17
16
DIV
palabra de memoria
2-4
154-172+EA
25 #
25
24
DIV
palabra32 de memoria
2-6
(no existe) (no existe)
41
40
ENTER constante16, 0
4
(no existe)
11
10
14
ENTER constante16, 1
4
(no existe)
15
12
17
ENTER constante16, nivel
4
(no existe) 12+4*(n-1)
15+4*(n-1)
17+3*n
ESC
inmediato, memoria
2-4
8(12)+EA
9-20 # (ver coproc.) (ver coproc.)
ESC
inmediato, registro
2
2
2
(ver coproc.) (ver coproc.)
HLT
1
2
2
5
4
IDIV registro byte
2
101-112
17
19
19
IDIV registro palabra
2
165-185
25
27
27

IDIV registro32
2
(no existe) (no existe)
43
43
IDIV byte de memoria
2-4
107-118+EA
20 #
19
20
IDIV palabra de memoria
2-4
175-194+EA
28 #
27
28
IDIV palabra32 de memoria
2-6
(no existe) (no existe)
43
44
IMUL registro byte
2
80-98
13
9-14
13-18
IMUL registro palabra
2
128-154
21
9-22
13-26
IMUL registro32
2
(no existe) (no existe)
9-38
13-42
IMUL byte de memoria
2-4
86-104+EA
16
12-17
13-18
IMUL palabra de memoria
2-4
138-164+EA
24 #
12-25
13-26
IMUL palabra32 de memoria
2-6
(no existe) (no existe)
12-41
13-42
IMUL registro16 destino, constante
3-4
(no existe)
21
9-22
13-26
IMUL registro16 destino, memoria
5-7
(no existe) (no existe)
12-25
13-26
IMUL registro32 destino, memoria
5-7
(no existe) (no existe)
12-41
13-42
IMUL registro destino, registro, cte. 2-4
(no existe)
21
9-22
13-26
IMUL registro destino, memoria, cte.
3-4
(no existe)
24 #
12-25
13-26
IN
acumulador, puerto fijo
2
10(14)
5
12(26)
14(27)
IN
acumulador, DX
1
8(12)
5
13(27)
14(27)
INC
registro byte
2
3
2
2
1
INC
registro palabra
1
2
2
2
1
INC
memoria
2-4
15(23)+EA
7#
6
3
INS
1
(no existe)
5
15(29)
17(30)
INS
(REP)
2
(no existe)
5+4*n 13(27)+6*n 16(29)+8*n
INT
3
1
52
23+m
33
26
INT
inmediato
2
51
23+m
37
30
INTO
1
53 4
24+m 3
35 3
28 3
IRET
1
32
17+m
22
15
JCXZ
2
18 6
8+m 4
9+m 5
31
JECXZ
2
(no existe)
(no existe) 9+m 5
31
JMP
short
2
15
7+m
7+m
3
JMP
near (intrasegmento)
3
15
7+m
7+m
3
JMP
far (intersegmento)
5
15
11+m
12+m
17
JMP
intrasegmento indirecto a memoria 2-4
18+EA
11+m #
10+m
5
JMP
intrasegmento indirecto a registro 2
11
7+m
7+m
5
JMP
intersegmento indirecto a memoria 2-4
24+EA
15+m
17+m
13
Jxxx inmediato8
2
16 4
7+m 3
7+m 3
31
Jxxx inmediato32
6
(no existe)
(no existe) 7+m 3
31
LAHF
1
4
2
2
3
LDS
2-4
24+EA
7#
7
6
LEA
2-4
2+EA
3#
2
1
LEAVE
1
(no existe)
5
4
5
LES
2-4
24+EA
7#
7
6
LFS
2-4
(no existe)
(no existe)
7
6
LGS
2-4
(no existe)
(no existe)
7
6
LSS
2-4
(no existe)
(no existe)
7
6
LOCK
1
2
0
0
1
LODS
1
12(16)
5
5
5
LODS (REP)
1
9+13(17)*n
5+4*n
5+6*n 5 (CX=0) 7+4*n
LOOP
2
17 5
8+m 4
11+m
26
LOOPE
2
18 6
8+m 4
11+m
96
LOOPNE
2
19 5
8+m 4
11+m
96
LOOPZ
2
18 6
8+m 4
11+m
96
LOOPNZ
2
19 5
8+m 4
11+m
96
MOV
memoria, acumulador
3
10(14)
3
2
1
MOV
acumulador, memoria
3
10(14)
5
4
1
MOV
registro, registro
2
2
2
2
1
MOV
registro, memoria
2-4
8(12)+EA
5#
4
1
MOV
memoria, registro
2-4
9(13)+EA
3#
2
1
MOV
registro, inmediato
2-3
4
2
2
1
MOV
memoria, inmediato
3-6
10(14)+EA
3#
2
1
MOV
registro de segmento, registro
2
2
2
2
3
MOV
registro, registro de segmento
2
2
2
2
3
MOV
registro de segmento, memoria
2-4
8(12)+EA
5#
5
9
MOV
memoria, registro de segmento
2-4
9(13)+EA
3#
2
3
MOVS
1
18(26)
5
7
7
MOVS (REP)
1
9+17(25)*n
5+4*n
5+4*n 5 (CX=0) 12+3*n
MOVSX registro16, registro8
3
(no existe)
(no existe)
3
3
MOVSX registro16, memoria8
5-7 (no existe)
(no existe)
6
3
MOVSX registro32, registro8
3
(no existe)
(no existe)
3
3
MOVSX registro32, memoria8
5-7 (no existe)
(no existe)
6
3
MOVSX registro32, registro16
3
(no existe)
(no existe)
3
3
MOVSX registro32, memoria16
5-7 (no existe)
(no existe)
6
3
MOVZX registro16, registro8
3
(no existe)
(no existe)
3
3
MOVZX registro16, memoria8
5-7 (no existe)
(no existe)
6
3
MOVZX registro32, registro8
3
(no existe)
(no existe)
3
3
MOVZX registro32, memoria8
5-7 (no existe)
(no existe)
6
3
MOVZX registro32, registro16
3
(no existe)
(no existe)
3
3
MOVZX registro32, memoria16
5-7 (no existe)
(no existe)
6
3
MUL
registro byte
2
70-77
13
9-14
13
MUL
registro palabra
2
118-133
21
9-22
13
MUL
registro32
2
(no existe) (no existe)
9-38
13

MUL
byte de memoria
2-4
76-83+EA
16 #
12-27
18
MUL
palabra de memoria
2-4
128-143+EA
24 #
12-25
26
MUL
palabra32 de memoria
2-6
(no existe) (no existe)
12-41
42
NEG
registro
2
3
2
2
1
NEG
memoria
2-4
16(24)+EA
7#
6
3
NOP
1
3
3
3
1
NOT
registro
2
3
2
2
1
NOT
memoria
2-4
16(24)+EA
7#
6
3
OR
registro, registro
2
3
2
2
1
OR
registro, memoria
2-4
9(13)+EA
7#
6
3
OR
memoria, registro
2-4
16(24)+EA
7#
7
3
OR
registro, inmediato
3-4
4
3
2
1
OR
memoria, inmediato
3-6
17(25)+EA
7#
7
3
OR
acumulador, inmediato
2-3
4
3
2
1
OUT
puerto fijo, acumulador
2
10(14)
3
10(24)
16(29)
OUT
DX, acumulador
1
8(12)
3
11(25)
16(29)
OUTS byte o palabra
1
(no existe)
5
14(28)
17(30)
OUTS (REP)
2
(no existe)
5+4*n
12(26)+5*n 17(31)+5*n
POP
registro normal
1
12
5
4
4
POP
registro de segmento
1
12
5
7
3
POP
memoria
2-4
25+EA
5#
5
6
POPA
1
(no existe)
19
24
9
POPAD
1
(no existe)
(no existe)
24
9
POPF
1
12
5
5
9
POPFD
1
(no existe)
(no existe)
5
9
PUSH registro
1
14
3
2
1
PUSH memoria
2-4
24+EA
5#
5
4
PUSH inmediato
2-3 (no existe)
3
2
1
PUSHA
1
(no existe)
17
18
11
PUSHAD
1
(no existe)
(no existe)
18
11
PUSHF
1
14
3
4
4
PUSHFD
1
(no existe)
(no existe)
4
4
RCL
registro,1
2
2
2
9
3
RCL
registro,CL
2
8+4*bits
5
9
8-30
RCL
registro, contador
3
(no existe)
5
9
8-30
RCL
memoria, contador
3-6 (no existe)
8#
10
9-31
RCL
memoria,1
2-4
15(23)+EA
7#
10
4
RCL
memoria,CL
2-4 20(28)+EA+4*bits
8#
10
9-31
RCR
registro,1
2
2
2
9
3
RCR
registro,CL
2
8+4*bits
5
9
8-30
RCR
registro, contador
3
(no existe)
5
9
8-30
RCR
memoria, contador
3-6 (no existe)
8#
10
9-31
RCR
memoria,1
2-4
15(23)+EA
7#
10
4
RCR
memoria,CL
2-4 20(28)+EA+4*bits
8#
10
9-31
REP
1
2
0
0
0
REPE
1
2
0
0
0
REPNE
1
2
0
0
0
REPZ
1
2
0
0
0
REPNZ
1
2
0
0
0
RET
intrasegmento
1
20
11+m
10+m
5
RET
intrasegmento con SP+inmediato
3
24
11+m
10+m
5
RET
intersegmento
1
32
15+m
18+m
13
RET
intersegmento con SP+inmediato
3
31
15+m
18+m
14
ROL
registro,1
2
2
2
3
3
ROL
registro,CL
2
8+4*bits
5
3
3
ROL
registro, contador
3
(no existe)
5
3
2
ROL
memoria, contador
3-6 (no existe)
8#
7
4
ROL
memoria,1
2-4
15(23)+EA
7#
7
4
ROL
memoria,CL
2-4 20(28)+EA+4*bits
8#
7
4
ROR
registro,1
2
2
2
3
3
ROR
registro,CL
2
8+4*bits
5
3
3
ROR
registro, contador
3
(no existe)
5
3
2
ROR
memoria, contador
3-6 (no existe)
8#
7
4
ROR
memoria,1
2-4
15(23)+EA
7#
7
4
ROR
memoria,CL
2-4 20(28)+EA+4*bits
8#
7
4
SAHF
1
4
2
3
2
SAL
registro,1
2
2
2
3
3
SAL
registro,CL
2
8+4*bits
5
3
3
SAL
registro, contador
3
(no existe)
5
3
2
SAL
memoria, contador
3-6 (no existe)
8#
7
4
SAL
memoria,1
2-4
15(23)+EA
7#
7
4
SAL
memoria,CL
2-4 20(28)+EA+4*bits
8#
7
4
SAR
registro,1
2
2
2
3
3
SAR
registro,CL
2
8+4*bits
5
3
3
SAR
registro, contador
3
(no existe)
5
3
2
SAR
memoria, contador
3-6 (no existe)
8#
7
4
SAR
memoria,1
2-4
15(23)+EA
7#
7
4
SAR
memoria,CL
2-4 20(28)+EA+4*bits
8#
7
4
SBB
registro, registro
2
3
2
2
1
SBB
registro, memoria
2-4
9(13)+EA
7#
6
2

SBB
memoria, registro
2-4
16(24)+EA
7#
7
3
SBB
registro, inmediato
3-4
4
3
2
1
SBB
memoria, inmediato
3-6
17(25)+EA
7#
7
3
SBB
acumulador, inmediato
2-3
4
3
2
1
SCAS
1
15(19)
7
7
6
SCAS (REP)
1
9+15(19)*n
5+8*n
5+8*n 5 (CX=0) 7+5*n
SETcc registro8
2
(no existe) (no existe)
4
4
SETcc memoria8
4-6 (no existe) (no existe)
5
3
SHL
registro,1
2
2
2
3
3
SHL
registro,CL
2
8+4*bits
5
3
3
SHL
registro, contador
3
(no existe)
5
3
2
SHL
memoria, contador
3-6
(no existe)
8#
7
4
SHL
memoria,1
2-4
15(23)+EA
7#
7
4
SHL
memoria,CL
2-4 20(28)+EA+4*bits
8#
7
4
SHLD registro16, registro16, inmediato8 4
(no existe) (no existe)
3
2
SHLD memoria16, registro16, inmediato8 6-8 (no existe) (no existe)
7
3
SHLD registro32, registro32, inmediato8 4
(no existe) (no existe)
3
2
SHLD memoria32, registro32, inmediato8 6-8 (no existe) (no existe)
7
3
SHLD registro16, registro16, CL
3
(no existe) (no existe)
3
2
SHLD memoria16, registro16, CL
5-7 (no existe) (no existe)
7
3
SHLD registro32, registro32, CL
3
(no existe) (no existe)
3
2
SHLD memoria32, registro32, CL
5-7 (no existe) (no existe)
7
3
SHR
registro,1
2
2
2
3
3
SHR
registro,CL
2
8+4*bits
5
3
3
SHR
registro, contador
3
(no existe)
5
3
2
SHR
memoria, contador
3-6
(no existe)
8#
7
4
SHR
memoria,1
2-4
15(23)+EA
7#
7
4
SHR
memoria,CL
2-4 20(28)+EA+4*bits 8 #
7
4
SHRD registro16, registro16, inmediato8 4
(no existe) (no existe)
3
2
SHRD memoria16, registro16, inmediato8 6-8 (no existe) (no existe)
7
3
SHRD registro32, registro32, inmediato8 4
(no existe) (no existe)
3
2
SHRD memoria32, registro32, inmediato8 6-8 (no existe) (no existe)
7
3
SHRD registro16, registro16, CL
3
(no existe) (no existe)
3
2
SHRD memoria16, registro16, CL
5-7 (no existe) (no existe)
7
3
SHRD registro32, registro32, CL
3
(no existe) (no existe)
3
2
SHRD memoria32, registro32, CL
5-7 (no existe) (no existe)
7
3
STC
1
2
2
2
2
STD
1
2
2
2
2
STI
1
2
2
3
5
STOS
1
11(15)
3
4
5
STOS (REP)
1
9+10(14)*n
4+3*n
5+5*n 5 (CX=0) 7+4*n
SUB
registro, registro
2
3
2
2
1
SUB
registro, memoria
2-4
9(13)+EA
7#
6
2
SUB
memoria, registro
2-4
16(24)+EA
7#
7
3
SUB
registro, inmediato
3-4
4
3
2
1
SUB
memoria, inmediato
3-6
17(25)+EA
7#
7
3
SUB
acumulador, inmediato
2-3
4
3
2
1
TEST registro, registro
2
3
2
2
1
TEST registro, memoria
2-4
9(13)+EA
6#
5
2
TEST memoria, registro
2-4
16(24)+EA
6#
5
2
TEST registro, inmediato
3-4
4
3
2
1
TEST memoria, inmediato
3-6
17(25)+EA
6#
5
2
TEST acumulador, inmediato
2-3
4
3
2
1
WAIT
1
3
3
6
1-3
XCHG AX,registro16
1
3
3
3
3
XCHG registro, registro
2
4
3
3
3
XCHG memoria, registro
2-4
17(25)+EA
5#
5
5
XLAT
1
11
5
5
4
XOR
registro, registro
2
3
2
2
1
XOR
registro, memoria
2-4
9(13)+EA
7#
6
2
XOR
memoria, registro
2-4
16(24)+EA
7#
7
3
XOR
registro, inmediato
3-4
4
3
2
1
XOR
memoria, inmediato
3-6
17(25)+EA
7#
7
3
XOR
acumulador, inmediato 2-3
4
3
2
1

10. Lenguaje mquina, macroensamblador del 8088


Todo procesador, grande o pequeo, desde el de una calculadora hasta
el de un supercomputador, ya sea de propsito general o especfico,
posee un lenguaje nico que es capaz de reconocer y ejecutar. Por
razones que resultan obvias, este lenguaje ha sido denominado
Lenguaje de Mquina y ms que ser propio de un computador
pertenece a su microprocesador. El lenguaje de mquina est
compuesto por una serie de instrucciones, que son las nicas que

pueden ser reconocidas y ejecutadas por el microprocesador. Este


lenguaje es un conjunto de nmeros que representan las operaciones
que realiza el microprocesador a travs de su circuitera interna. Estas
instrucciones, por decirlo as, estn grabadas o "alambradas" en el
hardware y no pueden ser cambiadas. El nivel ms bajo al que
podemos aspirar a llegar en el control de un microprocesador es
precisamente el del lenguaje de mquina.
Obviamente, el lenguaje de mquina de un microprocesador no puede
ser ejecutado por otro microprocesador de arquitectura distinta, a
menos que haya cierto tipo de compatibilidad prevista. El lenguaje
mquina por defecto es Assembler.

11. Debugger y simuladores del 8088


DEBUG.EXE (o DEBUG.COM) es un programa DOS, que permite que
programas de 16 bits corran una instruccin a tiempo con pausas para
una observacin a los registros y a la memoria. Puedes correrlo de la
lnea de comandos MSDOS como:
DEBUG name.EXE
, donde name es el nombre de tu archivo ejecutable.
EMU8086 v4.05 (Simulador): Este programa es sumamente til
para aquellos que quieran aprender lenguaje ensamblador
(Assembler), ya que incorpora un editor avanzado, un ensamblador,
una PC virtual y tutoriales paso a paso. De esta manera, es posible
ejecutar cdigo fuente sobre un emulador 8086, siendo el cdigo de
mquina totalmente compatible con las generaciones siguientes de
microprocesadores Intel.
Los Intel 8086 e Intel 8088 (i8086, llamado oficialmente iAPX 86, e
i8088) son dos microprocesadores de 16 bits diseados por Intel en
1978, iniciadores de la arquitectura x86. La diferencia entre el i8086 y
el i8088 es que este ltimo utiliza un bus externo de 8 bits, para poder
emplear circuitos de soporte al microprocesador ms econmicos, en
contraposicin al bus de 16 bits del i8086.

You might also like