Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DISEÑO DE INTERFACES
PARA COMPUTADORAS INTEL
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
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
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
cbw; AX = FF80h
mov ax,0500h
cwd; DX = 0000h
daa ; ax = 0041h y AF = 1
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
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)
mov dx,03F8h
in al,dx
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
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
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
sub cx,ax;
jz otro; si CX = 0 salta 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
sub al,bl
jnz otro; Salta si AL es distinto que 0
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
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
Operandos: js otro
Ejemplo: Puntero dd 12345678h ; En DS:0000 78 56 34 12 .. ..
lds si, Puntero ; DS = 1234h y SI = 5678h
mov si, 4
lea bx, hola[si] ; BX = 0004
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
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
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
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]
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
; --------
; 11110011 = F3h = -13
mov cl,4
mov ax,0011000100110001b
rcl ax,cl
mov cl,4
mov ax,0011000100110001b
rcr ax,cl
RET (Return)
Sintaxis: RET valor
8.1. LAS BANDERAS DEL µPROCESADOR 31
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
sal memoria,cl
Ejemplo: mov cl,4
mov al,00110001b
sal al,cl
cld
lea di, destino
mov cx, 38
rep movs byte ptr[di], byte ptr[si]
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
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
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]