Está en la página 1de 38

Sistemas de Computación

DISEÑO DE INTERFACES
PARA COMPUTADORAS INTEL

Javier SANABRIA GARCIA


Universidad Mayor de San Andrés
Ingeniería Electrónica
Altísimo, omnipotente, buen Señor,
tuyas son las alabanzas, la gloria y el honor y toda bendición.

A ti solo, Altísimo, corresponden,


y ningún hombre es digno de hacer de ti mención.

Loado seas, mi Señor, con todas tus criaturas,


especialmente el señor hermano sol,
el cual es día, y por el cual nos alumbras.

Y él es bello y radiante con gran esplendor,


de ti, Altísimo, lleva significación.

Loado seas, mi Señor, por la hermana luna y las estrellas,


en el cielo las has formado luminosas y preciosas y bellas.

Loado seas, mi Señor, por el hermano viento,


y por el aire y el nublado y el sereno y todo tiempo,
por el cual a tus criaturas das sustento.

Loado seas, mi Señor, por la hermana agua,


la cual es muy útil y humilde y preciosa y casta.

Loado seas, mi Señor, por el hermano fuego,


por el cual alumbras la noche,
y él es bello y alegre y robusto y fuerte.

Loado seas, mi Señor, por nuestra hermana la madre tierra,


la cual nos sustenta y gobierna,
y produce diversos frutos con coloridas flores y hierba.

Loado seas, mi Señor, por aquellos que perdonan por tu amor,


y soportan enfermedad y tribulación.

Bienaventurados aquellos que las soporten en paz,


porque por ti, Altísimo, coronados serán.

Loado seas, mi Señor, por nuestra hermana la muerte corporal,


de la cual ningún hombre viviente puede escapar.

¡Ay de aquellos que mueran en pecado mortal!:


bienaventurados aquellos a quienes encuentre en tu santísima voluntad,
porque la muerte segunda no les hará mal.

Load y bendecid a mi Señor,


y dadle gracias y servidle con gran humildad.
Capítulo 8

Las instrucciones del µProcesador

8.1 Las banderas del µProcesador


Para las banderas del µProcesador tomaremos las siguientes convenciones: c(cambia), n(no cambia).

D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0


- - - - OF DF IF TF SF ZF - AF - PF - CF

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 o AL = 1
AL = AL + 6 y AH = AH + 1
AF = 1 y CF = AF
Bits D7 a D4 de AL = 0000b
Banderas: OF DF IF TF SF ZF AF PF CF
n n n c c
Operandos: No necesita operandos
Ejemplo: mov ax,0009h ;al = 9, ah = 0
mov bl,7 ;bl = 7
add al,bl ;ax = 0010h, AF = 1
aaa ;ax = 0106h, AF = 1

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 x 10 + AL y AL = 0
Banderas: OF DF IF TF SF ZF AF PF CF

3
8.1. LAS BANDERAS DEL µPROCESADOR 4

n n n c c c
Operandos: No necesita operandos
Ejemplo: mov ax,0206h ;ax = 518
mov bl,04 ;bl = 4
aad ;ax = 001ah
div bl ;ax = 0206h

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 y AL = resto de AL/10
Banderas: OF DF IF TF SF ZF AF PF CF
n n n c c
Operandos: No necesita operandos
Ejemplo: mov al,06h ;al = 6
mov bl,08 ;bl = 8
mul bl ;ax = 0030h = 48
aam ;ax = 0408h

AAS (Ascii adjust for substraction)


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 o la bandera AF = 1
AL = AL - 6 y AH = AH -1
AF = 1, CF = AF y D7 a D4 de AL = 0000b
Banderas: OF DF IF TF SF ZF AF PF CF
n n n c c c
Operandos: No necesita operandos
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
al, bl ; ax = 00F8h
aas ; ax = FF02h

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 + CF
Banderas: OF DF IF TF SF ZF AF PF CF
8.1. LAS BANDERAS DEL µPROCESADOR 5

c n n n c c c c c
Operandos: adc registro, registro
adc registro, memoria
adc memoria, registro
adc registro, constante
adc memoria, constante

Ejemplo: mov al,101 ;al = 65h


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

ADD (Addition)
Sintaxis: ADD 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 x 10 + AL y AH = 0
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n c c c c c
Operandos: adc registro, registro
adc registro, memoria
adc memoria, registro
adc registro, constante
adc memoria, constante

Ejemplo: mov al,101 ;al = 65h


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

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 AND fuente
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n c c n n n
Operandos: adc registro, registro
adc registro, memoria
adc memoria, registro
adc registro, constante
adc memoria, constante

Ejemplo: mov ax,3332h ;ah = ascii de 3, al = ascii de 2


and ax,0F0Fh ;ax = 0302h

CALL (Call a procedure)


8.1. LAS BANDERAS DEL µPROCESADOR 6

Sintaxis: CALL destino


Descripción: Bifurca a un procedimiento fuera de línea, salvando previamente en la pila la di-
recció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 y se guarda en la pila el IP actual
IP = desplazamiento del destino

Si la llamada esta en otro segmento, FAR


SP = SP - 2 y se guarda en la pila el CS actual
CS = segmento del destino
SP = SP - 2 y se guarda en la pila el IP actual
IP = desplazamiento del 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
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: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: call nombre de procedimiento cercano
call word ptr memoria

call nombre de procedimiento lejano


call word ptr memoria
Ejemplo: call otro

call ptr otro


call ptr [bx]

call dword ptr otro; Llamada FAR


call dword ptr [bx]

CBW (Covert by 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, entonces AH = 0
de otro modo AH = FFh
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: No necesita operandos
Ejemplo: mov al, 80h
8.1. LAS BANDERAS DEL µPROCESADOR 7

cbw; AX = FF80h

mov al, 05h


cbw; AX = 0005h

CLC (Clear carry flag)


Sintaxis: CLC
Descripción: Borra la bandera de acarreo sin afectar a ninguna otra bandera
Operación CF = 0
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n 0
Operandos: No necesita operandos
Ejemplo: clc; CF = 0

CLD (Clear direction flag)


Sintaxis: CLC
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 DF = 0
Banderas: OF DF IF TF SF ZF AF PF CF
n 0 n n n n n n n
Operandos: No necesita operandos
Ejemplo: cld; DF = 0

CLI (Clear interrupt flag)


Sintaxis: CLC
Descripción: Borra la bandera de interrupciones sin afectar a ninguna otra bandera. Cuando I =
0 el microprocesador no acepta interrupciones enmascarables
Operación IF = 0
Banderas: OF DF IF TF SF ZF AF PF CF
n n 0 n n n n n n
Operandos: No necesita operandos
Ejemplo: cli; IF = 0

CMC (Complement carry flag)


Sintaxis: CMC
Descripción: Complementa la bandera de acarreo
Operación Si CF = 0, entonces CF = 1
Si CF = 1, entonces CF = 0
Banderas: OF DF IF TF SF ZF AF PF CF
n n 0 n n n n n X
Operandos: No necesita operandos
Ejemplo: cmc; Complementa CF
8.1. LAS BANDERAS DEL µPROCESADOR 8

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: OF DF IF TF SF ZF AF PF CF
c n n n c c c c c
Operandos: adc registro, registro
adc registro, memoria
adc memoria, registro
adc registro, constante
adc memoria, constante

Ejemplo: cmp ax,bx; compara AX con BX

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].
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
encuenta para la bifurcación después de la comparación.
Operación: cadena fuente - cadena destino
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n c c c c c
Operandos: CMPS byte destino,byte fuente
CMPSB
8.1. LAS BANDERAS DEL µPROCESADOR 9

CMPW word destino,word fuente


CMPSW
Ejemplo: cld ; para incrementar SI y DI
mov si, offset origen
mov di, offset destino
mov cx, 20
repe cmps [DI], [SI]
je otro

cld ; para incrementar SI y DI


push ds
pop es; ES = DS
mov cx, 20
repe cmps [DI], [SI]
je otro

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: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: no necesita operandos
Ejemplo: mov ax,C280h
cwd; DX = FFFFh

mov ax,0500h
cwd; DX = 0000h

DAA (Decimal adjust for addition)


Sintaxis: DAA
Descripción: Corrige el resultado de AL después de la suma de dos números decimales empaque-
tados. El resultado en AL es un número decimal empaquetado.
Operación: Si D3 a D0 de AL > 9 o AF = 1, entonces AL = AL + 6 y AF = 1
Si AL > 9Fh o CF = 1, entonces AL = AL + 60h y CF = 1
Banderas: OF DF IF TF SF ZF AF PF CF
n n n c c c c c
Operandos: No necesita operandos
Ejemplo: mov al, 64h ; ax = 0064h
mov bl, 73h
add al, bl ; ax = 00D7h
daa ; ax = 0037h y CF = 1

mov al, 13h


mov bl, 28h
add al, bl ; ax = 003Bh
8.1. LAS BANDERAS DEL µPROCESADOR 10

daa ; ax = 0041h y AF = 1

DAS (Decimal adjust for subtraction)


Sintaxis: DAS
Descripción: Corrige el resultado en AL después de la resta de dos números decimales empaque-
tados. El resultado en AL es un número decimal empaquetado.
Operación: Si D3 a D0 de AL > 9 o AF = 1, entonces AL = AL - 6 y AF = 1
Si AL > 9Fh o CF = 1, entonces AL = AL - 60h y CF = 1
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n c c c c c
Operandos: No necesita operandos
Ejemplo: mov al, 73h ; ax = 0073h
mov bl, 28h
sub al, bl ; ax = 004Bh
das ; ax = 0045h

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: OF DF IF TF SF ZF AF PF CF
c n n n c c c c n
Operandos: dec registro
dec memoria

Ejemplo: mov cx, 1964h ; cx = 1964h


dec cx; CX = 1963

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. 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 CF = 1 y OF = 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 y AH = resto
Si AL > FFh se genera int 0
Si DX:AX/fuente (word), AX = cociente y DX = resto
Si AX > FFFFh se genera int 0
Banderas: OF DF IF TF SF ZF AF PF CF
n n n
Operandos: div registro
div memoria
Ejemplo: mov ax, 13h
mov bl,2
8.1. LAS BANDERAS DEL µPROCESADOR 11

div bl; AH = 01 (resto) y AL = 09(cociente)

mov dx, 0
mov ax,13h
mov bx,2
div bl; DX = 01 (resto) y AX = 06(cociente)

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 una posició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.
Operación: Si fuente es un registro, entonces ninguna operación
Si fuente es una dirección de memoria, el bus de datos = contenido de fuente
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: esc 21, registro
esc 21, memoria

Ejemplo: wait; Espera a que el otro procesador acabe con la operacion en curso
esc 21,variable; Bus de datos = contenido de VARIABLE se pasa informacion al otro coprocesador

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 y 3.) Se
recibe una interrupción INTR (si IF = 1)
Operación destino = destino - 1
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: No necesita operandos
Ejemplo: hlt; se detiene el procesador

IDIV (Integer division, signed)


Sintaxis: IDIV fuente
8.1. LAS BANDERAS DEL µPROCESADOR 12

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 0. Si CF = 1 y OF = 1, significa que los datos en AH o en DX
son parte del resultado y contienen el resto.
Operación: Si AX/fuente (byte), AL = cociente y AH = resto
Si AL > 7Fh o AL < 81h se genera int 0
Si DX:AX/fuente (word), AX = cociente y DX = resto
Si AX > 7FFFh o AX < 8001h se genera int 0
Banderas: OF DF IF TF SF ZF AF PF CF
n n n
Operandos: idiv registro
idiv memoria
Ejemplo: mov ax, -13h; AX = FFF3h
mov bl,2
idiv bl; AH = FF = -01 (resto) y AL = FAh = -06 (cociente)

mov ax,13h
cwd
mov bx,2
idiv bx; DX = FFFFh = -0001 (resto) y AX = FFFA = -0006 (cociente)

IMUL (Integer multiplay, 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 CF = 1 y OF = 1, significa que los datos en AH o en DX
son parte del resultado, no representan el signo.
Operación: Si fuente (byte), entonces AX = AL × fuente
Si fuente (word, entonces DX:AX = AX × fuente)
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n c
Operandos: imul registro
imul memoria
Ejemplo: mov al, -13h; AL = F3h
mov bl,2
imul bl; AX = FFE6 = -26

mov ax,-13h; AX = FFF3


mov bx,2
imul bx; DX:AX = FFC4:DF64 = -3874972 y CF = 1 y OF = 1

IN (Input byte o word)


8.1. LAS BANDERAS DEL µPROCESADOR 13

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, entonces AL = dato de la puerta
Si acumulador = AX, entonces AX = dato de la puerta
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: in al, valor entre 0 y 255
in ax, valor entre 0 y 255
in al, dx
in ax, dx
Ejemplo: in al,31h

mov dx,03F8h
in al,dx

INC (Increment destination by one)


Sintaxis: INC
Descripción: Suma en uno el operando destino. El operando puede ser byte o word.
Operación: destino = destino + 1
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n c c c c c
Operandos: inc registro
inc memoria
Ejemplo: mov cx,1964h
inc cx

INT (Interrupt)
Sintaxis: INT Tipo de 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 vec-
tor 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 y las banderas a la pila
IF = 0, TF = 0
SP = SP - 2 y CS a la pila, CS = tipo×4+2
SP = SP - 2 e IP a la pila, IP = tipo×4
Banderas: OF DF IF TF SF ZF AF PF CF
n n c c n n n n n
Operandos: int constante
Ejemplo: mov ah,02
mov dx,1010h
int 10h
8.1. LAS BANDERAS DEL µPROCESADOR 14

INTO (Interrupt if overflow)


Sintaxis: INTO
Descripción: Genera una interrupción tipo 4 si existe desbordamiento, es decir, si OF = 1, de
otro modo se continua con la ejecución de las instrucciones siguientes, sin ejecutar
el procedimiento de interrupción.
Operación: Si OF = 1, entonces SP = SP - 2 y las banderas a la pila
IF = 0, TF = 0
SP = SP - 2 y CS a la pila, CS = tipo×4+2
SP = SP - 2 e IP a la pila, IP = tipo×4
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: No necesita operandos
Ejemplo: into

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 y SP = SP + 2
Recupera CS de la pila y SP = SP + 2
Recupera las banderas de la pila
Banderas: OF DF IF TF SF ZF AF PF CF
c c c c c c c c c
Operandos: No necesita operandos
Ejemplo: iret

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


Sintaxis: JA Desplazamiento
JNBE Desplazamiento
Descripción: Si CF = 0 y ZF = 0 transfiere el control a la instrucción (IP + desplazamiento).
Si CF = 1 o ZF = 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 dos valores con signo.
Operación: Si CF = 0 y ZF = 0, entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: ja otro
jnbe otro
Ejemplo: cmp ax,20; compara AX con 20
ja otro; si AX > 20, salta sin considerar el signo

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


Sintaxis: JAE Desplazamiento
8.1. LAS BANDERAS DEL µPROCESADOR 15

JNB Desplazamiento
Descripción: Si CF = 0, transfiere el control a la instrucción (IP + desplazamiento) Si CF = 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 CF = 0 y ZF = 0, entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jae otro
jne otro
Ejemplo: cmp ax,20; compara AX con 20
jae otro; si AX = 20, salta sin considerar el signo

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 CF = 1,transfiere el control a la instrucción (IP + desplazamiento). Si CF = 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 CF = 1, entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jb otro
jnae otro
jc otro
Ejemplo: cmp ax,20; compara AX con 20
jb otro; si AX < 20, salta sin considerar el signo

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


Sintaxis: JBE Desplazamiento
JNA Desplazamiento
Descripción: Si CF = 1 o ZF = 1, transfiere el control a la instrucción (IP + desplazamiento). Si
CF = 0 y ZF = 0, no se transfiere el control El desplazamiento debe estar compren-
dido 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 CF = 1 o ZF = 1, entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
8.1. LAS BANDERAS DEL µPROCESADOR 16

n n n n n n n n n
Operandos: jbe otro
jna otro
Ejemplo: cmp ax,20; compara AX con 20
jb otro; si AX = 20, salta sin considerar el signo

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. 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, entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jcxz otro
Ejemplo: dec cx
jcxz; si CX = 0 salta a otro

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


Sintaxis: JE Desplazamiento
JZ Desplazamiento
Descripción: Si ZF = 1, transfiere el control a la instrucción (IP + desplazamiento). Si ZF =
0, no se transfiere el control el desplazamiento debe estar comprendido entre -128 y
127 bytes.
Operación: Si ZF = 1, entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: je otro
jz otro
Ejemplo: cmp ax,20; compara AX con 20
je otro; si AX = 20, salta a otro

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

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


Sintaxis: JG Desplazamiento
JNLE Desplazamiento
Descripción: Si ZF = 0 y SF = O, transfiere el control a la instrucción (IP + desplazamiento).
Si ZF = 1 y SF ̸= 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.
8.1. LAS BANDERAS DEL µPROCESADOR 17

Operación: Si ZF = 0 y SF = 0, entonces IP = IP + desplazamiento


(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jg otro
jnle otro
Ejemplo: cmp ax,20; compara AX con 20
jg otro; si AX > 20, salta considerando el signo a otro

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


Sintaxis: JGE Desplazamiento
JNL Desplazamiento
Descripción: Si SF = O, transfiere el control a la instrucción (IP + desplazamiento). El de-
splazamiento 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 SF = 0, entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jge otro
jnl otro
Ejemplo: cmp ax,20; compara AX con 20
jge otro; si AX = 20, salta considerando el signo a otro

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


Sintaxis: JGE Desplazamiento
JNL Desplazamiento
Descripción: Si ZF = 0 y SF = O, transfiere el control a la instrucción (IP + desplazamiento).
Si ZF = 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
Operación: Si ZF = 0 y SF = 0, entonces IP = IP + desplazamiento.
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jl otro
jnge otro
Ejemplo: cmp ax,20; compara AX con 20
jl otro; si AX < 20, salta considerando el signo a otro

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


Sintaxis: JLE Desplazamiento
JNG Desplazamiento
8.1. LAS BANDERAS DEL µPROCESADOR 18

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


Si ZF = 0 y SF = 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 ZF = 1 o SF ̸= 0, entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jle otro
jng otro
Ejemplo: cmp ax,20; compara AX con 20
jle otro; si AX = 20, salta considerando el signo a otro

JMP (Jump)
Sintaxis: JMP Dirección
Descripción: Transfiere el control incondicionalmente. La transferencia del control puede ser: 1),
dentro del mismo segmento. Es decir se reemplaza IP por la dirección especificada
en el operando. Este desplazamiento puede estar: 1a) 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, 1b) hasta de 32k bytes. En este caso se genera una
instrucción de tres bytes. 2) Distinto segmento. Es decir: CS e IP se sustituyen
por los valores de la dirección especificada en el operando. 3) La transferencia del
control también puede ser: 3a) Directa, es decir especificando una etiqueta, 3b)
Indirecta, es decir especificando una dirección.
Operación: Si la transferencia del control es a distinto segmento, CS = segmento e IP = desplazamiento.
Si la transferencia del control es dentro del mismo segmento IP = desplazamiento con signo.
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jmp etiqueta
jmp short etiqueta
jmp etiqueta[di]
jmp far ptr etiqueta
jmp far ptr etiqueta[di]
Ejemplo: jmp otro; salta a otro
jmp far ptr otro; salta directo a otro segmento
jmp [bx]; salta indirecto a otro 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) dentro en otro segmento

JNC (Jump if not carry)


8.1. LAS BANDERAS DEL µPROCESADOR 19

Sintaxis: JNC Desplazamiento


Descripción: Si CF = 0, transfiere el control a la instrucción (IP + desplazamiento). Si CF = 1,
no se transfiere el control El desplazamiento debe estar comprendido entre -128 y
127 bytes.
Operación: Si CF = 0 entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jnc otro
Ejemplo: add al,bl
jnc otro; Salta si CF = 0 a otro

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


Sintaxis: JNE Desplazamiento
JNZ Desplazamiento
Descripción: Si ZF = 0, transfiere el control a la instrucción (IP + desplazamiento). Si ZF =
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 ZF = 0 entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jne otro
jnz otro
Ejemplo: cmp ax,20
jne otro; Salta si AX es distinto que 20

sub al,bl
jnz otro; Salta si AL es distinto que 0

JNO (Jump if not overflow)


Sintaxis: JNO Desplazamiento
Descripción: Si OF = 0, transfiere el control a la instrucción (IP + desplazamiento). Si OF = 1,
no se transfiere el control. El desplazamiento debe estar comprendido entre -128 y
127 bytes.
Operación: Si OF = 0 entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jno otro
Ejemplo: add ax,20
jno otro; Salta si OF = 0

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


8.1. LAS BANDERAS DEL µPROCESADOR 20

Sintaxis: JNP Desplazamiento


JNO Desplazamiento
Descripción: Si PF = 0, transfiere el control a la instrucción (IP + desplazamiento). Si PF = 1,
no se transfiere el control. El desplazamiento debe estar comprendido entre -128 y
127 bytes.
Operación: Si PF = 0 entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jnp otro
jno otro
Ejemplo: add ax,20
jnp otro; Salta si PF = 0

JNS (Jump if not sign)


Sintaxis: JNS Desplazamiento
Descripción: Si SF = 0, transfiere el control a la instrucción (IP + desplazamiento). Si SF = 1,
no se transfiere el control. El desplazamiento debe estar comprendido entre -128 y
127 bytes.
Operación: Si SF = 0 entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jns otro
Ejemplo: sub ax,20
jns otro; Salta si AX = 20

JO (Jump if overflow)
Sintaxis: JO Desplazamiento
Descripción: Si OF = 1, transfiere el control a la instrucción (IP + desplazamiento). Si OF = 0,
no se transfiere el control. El desplazamiento debe estar comprendido entre -128 y
127 bytes.
Operación: Si OF = 1 entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jo otro
Ejemplo: add ax,20
jo otro; Salta si OF = 1

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


Sintaxis: JP Desplazamiento
JPE Desplazamiento
8.1. LAS BANDERAS DEL µPROCESADOR 21

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


no se transfiere el control. El desplazamiento debe estar comprendido entre -128 y
127 bytes.
Operación: Si PF = 1 entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: jp otro
jne otro
Ejemplo: add ax,20
jp otro; Salta si PF = 1

JS (Jump on sign)
Sintaxis: JS Desplazamiento
Descripción: Si SF = 1, transfiere el control a la instrucción (IP + desplazamiento). Si SF = 0,
no se transfiere el control. El desplazamiento debe estar comprendido entre -128 y
127 bytes.
Operación: Si SF = 1 entonces IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: js otro
Ejemplo: sub ax,20
js otro; Salta si AX < 0

LAHF (Load register AH from flags)


Sintaxis: LAHF
Descripción: Copia las banderas SF, ZF, AF, PF y CF en los bits 7, 6, 4, 2 y 0 respectivamente.
Los bits 5, 3, y 1 quedan indefinidos.
Operación: AH = SF ZF x AF x PF x CF
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: No necesita operandos
Ejemplo: lahf

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: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
8.1. LAS BANDERAS DEL µPROCESADOR 22

Operandos: js otro
Ejemplo: Puntero dd 12345678h ; En DS:0000 78 56 34 12 .. ..
lds si, Puntero ; DS = 1234h y SI = 5678h

lea si, Puntero ; SI = 0


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

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: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: lea si, dirección de memoria
lea di, dirección de memoria
lea bx, dirección de memoria
Ejemplo: hola db "hola" ; DS:0000 68 6F 6C 61
db "cuate" ; DS:0003 63 75 61 74 65

mov si, 4
lea bx, hola[si] ; BX = 0004

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: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: les si, dirección de memoria
les di, dirección de memoria
les bx, dirección de memoria
Ejemplo: Puntero dd 12345678h ; En DS:0000 78 56 34 12 .. ..
les si, Puntero ; DS = 1234h y SI = 5678h

lea si, Puntero ; SI = 0


les bx, [si]; SI = 0, ES = 1234h y BX = 5678h

LOCK (Lock the bus)


Sintaxis: LOCK
8.1. LAS BANDERAS DEL µPROCESADOR 23

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: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: lock instrucción
Ejemplo: semaforo db 0
check: mov al, 1
lock xchg semaforo, al ; semaforo = 1 (rojo)
je check ; si semaforo esta rojo sigue bloqueando el bus sino continua con el proceso
; Proceso cualquiera
; Despues de realizar el proceso, poner el
; semaforo en verde (valor 0), para permitir que otros procesadores, accedan al bus
mov semaforo,0 ; libera el bus

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 acu-
mulador AL o AX. Actualiza SI para que apunte al siguiente elemento de la cadena
a cargar. Si la bandera DF = 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. 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
Operandos: lock instrucción
Operación: Si DF = 0 y DS:[SI] = fuente tipo byte, entonces AL = fuente y SI = SI + 1
Si DF = 0 y DS:[SI] = fuente tipo word, entonces AX = fuente y SI = SI + 2
Si DF = 1 y DS:[SI] = fuente tipo byte, entonces AL = fuente y SI = SI - 1
Si DF = 1 y DS:[SI] = fuente tipo word, entonces AX = fuente y SI = SI - 2
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: lods memoria
lodsb
lodsw
Ejemplo: datos db 'La verdad'
cld
lea si, datos
lods datos; se puede reemplazar por lodsb

datos dw 'La verdad'


cld
8.1. LAS BANDERAS DEL µPROCESADOR 24

lea si, datos


lods datos; se puede reeplazar por lodsw

LOOP (Loop)
Sintaxis: LOOP desplazamiento
Descripción: Decrementa CX. Si CX ̸= 0, entonces IP = IP + desplazamiento. Si CX = 0, en-
tonces se ejecuta la siguiente instrucción. El desplazamiento debe estar comprendido
entre -128 y 127 bytes.
Operandos: loop etiqueta
Operación: CX = CX - 1. Si CX ̸= 0, entonces IP = IP + desplazamiento. Si CX = 0, entonces se ejecuta la sig
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: lods memoria
Ejemplo: mov cx,10
...
otro:
...
loop otro

LOOPNE (Loop if not equal)


LOOPNZ (loop if not zero)
Sintaxis: loopne desplazamiento
loopnz desplazamiento
Descripción: Decrementa el registro CX. Si ZF = 0 y CX ̸= 0, entonces IP = IP + desplazamiento.
Si ZF = 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 ZF = 0 y CX ̸= 0, entonces IP = IP + desplazamiento. Si ZF =
1 y CX = 0, entonces se ejecuta la siguiente instrucción
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: loopne etiqueta
loopnz etiqueta
Ejemplo: mov cx,10
...
otro:
...
loopne otro

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 . 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
8.1. LAS BANDERAS DEL µPROCESADOR 25

Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: mov memoria, registro
mov registro, memoria
mov ds, memoria
mov ds, ax
mov memoria, ds
mov ax, ds
mov es, memoria
mov es, ax
mov memoria, es
mov ax, es
mov memoria, constante
Ejemplo: mov cx,10

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 DF = 0, entonces SI y DI se incrementan pero
si DF = 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. 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 DF =
0 cadena destino = cadena fuente y SI = SI +1. Por otro lado, si DF = 1 cadena
destino = cadena fuente y SI = SI – 1.
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: movs byte ptr [di], byte ptr [si]
movsb

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


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

push ds
sub ax, ax
push ax
8.1. LAS BANDERAS DEL µPROCESADOR 26

mov ax,datos
mov ds,ax; debido a que DS:[SI] = fuente y
mov es,ax; ES:[DI] = destino, hacemos ES = DS
destino db 38 dup(0)

cld
lea si, origen
lea di, destino
mov cx,38
rep movs byte ptr[di], byte ptr[si]

MUL (Multiplay, signed)


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 CF = 1 y OF = 1, significa que los datos en AH
o en DX son parte del resultado, no representan el signo.
Operación: Si fuente (byte), entonces AX = AL × fuente
Si fuente (word, entonces DX:AX = AX × fuente)
Si la mitad superior del resultado es cero, entonces CF = 0, caso contrario CF = 1
Banderas: OF DF IF TF SF ZF AF PF CF
n n c c
Operandos: mul registro
mul memoria
Ejemplo: mov al, 13h; AL = 13h
mov bl,2
mul bl; AX = 001Ah = 26

mov ax,13h; AX = 0013h


mov bx,2
mul bx; DX:AX = 0000:001A y CF = 0 y OF = 0

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 e 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: OF DF IF TF SF ZF AF PF CF
n n n c c c c c
Operandos: neg registro
neg memoria
8.1. LAS BANDERAS DEL µPROCESADOR 27

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


neg al; 11110010
; + 1

; --------
; 11110011 = F3h = -13

NOP (No operation)


Sintaxis: NOP
Descripción: El procesador no hace nada, ejecuta la siguiente instrucción.
Operación: Ninguna
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: ninguno
Ejemplo: nop

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: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: not registro
not memoria
Ejemplo: mov al,0dh; al = 00001101
not al; al = 11110010

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, CF = OF = 0
Si destino es tipo word destino = complemento a 1 de destino
Banderas: OF DF IF TF SF ZF AF PF CF
0 n n n c c c 0
Operandos: or registro, registro
or memoria, memoria
or registro, constante
or memoria, constante
Ejemplo: mov al,0dh; al = 00001101
8.1. LAS BANDERAS DEL µPROCESADOR 28

mov bl,0d0h; al = 11010000


or al,bl; al = 11011101

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: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: out puerto, al
out dx, puerto
Ejemplo: out 61h, al
mov al,13
mov dx,03F8h
out dx,al

POP (POPF (POP flags of stack)


Sintaxis: POP 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.
FEDCBA9876543210
xxxxODITSZAPxxxC
Operación: Registro de banderas = word apuntado por SS:SP y SP = SP + 2
Banderas: OF DF IF TF SF ZF AF PF CF
c c c c c c c c c
Operandos: No necesita operandos
Ejemplo: popf

PUSH (PUSH word on 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 y fuente = palabra apuntada por SS:SP
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: push registro (menos el CS debido a que no se acepta POP CS)
push memoria
Ejemplo: out 61h, al
mov al,13
mov dx,03F8h
out dx,al
8.1. LAS BANDERAS DEL µPROCESADOR 29

PUSHF (PUSH flags on 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
FEDCBA9876543210
xxxxODITSZAPxxxC
Operación: SP = SP – 2 y palabra apuntada por SS:SP = registro de banderas
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: no necesita operandos
Ejemplo: pushf

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 CF 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, CF = bit más significativo del
operando destino y el bit menos significativo del operando destino = CF, conta-
dor = contador – 1
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n n n n n c
Operandos: rcl registro,1
rcl registro,cl
Ejemplo: mov cl,4
mov al,00110001b
rcl al,cl

mov cl,4
mov ax,0011000100110001b
rcl ax,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 CF 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, CF = bit más significativo del
operando destino y el bit menos significativo del operando destino = CF, conta-
dor = contador – 1
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n n n n n c
8.1. LAS BANDERAS DEL µPROCESADOR 30

Operandos: rcl registro,1


rcl registro,cl
Ejemplo: mov cl,4
mov al,00110001b
rcr al,cl

mov cl,4
mov ax,0011000100110001b
rcr ax,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.
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: rep instrucción de cadena
repe instrucción de cadena
repz instrucción de cadena
repne instrucción de cadena
repne instrucción de cadena
Ejemplo: mov cl,10
lea si, texto1
lea si, texto2
rep movsb

RET (Return)
Sintaxis: RET valor
8.1. LAS BANDERAS DEL µPROCESADOR 31

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 etique-
tado 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] y SP = SP + 2.
Caso lejano. IP = [SP] y SP = SP + 2, además CS = [SP] y SP = SP + 2.
Si usa RET valor, entonces SP = SP + valor.
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: ret
ret valor
Ejemplo: ret
ret 4; Retorna de un procedimiento NEAR con dos parametros
; de direcciones. (4 = 2 parametros x 2 byte/parametro)

ret 8; Retorna de un procedimiento FAR con dos parametros


; de direcciones. (8 = 2 parametros x 4 byte/parametro)

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 CF.
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, el bit menos significativo = al bit más
significativo y la bandera CF = bit más significativo, además contador = contador
–1
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n n n n n c
Operandos: rol registro,1
rol registro,cl
rol registro,1
rol registro,cl
Ejemplo: mov cl,4
mov al,00110001b
rol al,cl

ROR (Rotate right)


Sintaxis: ROR destino, contador
8.1. LAS BANDERAS DEL µPROCESADOR 32

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 CF.
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, el bit más significativo = al bit menos
significativo y la bandera CF = bit menos significativo, además contador = contador
–1
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n n n n n c
Operandos: ror registro,1
ror registro,cl
ror memoria,1
ror memoria,cl
Ejemplo: mov cl,4
mov al,00110001b
ror al,cl

SAHF (Store AH in flags)


Sintaxis: SAHF
Descripción: Transfiere bits específicos del registro AH a las banderas SF, ZF, AF, PF y CF.
Operación: 7 6 5 4 3 2 1 0 del registro AH.
SF ZF x AF x PF x CF
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n c c c c c
Operandos: no necesita operandos
Ejemplo: sahf
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, entonces el bit menos significativo
= 0 y contador = contador - 1
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n c c c c
Operandos: sal registro,1
sal registro,cl
sal memoria,1
8.1. LAS BANDERAS DEL µPROCESADOR 33

sal memoria,cl
Ejemplo: mov cl,4
mov al,00110001b
sal al,cl

SAR (Shift arithmetic right)


Sintaxis: SAR destino, contador
SHL 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, entonces el bit más significativo =
0 y contador = contador - 1
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n c c c c
Operandos: sal registro,1
sal registro,cl
sal memoria,1
sal memoria,cl
Ejemplo: mov cl,4
mov al,00110001b
sar al,cl

SBB (Subtract with borrow)


Sintaxis: SBB destino, fuente
Descripción: Resta el operando fuente del operando destino. Si la bandera CF = 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 CF = 1, entonces destino = destino - 1
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n c c c c c
Operandos: sbb registro,registro
sbb registro,memoria
sbb registro,CONSTANTE
sbb memoria,registro
sbb memoria,CONSTANTE
Ejemplo: mov al,101
mov bl,155
add al,bl; CF = 1
sbb al,3

SCAS (Scan string)


SCASB (Scan string byte)
8.1. LAS BANDERAS DEL µPROCESADOR 34

SCASB (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. 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 DF = 0, AL – ES:[DI], y SI = SI + 1.
Si DF = 0, AX – ES:[DI], y SI = SI + 2.
Si DF = 1, AL – ES:[DI], y SI = SI - 1.
Si DF = 1, AX – ES:[DI], y SI = SI - 2.
Banderas: OF DF IF TF SF ZF AF PF CF
c n n n c c c c c
Operandos: scas memoria
scasb
scasw
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..
Ejemplo: destino db 'Rien n'est trop beau pour une si belle'
sub ax, ax
push ax
mov ax, datos
mov ds, ax
mov es, ax

cld
lea di, destino
mov cx, 38
rep movs byte ptr[di], byte ptr[si]

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.
Operación: Contador = constante, mientras contador ̸= 0, el bit más significativo = 0 y contador
= contador - 1
8.1. LAS BANDERAS DEL µPROCESADOR 35

Banderas: OF DF IF TF SF ZF AF PF CF
c n n n c c c c
Operandos: shr registro,1
shr registro,cl
shr memoria,1
shr memoria,cl
Ejemplo: mov cl,4
mov al, 01110011b
shr al,cl
STC (Set carry flag)
Sintaxis: STC
Descripción: Pone a uno la bandera de acarreo sin afectar a ninguna otra bandera.
Operación: CF = 1
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n 1
Operandos: no necesita operandos
Ejemplo: stc
STD (Set direction flag)
Sintaxis: STD
Descripción: Pone a uno la bandera de dirección sin afectar a ninguna otra bandera.
Operación: DF = 1
Banderas: OF DF IF TF SF ZF AF PF CF
n 1 n n n n n n n
Operandos: no necesita operandos
Ejemplo: std
STI (Set interrupt flag)
Sintaxis: STI
Descripción: Pone a uno la bandera de interrupciones sin afectar a ninguna otra bandera.
Operación: IF = 1
Banderas: OF DF IF TF SF ZF AF PF CF
n n 1 n n n n n n
Operandos: no necesita operandos
Ejemplo: sti; activa las interrupciones enmascarables
STOS (Store string)
STOSB (Store string byte)
STOSW (Store string word)
Sintaxis: STOS cadena destino
STOSB
STOSW
8.1. LAS BANDERAS DEL µPROCESADOR 36

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 DF = 0, AL – ES:[DI], y SI = SI + 1.
Si DF = 0, AX – ES:[DI], y SI = SI + 2.
Si DF = 1, AL – ES:[DI], y SI = SI - 1.
Si DF = 1, AX – ES:[DI], y SI = SI - 2.
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: stos memoria
stosb
stosw
Como la cadena es tipo byte la última instrucción se puede reemplazar por rep
stosb.
Ejemplo: pantalla db 80*25*2 dup(0)
push ds
sub ax, ax
push ax
mov ax, datos
mov ds, ax
mov ax, 0B800h
mov es, ax

cld
lea di, pantalla
mov cx, 38
rep stos byte ptr[di]

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: OF DF IF TF SF ZF AF PF CF
c n n n c c c c c
Operandos: sub registro, registro
sub registro, memoria
sub registro, CONSTANTE
sub memoria, registro
sub memoria, CONSTANTE
Ejemplo: mov al,5; al = 05h
8.1. LAS BANDERAS DEL µPROCESADOR 37

mov bl,3; bl = 03h


sub al,bl ; ax = 0002

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.
Operación: destino AND fuente.
Banderas: OF DF IF TF SF ZF AF PF CF
0 n n n c c c 0
Operandos: test registro, registro
test registro, memoria
test registro, CONSTANTE
test memoria, registro
test memoria, CONSTANTE
Ejemplo: mov al,10000000b
test al,10000000b
jnz otro

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.
Operación: destino AND fuente.
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: No necesita operandos
Ejemplo: wait

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.
Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: xchg registro, registro
Ejemplo: xchg ah,al

XLAT (Translate)
Sintaxis: XLAT tabla fuente
Descripción: Saca un byte de una tabla apuntada por BX, utilizando AL como índice para posi-
cionarse en la dirección requerida. La tabla tiene que ser tipo byte y debe tener una
longitud máxima de 256 bytes.
8.1. LAS BANDERAS DEL µPROCESADOR 38

Banderas: OF DF IF TF SF ZF AF PF CF
n n n n n n n n n
Operandos: xchg momoria
Ejemplo: tabla db 1,3,5,7,9,11
lea bx,tabla
mov al,3
xlat al,tabla; al = 7

esto equivale a
mov al, tabla[3]

XOR (Logical exclusive OR)


Sintaxis: XOR destino, fuente
Descripción: Operación lógica “XOR” inclusivo a nivel de bits entre los operandos, es resultado
se almacena en el destino. La lógica O exclusiva es:
00 = 0
01 = 1
10 = 1
11 = 0
Operación: destino = destino XOR fuente, CF = OF = 0
Banderas: OF DF IF TF SF ZF AF PF CF
0 n n n c c c 0
Operandos: xor registro, registro
xor memoria, memoria
xor registro, constante
or memoria, constante
Ejemplo: mov al,0dh; al = 00001101
mov bl,0d0h; al = 11010000
or al,bl; al = 00100010

También podría gustarte