PLAN DE MANTENIMIENTO DE SISTEMAS DE AGUA CHONTAYOC.docx
Intrucciones 16 bits.pdf
1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 14
imul bx ; DX:AX = FFFF:FFE6 = -26
; C = 0 y O = 0
mov ax, -1964h ; AX = F854h
mov bx, 1973 ; BX = 07B5h
imul bx ; DX:AX = FFC4:DF64 = -3874972
; C = 1 y O = 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. 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 = 0 y T = 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 = 0 y T = 0
SP = SP – 2
CS a la pila
16. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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 = 0 y O = 0
mov ax,1964h ; AX = 07ACh
mov bx,1973 ; BX = 07B5h
mul bx ; DX:AX = 003B:209C = 3874972
; C = 1 y O = 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. 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. 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. 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. 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
0 D I T S Z 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
0 D I T S Z A P C
Operación: SP = SP – 2
Palabra direccionada por SS:SP = registro de banderas
38. 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. 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. 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. 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. 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
S Z 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. 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. 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. 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. 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. 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. 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. 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. 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. 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