Está en la página 1de 51

1

Instrucciones
Para las banderas tomaremos las siguientes convenciones: c(cambia), n(no cambia)

O: Bandera de desbordamiento (Overflow Flag)


D: Bandera de dirección (Direction Flag)
I: Bandera de interrupciones (Interruption Flag)
T: Bandera de paso a paso (Trap flag)
S: Bandera de signo (Sign Flag)
Z: Bandera de cero (Zero Flag)
A: Bandera de acarreo auxiliar (Auxiliary carry flag)
P: Bandera de Paridad (Parity Flag)
C: Bandera de Acarreo (Carry Flag)

AAA (Ascii adjust for addition)

Sintaxis: AAA

Descripción: Corrige el resultado en AL de una suma de los números decimales


desempaquetados, convirtiéndolo en un valor decimal desempaquetado.

Operación: Si D3 a D0 de AL > 9 ó A = 1
AL = AL + 6
AH = AH + 1
A=1
C=A
Bits D7 a D4 de AL = 0000b

Banderas: O D I T S Z A P C
n n n c c

Ejemplo: mov ax, 0009h ; al = 9, ah = 0


mov bl, 7 ; bl = 7
add al, bl ; ax = 0010h, A = 1
aaa ; ax = 0106h, A = 1

Operandos: No necesita operandos

AAD (Ascii adjust for division)

Sintaxis: AAD

Descripción: Realiza un ajuste del dividendo en AL antes de hacer la división de dos


números decimales desempaquetados, para que el resultado de esta
división sea un valor decimal desempaquetado.

Operación: AH = AH*10 + AL
AL = 0

Banderas: O D I T S Z A P C
n n n c c c

Ejemplo: mov ax, 0206h ; ax = 518


mov bl, 04h ; bl = 4
2
aad ; ax = 001ah
div bl ; ax = 0206h

Operando: No necesita operandos

AAM (Ascii Adjust for Multiply)

Sintaxis: AAM

Descripción: Convierte AX en un valor decimal desempaquetado después del


producto de dos números decimales desempaquetados.

Operación: AH = cociente de AL/10


AL = resto de AL/10

Banderas: O D I T S Z A P C
n n n c c

Ejemplo: mov al, 06h ; al = 6


mov bl, 08h ; bl = 8
mul bl ; ax = 0030h = 48
aam ; ax = 0408h

Operandos: No necesita operandos

AAS (ASCII Adjust for Subtraction)

Sintaxis: AAS

Descripción: Convierte AL en un valor decimal desempaquetado después de la resta


de dos números decimales desempaquetados.

Operación: Si D3 a D0 de AL > 9 ó la bandera A = 1 entonces


AL = AL – 6
AH = AH – 1
Banderas: A = 1, C = A
D7 a D4 de AL = 0000b

Banderas: O D I T S Z A P C
n n n c c c

Ejemplo: mov al, 08h ; al = 8


mov bl, 06h ; bl = 6
sub al, bl ; ax = 0002h y A = 0
aas ; ax = 0002h
mov ah, 31h ; al = 31h
mov bl, 39h ; bl = 39h
sub al, bl ; ax = 00F8h
aas ; ax = FF02h

Operando: No necesita operandos


3
ADC (Addition with carry)

Sintaxis: ADC destino, fuente

Descripción: Suma los operandos destino y fuente mas la bandera de acarreo (C), el
resultado se deposita en el operando destino. Los operandos deben ser
del mismo tipo.

Operación: destino = destino + fuente + C

Banderas: O D I T S Z A P C
c n n n c c c c c

Ejemplo: mov al, 101 ; al = 65h


mov bl, 155 ; bl = 9Bh
add al, bl ; ax = 0500h, C = 1
adc al, 3 ; ax = 0504h

Operandos: adc registro 8, registro 8


adc registro 16, registro 16
adc registro 8, memoria 8
adc registro 16, memoria 16
adc memoria 8, registro 8
adc memoria 16, registro 16
adc registro 8, 30
adc registro 16, 124h
adc memoria 8, 25h
adc memoria 16, 1409h

ADD (Addition)

Sintaxis: AAD destino, fuente

Descripción: Suma los operandos destino y fuente, el resultado se deposita en el


operando destino. Los operandos deben ser del mismo tipo.

Operación: AL = AH * 10 + AL
AH = 0

Banderas: O D I T S Z A P C
c n n n c c c c c

Ejemplo: mov al, 101 ; al = 65h


mov bl, 155 ; bl = 9Bh
add al, bl ; ax = 0500h

Tipos de operando:

add registro 8, registro 8


add registro 16, registro 16
add registro 8, memoria 8
add registro 16, memoria 16
add memoria 8, registro 8
add memoria 16, registro 16
add registro 8, 30
4
add registro 16, 124h
add memoria 8, 25h
add memoria 16, 1409h

AND (Logical and)

Sintaxis: AND destino, fuente

Descripción: “Y lógico” a nivel de bits, el resultado se deposita en el operando


destino. Los operandos deben ser del mismo tipo.

Operación: destino = destino “Y lógico” fuente

Banderas: O D I T S Z A P C
n n n n c c n n n

Ejemplo: mov ax, 3332h ; AH = ASCII de 3, ASCII de 2


and ax, 0F0Fh ; AX = 0302h

Operandos: and registro 8, registro 8


and registro 16, registro 16
and registro 8, memoria 8
and registro 16, memoria 16
and memoria 8, registro 8
and memoria 16, registro 16
and registro 8,101b
and registro 16, 124h
and memoria 8, 25h
and memoria 16, 1409h

CALL (Call a procedure)

Sintaxis: CALL destino

Descripción: Bifurca a un procedimiento fuera de línea, salvando previamente en la


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

Operación: Si la llamada esta dentro del mismo segmento (NEAR)


SP = SP - 2
IP actual a la pila
IP = desplazamiento de destino

Si la llamada está en otro segmento (FAR)


SP = SP – 2
CS actual a la pila
CS = segmento de destino
SP = SP – 2
IP actual a la pila
IP = desplazamiento de destino

Llamadas:

Directa: A etiquetas relativas a CS, no a variables. Si no se especifica nada, se


supone NEAR. Si se requiere se puede explicitar FAR
5

Indirecta: A variables, donde se puede especificar WORD PTR o DWORD PTR


para llamadas NEAR o FAR, respectivamente.
Si se especifica una nueva dirección tipo WORD, el contenido de esa
palabra es la nueva dirección (desplazamiento).
Si se especifica una nueva dirección tipo DWORD, la primera palabra
contiene el segmento y la segunda palabra el desplazamiento
También se puede utilizar registros de 16 bits entre corchetes.

Para retornar de un procedimiento se utiliza la instrucción RET

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplos: call otro ; Llamada directa al procedimiento “otro”

call word ptr otro ; Llamada NEAR indirecta


call word ptr [bx]

call dword ptr otro ; Llamada FAR indirecta


call dword ptr [bx]

Operandos: call nombre de procedimiento cercano


call word ptr memoria 16

call nombre de procedimiento lejano


call dword ptr memoria 32

CBW (Convert byte to word)

Sintaxis: CBW

Descripción: Copia el bit 7 del registro AL en todos los bits del registro AH; es decir,
se expande el bit de signo.

Operación: Si AL < 80h


AH = 00h
De otro modo
AH = FFh

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: mov al, 80h


cbw ; ax = FF80h

mov al, 05h


cbw ; ax = 0005h

Tipos de operando: No necesita operandos


6
CLC (Clear carry flag)

Sintaxis: CLC

Descripción: Borra la bandera de acarreo sin afectar a ninguna otra bandera.

Operación: C=0

Banderas: O D I T S Z A P C
n n n n n n n n 0

Ejemplo: clc ;C=0

Operandos: No necesita operandos

CLD (Clear direction flag)

Sintaxis: CLD

Descripción: Borra la bandera de dirección, que ocasiona, que en la ejecución de


instrucciones de manejo de cadenas de caracteres los registros índice
SI y/o DI se autoincrementen de modo automático.

Si los operandos son tipo byte se incrementa en 1


Si los operandos son tipo word se incrementa en 2

Operación: D=0

Banderas: O D I T S Z A P C
n 0 n n n n n n n

Ejemplo: cld ;D=0

Operandos: No necesita operandos

CLI (Clear interrupt flag)

Sintaxis: CLI

Descripción: Borra la bandera de interrupciones sin afectar a ninguna otra bandera.


Cuando I = 0 el microprocesador no acepta interrupciones
enmascarables.

Operación: I=0

Banderas: O D I T S Z A P C
n n 0 n n n n n n

Ejemplo: cli ;I=0

Operandos: No necesita operandos


7
CMC (Complement carry flag)

Sintaxis: CMC

Descripción: Complementa la bandera de acarreo.

Operación: Si C = 0, entonces C = 1
Si C = 1, entonces C = 0

Banderas: O D I T S Z A P C
n n n n n n n n x

Ejemplo: cmc ; Complementa C

Operando: No necesita operandos

CMP (Compare two operands)

Sintaxis: CMP destino, fuente

Descripción: Resta fuente de destino, pero no retorna resultado. Los operandos no


se alteran, pero las banderas se actualizan y pueden utilizarse en
instrucciones de bifurcación condicional. Los operandos pueden ser tipo
byte o tipo word, pero ambos del mismo tipo.

Operación: destino - fuente

Banderas: O D I T S Z A P C
c n n n c c c c c

Ejemplo: cmp ax, bx ; Compara AX con BX

Operandos: cmp registro 8, registro 8


cmp registro 16, registro 16
cmp registro 8, memoria 8
cmp registro 16, registro 16
cmp memoria 8, registro 8
cmp memoria 16, registro 16
cmp registro 8, numero
cmp registro 16, numero
cmp memoria 8, numero
cmp memoria 16, numero

CMPS (Compare string)


CMPSB (Compare string byte)
CMPSW (Compare string word)

Sintaxis: CMPS/CMPSB/CMPSW cadena_destino, cadena_fuente

Descripción: Compara dos zonas de memoria (tipo byte o tipo word) realizando la
operación cadena_fuente – cadena_destino. Esta operación afecta las
banderas pero no se guarda el resultado. La cadena fuente esta
direccionada por SI y la cadena destino por DI en el segmento de datos,
realizándose por tanto la operación DS:[SI] – DS:[DI].
8
Los registros SI y DI se actualizan en 1 si las cadenas son tipo byte y en
2 si las cadenas son tipo word.

Si la bandera de dirección D = 0, los registros SI y DI se incrementan


(ver instrucción CLD)

Si la bandera de dirección D = 1, los registros SI y DI se decrementan


(ver instrucción STD).

En la instrucción CMPSB se realiza la resta entre bytes: DS:[SI] – DS:


[DI].

En la instrucción CMPSW se realiza la resta entre words: DS:[SI] – DS:


[DI].

Importante. Si se especifican operandos en la instrucción CMPS, solo


se utilizan para verificar el tipo (byte o word) y ver si se ha especificado
un registro de segmento. Es decir CMPS en realidad no utiliza sus
operandos para realizar la operación DS:[SI] – DS:[DI].
Delante de las instrucciones CMPS, CMPSB y CMPSW se pueden
utilizar los prefijos REPE (REPZ) o REPNE (REPNZ) o REP, para
comparar dos cadenas completas. En este caso el número de
elementos a comparar esta en el registro CX.

En CMPS se puede reasignar el elemento fuente, pero no el destino;


por ejemplo CMPS destino, ES:fuente.

Importante. En CMPS la operación es fuente – destino al contrario que


en CMP cuya operación es destino – fuente. Esto hay que tener en
cuenta para la bifurcación después de la comparación.

Operación: cadena_fuente – cadena_destino

Banderas: O D I T S Z A P C
c n n n c c c c c

Ejemplo: lea si, origen


lea di, destino
cmp [di], [si]
jl otro

cld ; para incrementar SI y DI


mov si, offset origen
mov di, offset destino
mov cx, 20
repe cmps [DI], [SI] ; compara los elementos
; si los datos son tipo byte se puede
; reemplazar por repe cmpsb
je otro

cld ; para incrementar SI y DI


push ds ; ES = DS
pop es
mov si, offset origen
mov di, offset destino
9
mov cx, 20
repe cmps [DI], [SI] ; compara los elementos
; si los datos son tipo Word se puede
; reemplazar por repe cmpsw
je otro

Operandos: CMPS byte_destino,byte_fuente


CMPSB
CMPS Word_destino_byte_fuente
CMPSW

CWD (Convert word to doubleword)

Sintaxis: CWD

Descripción: Copia el bit 15 del registro AX en todos los bits del registro DX; es decir,
se expande el bit de signo.

Operación: Si AX < 8000h


DX = 0000h
De otro modo
DX = FFFFh

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: mov ax, C280h


cwd ; dx = FFFFh

mov ax, 0500h


cbw ; dx = 0000h

Operandos: No necesita operandos

DAA (Decimal adjust for addition)

Sintaxis: DAA

Descripción: Corrige el resultado de AL después de la suma de dos números


decimales empaquetados. El resultado en AL es un número decimal
empaquetado.

Operación: Si D3 a D0 de AL > 9 o A = 1
AL = AL + 6 y A = 1
Si AL > 9Fh o C = 1
AL = AL + 60h y C = 1

Banderas: O D I T S Z A P C
n n n c c c c c

Ejemplo: mov al, 64h ; ax = 0064h


mov bl, 73h
add al, bl ; ax = 00D7h
daa ; ax = 0037h y C = 1
10
mov al, 13h
mov bl, 28h
add al, bl ; ax = 003Bh
daa ; ax = 0041h y A = 1

Operandos: No necesita operandos

DAS (Decimal adjust for addition)

Sintaxis: DAS

Descripción: Corrige el resultado en AL después de la resta de dos números


decimales empaquetados. El resultado en AL es un número decimal
empaquetado.

Operación: Si D3 a D0 de AL > 9 o A = 1
AL = AL - 6 y A = 1
Si AL > 9Fh o C = 1
AL = AL - 60h y C = 1

Banderas: O D I T S Z A P C
n n n n c c c c c

Ejemplo: mov al,73h ; ax = 0073h


mov bl,28h
sub al,bl ; ax = 004Bh
das ; ax = 0045h

Operandos: No necesita operandos

DEC (Decrement destination by one)

Sintaxis: DEC destino

Descripción: Resta en uno el operando destino. El operando puede ser byte o word.

Operación: destino = destino - 1

Banderas: O D I T S Z A P C
c n n n c c c c n

Ejemplo: mov cx, 1964h


dec cx ; cx = 1963

Operandos: dec registro 8


dec registro 16
dec memoria 8
dec memoria 16

DIV (Division, unsigned)

Sintaxis: DIV fuente

Descripción: Divide, sin tomar en cuenta el signo, AX entre fuente (byte). El cociente
se guarda en AL y el resto en AH.
11
Divide, sin tomar en cuenta el signo, DX:AX entre fuente (word). El
cociente se guarda en AX y el resto en DX.

Si el cociente es mayor que el valor máximo que se puede almacenar


en AL = FFh ó AX = FFFFh, se produce una interrupción tipo cero.

Si C = 1 y O = 1, significa que los datos en AH o en DX son parte del


resultado, contienen el resto.

Operación: Si AX / fuente byte


AL = cociente; si AL > FFh se genera int 0
AH = resto
Si DX:AX / fuente word
AX = cociente; si AX = FFFFh segenera int 0
DX = resto

Banderas: O D I T S Z A P C
n n n

Ejemplo: mov ax,0013h


mov bl,2
div bl ; AH = 03 (resto), AL = 06 (cociente)

mov dx,0
mov ax,0013h
mov bx,0002
div bx ; DX = 0003 (resto), AX = 0006 (cociente)

Operandos: div registro 8


div registro 16
div memoria 8
div memoria 16

ESC (Escape)

Sintaxis: ESC código de operación externo,fuente

Descripción: Se utiliza para permitir la comunicación con otros procesadores.

ESC se utiliza en combinación con WAIT. Con la instrucción WAIT se


detiene el 8086/8088 hasta que el otro procesador acabe lo que está
haciendo. Normalmente WAIT se sitúa delante de ESC, para asegurar
que el código de operación sea recogido por el otro procesador.

El primer operando es un valor inmediato entre 0 y 3Fh y sirve para


denotar al otro procesador y la operación que debe realizar este.

El segundo operando puede ser un registro o un aposición de memoria


donde se especifica el dato a pasar al otro procesador. Si el segundo
operando es un registro el 8086/8088 no hace nada. Si el segundo
operando es una dirección de memoria, el 8080/8088 envía el contenido
apuntado por esa dirección al bus de datos, este dato es ignorado por el
8086/8088, pero puede ser capturado por el otro procesador.
12
Operación: Si fuente es un registro
Ninguna operación
Si fuente es una dirección de memoria
Bus de datos = contenido de fuente

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: wait ; Espera a que el otro procesador


; acabe con la operación en curso
esc 21,variable ; Bus de datos = contenido de VARIABLE
; pasa información al otro coprocesador

Operandos: esc 21, registro 8


esc 21, registro 16
esc 21, memoria 8

HLT (Halt)

Sintaxis: HLT

Descripción: El 8086/8088 se detiene y abandona este estado en uno de los


siguientes casos:
1. Se reinicializa el sistema (RESET)
2. Se recibe una interrupción NMI
3. Se recibe una interrupción INTR (si I = 1)

Operación: destino = destino - 1

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: hlt ; se detiene el procesador

Operandos: No necesita operandos

IDIV (Integer division, signed)

Sintaxis: IDIV fuente

Descripción: Divide, tomando en cuenta el signo, AX entre fuente (byte). El cociente


se guarda en AL y el resto en AH.
Divide, tomando en cuenta el signo, DX:AX entre fuente (word). El
cociente se guarda en AX y el resto en DX.

Si el cociente es positivo y mayor que el valor máximo que se puede


almacenar en AL = 7Fh = 127 ó AX = 7FFFh = 32767 ó si el cociente es
negativo e inferior que el valor mínimo que se puede almacenar en AL =
81h = -127 ó AX = 8001h = -32767, se produce una interrupción tipo
cero.

Si C = 1 y O = 1, significa que los datos en AH o en DX son parte del


resultado, contienen el resto.
13
Operación: Si AX / fuente byte
AL = cociente; si AL > 7Fh ó AL < 81h se genera int 0
AH = resto
Si DX:AX / fuente word
AX = cociente; si AX = 7FFFh ó AX < 8001h se genera int 0
DX = resto

Banderas: O D I T S Z A P C
n n n

Ejemplo: mov ax, -13h ; AX = FFF3h


mov bl, 2
idiv bl ; AH = FFh = -01 (resto)
; AL = FAh = -06 (cociente)

mov ax, -13h ; AX = FFFAh


cwd ; DX = FFFFh y AX = FFFAh
mov bx, 0002
idiv bx ; DX = FFFFh = -0001(resto)
; AX = FFFAh = -0006 (cociente)

Operandos: idiv registro 8


idiv registro 16
idiv memoria 8
idiv memoria 16

IMUL (Integer multiply, signed)

Sintaxis: IMUL fuente

Descripción: Multiplica, tomando en cuenta el signo, AL por fuente (byte). El producto


se guarda en AX.
Multiplica, tomando en cuenta el signo, AX por fuente (word). El
producto se guarda en DX:AX.

Si C = 1 y O = 1, significa que los datos en AH o en DX son parte del


resultado, no representan el signo.

Operación: Si fuente byte


AX = AL * fuente
Si fuente word
DX:AX = AX * fuente

Si la mitad superior del resultado es la expansión del signo de la mitad


Inferior del resultado, entonces C = 0, caso contrario C = 1 y C = O

Banderas: O D I T S Z A P C
c n n n c

Ejemplo: mov al,-13h ; AL = FFF3h


mov bl, 2
imul bl ; AX = FFE6h = -26

mov ax, -13h ; AX = FFF3h


mov bx, 0002
14
imul bx ; DX:AX = FFFF:FFE6 = -26
;C=0yO=0

mov ax, -1964h ; AX = F854h


mov bx, 1973 ; BX = 07B5h
imul bx ; DX:AX = FFC4:DF64 = -3874972
;C=1yO=1

Operandos: imul registro 8


imul registro 16
imul memoria 8
imul memoria 16

IN (Input byte o word)

Sintaxis: IN acumulador, puerta

Descripción: Transfiere un byte o una palabra de una puerta de entrada del


procesador al registro AL o AX.

La puerta puede ser un valor entre 0 y 255, por ejemplo IN al,31h


La puerta pueda ser un valor entre 0 y 65535, por ejemplo IN al,dx

Operación: Si acumulador = AL
AL = dato de la puerta
Si acumulador = AX
AX = dato de la puerta

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: in al, 31h

mov dx, 03f8h


in al, dx

Operandos: in al, valor entre 0 y 255


in ax, valor entre 0 y 255
in al, dx
in ax, dx

INC (Increment destination by one)

Sintaxis: INC destino

Descripción: Suma en uno el operando destino. El operando puede ser byte o word.

Operación: destino = destino + 1

Banderas: O D I T S Z A P C
c n n n c c c c n

Ejemplo: mov cx, 1964h


inc cx ; cx = 1965
15
Operandos: inc registro 8
inc registro 16
inc memoria 8
inc memoria 16

INT (Interrupt)

Sintaxis: INT tipo_interrupción

Descripción: INT activa la interrupción especificada por operando. La dirección del


vector de interrupción se calcula multiplicando el operando (entre 0 y
255) por cuatro.

El vector de interrupción se compone de: IP = primera palabra y CS =


segunda palabra.

Antes de atender la interrupción, se guarda en la pila: el registro de


banderas y la dirección de retorno (CS, IP)

Para retornar de una interrupción se utiliza IRET.

Operación: SP = SP – 2
Banderas a la pila
I=0yT=0
SP = SP – 2
CS a la pila
CS = tipo_interrupción*4 + 2
SP = SP – 2
IP a la pila
IP = tipo de interrupción*4

Banderas: O D I T S Z A P C
n n c c n n n n n

Ejemplo: mov ah, 02


mov dx, 1010h
int 10h

Operandos: int

INTO (Interrupt if overflow)

Sintaxis: INTO

Descripción: Genera una interrupción tipo 4 si existe desbordamiento, es decir, si O =


1, de otro modo se continua con la ejecución de las instrucciones
siguientes, sin ejecutar el procedimiento de interrupción.

Operación: Si O = 1
SP = SP - 2
Banderas a la pila
I=0yT=0
SP = SP – 2
CS a la pila
16

CS = tipo_interrupción_4*4 + 2
SP = SP – 2
IP a la pila
IP = tipo_interrupción_4*4

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: into

Operandos: No necesita operandos

IRET (Interrupt return)

Sintaxis: IRET

Descripción: Devuelve el control a la dirección de retorno salvada en la pila por una


operación de interrupción previa y restaura las banderas. IRET se utiliza
para finalizar un procedimiento de interrupción.

Operación: Recupera IP de la pila


SP = SP + 2
Recupera CS de la pila
SP = SP + 2
Recupera banderas de la pila

Banderas: O D I T S Z A P C
c c c c c c c c c

Ejemplo: iret

Operandos: No necesita operandos

JA/JNBE (Jump if above/Jump if not below nor equal)

Sintaxis: JA Desplazamiento
JNBE Desplazamiento

Descripción: Si C = 0 y Z = 0
Transfiere el control a la instrucción (IP + desplazamiento)
Si C = 1 o Z = 1
No se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Above (por encima de) y Below (por debajo) se refiere a la relación


entre dos valores sin signo.

Greater (mayor que) y Less (menor que) se refiere a la relación entre


dos valores con signo.

Operación: Si C = 0 y Z = 0
IP = IP + desplazamiento
17
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: cmp ax,20 ; compara AX con 20


ja otro ; si AX > 20, salta sin considerar el signo

Operandos: ja otro
jnbe otro

JAE/JNB (Jump if above or equal/Jump if not below)

Sintaxis: JAE Desplazamiento


JNB Desplazamiento

Descripción: Si C = 0, transfiere el control a la instrucción (IP + desplazamiento)


Si C = 1, no se transfiere el control.

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Above (por encima de) y Below (por debajo) se refiere a la relación


entre dos valores sin signo.

Greater (mayor que) y Less (menor que) se refiere a la relación entre


dos valores con signo.

Operación: Si C = 0 y Z = 0
IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: cmp ax, 20 ; Compara AX con 20


jae otro ; Si AX = 20, salta sin considerar el signo

Operandos: jae otro


jne otro

JB/JNAE/JC (Jump if below/Jump if not above or equal/Jump If carry)

Sintaxis: JB Desplazamiento
JNAE Desplazamiento
JC Desplazamiento

Descripción: Si C = 1,transfiere el control a la instrucción (IP + desplazamiento)


Si C = 0, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Above (por encima de) y Below (por debajo) se refiere a la relación


entre dos valores sin signo.
18
Greater (mayor que) y Less (menor que) se refiere a la relación entre
dos valores con signo.

Operación: Si C = 1, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n N n n

Ejemplo: cmp ax, 20 ; Compara AX con 20


jb otro ; Si AX < 20 salta sin considerar el signo

Operandos: jb otro
jnae otro
jc otro

JBE/JNA (Jump if below or equal/Jump if not above)

Sintaxis: JBE Desplazamiento


JNA Desplazamiento

Descripción: Si C = 1 o Z = 1, transfiere el control a la instrucción (IP +


desplazamiento)
Si C = 0 y Z = 0, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Above (por encima de) y Below (por debajo) se refiere a la relación


entre dos valores sin signo.

Greater (mayor que) y Less (menor que) se refiere a la relación entre


dos valores con signo.

Operación: Si C = 1 o Z = 1, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n N n n

Ejemplo: cmp ax, 20 ; Compara AX con 20


jbe otro ; Si AX = 20 salta sin considerar el signo

Operandos: jbe otro


jna otro

JCXZ (Jump if CX is zero)

Sintaxis: JCXZ Desplazamiento

Descripción: Si CX = 0, transfiere el control a la instrucción (IP + desplazamiento)


Si CX ≠ 0, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.


19
Esta instrucción se puede utilizar al inicio de un bucle para no ejecutarlo
en caso de que CX = 0.

Operación: Si CX = 0, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n N n n

Ejemplo: dec cx ;
jcxz otro ; Si CX = 0 salta a otro

Operandos: jcxz otro

JE/JZ (Jump if equal/Jump if zero)

Sintaxis: JE Desplazamiento
JZ Desplazamiento

Descripción: Si Z = 1, transfiere el control a la instrucción (IP + desplazamiento)


Si Z = 0, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Operación: Si Z = 1, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n N n n

Ejemplo: cmp ax, 20 ; Compara AX con 20


je etiqueta ; Si AX = 20 salta a etiqueta

sub cx,ax
jz otro ; Si CX = 0 salta a otro

Operandos: je otro
jz otro

JG/JNLE (Jump if greater/Jump if not less nor equal)

Sintaxis: JG Desplazamiento
JNLE Desplazamiento

Descripción: Si Z = 0 y S = O, transfiere el control a la instrucción (IP +


desplazamiento)
Si Z = 1 y S ? O, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Above (por encima de) y Below (por debajo) se refiere a la relación


entre dos valores sin signo.

Greater (mayor que) y Less (menor que) se refiere a la relación entre


dos valores con signo.
20

Operación: Si Z = 0 y S = O, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n N n n

Ejemplo: cmp ax, 20 ; Compara AX con 20


jg otro ; Si AX > 20 salta considerando el signo

Operandos: jg otro
jnle otro

JGE/JNL (Jump if greater equal/Jump if not less)

Sintaxis: JGE Desplazamiento


JNL Desplazamiento

Descripción: Si S = O, transfiere el control a la instrucción (IP + desplazamiento)

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Above (por encima de) y Below (por debajo) se refiere a la relación


entre dos valores sin signo.

Greater (mayor que) y Less (menor que) se refiere a la relación entre


dos valores con signo.

Operación: Si S = O, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n N n n

Ejemplo: cmp ax, 20 ; Compara AX con 20


jge otro ; Si AX = 20 salta considerando el signo

Operandos: jge otro


jnl otro

JL/JNGE (Jump if less/Jump if not greater nor equal)

Sintaxis: JG Desplazamiento
JNLE Desplazamiento

Descripción: Si Z = 0 y S = O, transfiere el control a la instrucción (IP +


desplazamiento)
Si Z = 1 y S ≠ O, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Above (por encima de) y Below (por debajo) se refiere a la relación


entre dos valores sin signo.
21
Greater (mayor que) y Less (menor que) se refiere a la relación entre
dos valores con signo.

Operación: Si Z = 0 y S = O, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n N n n

Ejemplo: cmp ax, 20 ; Compara AX con 20


jl otro ; Si AX < 20 salta considerando el signo

Operandos: jl otro
jnge otro

JLE/JNG (Jump if less or equal/Jump if not greater)

Sintaxis: JLE Desplazamiento


JNG Desplazamiento

Descripción: Si Z = 1 o S ≠ O, transfiere el control a la instrucción (IP


+desplazamiento)
Si Z = 0 y S = O, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Above (por encima de) y Below (por debajo) se refiere a la relación


entre dos valores sin signo.

Greater (mayor que) y Less (menor que) se refiere a la relación entre


dos valores con signo.

Operación: Si Z = 1 o S ≠ O, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: cmp ax, 20 ; Compara AX con 20


jle otro ; Si AX = 20 salta considerando el signo

Operandos: jle otro


jng otro

JMP (Jump)

Sintaxis: JMP dirección

Descripción: Transfiere el control incondicionalmente

La transferencia del control puede ser:


 Dentro del mismo segmento. Es decir se reemplaza IP por la
dirección especificada en el operando. Este desplazamiento puede
estar:
22
o Entre -128 y 127 bytes, generándose una instrucción de dos
bytes Inferior a -128 o superior a 127 bytes, pudiendo ser el
desplazamiento
o hasta de 32k bytes. En este saso se genera una instrucción
de tres bytes.
 Distinto segmento. Es decir: CS e IP se sustituyen por los valores
de la dirección especificada en el operando.

 La transferencia del control también puede ser:


o Directa, es decir especificando una etiqueta
o Indirecta, es decir especificando una dirección.

Operación: Si la transferencia del control es a distinto segmento


CS = segmento
IP = desplazamiento
Si la transferencia del control es dentro del mismo segmento
IP = desplazamiento con signo

Banderas: O D I T S Z A P C
n n n n n n N n n

Ejemplo: jmp otro ; Salta a otro


jmp far ptr otro ; Salta (directo) a otro segmento
jmp [bx] ; Salta (indirecto) dentro el mismo segmento
jmp far ptr [bx] ; Salta (indirecto) a otro segmento

otro dw proc01 ; Desplazamiento de proc01, definido en DS


jmp otro ; Salta a otro (indirecto) dentro
; del mismo segmento

otro dd proc01 ; Desplazamiento de proc01, definido en DS


jmp otro ; Salta a otro (indirecto) a otro segmento

Operandos: jmp etiqueta

jmp short etiqueta


jmp etiqueta[DI]

jmp far ptr etiqueta


jmp far ptr etiqueta[DI]

JNC (Jump if not carry)

Sintaxis: JNC Desplazamiento

Descripción: Si C = 0, transfiere el control a la instrucción (IP + desplazamiento)


Si C = 1, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Operación: Si C = 0, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n
23

Ejemplo: add al,bl


jnc otro ; Si C = 0, salta a otro

Operandos: jnc otro

JNE/JNZ (Jump if not equal/Jump if not zero)

Sintaxis: JNE Desplazamiento


JNZ Desplazamiento

Descripción: Si Z = 0, transfiere el control a la instrucción (IP + desplazamiento)


Si Z = 1, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Above (por encima de) y Below (por debajo) se refiere a la relación


entre dos valores sin signo.

Greater (mayor que) y Less (menor que) se refiere a la relación entre


dos valores con signo.

Operación: Si Z = 0, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: cmp ax,20 ; Compara AX con 20


jne otro ; Si AX ≠ 20 salta a otro

sub al,bl
jnz otro ; Si AL ≠ 0 salta a otro

Operandos: jne otro


jnz otro

JNO (Jump if not overflow)

Sintaxis: JNO Desplazamiento

Descripción: Si O = 0, transfiere el control a la instrucción (IP + desplazamiento)


Si O = 1, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Operación: Si O = 0, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n
24
Ejemplo: add ax,20
jno otro ; Si O = 0, salta a otro

Operandos: jno otro

JNP/JPO (Jump if not parity/Jump if parity odd)

Sintaxis: JNP Desplazamiento


JPO Desplazamiento

Descripción: Si P = 0, transfiere el control a la instrucción (IP + desplazamiento)


Si P = 1, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Operación: Si P = 0, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: add ax, 20


jnp otro ; Si P = 0, salta a otro

Operandos: jnp otro


jpo otro

JNS(Jump if not sign)

Sintaxis: JNS Desplazamiento

Descripción: Si S = 0, transfiere el control a la instrucción (IP + desplazamiento)


Si S = 1, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Operación: Si S = 0, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: sub ax, 20 ; Compara AX con 20


jns otro ; Si AX = 20 salta a otro

Operandos: jns otro

JO (Jump if overflow)

Sintaxis: JO Desplazamiento

Descripción: Si O = 1, transfiere el control a la instrucción (IP + desplazamiento)


Si O = 0, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.


25

Operación: Si O = 1, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: add ax, 20


jle otro ; Si O = 1, salta a otro

Operandos: jo otro

JP/JPE (Jump on parity/Jump if parity even)

Sintaxis: JP Desplazamiento
JPE Desplazamiento

Descripción: Si P = 1, transfiere el control a la instrucción (IP + desplazamiento)


Si P = 0, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Operación: Si P = 1, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: add ax, 20


jp otro ; Si P = 1, salta a otro

Operandos: jp otro
jpe otro

JS (Jump on sign)

Sintaxis: JS Desplazamiento

Descripción: Si S = 1, transfiere el control a la instrucción (IP + desplazamiento)


Si S = 0, no se transfiere el control

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Operación: Si S = 1, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: sub ax, 20


js otro ; Si AX < 0 salta a otro

Operandos: js otro
26

LAHF (Load register AH from flags)

Sintaxis: LAHF

Descripción: Copia las banderas S, Z, A, P y C en los bits 7, 6, 4, 2 y 0


respectivamente. Los bits 5, 3, y 1 quedan indefinidos.

Operación: AH = S Z x A x P x C

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: lahf

Operandos: No necesita operandos.

LDS (Load data segment register)

Sintaxis: LDS destino,fuente

Descripción: Transfiere un puntero de 32 bits a DS:destino(desplazamiento), desde la


dirección apuntada por fuente. El operador fuente tiene que estar
apuntando a una zona de memoria tipo DD.

Operador destino = desplazamiento (palabra inferior)


DS = segmento (palabra superior)

Operación: DS = palabra apuntada por (fuente + 2)


destino = fuente

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: en el segmento de datos


Puntero dd 12345678h ; En DS:0000 78 56 34 12 .. ..

En el segmento de código
lds si, Puntero ; DS = 1234h
; SI = 5678h

lea si, Puntero ; SI = 0


lds bx, [si] ; DS = 1234h
; BX = 5678h

Operandos: lds si, dirección de memoria


lds di, dirección de memoria
lds bx, dirección de memoria
27
LEA (Load effective address)

Sintaxis: LEA destino,fuente

Descripción: Transfiere el desplazamiento del operando fuente al operando destino.


La fuente tiene que ser una dirección de memoria y el destino tiene que
ser un registro de 16 bits que no sea registro de segmento.

LEA permite especificar registros índice en el operando fuente, lo que


no es posible con el operador OFFSET.

Operación: destino = desplazamiento de fuente.

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: en el segmento de datos


hola db “hola” ; DS:0000 68 6F 6C 61
db “cuate” ; DS:0003 63 75 61 74 65

En el segmento de código
mov si, 4
lea bx, hola[si] ; BX = 0004

Operandos: lea si, dirección de memoria


lea di, dirección de memoria
lea bx, dirección de memoria

LES (Load extra segment register)

Sintaxis: LES destino, fuente

Descripción: Transfiere un puntero de 32 bits a ES:destino(desplazamiento), desde la


dirección apuntada por fuente. El operador fuente tiene que estar
apuntando a una zona de memoria tipo DD.

Operador destino = desplazamiento (palabra inferior)


ES = segmento (palabra superior)

Operación: ES = palabra apuntada por (fuente + 2)


destino = fuente

Banderas: O D I T S Z A P C
n n n n N n n n n

Ejemplo: en el segmento de datos


Puntero dd 12345678h ; En DS:0000 78 56 34 12 .. ..

En el segmento de código
les si, Puntero ; ES = 1234h
; SI = 5678h

lea si, Puntero ; SI = 0


les bx, [si] ; ES = 1234h
; BX = 5678h
28
Operandos: les si, dirección de memoria
les di, dirección de memoria
les bx, dirección de memoria

LOCK (Lock the bus)

Sintaxis: LOCK

Descripción: LOCK es un prefijo de un byte que acompaña a una instrucción y que


activa la señal mientras dicha instrucción se ejecuta, es decir impide
que otros procesadores utilicen el bus.

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: en el segmento de datos


semaforo db 0

En el segmento de código
check:
mov al, 1
lock xchg semaforo, al ; semáforo = 1 (rojo)
cmp al, 1 ; ¿semáforo = rojo?
je check ; si semáforo esta rojo sigue
; bloqueando el bus
; sino continua con el proceso
;
; Proceso cualquiera
;
; Después de realizar el proceso, poner el
; semáforo en verde (valor 0)
; para permitir que otros procesadores
; accedan al bus
;
mov semaforo,0 ; libera el bus

Operandos: lock instrucion

LODS (Load string)


LODSB (Load string byte)
LODSW (Load string word)

Sintaxis: LODS destino,fuente


LODSB
LODSW

Descripción: Transfiere un byte o un apalabra de la cadena fuente, apuntada por


DS:SI, al acumulador AL o AX. Actualiza SI para que apunte al siguiente
elemento de la cadena a cargar.

Si la bandera D = 0, entonces SI se incremente pero si D = 1, entonces


SI se decrementa (ver las instrucciones STD y CLD).

La instrucción LODSB carga el registro AL con el dato apuntado por DS:


[SI] y se actualiza SI en uno.
29

La instrucción LODSW carga el registro AX con el dato apuntado por


DS:[SI] y se actualiza SI en dos.

El ensamblador utiliza el operando especificado en LODS solo para


verificar el tipo (byte o word) y para ver si se ha especificado un registro
de segmento.

Operación: Si D = 0 y DS:[SI] = fuente tipo byte, entonces AL = fuente y SI = SI +1


Si D = 0 y DS:[SI] = fuente tipo word, entonces AX = fuente y SI = SI + 2
Si D = 1 y DS:[SI] = fuente tipo byte, entonces AL = fuente y SI = SI – 1
Si D = 1 y DS:[SI] = fuente tipo word, entonces AX = fuente y SI = SI - 2

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo1: en el segmento de datos


datos db ‘La verdad’

En el segmento de código
cld
lea si,datos
lods datos
;
; Como la cadena es tipo byte la última instrucción se puede reemplazar
; por
;
lodsb

Ejemplo2: en el segmento de datos


datos dw ‘La verdad’

En el segmento de código
cld
lea si,datos
lods datos
;
; Como la cadena es tipo word la última instrucción se puede
; reemplazar
; por
;
lodsw

Operandos: lods memoria 8


lodsb
lods memoria 16
lodsw

LOOP (Loop)

Sintaxis: LOOP desplazamiento

Descripción: Decrementa CX
Si CX ≠ 0, entonces IP = IP + desplazamiento
Si CX = 0, entonces se ejecuta la siguiente instrucción.
30

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Operación: CX = CX - 1
Si CX ≠ 0, entonces IP = IP + desplazamiento
Si CX = 0, entonces se ejecuta la siguiente instrucción.

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo1: mov cx,10



otro:

loop otro

Operandos: loop etiqueta

LOOPNE (Loop if not equal)


LOOPNZ (loop if not zero)

Sintaxis: LOOPNE desplazamiento


LOOPNZ desplazamiento

Descripción: Decrementa el registro CX.


Si Z = 0 y CX ≠ 0, entonces IP = IP + desplazamiento
Si Z = 1 y CX = 0, entonces se ejecuta la siguiente instrucción.

El desplazamiento debe estar comprendido entre -128 y 127 bytes.

Operación: CX = CX - 1
Si Z = 0 y CX ≠ 0, entonces IP = IP + desplazamiento
Si Z = 1 y CX = 0, entonces se ejecuta la siguiente instrucción.

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo1: mov cx, 10



otro:

loopne otro

Operandos: loopne etiqueta

MOV (Move)

Sintaxis: mov destino, fuente

Descripción: Mueve un byte o un word desde el operando fuente al operando destino.


Ambos operandos tienen que ser del mismo tipo.

No se puede mover un valor inmediato a un registro de segmento


31
No se puede mover datos entre elementos de memoria, hay que utilizar
un registro intermedio.

No se puede utilizar CS como destino

Operación: destino = fuente.

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo1: mov cx, 10

Operandos: mov memoria 8, registro 8


mov memoria 16, registro 16

mov registro 8, memoria 8


mov registro 16, memoria 16

mov ds, memoria 16


mov ds, ax
mov memoria 16, ds
mov ax, ds
mov es, memoria 16
mov es, ax
mov memoria 16, es
mov ax, es

mov al, 28h


mov ax, 1964h

mov memoria 8, 13h


mov memoria 16, 1973h

MOVS (Move string)


MOVSB (Move string byte)
MOVSW (Move string word)

Sintaxis: MOVS cadena_destino,cadena_fuente


MOVSB
MOVSW

Descripción: Transfiere un byte o un apalabra de la cadena fuente, apuntada por


DS:SI, a la cadena destino apuntada por ES:DI. Actualiza SI y DI para
que apunte al siguiente elemento de la cadena a cargar.

Si la bandera D = 0, entonces SI y DI se incrementan pero si D = 1,


entonces SI y DI se decrementan (ver las instrucciones STD y CLD).

La instrucción MOVSB mueve un byte apuntado por DS:[SI] a ES:[DI] y


se actualiza SI y DI en uno.

La instrucción MOVSW mueve un word apuntado por DS:[SI] a ES:[DI] y


se actualiza SI y DI en dos.
32
El ensamblador utiliza el operando especificado en MOVS solo para
verificar el tipo (byte o word) y para ver si se ha especificado un registro
de segmento.

Operación: DS:[SI] = cadena_fuente tipo byte y ES:[DI] = cadena_destino tipo byte


Si D = 0 cadena_destino = cadena_fuente y SI = SI +1.
Si D = 1 cadena_destino = cadena_fuente y SI = SI – 1
DS:[SI] = cadena_fuente tipo word y ES:[DI] = cadena_destino tipo word
Si D = 0 cadena_destino = cadena_fuente y SI = SI +2.
Si D = 1 cadena_destino = cadena_fuente y SI = SI – 2

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: en el segmento de datos


origen db ' Rien n'est trop beau pour une si belle'
destino db 38 dup(0)

En el segmento de código
push ds
sub ax,ax
push ax
mov ax,datos
mov ds,ax ; debido a que DS:[SI] = fuente y
mov es,ax ; ES:[DI] = destino, hacemos ES = DS

cld
lea si,origen
lea di,destino
mov cx,38
rep movs byte ptr[di], byte ptr[si]
;
; En vez de la última instrucción es mejor utilizar rep movsb para copiar
; byte por byte y es mejor utilizar rep movsw para copiar word por word.

Oreándoos movs byte ptr [di], byte ptr [si]


movsb

movs word ptr [di], word ptr [si]


movsw

MUL (Multiply, unsigned)

Sintaxis: MUL fuente

Descripción: Multiplica, sin tomar en cuenta el signo, AL por fuente (byte). El


producto se guarda en AX.
Multiplica, sin tomar en cuenta el signo, AX por fuente (word). El
producto se guarda en DX:AX.

Si C = 1 y O = 1, significa que los datos en AH o en DX son parte del


resultado, no representan el signo.

Operación: Si fuente byte


AX = AL * fuente
33
Si fuente word
DX:AX = AX * fuente
Si la mitad superior del resultado es cero, entonces C = 0,
caso contrario C = 1 y C = O

Banderas: O D I T S Z A P C
n n n c

Ejemplo: mov al,13h ; AL = 13h


mov bl,2
mul bl ; AX = 1Ah = 26

mov ax,13h ; AX = FFF3h


mov bx,0002
mul bx ; DX:AX = 0000:001A = 26
;C=0yO=0

mov ax,1964h ; AX = 07ACh


mov bx,1973 ; BX = 07B5h
mul bx ; DX:AX = 003B:209C = 3874972
;C=1yO=1

Oreándoos: mul registro 8


mul registro 16
mul memoria 8
mul memoria 16

NEG (Negate)

Sintaxis: NEG destino

Descripción: Resta el operando destino de cero y devuelve el resultado en el mismo


operando.

NEG equivale a las instrucciones


NOT destino
INC

Operación: Si destino es tipo byte


destino = complemento a 1 de destino
destino = destino + 00000001b
Si destino es tipo word
destino = complemento a 1 de destino
destino = destino + 0000000000000001b

Banderas: O D I T S Z A P C
n n n c c c c c

Ejemplo: mov al,0Dh ; al = 00001101 = 13


neg al ; 11110010
;+ 1
; --------------
; 11110011 = F3h = -13

Operandos: neg registro 8


34
neg registro 16
neg memoria 8
neg memoria 16

NEG (Negate)

Sintaxis: NEG destino

Descripción: Resta el operando destino de cero y devuelve el resultado en el mismo


operando.

NEG equivale a las instrucciones


NOT destino
INC

Operación: Si destino es tipo byte


destino = complemento a 1 de destino
destino = destino + 00000001b
Si destino es tipo word
destino = complemento a 1 de destino
destino = destino + 0000000000000001b

Banderas: O D I T S Z A P C
c n n n c c c c c

Ejemplo: mov al,0Dh ; al = 00001101 = 13


neg al ; 11110010
;+ 1
; --------------
; 11110011 = F3h = -13

Operandos: neg registro 8


neg registro 16
neg memoria 8
neg memoria 16

NOP (No operation)

Sintaxis: NOP

Descripción: El procesador no hace nada, ejecuta la siguiente instrucción.

NEG equivale a las instrucciones


NOT destino
INC

Operación: Ninguna

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: nop

Operandos: No necesita operandos


35

NOT (Logical NOT)

Sintaxis: NOT destino

Descripción: Cambia los bits unos por ceros y viceversa, es decir realiza el
complemento a uno del operando destino y devuelve el resultado en el
mismo operando.

Operación: Si destino es tipo byte


destino = complemento a 1 de destino
Si destino es tipo word
destino = complemento a 1 de destino

Banderas: O D I T S Z A P C
n n n n n n n n N

Ejemplo: mov al,0Dh ; al = 00001101


not al ; al = 11110010

Operandos: not registro 8


not registro 16
not memoria 8
not memoria 16

OR (Logical inclusive OR)

Sintaxis: OR destino, fuente

Descripción: Operación lógica “O” inclusivo a nivel de bits entre los operandos, es
resultado se almacena en el destino. La lógica O es:

00 = 0
01 = 1
10 = 1
11 = 1

Operación: destino = destino OR fuente


C=O=0

Banderas: O D I T S Z A P C
0 n n n c c c 0

Ejemplo: mov al, 0Dh ; al = 00001101 = 0Dh


mov bl, D0h ; bl = 11010000 = D0h
or al, bl ; al = 11011101 = DDh

Operandos: or registro 8, registro 8


or registro 8, memoria 8
or memoria 8, registro 8
or registro 8, constante
or memoria 8, constante

or registro 16, registro 16


or registro 16, memoria 16
36
or memoria 16, registro 16
or registro 16, constante
or memoria 16, constante

OUT (Output byte or word)

Sintaxis: OUT destino, acumulador

Descripción: transfiere del acumulador (AL o AX) al puerto especificado en el


operador destino.

Si el puerto es un valor entre 0 y 255, el puerto es especificado


directamente por su valor numérico.

Si el puerto es un valor entre 0 y 65535, el puerto es especificado en el


registro DX.

Operación: Si acumulador = AL
AL se transfiere al puerto
Si acumulador = AX
AX se transfiere al puerto

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: out 61h, al

mov al, 13
mov dx,03F8h
out dx, al

Operandos: out puerto 8, al


out puerto 8, ax
out dx, al
out dx, ax

POP (POP word of stack to destination)

Sintaxis: POP destino

Descripción: Transfiere un word de la pila, de la posición apuntada por el registro SP,


al operador destino, luego se incrementa el registro SP.

El operador destino no puede ser el registro CS

Operación: destino = word apuntado por SS:SP


SP = SP + 2

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: pop ax

Operandos: pop registro 16 (menos el CS)


pop memoria 16
37

POPF (POP flags of stack)

Sintaxis: POPF destino

Descripción: Transfiere los bits de un word de la pila, de la posición apuntada por el


registro SP, al registro de banderas, luego se incrementa el registro SP.

Registro de banderas = F E D C B A 9 8 7 6 5 4 3 2 1 0
0DI TSZ A P C

Operación: Registro de banderas = word apuntado por SS:SP


SP = SP + 2

Banderas: O D I T S Z A P C
c c c c c c c c c

Ejemplo: popf

Operandos: No necesita operandos

PUSH (PUSH word onto stack)

Sintaxis: PUSH fuente

Descripción: Decrementa el puntero SP en dos y luego transfiere la palabra


especificada en el operando fuente apuntado por SP.

El operador fuente no puede ser el registro CS

Operación: SP = SP – 2
fuente = palabra apuntada por SS:SP

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: push ax

Operandos: push registro 16 (menos el CS debido a que no se acepta POP CS)


push memoria 16

PUSHF (PUSH flags ono stack)

Sintaxis: PUSH

Descripción: Decrementa el puntero SP en dos y luego transfiere los valores de las


banderas a bits específicos de la palabra apuntada por SP.

Registro de banderas = F E D C B A 9 8 7 6 5 4 3 2 1 0
0DI TSZ A P C

Operación: SP = SP – 2
Palabra direccionada por SS:SP = registro de banderas
38

Banderas: O D I T S Z A P C
c c c c c c c c c
Ejemplo: pushf

Operandos: No necesita operandos

RCL (Rotate through carry left)

Sintaxis: RCL destino, contador

Descripción: Rotar a la izquierda los bits del operando destino a través de la bandera
de acarreo, el número de veces especificado en el contador. El bit de la
bandera C se desplaza a la posición más significativa del operando
destino.

Si el número de bits a desplazar es 1, se puede especificar


directamente, pero si el número de bits a desplazar es mayor a 1, su
valor debe cargarse en CL como segundo operando.

Operación: contador = constante


Mientras contador ≠ 0
C = bit más significativo del operando destino
Bit menos significativo del operando destino = C
contador = contador – 1

Banderas: O D I T S Z A P C
c n n n n n n n c

Ejemplo: mov cl, 4


mov al, 00110001b
rcl al,cl

Operandos: rcl registro 16, 1


rcl registro 16, cl
rcl memoria 16, 1
rcl memoria 16, cl

rcl registro 8, 1
rcl registro 8, cl
rcl memoria 8, 1
rcl memoria 8, cl

RCR (Rotate through carry right)

Sintaxis: RCR destino, contador

Descripción: Rotar a la derecha los bits del operando destino a través de la bandera
de acarreo, el número de veces especificado en el contador. El bit de la
bandera C se desplaza a la posición más significativa del operando
destino.

Si el número de bits a desplazar es 1, se puede especificar


directamente, pero si el número de bits a desplazar es mayor a 1, su
valor debe cargarse en CL como segundo operando.
39

Operación: contador = constante


Mientras contador ≠ 0
C = bit menos significativo del operando destino
Bit más significativo del operando destino = C
contador = contador – 1

Banderas: O D I T S Z A P C
c n n n n n n n c

Ejemplo: mov cl, 4


mov al, 01110011b
rcr al,cl

Operandos: rcr registro 16, 1


rcr registro 16, cl
rcr memoria 16, 1
rcr memoria 16, cl

rcr registro 8, 1
rcr registro 8, cl
rcr memoria 8, 1
rcr memoria 8, cl

REP (Repeat string operation)


REPE (Repeat string operation if equal)
REPZ (Repeat string operation if zero)
REPNE (Repeat string operation if not equal)
REPNZ (Repeat string operation if not zero)

Sintaxis: REP instrucción de cadenas


REPE instrucción de cadenas
REPZ instrucción de cadenas
REPNE instrucción de cadenas
REPNZ instrucción de cadenas

Descripción: Son prefijos que repiten una operación de cadena un número específico
de veces o hasta que se cumpla una condición de cero o no cero.

Se carga CX con un valor. Para REP la operación se repite mientras


CX ≠ 0.

Se carga CX con un valor. Para REPE/REPZ la operación se repite


mientras Z = 1 y CX ≠ 0.

Se carga CX con un valor. Para REPNE/REPNZ la operación se repite


mientras Z = 0 y CX ≠ 0.

Operación: CX = valor
REP repite la operación mientras CX ≠ 0.
REPE/REPZ repite la operación mientras Z = 1 y CX ≠ 0.
REPNE/REPNZ repite la operación mientras Z = 0 y CX ≠ 0.
En todos los casos CX = CX – 1 después de cada operación.
40

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: mov cx, 10


lea si, texto1
lea di, texto2
rep movsb

Operandos: rep instrucción de cadena


repe instrucción de cadena
repz instrucción de cadena
repne instrucción de cadena
repnz instrucción de cadena

RET (Return)

Sintaxis: RET valor

Descripción: Regresa de un procedimiento al que se entró previamente por un CALL


cercano o lejano. El ensamblador genera un RET cercano si está dentro
de un procedimiento etiquetado como NEAR y un RET lejano si está
entro de un procedimiento etiquetado como FAR.

Para el caso cercano, RET mueve la palabra en el tope de la pila al IP e


incrementa al SP en dos.

Para el caso lejano, RET mueve las palabras en el tope de la pila al IP y


CS e incrementa el SP en cuatro.

Cuando se utiliza RET valor, se realiza SP = SP + valor

Operación:
Caso cercano.
IP = [SP].
SP = SP + 2
Caso lejano.
IP = [SP] y SP = SP + 2
CS = [SP] y SP = SP + 2
Si RET valor
SP = SP + valor

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: ret

ret 4 ; Retorna de un procedimiento NEAR con dos parámetros


; de direcciones. (4 = 2 parámetros x 2 byte/parámetro)

ret 8 ; Retorna de un procedimiento FAR con dos parámetros


; de direcciones. (8 = 2 parámetros x 4 byte/parámetro)

Operandos: ret
ret valor
41

ROL (Rotate left)

Sintaxis: ROL destino, contador

Descripción: Rotar a la izquierda los bits del operando destino, el número de veces
especificado en el contador. El bit más significativo se desplaza a la
posición menos significativa del operando destino. El bit más
significativo también entra a la bandera C.

Si el número de bits a desplazar es 1, se puede especificar


directamente, pero si el número de bits a desplazar es mayor a 1, su
valor debe cargarse en CL como segundo operando.

Operación: contador = constante


Mientras contador ≠ 0
bit menos significativo = bit más significativo
bandera C = bit más significativo
contador = contador – 1

Banderas: O D I T S Z A P C
c n n n n n n n c

Ejemplo: mov cl, 4


mov al, 01110011b
rol al,cl

Operandos: rol registro 16, 1


rol registro 16, cl
rol memoria 16, 1
rol memoria 16, cl

rol registro 8, 1
rol registro 8, cl
rol memoria 8, 1
rol memoria 8, cl

ROR (Rotate right)

Sintaxis: ROR destino, contador

Descripción: Rotar a la derecha los bits del operando destino, el número de veces
especificado en el contador. El bit menos significativo se desplaza a la
posición más significativa del operando destino. El bit menos
significativo también entra a la bandera C.

Si el número de bits a desplazar es 1, se puede especificar


directamente, pero si el número de bits a desplazar es mayor a 1, su
valor debe cargarse en CL como segundo operando.

Operación: contador = constante


Mientras contador ≠ 0
bit más significativo = bit menos significativo
bandera C = bit menos significativo
contador = contador – 1
42

Banderas: O D I T S Z A P C
c n n n n n n n c

Ejemplo: mov cl, 4


mov al, 01110011b
ror al,cl

Operandos: ror registro 16, 1


ror registro 16, cl
ror memoria 16, 1
ror memoria 16, cl

ror registro 8, 1
ror registro 8, cl
ror memoria 8, 1
ror memoria 8, cl

SAHF (Store AH in flags)

Sintaxis: SAHF

Descripción: Transfiere bits específicos del registro AH a las banderas S, Z, A, P y C.

Operación: 7 6 5 4 3 2 1 0 del registro AH


SZ A P C

Banderas: O D I T S Z A P C
n n n n c c c c C

Ejemplo: sahf

Operandos: No necesita operandos.

SAL (Shift arithmetic left)


SHL (Shift logical left)

Sintaxis: SAL destino, contador


SHL destino, contador

Descripción: Desplaza a la izquierda los bits del operando destino la cantidad de


veces especificada en contador. Los bits de la derecha del operando
destino se rellenan con ceros y los bits que salen de la izquierda del
operador se pierden.

Si el número de bits a desplazar es 1, se puede especificar


directamente, pero si el número de bits a desplazar es mayor a 1, su
valor debe cargarse en CL como segundo operando.

SAL y SHL son físicamente la misma instrucción.

Operación: contador = constante


Mientras contador ≠ 0
bit menos significativo = 0
contador = contador – 1
43

Banderas: O D I T S Z A P C
c n n n c c c c

Ejemplo: mov cl, 4


mov al, 01110011b
sal al,cl

Operandos: sal registro 16, 1


sal registro 16, cl
sal memoria 16, 1
sal memoria 16, cl

sal registro 8, 1
sal registro 8, cl
sal memoria 8, 1
sal memoria 8, cl

SAR (Shift arithmetic right)

Sintaxis: SAR destino, contador

Descripción: Desplaza a la derecha los bits del operando destino la cantidad de


veces especificada en contador. Los bits de la izquierda del operando
destino se rellenan con ceros y los bits que salen de la derecha del
operador se pierden.

Si el número de bits a desplazar es 1, se puede especificar


directamente, pero si el número de bits a desplazar es mayor a 1, su
valor debe cargarse en CL como segundo operando.

Operación: contador = constante


Mientras contador ≠ 0
bit más significativo = 0
contador = contador – 1

Banderas: O D I T S Z A P C
c n n n c c c c

Ejemplo: mov cl, 4


mov al, 01110011b
sar al,cl

Operandos: sar registro 16, 1


sar registro 16, cl
sar memoria 16, 1
sar memoria 16, cl

sar registro 8, 1
sar registro 8, cl
sar memoria 8, 1
sar memoria 8, cl
44

SBB (Subtract with borrow)

Sintaxis: SBB destino, fuente

Descripción: Resta el operando fuente del operando destino. Si la bandera C = 1,


además se resta uno del operando destino. El resultado se deposita en
el operando destino. Los operandos deben ser del mismo tipo.

Operación: destino = destino – fuente


Si C = 1
destino = destino – 1
Banderas: O D I T S Z A P C
c n n n c c c c c

Ejemplo: mov al, 101 ; al = 65h


mov bl, 155 ; bl = 9Bh
add al, bl ; ax = 0000h, C = 1
sbb al, 3 ; ax = FFFCh

Operandos: sbb registro 8, registro 8


sbb registro 16, registro 16
sbb registro 8, memoria 8
sbb registro 16, memoria 16
sbb memoria 8, registro 8
sbb memoria 16, registro 16
sbb registro 8, 30
sbb registro 16, 124h
sbb memoria 8, 25h

sbb memoria 16, 1409h

SCAS (Scan string)


SCASB (Scan string byte)
SCASW (Scan string word)

Sintaxis: SCAS cadena_destino


SCASB
SCASW

Descripción: Busca un byte (en AL) o una palabra (en AX) en la cadena destino,
apuntada por ES:DI. Actualiza DI para que apunte al siguiente elemento
de la cadena a cargar.

Si la bandera D = 0, entonces DI se incremente pero si D = 1, entonces


DI se decrementa (ver las instrucciones STD y CLD).

La instrucción SCASB busca un byte = AL en la cadena apuntada por


ES:[DI] y se actualiza DI en uno.

La instrucción SCASW busca un word = AX en la cadena apuntada por


ES:[DI] y se actualiza DI en dos.
45
El ensamblador utiliza el operando especificado en SCAS solo para
verificar el tipo (byte o word) y para ver si se ha especificado un registro
de segmento.

Estas instrucciones se utilizan con los prefijos REPE(REPZ) o


REPNE(REPNZ).

Operación: Si D = 0, AL – ES:[DI], y SI = SI +1
Si D = 0, AX – ES:[DI], y SI = SI + 2
Si D = 1, AL – ES:[DI], y SI = SI – 1
Si D = 1, AX – ES:[DI], y SI = SI – 2

Banderas: O D I T S Z A P C
c n n n c c c c c

Ejemplo: en el segmento de datos


destino db ' Rien n'est trop beau pour une si belle'

En el segmento de código
push ds
sub ax, ax
push ax
mov ax, datos
mov ds, ax ;
mov es, ax ; Debido a que ES:[DI] = destino,
; hacemos ES = DS

cld
lea di, destino
mov cx, 38
rep movs byte ptr[di], byte ptr[si]
;
; En vez de la última instrucción es mejor utilizar rep movsb para
; buscar byte por byte y es mejor utilizar rep movsw para buscar
; word por word.

Operandos: scas memoria 8


scasb
scas memoria 16
scasw

SHR (Shift logical right)

Sintaxis: SHR destino, contador

Descripción: Desplaza a la derecha los bits del operando destino la cantidad de


veces especificada en contador. Los bits de la izquierda del operando
destino se rellenan con ceros y los bits que salen de la derecha del
operador se pierden.

Si el número de bits a desplazar es 1, se puede especificar


directamente, pero si el número de bits a desplazar es mayor a 1, su
valor debe cargarse en CL como segundo operando.

Funciona exactamente igual que la instrucción SAL


46

Operación: contador = constante


Mientras contador ≠ 0
bit más significativo = 0
contador = contador – 1

Banderas: O D I T S Z A P C
c n n n c c c c

Ejemplo: mov cl, 4


mov al, 01110011b
shr al,cl

Operandos: shr registro 16, 1


shr registro 16, cl
shr memoria 16, 1
shr memoria 16, cl

shr registro 8, 1
shr registro 8, cl
shr memoria 8, 1
shr memoria 8, cl

STC (Set carry flag)

Sintaxis: STC

Descripción: Pone a uno la bandera de acarreo sin afectar a ninguna otra bandera

Operación: C=1

Banderas: O D I T S Z A P C
n n n n n n n n 1

Ejemplo: stc

Operandos: No necesita operandos.

STD (Set direction flag)

Sintaxis: STD

Descripción: Pone a uno la bandera de dirección sin afectar a ninguna otra bandera

Operación: D=1

Banderas: O D I T S Z A P C
n 1 n n n n n n n

Ejemplo: std

Operandos: No necesita operandos.


47

STI (Set interrupt flag)

Sintaxis: STI

Descripción: Pone a uno la bandera de interrupciones sin afectar a ninguna otra


bandera

Operación: I=1

Banderas: O D I T S Z A P C
n n 1 n n n n n n

Ejemplo: sti ; activa las interrupciones enmascarables

Operandos: No necesita operandos.

STOS (Store string)


STOSB (Store string byte)
STOSW (Store string word)

Sintaxis: STOS cadena_destino


STOSB
STOSW

Descripción: Transfiere un byte o un apalabra del acumulador AL o AX a la cadena


destino, apuntada por ES:DI,. Actualiza DI para que apunte al siguiente
elemento de la cadena a almacenar.

Si la bandera D = 0, entonces DI se incremente pero si D = 1, entonces


DI se decrementa (ver las instrucciones STD y CLD).

La instrucción STOSB almacena el registro AL en la dirección ES:[DI] y


se actualiza DI en uno.

La instrucción STOSW almacena el registro AX en la dirección ES:[DI] y


se actualiza DI en dos.

El ensamblador utiliza el operando especificado en STOS solo para


verificar el tipo (byte o word) y para ver si se ha especificado un registro
de segmento.

Operación: Si D = 0 y ES:[DI] = AL y SI = SI +1
Si D = 0 y DS:[SI] = AX y SI = SI + 2
Si D = 1 y DS:[SI] = AL y SI = SI – 1
Si D = 1 y DS:[SI] = AX y SI = SI – 2

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: en el segmento de datos


pantalla db 80*25*2 dup(0)

En el segmento de código
push ds
48
sub ax, ax
push ax
mov ax, datos
mov ds, ax ;
mov ax, 0B800h ; Debido a que ES:[DI] = destino,
mov es, ax ; apuntamos con ES:[DI] a =0B800h
cld
mov al, 20h
lea di, pantalla
rep stos byte ptr [DI]
;
; Como la cadena es tipo byte la última instrucción se puede reemplazar
; por
;
rep stosb

Operandos: stos memoria 8


stosb
stos memoria 16
stosw

SUB (Subtract)

Sintaxis: SUB destino, fuente

Descripción: Resta el operando fuente del operando destino. El resultado se deposita


en el operando destino. Los operandos deben ser del mismo tipo.

Operación: destino = destino – fuente

Banderas: O D I T S Z A P C
c n n n c c c c c

Ejemplo: mov al, 5 ; al = 05h


mov bl, 3 ; bl = 03h
sub al, bl ; ax = 02h

Operandos: sub registro 8, registro 8


sub registro 16, registro 16
sub registro 8, memoria 8
sub registro 16, memoria 16
sub memoria 8, registro 8
sub memoria 16, registro 16
sub registro 8, 30
sub registro 16, 124h
sub memoria 8, 25h
sub memoria 16, 1409h

TEST (Test)

Sintaxis: TEST destino, fuente

Descripción: “Y lógico” a nivel de bits, el resultado no se deposita en el operando


destino. Los operandos deben ser del mismo tipo.
49
Operación: destino “Y lógico” fuente

Banderas: O D I T S Z A P C
0 n n n c c c 0

Ejemplo: mov al, 10000000b


test al, 10000000b
jnz otro

Operandos: test registro 8, registro 8


test registro 16, registro 16
test registro 8, memoria 8
test registro 16, memoria 16
test memoria 8, registro 8
test memoria 16, registro 16
test registro 8, 101b
test registro 16, 124h
test memoria 8, 25h
test memoria 16, 1409h

WAIT (Wait)

Sintaxis: WAIT

Descripción: Pone el procesador en estado de espera. El estado de espera es


abandonado cuando la patita TEST es activada. WAIT chequea la línea
TEST cada cinco intervalos de reloj.

WAIT y TEST se utilizan para comunicar el procesador principal con


otros procesadores.

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: wait

Operandos: No necesita operandos.

XCHG (Exchange)

Sintaxis: XCHG destino, fuente

Descripción: Intercambia el contenido entre los dos operandos, tipo byte o word. No
se pueden utilizar los registros de segmento

Operación: aux = destino


destino = fuente
fuente = aux

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: xchg al, ah

Operandos: xchg registro 8, registro 8


50
xchg registro 8, memoria 8
xchg memoria 8, registro 8

xchg registro 16, registro 16


xchg registro 16, memoria 16
xchg memoria 16, registro 16

xchg registro 8, 13h


xchg registro 16, 1973h

XLAT (Translate)

Sintaxis: XLAT tabla_fuente

Descripción: Saca un byte de una tabla apuntada por BX, utilizando AL como índice
para posicionarse en la dirección requerida.

La tabla tiene que ser tipo byte y debe tener una longitud máxima de
256 bytes

Operación: AL = byte direccionado por (BX + AL)

Banderas: O D I T S Z A P C
n n n n n n n n n

Ejemplo: en el segmento de datos


tabla db 1,3,5,7,9,11

En el segmento de código
lea bx,tabla
mov al, 3
xlat tabla ; al = 7
;
; esto equivale a
;
mov al, tabla[3]

Operandos: xlat memoria 8

XOR (Logical exclusive OR)

Sintaxis: XOR destino, fuente

Descripción: Operación lógica “O” exclusivo a nivel de bits entre los operandos, es
resultado se almacena en el destino. La lógica XOR es:

00 = 0
01 = 1
10 = 1
11 = 0

Operación: destino = destino XOR fuente


C=O=0
51
Banderas: O D I T S Z A P C
0 n n n c c c 0

Ejemplo: mov al, 0Dh ; al = 00001101 = 0Dh


mov bl, D0h ; bl = 11010000 = D0h
xor al, bl ; al = 11011101 = DDh

Operandos: or registro 8, registro 8


or registro 8, memoria 8
or memoria 8, registro 8
or registro 8, constante
or memoria 8, constante

or registro 16, registro 16


or registro 16, memoria 16
or memoria 16, registro 16
or registro 16, 28h
or memoria 16, 1964h

También podría gustarte