Você está na página 1de 10

Conjunto de Instrucciones del 8086

Tabla 1.1 Instruccin MOVa


Ejemplo codificado
Mnemnico general Segmento de
Cdigo Objeto Mnemnico Operacin simblica Descripcin
Op-code Operando memoria
MOV dest,fuente 8B C3 MOV AX,BX Dentro del CPU AXBX Registro a registro.
8A E3 MOV AH,BL Dentro del CPU AHBL Registro a registro.
A1 00 10 MOV AX,MEMWDSb Datos AL[1000H], AH[1001H] Memoria a registro.
A0 02 10 MOV AL,MEMBDSc Datos AL[1002H] Memoria a registro.
89 1E 00 10 MOV MEMWDS,BXb Datos [1000H]BL, [1001H]BH Registro a memoria.
88 1E 02 10 MOV MEMBDS,BLc Datos [1002H]BL Registro a memoria.
C7 06 00 10 34 MOV [1000H]34H,
Datos Dato inmediato a memoria.
12 MEMWDS,1234Hb [1001H]12H
C6 06 02 10 34 MOV MEMBDE,34Hc Datos [1002H]34H Dato inmediato a memoria.
B0 10 MOV AL,10H Cdigo AL10H Dato inmediato a registro.
B8 00 10 MOV AX,1000H Cdigo Al00H, AH10H Dato inmediato a registro.
Registro de propsito general a
8E D8 MOV DS,AX Dentro del CPU DSAX
registro de segmento.
Registro de segmento a
8C C2 MOV DX,ES Dentro del CPU DXES
registro de propsito general.
Memoria a registro de
8E 06 00 10 MOV ES,MEMWDSb Datos ES[1001H:1000H]
segmento.
Registro de segmento a
8C 0E 00 10 MOV MEMWDS,CSb Datos [1001H:1000H]CS
memoria.
aLalocalidad de memoria se puede especificar utilizando cualquiera de los modos de direccionamiento mostrados en la tabla 1.1. En esta tabla se utiliza
modo de direccionamiento directo para todos los ejemplos de acceso a memoria.
bMEMWDS se asume que apunta a la palabra que empieza en la localidad 1000H en el segmento de datos.
cMEMBDS se asume que apunta al byte de la localidad 1002H en el segmento de datos.

Tabla 1.2. Instrucciones de Transferencia de datos especialesa


Ejemplo codificado
Mnemnico general Cdigo Segmento
Mnemnico Operacin simblica Descripcin
Op-code Operando Objeto de memoria
Dentro del
AX BX
93 XCHG AX,BX CPU
AL BH Intercambia los contenidos del operando fuente byte o word con el
XCHG dest,fuente 86 C7 XCHG AL,BH Dentro del
[SI] DL; [SI+1] operando destino, ninguna bandera es afectada.
87 14 XCHG [SI],DX CPU
DH
Datos
Dentro del
LAHF 9F LAHF AH Banderas Copia el byte menos significativo de las banderas en AH.
CPU
Dentro del
SAHF 9E SAHF Banderas AH Copia AH en el byte menos significativo de las banderas.
CPU
b
AL puerto 26H
E4 26 IN AL,26H
b
ALpuerto 26H, Introduce (lee) un byte o palabra de un puerto de E/S directo 0-255.
E5 26 IN AX,26H
IN AHpuerto 27H Introduce (lee) un byte o palabra de un puerto de E/S indirecto 0-
acumulador,puerto b
ALpuerto DX 65535; la direccin del puerto est en DX; ninguna bandera es
EC IN AL,DX
b
AL puerto DX; afectada.
ED IN AX,DX
AHpuerto DX+1
b
puerto 26HAL
E6 26 OUT 26H,AL Proporciona (escribe) un byte o palabra a puertos directos de E/S 0-
b
puerto 26HAL;
E7 26 OUT 26H,AX 255.
OUT puerto 27HAH
Proporciona (escribe) un byte o palabra a puertos de E/S indirectos
puerto,acumulador b
puerto DXAL
EE OUT DX,AL 0-65535; la direccin del puerto est en DX: ninguna de las
b
puerto DXAL;
EF OUT DX,AX banderas se afecta.
puerto DX+1 AH
8D 1E 00 La direccin efectiva del operando fuente se transfiere al operando
LEA dest,fuentec LEA BX,MEMBDSc Datos BL00; BH 10H
10 destino, ninguna bandera se afecta.
BL [SI];
LDS BX,DWORD
BH[SI+1];
LDS dest,fuented C5 1C PTR[SI] Datos Transfiere una variable apuntador de 32 bits del operando fuente
DS[SI+3:SI+2]
en memoria al registro destino y al registro DS o ES. Ninguna
BL [SI];
LES dest,fuented C4 1C LES BX,DWORD Datos bandera se afecta.
BH[SI+1];
PTR[SI]
ES[SI+3:SI+2]
Remplaza el byte en AL con un byte de la tabla (de 256 bytes)
XLAT D7 XLAT Datos AL[BX+AL]; empezando en [BX]; usa AL como un desplazamiento dentro de esta
tabla; ninguna bandera es afectada.
aLos operandos pueden utilizar cualquier modo de direccionamiento mostrado en la tabla 1.1. En esta tabla se usa direccionamiento indirecto solo como
ejemplo.
bLas instrucciones IN y OUT no involucran los registros de segmento.
cMEMBDS se asume que apunta al byte de la localidad 1000H en el segmento de datos.
dEl destino debe ser un registro del CPU de 16 bits.
Tabla 1.3.1 Instrucciones de cadena (string)
Ejemplo codificado
Mnemnico
Segmento
general Cdigo
Mnemnico de Operacin simblica Descripcin
Op-code Objeto
memoria
Operando
ES:[DI]AL
STOSB AA STOSB Extra Si DF=0, DIDI+1
Transfiere un byte o palabra del registro AL o AX
Si DF=1, DIDI-1
a la cadena direccionada por DI en el segmento
ES:[DI] AL
extra; Si DF=0, incrementa DI, de lo contrario
ES:[DI+1] AH
STOSW AB STOSW Extra decrementa DI; las banderas no son afectadas.
Si DF=0, DIDI+2
Si DF=1, DIDI-2
AL DS:[SI]
LODSB AC LODSB Datos Si DF=0,SISI+1 Transfiere un byte o palabra de la cadena
Si DF=1, SISI-1 direccionada por SI en el segmento de datos al
ALDS:[SI] registro AL o AX; Si DF=0, incrementa SI, de lo
AHDS:[SI+1] contrario decrementa SI; las banderas no son
LODSW AD LODSW Datos
Si DF=0, SISI+2 afectadas.
Si DF=1, SISI-2

Tabla 1.3.2 Instrucciones de cadena (string) Continuacin.


Ejemplo codificado
Mnemnico
general Cdigo Segmento de
Mnemnico Operacin simblica Descripcin
Op-code Objeto memoria
Operando
ES:[DI] DS:[SI]
Transfiere un byte o palabra de una cadena
MOVSB A4 MOVSB Datos, Extra Si DF=0,DIDI+1, SISI+1
direccionada por SI en el segmento de
Si DF=1, DIDI-1, SISI-1
datos a una cadena direccionada por DI en
ES:[DI] DS:[SI]
el segmento extra; si DF=0, incrementa SI y
ES:[DI+1]DS:[SI+1]
MOVSW A5 MOVSW Datos, Extra DI, de lo contrario decrementa SI y DI; las
Si DF=0,DIDI+2, SISI+2
banderas no son afectadas.
Si DF=1, DIDI-2, SISI-2
AL ES:[DI]; actualiza
banderas Substrae el byte o palabra de la cadena
SCASB AE SCASB Extra
Si DF=0, DI DI + 1 direccionado por DI en el segmento extra
Si DF=1, DI DI - 1 de AL o AX; Si DF=0, incrementa DI, de lo
AX ES:[DI+1:DI]; actualiza contrario decrementa DI, las banderas son
banderas actualizadas para reflejar la relacin entre
SCASW AF SCASW Extra
Si DF=0, DI DI + 2 los dos operandos.
Si DF=1, DI DI - 2
DS:[SI] - ES:[DI]; actualiza
Substrae el byte o palabra del elemento
banderas
cadena direccionado por DI en el segmento
CMPSB A6 CMPSB Extra, Datos Si DF=0 DIDI+1, SISI+1
extra del byte o palabra del elemento
Si DF=1 DIDI-1, SISI-1
cadena fuente direccionado por SI en el
segmento de datos; Si DF=0,
DS:[SI+1:SI] - ES:[DI+1:DI];
incrementa DI y SI; las banderas son
actualiza banderas
CMPSW A7 CMPSW Extra, Datos actualizadas para reflejar la relacin de los
Si DF=0 DIDI+2, SISI+2
dos operandos.
Si DF=1 DIDI-2, SISI-2
Tabla 1.4 Prefijo REP
Ejemplo codificado
Mnemnico
general Cdigo Segmento
Mnemnico Operacin simblica Descripcin
Op-code Objeto de memoria
Operando
STOSB; CX CX - 1
F3 AA REP STOSB Extra
Repite hasta que CX=0
STOSW; CX CX - 1
F3 AB REP STOSW Extra La instruccin de cadena seguida del prefijo
Repite hasta que CX=0
REP REP se repite hasta que CX se decrementa
MOVSB; CX CX 1
F3 A4 REP MOVSB Extra, datos hasta 0.
Repite hasta que CX=0
MOVSW; CXCX-1
F3 A5 REP MOVSW Extra, datos
Repite hasta que CX=0
SCASB; CX CX 1
Repite si ZF = 1 y CX 0
F3 AE REPZ SCASB Extra
Similar a la anterior excepto Repite la operacin de cadena si la
SCASW bsqueda (SCAS) o comparacin (CMPS) es
REPE/REPZa F3 AF REPZ SCASW Extra
Similar a la anterior excepto igual (ZF=1) y CX 0; el decremento de CX
F3 A6 REPZ CMPSB Extra, datos
CMPSB no afecta a las banderas.
F3 A7 REPZ CMPSW Extra, datos
Similar a la anterior excepto
CMPSW
SCASB; CX CX 1
REPNE SCASB Repite si ZF = 0 y CX 0
F2 AE Extra
Similar a la anterior excepto Repite la operacin de cadena si la
REPNE SCASW SCASW bsqueda (SCAS) o comparacin (CMPS) no
REPNE/REPNZa F2 AF Extra
REPNE CMPSB Similar a la anterior excepto es igual (ZF=0) y CX 0; el decremento de
F2 A6 Extra, datos
REPNE CMPSB CX no afecta a las banderas.
F2 A7 Extra, datos
CMPSW Similar a la anterior excepto
CMPSW
aCualquiera de los mnemnicos puede utilizarse.

Tabla 1.5. Instrucciones de Corrimiento y Rotacin


Ejemplo codificadoa
Mnemnico general Cdigo Segmento de
Mnemnico Operacin simblica Descripcin
Op-code Operando Objeto memoria
Dentro del Ashl A, A10
SAL/SHLb D1 E0 SAL AX,1 CPU
dest,contador D3 E0 SAL AX,CL Dentro del 0
Un operando byte o palabra se
C
recorre a la izquierda una o CL
CPU
veces; AF es indefinida, todas las
Dentro del Ashr A, (S)A(S)e
dems banderas son actualizadas;
D0 F8 SAR AL,1 CPU
SAR dest, contador para corrimientos de un solo bit,
D2 F8 SAR AL,CL Dentro del C
OF OF es activada si cambia el
CPU
signo del operando.
D1 2C SHR WORD PTR[SI],1 Datos
SHR dest, contador 0 C
D2 2C SHR BYTE PTR[SI],CL Datos
Dentro del
D1 D3 RCL BX,1 CPU
RCL dest, contador C
D3 D3 RCL BX,CL Dentro del
CPU
Dentro del
Un operando byte o palabra se
D0 DB RCR BL,1 CPU
RCR dest, contador C rota a la izquierda o a la derecha
D2 DB RCR BL,CL Dentro del
una o CL veces; solo se afectan
CPU
CF y OF; para rotaciones de un
D1 04 ROL WORD PTR[SI],1 Datos solo bit, OF se activa si el signo
ROL dest, contador C
D2 04 ROL BYTE PTR[SI],CL Datos del operando cambia.
D1 0E 00
10 ROR MEMWDS,1c Datos
ROR dest, contador C
D2 0E 04 ROR MEMBDS,CLd Datos
10
aCualquierade los modos de direccionamiento puede utilizarse.
bCualquierforma del mnemnico puede utilizarse.
cMEMWDS se asume que apunta a la palabra que empieza en la localidad 1000H en el segmento de datos.
dMEMBDS se asume que apunta al byte de la localidad 1004H en el segmento de datos.
e A(S) A(N) Registro A
Figuras para los corrimientos aritmticos A representa un registro o localidad de memoria.
Tabla 1.6 Instrucciones Lgicas
Ejemplo codificado
Mnemnico
general Cdigo Segmento de
Mnemnicoa Operacin simblica Descripcin
Op-code Objeto memoria
Operando

NOT dest
F7 D3 NOT BX Dentro del CPU BX BX Complementa todos los bits del
operando byte o palabra; no se afecta
F6 14 NOT BYTE PTR[SI] Datos [SI] [SI ] ninguna bandera.
Realiza la funcin AND bit a bit en
23 CA tamao palabra o byte con los
AND CX, DX Dentro del CPU CX CX ^ DX
AND dest, 22 3C operandos fuente y destino. Almacena
AND BH,BYTE PTR [SI] Datos BH BH ^ [SI]
fuente 25 00 el resultado en el operando destino; AF
AND AX, 8000H Cdigo AX AX ^ 8000H
80 es indefinida, las dems banderas se
actualizanb.
Realiza la funcin OR bit a bit en
0B CA tamao palabra o byte con los
OR CX,DX Dentro del CPU CX CX + DX
0A 3C operandos fuente y destino, almacena
OR dest, fuente OR BH, BYTE PTR[SI] Datos BH BH + [SI]
0D 00 el resultado en el operando destino; AF
OR AX,8000H Cdigo AX AX + 8000H
80 es indefinida, las dems banderas se
actualizanb.
Realiza la funcin OR exclusiva bit a bit
33 CA en tamao palabra o byte con los
XOR CX,DX Dentro del CPU CX CX DX
XOR dest, 32 3C operandos fuente y destino, almacena
XOR BH, BYTE PTR[SI] Datos BH BH [SI]
fuente 35 00 el resultado en el operando destino; AF
XOR AX,8000H Cdigo AX AX 8000H
80 es indefinida, las dems banderas se
actualizanb.
Realiza la funcin AND bit a bit en
85 D1 CX ^ DX; actualiza banderas tamao palabra o byte con los
TEST CX,DX Dentro del CPU
TEST dest, 84 3C BH ^ [SI]; actualiza banderas operandos fuente y destino, los
TEST BH, BYTE PTR[SI] Datos
fuente A9 00 AX ^ 8000H; actualiza operandos permanecen sin cambiar
TEST AX,8000H Cdigo
80 banderas (no guarda resultado); AF es indefinida,
las dems banderas se actualizanb.
aCualquier modo de direccionamiento puede utilizarse.
b CF y OF son puestas a cero.

Tabla 1.7 Instrucciones de Adicin y Substraccin


Ejemplo codificado
Mnemnico
general Segmento de
Cdigo Objeto Mnemnicoa Operacin simblica Descripcin
Op-code memoria
Operando
Dentro del Reemplaza el byte o
03 F2 SI SI + DX
ADD SI, DX CPU palabra destino con
00 2F [BX][BX] + CH
ADD dest, ADD BYTE PTR[BX],CH Datos la suma de los
81 C7 00 80 DI DI + 8000H
fuente ADD DI,8000H Dentro del operandos fuente y
81 06 00 10 00 [1001H:1000H]
ADD MEMWDS,8000Ha CPU destino; actualiza
80 [1001H:1000H]+8000H
Datos todas las banderas.
Reemplaza el byte o
Dentro del
13 F2 SI SI + DX + CF palabra destino con
ADC SI, DX CPU
10 2F [BX][BX]+CH + CF la suma de los
ADC dest, ADC BYTE PTR [BX],CH Datos
81 D7 00 80 DI DI + 8000H + CF operandos fuente y
fuente ADC DI, 8000H Dentro del
81 16 00 10 00 [1001H:1000H] destino ms el
ADC MEMWDS,8000Ha CPU
80 [1001H:1000H]+8000H+CF acarreo; actualiza
Datos
todas las banderas.
Dentro del
Reemplaza el byte o
2B F2 CPU SI SI - DX
SUB SI, DX palabra destino con
28 2F Datos [BX][BX] - CH
SUB dest, SUB BYTE PTR[BX],CH la diferencia entre
81 EF 00 80 Dentro del DI DI - 8000H
fuente SUB DI,8000H el operando fuente
81 2E 00 10 00 CPU [1001H:1000H] [1001H:1000H]-
SUB MEMWDS,8000Ha y destino; actualiza
80 Datos 8000H
todas las banderas.
Reemplaza el byte o
Dentro del
1B F2 SI SI - DX - CF palabra destino con
SBB SI, DX CPU
18 2F [BX][BX]- CH - CF la diferencia entre
SBB dest, SBB BYTE PTR [BX],CH Datos
81 DF 00 80 DI DI - 8000H - CF el operando fuente
fuente SBB DI, 8000H Dentro del
81 1E 00 10 00 [1001H:1000H] [1001H:1000H]- y destino menos el
SBB MEMWDS,8000Ha CPU
80 8000H-CF acarreo; actualiza
Datos
todas las banderas.
Tabla 1.8 Instrucciones de Adicin y Substraccin (Continuacin)
Ejemplo codificado
Mnemnico general Cdigo Segmento de
Mnemnicoa Operacin simblica Descripcin
Op-code Operando Objeto memoria
Agrega uno al operando
FE C3 Dentro del destino byte o palabra;
INC BL BLBL+1
FF 05 CPU almacena el resultado en
INC destb INC WORD PTR[DI] [DI+1:DI][DI+1:DI]+1
FE 06 04 Datos el operando destino;
INC MEMBDSc [1004H] [1004H]+1
10 Datos todas las banderas
excepto CF se actualizan.
Resta uno del operando
FE CB Dentro del destino byte o palabra;
DEC BL BLBL-1
FF 0D CPU almacena el resultado en
DEC destb DEC WORD PTR[DI] [DI+1:DI][DI+1:DI]-1
FE 0E 04 Datos el operando destino;
DEC MEMBDSc [1004H] [1004H]-1
10 Datos todas las banderas
excepto CF se actualizan.
Genera el complemento
F6 DB Dentro del a 2 del operando destino
NEG BL BL0 - BL
F7 1D CPU byte o palabra; actualiza
NEG destb NEG WORD PTR[DI] [DI+1:DI] 0 - [DI+1:DI]
F6 1E 04 Datos todas las banderas (CF=1
NEG MEMBDSc [1004H] 0 - [1004H]
10 Datos excepto cuando el
operando es cero)
Substrae el operando
3A C4 Dentro del fuente byte o palabra del
CMP AL,AH AL AH; actualiza banderas
39 0D CPU operando destino; los
CMP [DI],CX [DI+1:DI]-CX; actualiza banderas
81 3E 00 Datos operandos permanecen
CMP dest, fuente CMP [1001H:1000H]-8000H;actualiza
10 00 80 Datos sin cambios; las banderas
MEMWDS,800Ha banderas
81 FF 00 Dentro del se actualizan para reflejar
CMP DI,8000H DI-8000H;actualiza banderas
80 CPU la relacin de los
operandos.
aMEMWDS se asume que apunta a la palabra que inicia en la localidad 1000H en el segmento de datos.
b OperandosInmediatos no se permiten.
c MEMBDS se sume que apunta al byte en la localidad 1004H en el segmento de datos.

Tabla 1.9 Instrucciones de Multiplicacin y Divisin.


Ejemplo codificado
Mnemnico
Cdigo Segmento de
general Mnemnicoa Operacin simblica Descripcin
Objeto memoria
Op-code Operandoa
Dentro del Multiplicacin sin signo de un operando fuente byte o palabra y
F6 E3 AX AL * BL
MUL BL CPU el acumulador; el producto se almacena en AX; si el resultado
F7 E1 DX:AXAX * CX
MUL CX Dentro del no puede almacenarse en un solo byte (en operaciones de 8
MUL fuente F6 27 AX AL * [BX]
MUL BYTE PTR[BX] CPU bits) o en una simple palabra (en operaciones de 16 bits) CF y
F7 26 DX:AXAX*
MUL MEMWDSb Datos OF se ponen a uno, de los contrario se ponen a cero; las dems
00 10 [1001H:1000H]
Datos banderas son indefinidas.
AX AL * BL (con
signo) Similar a MUL excepto que se utilizan nmeros con signo; el
Dentro del
F6 EB DX:AXAX * CX (con rango del operando fuente es de 128 a +127 para
IMUL BL CPU
F7 E9 signo) multiplicaciones de byte y de 32768 a +32767 para
IMUL CX Dentro del
IMUL fuente F6 2F AX AL * [BX] (con multiplicaciones en palabra; CF y OF se ponen a uno si el
IMUL BYTE PTR[BX] CPU
F7 2E signo) resultado no puede representado en el registro de bajo orden;
IMUL MEMWDSb Datos
00 10 DX:AXAX* de lo contrario, se ponen en cero, el signo se extiende en el
Datos
[1001H:1000H] (con registro ms significativo; las dems banderas no se afectan.
signo)
Divisin sin signo del acumulador (para divisores de 8 bits) o
Dentro del
F6 F3 AX AX / BL acumulador y DX (para divisores de 16 bits); para divisores de 8
DIV BL CPU
F7 F1 DX:AXDXAX / CX bits el cociente se deja en AL y el residuo en AH; para divisores
DIV CX Dentro del
DIV F6 37 AX AX / [BX] de 16 bits el cociente queda en AX y el residuo en DX; si el
DIV BYTE PTR[BX] CPU
F7 36 DX:AXDXAX / cociente excede la capacidad de su registro destino (AL o AX)
DIV MEMWDSb Datos
00 10 [1001H:1000H] una interrupcin de tipo 0 se genera; todas las banderas estn
Datos
indefinidas.
AX AX / BL (con
Dentro del
signo)
F6 FB CPU
IDIV BL DX:AXDXAX / CX (con
F7 F9 Dentro del Similar a DIV excepto que se realiza la divisin con signo; el
IDIV CX signo)
IDIV F6 3F CPU rango del operando fuente es de 128 a +127 para divisiones en
IDIV BYTE PTR[BX] AX AX / [BX] (con
F7 3E Datos 8 bits y de 32768 a +32767 en divisiones de 16 bits.
IDIV MEMWDSb signo)
00 10 Datos
DX:AXDXAX
/[1001H:1000H] (con signo)
aLos operandos inmediatos no son permitidas.
b MEMWDS se asume que apunta a la palabra empezando en la localidad 1000H en el segmento de datos.
Tabla 1.10 Instrucciones de Ajuste Aritmtico.
Ejemplo codificado
Mnemnico
Segmento
general Cdigo Mnem-
de Operacin simblica Descripcin
Op-code Objeto nico
memoria
Operando
Si AL 0F > 9 o AF = 1,
Ajusta AL a un par de dgitos decimales empaquetados
Dentro del entonces
vlidos seguidos de la adicin de dos operandos
DAA 27 DAA CPU ALAL+ 6; AF 1
decimales vlidos empaquetados o desempaquetados;
Si A > 9F o CF = 1, entonces
todas las banderas excepto OF (indefinida) se afectan.
AL AL + 60H; CF 1
Si AL 0F > 9 o AF = 1,
Ajusta AL a un par de dgitos decimales empaquetados
Dentro del entonces
vlidos seguidos de la resta de dos operandos decimales
DAS 2F DAS CPU ALAL-6; AF 1
vlidos empaquetados o desempaquetados; todas las
Si A > 9F o CF = 1, entonces
banderas excepto OF (indefinida) se afectan.
AL AL - 60H; CF 1
Si AL 0F > 9 o AF = 1, Ajusta AL a un dgito decimal desempaquetado seguido
Dentro del entonces de la adicin de dos operandos decimales vlidos
AAA 37 AAA CPU ALAL+ 6; AH AH + 1; desempaquetados; los 4 bits de mayor orden de AL sern
AF 1; CF AF; cero y AH se incrementa en uno; todas las banderas
AL AL 0F excepto AF y CF son indefinidas.
Si AL 0F > 9 o AF = 1, Ajusta AL a un nico dgito decimal desempaquetado
entonces seguido de la substraccin de dos operandos decimales
Dentro del
AAS 3F AAS ALAL- 6; AH AH - 1; desempaquetados vlidos; los 4 bits de mayor orden de
CPU
AF 1; CF AF; AL sern cero y AH es decrementado en uno; todas las
AL AL 0F banderas excepto AF y CF son indefinidas.
Seguido de la multiplicacin de dos operandos decimales
vlidos desempaquetados, AAM convierte el resultado en
Dentro del AH AL / 0AH
AAM D4 0A AAM AL en dos dgitos decimales vlidos desempaquetados en
CPU AL Residuo
AH y AL; todas las banderas excepto PF, SF y ZF son
indefinidas.
Antes de dividir AX entre un operando decimal de un
dgito desempaquetado, AAD convierte los dos nmeros
decimales desempaquetados en AX a un nmero binario
Dentro del AL (AH * 0AH) + AL
AAD D5 0A AAD en AL y cero en AH; el cociente producido por la divisin
CPU AH 0
siguiente ser un nmero decimal vlido
desempaquetado en AL y el cociente en AH; todas las
banderas excepto PF, SF y ZF son indefinidas.
Antes de dividir AX por un operando byte, CBW extiende
Dentro del Si AL < 80H, entonces AH 0 el signo del dividendo en tamao byte contenido en AL
CBW 98 CBW
CPU Si AL > 7F, entonces AH FFH hacia AH, es decir convierte el byte en AL en una palabra
vlida con signo en AX; no se afecta ninguna bandera.
Si AX < 8000H, entonces DX
Similar a CBW pero extiende el signo del dividendo
Dentro del 0
CWD 99 CWD contenido en AX en una doble palabra contenida en DX:
CPU Si AX > 7FFFFH, entonces
AX; no afecta banderas.
DX FFFFH
Tabla 1.11 Instrucciones JUMP
Ejemplo codificado
Mnemnico
general Cdigo Segmento
Mnemnico Operacin simblica Descripcin
Op-code Objeto de memoria
Operando
Transfiere el control a la localidad
Cdigo
E9 -- -- a JMP MEMNb IP MEMN de la etiqueta (cercana) dentro del
Datos
FF 26 00 10 JMP [MEMWDS]c IP[MEMWDS+1:MEMWDS] segmento; el modo de
JMP near etiqueta Datos
FF 27 JMP [BX] IP[BX+1:BX] direccionamiento debe ser directo,
Dentro del
FF E0 JMP AX IPAX indirecto a memoria, o registro
CPU
indirecto.
Transfiere el control a la localidad
JMP SHORT de la etiqueta (corta); no se
EB --d JMP SHORT MEMSe Cdigo IPMEMS
etiqueta permiten modos indirectos con
esta instruccin.
EA 03 00 D3 IP0003H; CS9ED3H
JMP FAR PTR MEMFf Cdigo
9E IP[1006H:1005H]; Transfiere el control a la localidad
JMP far etiqueta JMP [MEMWWDS]g Datos
FF 2E 05 10 CS[1008H:1007H] de la etiqueta fuera del segmento.
JMP DWORD PTR[BX] Datos
FF 2F IP[BX+1:BX]; CS[BX+3:BX+2]
Transfiere el control a la direccin
de la etiqueta (corta) si la
Jcondh short
73 --d JNC MEMS Cdigo Si CF=0, entonces IPMEMS condicin es verdadera; todos los
etiqueta
saltos condicionales requieren
etiquetas cortas.
JCXZ short Transfiere el control a la direccin
E3 --d JCXZ MEMS Cdigo Si CX=0, entonces IPMEMS
etiqueta de la etiqueta corta si CX=0.
aEstos dos bytes son el offset (desplazamiento) en complemento a 2 entre la localidad de memoria cercana MEMN y la instruccin que sigue inmediatamente
a la instruccin JMP. Por ejemplo, si el salto es de 12 localidades hacia delante, el offset es de 00 0CH. Similarmente, 12 localidades hacia atrs requieren un
offset de FFF4H. El offset queda limitado a 32767 localidades hacia delante (7FFFH) y 32768 localidades hacia atrs (8000H).
bMEMN se asume que apunta a la localidad de memoria cercana (i.e., dentro del segmento).
cMEMWDS se asume que apunta a la palabra que inicia en la localidad 1000H en el segmento de datos. Los corchetes son opcionales ya que MEMWDS define

una palabra, no la localidad a la que se va a brincar.


dEste byte es el offset en complemento a 2 entre la localidad de memoria corta MEMS y la instruccin siguiente inmediata a la instruccin de salto SHORT.

El offset se limita a 127 localidades hacia delante (7FH) y 128 localidades hacia atrs (80H).
e MEMS se asume que apunta a la localidad de memoria corta (i.e., +127 o 128 localidades de la direccin de la instruccin inmediata siguiente a la

instruccin JMP SHORT). El operador SHORT es opcional si MEMS es conocido por el ensamblador.
f MEMF se asume que apunta a la localidad de memoria lejana 9ED3H:0003H.
g MEMWWDS se asume que apunta a la doble palabra que inicia en la localidad 1005H en el segmento de datos. Los corchetes son opcionales ya que

MEMWWDS define una doble palabra, no la localidad a la que saltar.


h Ver tabla 1.13 para la lista de condiciones permitidas.

Tabla 1.12 Condiciones de saltos.


Saltos Condicionales para nmeros sin signo
Mnemnico de la Instruccin de
Significado Condicin
Salto
JA / JNBE Salta si es mayor o salta si no es menor igual CF = 0 y ZF = 0
JAE / JNB Salta si es mayor o igual o salta si no es menor CF = 0
JB / JNAE Salta si es menor o salta si no es mayor igual CF = 1
JBE / JNA Salta si es menor o igual o salta si no es mayor CF = 1 o Z = 1
Saltos Condicionales para nmeros con signo
Mnemnico de la Instruccin de
Significado Condicin
Salto
JG / JNLE Salta se es mayor o salta si no es menor igual ZF = 0 y SF = OF
JGE / JNL Salta si es mayor o igual o salta si no es menor SF = OF
JL / JNGE Salta si es menor o salta si no es mayor igual (SF OF)=1
JLE / JNG Salta si es menor o igual o salta si no es mayor ((SF OF) + ZF) = 1
Saltos Condicionales para nmeros con signo y sin signo
Mnemnico de la Instruccin de
Significado Condicin
Salto
JE / JZ Salta si es igual o salta si es cero ZF = 1
JNE / JNZ Salta si no es igual o salta si no es cero ZF = 0
JC Salta si hay acarreo CF = 1
JNC Salta si no hay acarreo CF = 0
JS Salta si el signo es negativo SF = 1
JNS Salta si el signo es positivo SF = 0
JO Salta si hay desbordamiento (sobreflujo) OF = 1
JNO Salta si no hay desbordamiento (sobreflujo) OF = 0
JP / JPE Salta si hay paridad o salta si la paridad es par PF = 1
JNP / JPO Salta si no hay paridad o salta si la paridad es impar PF = 0
Tabla 1.13 Instrucciones de LOOP.
Ejemplo codificado
Segmento
Mnemnico general Cdigo
Mnemnicoa de Operacin simblica Descripcin
Op-code Operandoa Objeto
memoria
CX CX 1 Decrementa CX y transfiere el control a
LOOP etiqueta
E2 --a LOOP MEMSb Cdigo Si CX 0, entonces IP la direccin de la etiqueta corta si CX
corta
MEMS 0.
Decrementa CX y transfiere el control a
LOOPE /c etiqueta CX CX 1
la direccin de la etiqueta corta si CX 0
corta E1 --a LOOPZ MEMSb Cdigo Si (CX0)^(ZF=1), entonces
y la ltima instruccin afecta la bandera
LOOPZ IP MEMS
de cero (Z=1).
Decrementa CX y transfiere el control a
LOOPNE /c etiqueta CX CX 1 la direccin de la etiqueta corta si CX 0
LOOPNZ
corta E0 --a Cdigo Si (CX0)^(ZF=0), entonces y la ltima instruccin afecta el
MEMSb
LOOPNZ IP MEMS resultado de la bandera de cero en
ZF=0.
aEste byte es desplazamiento en complemento a 2 entre la localidad de memoria corta MEMS y la instruccin inmediata siguiente a la instruccin de LOOP.
El desplazamiento se limita a un mximo de 127 localidades hacia delante (7FH) y 128 localidades hacia atrs (80H).
b MEMS se asume que apunta a la localidad de memoria corta (i.e., +127 o 128 localidades de la direccin de la instruccin inmediata seguida de la

instruccin LOOP).
cCualquiera de los dos mnemnicos puede ser utilizado.

Tabla 1.14.1 Instrucciones de llamada a subrutina y retornos de subrutina


Ejemplo codificado
Mnemnico Segmento
Cdigo
general Mnemnico de Operacin simblica Descripcin
Objeto
Op-code Operando memoria
SP SP 2;
E8 -- --a Cdigo
CALL MEMNb [SP+1:SP] IP;
IP MEMN
SP SP 2;
FF 16 00 10 Datos
CALL [MEMWDS]c [SP+1:SP] IP; IP se introduce en el tope de la pila y el
CALL etiqueta IP[1001H:1000H] control se transfiere dentro del segmento
cercana SP SP 2; a la direccin de la etiqueta cercana.
FF15 Datos
CALL [DI] [SP+1:SP] IP;
IP[DI+1:DI]
SP SP 2;
FF D7 Dentro del
CALL DI [SP+1:SP] IP;
CPU
IPDI
SP SP 2;
[SP+1:SP] CS;
9A 00 10 D3
CALL FAR PTR MEMFd Cdigo CS09D3H;
09
SP SP 2;
[SP+1:SP] IP;
IP 1000H
Se introduce en el tope de la pila CS e IP
Similar al anterior
CALL etiqueta y el control es transferido a un nuevo
excepto:
lejana segmento a la direccin de la etiqueta
CALL [MEMWWDS]e Datos CS
FF 1E 00 10 lejana.
[1003H:1002H];
IP [1001H:1000H]
Similar al anterior
CALL DWORD PTR[DI] Datos excepto:
FF 1D
CS[DI+3:DI+2];
IP[DI+1:DI]
Tabla 1.14.2 Instrucciones de llamada a subrutina y retornos de subrutina (Continuacin)
Ejemplo codificado
Mnemnico Segmento
Cdigo
general Mnemnico de Operacin simblica Descripcin
Objeto
Op-code Operando memoria
La palabra en el tope de la pila es extrado
y puesto en el IP transfiriendo el control a
Pila IP [SP+1:SP];
C3 RET esta nueva direccin; RET se usa
SP SP +2;
RET n (cercano)f normalmente para regresar el control a la
Pila IP[SP+1:SP];
C2 08 00 RET 8 instruccin siguiente de un llamado de
SP SP + 2 + 8
subrutina cercano; si se incluy el valor
(n) opcional al RET, ste se suma al SP.
IP[SP+1:SP];
Pila SP SP + 2;
CB RET
CS [SP+1:SP]; Similar a la de arriba excepto que la doble
SPSP+2 palabra en el tope del stack es extrada y
RET n (lejano)f
IP [SP+1:SP]; puesta en el IP y CS, transfiriendo el
Pila SPSP + 2; control a esta nueva direccin lejana.
CA 08 00 RET 8
CS[SP+1:SP];
SPSP + 2 + 8
aEstos dos bytes son el offset (desplazamiento) en complemento a 2 entre la localidad de memoria cercana MEMN y la instruccin que sigue inmediatamente
a la instruccin CALL. Por ejemplo, si el CALL es de 12 localidades hacia delante, el offset es de 00 0CH. Similarmente, 12 localidades hacia atrs requieren un
offset de FFF4H. El offset queda limitado a 32767 localidades hacia delante (7FFFH) y 32768 localidades hacia atrs (8000H).
bMEMN se asume que apunta a la localidad de memoria cercana (i.e., dentro del segmento).
cMEMWDS se asume que apunta a la palabra que inicia en la localidad 1000H en el segmento de datos. Los corchetes son opcionales ya que MEMWDS define

una palabra no una localidad a la que va a saltar.


dFAR PTR indica que MEMF est localizada en un segmento de cdigo diferente. En este caso se asume que MEMF apunta a la localidad 09D3H:1000H.
eMEMWWDS se asume que apunta a la doble palabra empezando en la localidad 1000H en el segmento de datos. Los corchetes son opcionales ya que

MEMWWDS define una doble palabra, no una localidad a la que va a saltar.


fEl mismo mnemnico es usado para un retorno cercano o lejano. El ensamblador generar el cdigo apropiado en base a la definicin del enunciado del

procedimiento (near o far) cercano o lejano.

Tabla 1.15 Instrucciones PUSH Y POP


Ejemplo codificado
Mnemnico
Segmento
general Cdigo
Mnemnico de Operacin simblica Descripcin
Op-code Objeto
memoria
Operando
Pila SPSP-2;
Decrementa el SP en 2 y
51 PUSH CX [SP+1]CH; [SP]CL
transfiere la palabra del
Pila SPSP-2;
operando fuente al tope
PUSH fuentea 1E PUSH DS [SP+1:SP]DS
de l a pila (stack) ahora
Pila, datos SPSP-2;
apuntado por el nuevo
FF 75 02 PUSH[DI+2] [SP+1][DI+3];
valor de SP.
[SP][DI+2]
CL[SP]; CH[SP+1];
59 POP CX Pila SPSP+2 Transfiere la palabra del
DS[SP+1:SP]; tope de la pila (stack)
POP desta 1F POP DS Pila SPSP+2 apuntado por SP al
[DI+3][SP+1]; operando destino e
8F 45 02 POP[DI+2] Datos, pila [DI+2][SP]; incrementa al SP en 2.
SPSP+2
Introduce los 16 bits del
SPSP-2;
PUSHF 9C PUSHF Pila registro de banderas a la
[SP+1:SP] Banderas
pila.
Extrae la palabra que est
Banderas[SP+1:SP]; en el tope de la pila al
POPF 9D POPF Pila
SPSP+2 registro de banderas de
16 bits.
aNo se permiten operandos inmediatos.
Tabla 1.16 Instrucciones de Interrupcin por software
Ejemplo codificado
Mnemnico
Cdigo Segmento de
general Mnemnico Operacin simblica Descripcin
Objeto memoria
Op-code Operando
SP SP 2;
Salva los registros de banderas, CS e IP en la
[SP+1:SP] Banderas
Pila e pila y transfiere el control a la direccin
IF0; TF0;
interrupcin lejana
SP SP 2;
CD 23 saltando a la almacenada en la doble palabra empezando
INT tipo INT 23H [SP+1:SP] CS;
tabla de vectores en la direccin absoluta proporcionada por
CS[0008FH:0008EH];a
(en 00000 a el tipo* 4. Tipo es el nmero de
SP SP 2;
003FFH) interrupcin.
[SP+1:SP] IP;
IP[0008DH:0008CH]b
Si OF=1, entonces
SP SP 2
Pila e [SP+1:SP] Banderas;
interrupcin IF=0; TF=0;
Si una condicin de sobreflujo
saltando a la SP SP 2;
INTO CE INTO (desbordamiento) existe (OF=1), se ejecuta
tabla de vectores [SP+1:SP] CS;
un tipo de interrupcin 4.
(en 00000 a CS[00013H:00012H];a
003FFH) SP SP 2;
[SP+1:SP]IP;
IP [00011H:00010H]b
IP [SP+1:SP]; Transfiere el control de nuevo a la siguiente
SP SP + 2; instruccin donde se invoc la interrupcin,
CS [SP+1:SP]; extrayendo el IP, CS y registro de banderas
IRET CF IRET Pila
SP SP + 2; de la pila; IRET se utiliza normalmente para
Banderas[SP+1:SP]; salir de cualquier procedimiento de
SP SP+ 2 interrupcin.
aLa direccin donde se encuentra el CS en la tabla de vectores est dada por [(tipo * 4) + 3: (tipo * 4) + 2].
bLa direccin donde se encuentra el IP en la tabla de vectores est dada por [(tipo * 4) + 1: (tipo * 4)].

Tabla 1.17 Instrucciones de Control del Procesador.


Ejemplo codificado
Mnemnico
general Cdigo Segmento de
Mnemnico Operacin simblica Descripcin
Op-code Objeto memoria
Operando
Dentro del
STC F9 STC CF 1 Pone a uno la bandera de acarreo.
CPU
Dentro del
CLC F8 CLC CF 0 Pone a cero la bandera de acarreo.
CPU
Dentro del
CMC F5 CMC CF
Complementa la bandera de acarreo.
CPU
Dentro del Pone a uno la bandera de direccin (D) para auto-
STD FD STD DF 1
CPU decremento en instrucciones de cadena (string).
Dentro del Pone a cero la bandera de direccin (D) para auto-
CLD FC CLD DF 0
CPU incremento en instrucciones de cadena (string).
Dentro del Pone a uno la bandera de Interrupcin (habilitando las
STI FB STI IF 1
CPU interrupciones en la lnea INTR).
Dentro del Pone a cero la bandera de Interrupcin (deshabilitando
CLI FA CLI IF 0
CPU las interrupciones en la lnea INTR).
Dentro del
HLT F4 HLT Ninguna Estado Halt (detener, parar).
CPU
Dentro del =1) al procesador
Pone en estado de espera (si
WAIT 9B WAIT Ninguna
CPU hasta que el coprocesador termina su ejecucin.
Bloquea el bus. Evita que el 8087 u otros
coprocesadores cambien datos al mismo tiempo que el
LOCK F0 A1 00 = 0. Lock es
procesador; coloca la lnea de salida
LOCK MOV AX,MEMWDSa Datos Ninguna
Instruccin 10 un prefijo de un byte que se utiliza para prevenir a los
coprocesadores de acceder al bus hasta que se
complete la instruccin siguiente a lock.
Dentro del
NOP 90 NOP Ninguna No operacin.
CPU
Coloca el contenido del operando fuente de memoria
ESC DE 0E 00 Bus de datos en el bus de datos y ejecuta un NOP. El primer
ESC 31H,MEMWDSa Datos
nmero,fuente 10 [MEMWDS] operando identifica una instruccin escape particular
para que sea ejecuta por el coprocesador.
aMEMWDS se asume que apunta a la palabra que empieza en la localidad 1000H en el segmento de datos.

Você também pode gostar