Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Instrucciones
Para las banderas tomaremos las siguientes convenciones: c(cambia), n(no cambia)
Sintaxis: AAA
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
Sintaxis: AAD
Operación: AH = AH*10 + AL
AL = 0
Banderas: O D I T S Z A P C
n n n c c c
Sintaxis: AAM
Banderas: O D I T S Z A P C
n n n c c
Sintaxis: AAS
Banderas: O D I T S Z A P C
n n n c c c
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.
Banderas: O D I T S Z A P C
c n n n c c c c c
ADD (Addition)
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
Tipos de operando:
Banderas: O D I T S Z A P C
n n n n c c n n n
Llamadas:
Banderas: O D I T S Z A P C
n n n n n n n n n
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.
Banderas: O D I T S Z A P C
n n n n n n n n n
Sintaxis: CLC
Operación: C=0
Banderas: O D I T S Z A P C
n n n n n n n n 0
Sintaxis: CLD
Operación: D=0
Banderas: O D I T S Z A P C
n 0 n n n n n n n
Sintaxis: CLI
Operación: I=0
Banderas: O D I T S Z A P C
n n 0 n n n n n n
Sintaxis: CMC
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
Banderas: O D I T S Z A P C
c n n n c c c c c
Descripción: Compara dos zonas de memoria (tipo byte o tipo word) realizando la
operación cadena_fuente – cadena_destino. Esta operación afecta las
banderas pero no se guarda el resultado. La cadena fuente esta
direccionada por SI y la cadena destino por DI en el segmento de datos,
realizándose por tanto la operación DS:[SI] – DS:[DI].
8
Los registros SI y DI se actualizan en 1 si las cadenas son tipo byte y en
2 si las cadenas son tipo word.
Banderas: O D I T S Z A P C
c n n n c c c c c
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.
Banderas: O D I T S Z A P C
n n n n n n n n n
Sintaxis: DAA
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
Sintaxis: DAS
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
Descripción: Resta en uno el operando destino. El operando puede ser byte o word.
Banderas: O D I T S Z A P C
c n n n c c c c n
Descripción: Divide, sin tomar en cuenta el signo, AX entre fuente (byte). El cociente
se guarda en AL y el resto en AH.
11
Divide, sin tomar en cuenta el signo, DX:AX entre fuente (word). El
cociente se guarda en AX y el resto en DX.
Banderas: O D I T S Z A P C
n n n
mov dx,0
mov ax,0013h
mov bx,0002
div bx ; DX = 0003 (resto), AX = 0006 (cociente)
ESC (Escape)
Banderas: O D I T S Z A P C
n n n n n n n n n
HLT (Halt)
Sintaxis: HLT
Banderas: O D I T S Z A P C
n n n n n n n n n
Banderas: O D I T S Z A P C
n n n
Banderas: O D I T S Z A P C
c n n n c
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
Descripción: Suma en uno el operando destino. El operando puede ser byte o word.
Banderas: O D I T S Z A P C
c n n n c c c c n
INT (Interrupt)
Operación: SP = SP – 2
Banderas a la pila
I=0yT=0
SP = SP – 2
CS a la pila
CS = tipo_interrupción*4 + 2
SP = SP – 2
IP a la pila
IP = tipo de interrupción*4
Banderas: O D I T S Z A P C
n n c c n n n n n
Operandos: int
Sintaxis: INTO
Operación: Si O = 1
SP = SP - 2
Banderas a la pila
I=0yT=0
SP = SP – 2
CS a la pila
16
CS = tipo_interrupción_4*4 + 2
SP = SP – 2
IP a la pila
IP = tipo_interrupción_4*4
Banderas: O D I T S Z A P C
n n n n n n n n n
Ejemplo: into
Sintaxis: IRET
Banderas: O D I T S Z A P C
c c c c c c c c c
Ejemplo: iret
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
Operación: Si C = 0 y Z = 0
IP = IP + desplazamiento
17
(el signo del desplazamiento se extiende a 16 bits)
Banderas: O D I T S Z A P C
n n n n n n n n n
Operandos: ja otro
jnbe otro
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
Sintaxis: JB Desplazamiento
JNAE Desplazamiento
JC Desplazamiento
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
Operandos: jb otro
jnae otro
jc otro
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
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
Sintaxis: JE Desplazamiento
JZ Desplazamiento
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
sub cx,ax
jz otro ; Si CX = 0 salta a otro
Operandos: je otro
jz otro
Sintaxis: JG Desplazamiento
JNLE Desplazamiento
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
Operandos: jg otro
jnle otro
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
Sintaxis: JG Desplazamiento
JNLE Desplazamiento
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
Operandos: jl otro
jnge otro
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
JMP (Jump)
Banderas: O D I T S Z A P C
n n n n n n N n n
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
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
sub al,bl
jnz otro ; Si AL ≠ 0 salta a otro
Operación: Si O = 0, IP = IP + desplazamiento
(el signo del desplazamiento se extiende a 16 bits)
Banderas: O D I T S Z A P C
n n n n n n n n n
24
Ejemplo: add ax,20
jno otro ; Si O = 0, salta a otro
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
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
JO (Jump if overflow)
Sintaxis: JO Desplazamiento
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
Operandos: jo otro
Sintaxis: JP Desplazamiento
JPE Desplazamiento
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
Operandos: jp otro
jpe otro
JS (Jump on sign)
Sintaxis: JS Desplazamiento
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
Operandos: js otro
26
Sintaxis: LAHF
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
Banderas: O D I T S Z A P C
n n n n n n n n n
En el segmento de código
lds si, Puntero ; DS = 1234h
; SI = 5678h
Banderas: O D I T S Z A P C
n n n n n n n n n
En el segmento de código
mov si, 4
lea bx, hola[si] ; BX = 0004
Banderas: O D I T S Z A P C
n n n n N n n n n
En el segmento de código
les si, Puntero ; ES = 1234h
; SI = 5678h
Sintaxis: LOCK
Banderas: O D I T S Z A P C
n n n n n n n n n
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
Banderas: O D I T S Z A P C
n n n n n n n n n
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
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
LOOP (Loop)
Descripción: Decrementa CX
Si CX ≠ 0, entonces IP = IP + desplazamiento
Si CX = 0, entonces se ejecuta la siguiente instrucción.
30
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
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
MOV (Move)
Banderas: O D I T S Z A P C
n n n n n n n n n
Banderas: O D I T S Z A P C
n n n n n n n n n
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.
Banderas: O D I T S Z A P C
n n n c
NEG (Negate)
Banderas: O D I T S Z A P C
n n n c c c c c
NEG (Negate)
Banderas: O D I T S Z A P C
c n n n c c c c c
Sintaxis: NOP
Operación: Ninguna
Banderas: O D I T S Z A P C
n n n n n n n n n
Ejemplo: nop
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.
Banderas: O D I T S Z A P C
n n n n n n n n N
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
Banderas: O D I T S Z A P C
0 n n n c c c 0
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
mov al, 13
mov dx,03F8h
out dx, al
Banderas: O D I T S Z A P C
n n n n n n n n n
Ejemplo: pop ax
Registro de banderas = F E D C B A 9 8 7 6 5 4 3 2 1 0
0DI TSZ A P C
Banderas: O D I T S Z A P C
c c c c c c c c c
Ejemplo: popf
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
Sintaxis: PUSH
Registro de banderas = F E D C B A 9 8 7 6 5 4 3 2 1 0
0DI TSZ A P C
Operación: SP = SP – 2
Palabra direccionada por SS:SP = registro de banderas
38
Banderas: O D I T S Z A P C
c c c c c c c c c
Ejemplo: pushf
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.
Banderas: O D I T S Z A P C
c n n n n n n n c
rcl registro 8, 1
rcl registro 8, cl
rcl memoria 8, 1
rcl memoria 8, cl
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.
Banderas: O D I T S Z A P C
c n n n n n n n c
rcr registro 8, 1
rcr registro 8, cl
rcr memoria 8, 1
rcr memoria 8, cl
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.
Operación: CX = valor
REP repite la operación mientras CX ≠ 0.
REPE/REPZ repite la operación mientras Z = 1 y CX ≠ 0.
REPNE/REPNZ repite la operación mientras Z = 0 y CX ≠ 0.
En todos los casos CX = CX – 1 después de cada operación.
40
Banderas: O D I T S Z A P C
n n n n n n n n n
RET (Return)
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
Operandos: ret
ret valor
41
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.
Banderas: O D I T S Z A P C
c n n n n n n n c
rol registro 8, 1
rol registro 8, cl
rol memoria 8, 1
rol memoria 8, cl
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.
Banderas: O D I T S Z A P C
c n n n n n n n c
ror registro 8, 1
ror registro 8, cl
ror memoria 8, 1
ror memoria 8, cl
Sintaxis: SAHF
Banderas: O D I T S Z A P C
n n n n c c c c C
Ejemplo: sahf
Banderas: O D I T S Z A P C
c n n n c c c c
sal registro 8, 1
sal registro 8, cl
sal memoria 8, 1
sal memoria 8, cl
Banderas: O D I T S Z A P C
c n n n c c c c
sar registro 8, 1
sar registro 8, cl
sar memoria 8, 1
sar memoria 8, cl
44
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.
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
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.
Banderas: O D I T S Z A P C
c n n n c c c c
shr registro 8, 1
shr registro 8, cl
shr memoria 8, 1
shr memoria 8, cl
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
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
Sintaxis: STI
Operación: I=1
Banderas: O D I T S Z A P C
n n 1 n n n n n n
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
En el segmento de código
push ds
48
sub ax, ax
push ax
mov ax, datos
mov ds, ax ;
mov ax, 0B800h ; Debido a que ES:[DI] = destino,
mov es, ax ; apuntamos con ES:[DI] a =0B800h
cld
mov al, 20h
lea di, pantalla
rep stos byte ptr [DI]
;
; Como la cadena es tipo byte la última instrucción se puede reemplazar
; por
;
rep stosb
SUB (Subtract)
Banderas: O D I T S Z A P C
c n n n c c c c c
TEST (Test)
Banderas: O D I T S Z A P C
0 n n n c c c 0
WAIT (Wait)
Sintaxis: WAIT
Banderas: O D I T S Z A P C
n n n n n n n n n
Ejemplo: wait
XCHG (Exchange)
Descripción: Intercambia el contenido entre los dos operandos, tipo byte o word. No
se pueden utilizar los registros de segmento
Banderas: O D I T S Z A P C
n n n n n n n n n
XLAT (Translate)
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
Banderas: O D I T S Z A P C
n n n n n n n n n
En el segmento de código
lea bx,tabla
mov al, 3
xlat tabla ; al = 7
;
; esto equivale a
;
mov al, tabla[3]
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