Está en la página 1de 69

Instrucciones de transferencia de datos

Instrucciones aritmticas
De manipulacin de bits
De cadena
De transferencia de programa
De control del procesador
2.3 Captura bsica de cadenas e
instrucciones ms comunes
Temas 2.3 a 2.13
Prof. Juan Jos Fajardo S. 1
MOV Move byte or word to register/memory
PUSH Push word onto stack
POP Pop word off stack
XCHG Exchange byte or word
XLAT Translate byte
IN Input byte or word from port
OUT Output byte or word to port
Instrucciones de transferencia de datos
Prof. Juan Jos Fajardo S. 2
LEA Load Effective Address
LDS Load pointer using Data Segment
LES Load pointer using Extra Segment
LAHF Load AH from Flags
SAHF Store AH into Flags
PUSHF Push Flags onto stack
POPF Pop Flags off stack
Transferencia de datos (contina)
Prof. Juan Jos Fajardo S. 3
AL BL
1101 0011 1101 0011 1101 0011 1111 0000
Ej. MOV AL, BL
Mover registro a registro
(8 BITS)
Instruccin MOV
Prof. Juan Jos Fajardo S. 4
CX DX
11010011 10001010 11110000 11110000
Ej. MOV CX, DX
Mover registro a registro
11010011 10001010
CH CL DH DL
(16 BITS)
Prof. Juan Jos Fajardo S. 5
Memoria
MOVER DE REGISTRO A MEMORIA
Ej. MOV [4C00H], BX
4C00H
4C01H
D5
84
58 3A 58 3A
BX
BH BL
DS
Prof. Juan Jos Fajardo S. 6
MOVER DE MEMORIA A REGISTRO
DF
Ej. MOV BL, [6F32H]
E2 O1
DF
6F32H
MEMORIA
DS
BX
BH BL
Prof. Juan Jos Fajardo S. 7
DF
Ej. MOV BX, [6F32H]
E2 O1
DF
6F32H
MEMORIA
DS
BX
BH BL
MOVER DE MEMORIA A REGISTRO
A4 A4 6F33H
Prof. Juan Jos Fajardo S. 8
DA
MEMORIA
CD CD
REGISTRO
MOVER DE MEMORIA A MEMORIA
MEMORIA
(Solo a travs de un registro)
Se necesitan dos
instrucciones
Prof. Juan Jos Fajardo S. 9
Mover un valor inmediato a un registro de segmento
Mover un dato (byte o word) de memoria a memoria
Mover un dato de un puerto a memoria o de memoria
a un puerto utilizando MOV
Etc.
NO ESTA PERMITIDO (con MOV):
Prof. Juan Jos Fajardo S. 10
PUSH (Empuja o mete un dato a la pila)
Ejemplo: push ax
Antes:
Tope de la pila
sp
2000
01FF
01FE
SS
0000
F4 7D
AX
AH AL
F4 7D
2000
0000
01FF
01FE
01FC
01FC
Despus:
SS
Prof. Juan Jos Fajardo S. 11
XCHG (eXCHGange)
Ejemplo: XCHG AX,BX
AX BX
DE 46 08 F1 DE 46 08 F1
Prof. Juan Jos Fajardo S. 12
IN (Input byte or word from port)
AX
BX
CX
DX
1 0 1 1 0 1 1 0 1 0 1 1 0 1 1 0
Ejemplo: IN AL, DX
DX contiene la direccin del puerto
CPU PUERTO
Prof. Juan Jos Fajardo S. 13
Captura bsica de cadenas
;******************************************************************************
; Nombre del programa: CAPCAD.ASM
;
; Objetivo : Captura UNA CADENA Y LA DESPLIEGA EN PANTALLA
;******************************************************************************
; COMANDO DE ENSAMBLE : Tasm CAPCAD;
; COMANDO DE ENLACE : Link CAOCAD;
; COMANDO DE EJECUCION : CAPCAD [Enter]
;******************************************************************************

.MODEL SMALL ; Define el modelo de memoria
.Data ; Aqui definimos las variables

Cadena DB 40,0,40 DUP(?) ; Variable que almacena cadena (maximo 40 caracteres)
Mensaje DB 'Bienvenidos a CAPCAD.ASM PROGRAMA EJEMPLO QUE SIRVE PARA',13,10
DB 'INTRODUCIR UNA CADENA Y DESPLEGARLA EN PANTALLA ',13,10,'$'
CadM DB 'Digita cadena (maximo 40 caracteres): ',13,10,'$'
CtoLF DB 13,10,13,10,'$'
Prof. Juan Jos Fajardo S. 14
.CODE ; Area de codigo
Empieza: ; Etiqueta de comienzo de programa
mov Ax, Data ; Inicializa DS con la direccion de @Data
mov Ds, Ax
mov Dx, Offset Mensaje ; Despliega el mensaje de bienvenida
Mov Ah, 9
Int 21h

Mov Dx, Offset CadM ; Mensaje de captura de cadena
Mov Ah, 9
Int 21h
;------------------------------------------------------------------------------
; LA CAPTURA SE BASA EN LA FUNCION 09 DE LA INT 21H.
; DICHA FUNCION ESTABLECE QUE EL REGISTRO AH CONTENGA 09
; Y EL REGISTRO PAR DS:DX APUNTE A LA DIRECCION DE LA VARIABLE QUE
; ALMACENARA LA ESTRUCTURA DEL BUFFER. ESTE DEBE DE ESTAR CONSTRUIDO DE LA
; SIGUIENTE MANERA:
;
; BYTE 1 = CANTIDAD DE BYTES A LEER
; BYTE 2 = (LLENADO POR MS-DOS) ES LA CANTIDAD DE BYTES REALMENTE
; LEIDOS.
; BYTE 3 = BUFFER DONDE SE ALMACENA EL RESULTADO. DEBE ENCONTRARSE
; INICIALIZADO CON LA MISMA CANTIDAD DE BYTES ESPECIFICADOS
; POR EL BYTE 1.
;------------------------------------------------------------------------------
Prof. Juan Jos Fajardo S. 15
; CAPTURA CADENA
Mov Ah, 0Ah ; Captura la cadena (hasta 15 bytes)
Mov Dx, Offset Cadena
Push Dx ; Meto a la pila la direccion de cadena
Int 21h
mov ah,9 ; hago espacio para desplegar cadena introducida
mov dx,offset CtoLF
int 21h

;DESPLIEGA CADENA
Pop Dx ; Recupero direccion
Inc Dx ; Posiciono en la direccion donde se guardan los caracteres
; leidos realmente
Mov Si, Dx ; coloco direccion en si (con dx no puedo direccionar)
mov cl,[si] ; leo numero de caracteres leidos y lo guardo en cl
mov al,cl
cbw ; convierto byte en al a word en ax
add si,ax ; direcciono al final de la cadena
inc si ; Ajusto al final
mov [si],'$' ; le agrego $ para desplegar cadena con la funcion 9
inc dx ; aqui empieza la cadena a desplegar
mov ah,09 ; y despliego cadena
int 21h

TERMINA:
Mov Ax, 4C00h ; Termina el programa sin errores.
Int 21h

.STACK
End Empieza
Prof. Juan Jos Fajardo S. 16
2.4 Comparacin y prueba
Operacin CMP: Comparar
Descripcin Se emplea para comparar el contenido de dos campos de datos. CMP
resta el segundo operando del primero y actualiza las banderas, pero no guarda
el resultado.
Banderas AF, CF, OF, PF, SF y ZF.
Formato CMP {registro/memoria},{registro/memoria/inmediato}
Ejemplo CMP AL,12h
Prof. Juan Jos Fajardo S. 17
Prueba
Operacin TEST: Examinar bits
Descripcin Operacin similar a CMP pero a nivel de bits. TEST realiza un AND
lgico de los dos operandos para establecer el valor de las banderas pero sin
almacenar el resultado.
Banderas CF (0), OF (0), PF, SF y ZF (AF queda indefinida).
Formato TEST {registro/memoria},{registro/memoria/inmediato}
Ejemplo TEST AL,11110000b
Prof. Juan Jos Fajardo S. 18
2.5 Saltos. Datos sin signo.
Mnemnico Descripcin Flags
JE/JZ Salto si igual Z = 1
JNE/JNZ Salto si no igual Z = 0
JA/JNBE Salto si superior C = 0 y Z = 0
JAE/JNB Salto si superior o igual C = 0
JB/JNAE Salto si inferior C = 1
JBE/JNA Salto si inferior o igual C = 1 o Z = 1
E EQUAL
Z ZERO
A ABOVE (ARRIBA)
B BELOW (ABAJO)
Prof. Juan Jos Fajardo S. 19
Datos con signo
Mnemnico Descripcin Flags
JE/JZ Salto si igual Z = 1
JNE/JNZ Salto si no igual Z = 0
JG/JNLE Salto si mayor Z = 0 y S = 0
JGE/JNL Salto si mayor o igual S = 0
JL/JNGE Salto si menor S = 1
JLE/JNG Salto si menor o igual Z = 1 o S = 1
E EQUAL
Z ZERO
G Greater
L Less
Prof. Juan Jos Fajardo S. 20
Saltos con pruebas aritmticas
Mnemnico Descripcin Flags
JS Salto si signo negativo S = 1
JNS Salto si signo positivo S = 0
JC Salto si carry C = 1
JNC Salto si no carry C = 0
JO Salto si sobreflujo O = 1
JNO Salto si no overflow O = 0
JP/JPE Salto si paridad par P = 1
JNP/JPO Salto si paridad impar P = 0
JCXZ Salto si CX = 0 CX = 0
Prof. Juan Jos Fajardo S. 21
2.7 Incremento y decremento
Operacin INC: Incrementa en uno
Descripcin Incrementa en uno un byte o una palabra en un registro o memoria.
Banderas AF, OF, PF, SF y ZF.
Formato INC {registro/memoria}
Ejemplo INC AL, INC CL, INC [1B15h]
Operacin DEC: Decrementa en uno
Descripcin Decrementa en uno un byte o una palabra en un registro o memoria.
Banderas AF, OF, PF, SF y ZF.
Formato DEC {registro/memoria}
Ejemplo DEC AL, DEC CL, DEC [1B15h]
Prof. Juan Jos Fajardo S. 22
2.9 Instrucciones aritmticas
(El 2.8 no se a que se refiere el programa)
Operacin ADD: Sumar nmeros binarios
Descripcin Suma nmeros binarios desde la memoria, registro o inmediato a
un registro, o suma nmeros en un registro o inmediato a memoria. Los valores
pueden ser un byte o una palabra.
Banderas AF, CF, OF, PF, SF y ZF.
Formato ADD {registro/memoria},{registro/memoria/inmediato}
Ejemplo ADD DL,AL ADD AX,DX ADD DL,[3C80H]
Prof. Juan Jos Fajardo S. 23
Operacin ADC: Sumar con acarreo
Descripcin Por lo comn es usado en suma de mltiples palabras binarias
para acarrear un bit en el siguiente paso de la operacin. ADC suma el
contenido de la bandera CF al primer operando y despus suma el segundo
operando al primero, al igual que ADD.
Banderas AF, CF, OF, PF, SF y ZF.
Formato ADC {registro/memoria},{registro/memoria, inmediato}
Ejemplo ADC AX,CX
Operacin SUB: Restar nmeros binarios
Descripcin Resta nmeros binarios en un registro, memoria o inmediato de
un registro, o resta valores en un registro o inmediato de memoria.
Banderas AF, CF, OF, PF, SF y ZF.
Formato SUB {registro/memoria},{registro/memoria/inmediato}
Ejemplo SUB AL,CL
Prof. Juan Jos Fajardo S. 24
Operacin SBB: Restar nmeros binarios con acarreo
Descripcin Normalmente, se usa esta operacin en la resta binaria de
mltiples palabras para acarrear el bit uno de desbordamiento al siguiente
paso de la aritmtica. SBB resta primero el contenido de la bandera CF del
primer operando y despus el segundo operando del primero, de manera
similar a SUB.
Banderas AF, CF, OF, PF, SF y ZF.
Formato SBB {registro/memoria},{registro/memoria/inmediato}
Ejemplo SBB AL,CL
Operacin MUL: Multiplicar sin signo
Descripcin Multiplica dos operandos sin signo.
Banderas CF y OF (AF, PF, SF y ZF quedan indefinidas).
CF = OF = 1
Formato MUL {registro/memoria} (Ver tabla)
Ejemplo --
Prof. Juan Jos Fajardo S. 25
Operacin IMUL: Multiplicar con signo (enteros)
Descripcin Multiplica dos operandos con signo. IMUL trata el bit de ms a
la izquierda como el signo
Banderas CF y OF (AF, PF, SF y ZF quedan indefinidas).
CF = OF = 1
Formato IMUL {registro/memoria} (Ver tabla)
Ejemplo --
Operando 1 Operando 1 Producto Ejemplo
AL R/M 8 bits AX MUL BL
AX R/M 16 bits DX:AX MUL BX
Operando 1 Operando 1 Producto Ejemplo
AL R/M 8 bits AX IMUL BL
AX R/M 16 bits DX:AX IMUL BX
Prof. Juan Jos Fajardo S. 26
Operacin DIV: Dividir sin signo
Descripcin Divide un dividendo sin signo entre un divisor sin signo. La
divisin entre cero provoca una interrupcin de divisin entre cero.
Banderas (AF, CF, OF, PF, SF y ZF quedan indefinidas)
Formato DIV {registro/memoria} (Ver tabla)
Ejemplo --
Dividendo Divisor Cociente Residuo Ejemplo
AX R/M 8 Bits AL AH DIV BL
DX:AX R/M 16 Bits AX DX DIV CX
Divisin sin signo
Prof. Juan Jos Fajardo S. 27
Operacin IDIV: Dividir con signo
Descripcin Divide un dividendo con signo entre un divisor con signo. La
divisin entre cero provoca una interrupcin de divisin entre cero. IDIV trata
el bit de la izquierda como el signo.
Banderas (AF, CF, OF, PF, SF y ZF quedan indefinidas)
Formato IDIV {registro/memoria} (Ver tabla)
Ejemplo --
Dividendo Divisor Cociente Residuo Ejemplo
AX R/M 8 Bits AL AH IDIV BL
DX:AX R/M 16 Bits AX DX IDIV CX
Divisin con signo
Prof. Juan Jos Fajardo S. 28
Negar
Operacin NEG: Niega
Descripcin Invierte un nmero binario de positivo a negativo y viceversa.
NEG trabaja realizando el complemento a dos.
Banderas AF, CF, OF, PF, SF y ZF.
Formato NEG {registro/memoria}
Ejemplo NEG BL
Prof. Juan Jos Fajardo S. 29
2.10 Manipulacin de la pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
1er. Dato en entrar
ltimo Dato en entrar
PUSH
El ltimo dato que
entra
al Stack se encuentra
en la parte superior
del Stack
Prof. Juan Jos Fajardo S. 30
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
ltimo Dato en salir
1er. Dato en salir
POP
Prof. Juan Jos Fajardo S. 31
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 32
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 33
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 34
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 35
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 36
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 37
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 38
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 39
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 40
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 41
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 42
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 43
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 44
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 45
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 46
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
Prof. Juan Jos Fajardo S. 47
El Stack o Pila
Es un grupo de registros o localidades de memoria RAM
estructuradas de tal forma que el primer dato introducido ser el
ltimo en ser extraido. A esta estructura se le llama LIFO (Last
Input First Output).
POP
El ltimo dato que
sale del Stack es
el primero que se
introdujo
Prof. Juan Jos Fajardo S. 48
El Stack o Pila
El Stack pointer contiene la direccin de la parte superior del
Stack, apuntando al ltimo elemento introducido al Stack
SP
Prof. Juan Jos Fajardo S. 49
PUSH (Empuja o mete un dato a la pila)
Ejemplo: push ax
Antes:
Tope de la pila
sp
2000
01FF
01FE
SS
0000
F4 7D
AX
AH AL
F4 7D
2000
0000
01FF
01FE
01FC
01FC
Despus:
SS
Prof. Juan Jos Fajardo S. 50
AND Manipulacin de bits
Logical AND on Bits
(Y lgico sobre bits): Esta instruccin realiza un Y lgico de
los operandos y almacena el resultado en el operando de
destino. Cada bit del byte o palabra resultante se pone en 1
solo si el bit correspondiente de cada operando se pone en 1.
Banderas afectadas
OF, SF, ZF, PF, CF, AF(no definida)
Ejemplos de codificacin
AND AX, BX
AND AX, TEMP ;TEMP debe ser una palabra
AND SUM, BX ;SUM debe ser una palabra
AND Cl,OOOOllllb ;Nibble alto en cero

2.12 Instrucciones lgicas
Prof. Juan Jos Fajardo S. 51
OR Manipulacin de bits
Logical OR on Bits
(O lgico en bits): Esta instruccin realiza un O lgico de los operandos y almacena
el resultado en el operando de destino. Cada bit del byte o palabra resultante se
pone en I si uno o ambos bits correspondientes a cada operando se ponen en I.

Banderas afectadas
OF, SF, ZF, PF, CF,
AF (no definida)

Ejemplos de codificacin
OR AL, BL
OR AL, l0000000b
OR DX, TEMP
OR AX, CX

OR
Prof. Juan Jos Fajardo S. 52
XOR Manipulacin de bits
Logical Exclusive-Or on bits
(O exclusivo lgico sobre bits): Esta instruccin realiza un XOR lgico de
los operandos y almacena el resultado en el operando de destino. Cada bit
del byte o palabra resultante se pone en 1 solo si el bit correspondiente de
cada operando contiene valores opuestos.
Banderas afectadas
OF, SF, ZF, PF, CF, AF (no definida)

Ejemplos de codificacin
XOR AX,BX
XOR AX,TEMP ;TEMP debe ser una palabra
XOR SUM,BX ;SUM debe ser una palabra
XOR CL,OOOllllb ; Direccin inmediata
XOR AX,TEMP[BX] ;Direccin indirecta

XOR
Prof. Juan Jos Fajardo S. 53
SHR: Desplazamiento lgico a la derecha


SAR: (Arithmetic Shift Right ) Desplazamiento
aritmtico a la derecha: Se mueven todos los bits a la
derecha, en el bit ms significativo se mete la bandera
SF y el bit que sale por la derecha pasa a la bandera CF.

2.13 Desplazamiento y rotacin
s
0
c
c
Prof. Juan Jos Fajardo S. 54
SHL: Desplazamiento lgico a la izquierda


SAL: Desplazamiento aritmtico a la izquierda (igual
que SHL)

ROR: Rotacin lgica a la derecha: Se mueven todos los
bits a la derecha, en el bit ms significativo se mete el bit
que sale por la derecha, que se copia tambin en la
bandera CF .
c
0
c
Prof. Juan Jos Fajardo S. 55
RCR: Rotacin a la derecha con acarreo



ROL: Rotacin lgica a la izquierda



RCL: Rotacin a la izquierda con acarreo
c
c
c
Prof. Juan Jos Fajardo S. 56
CICLOS O BUCLES (2.2?)
Operacin LOOP: Repetir
Descripcin Controla la ejecucin de un grupo de instrucciones un nmero especfico
de veces. Antes de iniciar el ciclo, CX debe contener el nmero de veces que ha de
repetirse. LOOP aparece al final del conjunto de instrucciones que se repiten y
decrementa CX. Al llegar a cero, permite que el flujo de ejecucin pase a la siguiente
instruccin. En caso contrario salta a la etiqueta que determina el comienzo del bucle.
Banderas No las afecta.
Formato LOOP etiqueta
Ejemplo MOV CX, num_veces
Etiqueta:
Instrucciones del CICLO
LOOP Etiqueta
Este ciclo ejecuta num_veces las instrucciones.
Prof. Juan Jos Fajardo S. 57
LOOPE: Loop While Equal
(Ciclo mientras es igual):Basndose en el contenido de CX y en
la bandera de cero, la ejecucin del programa se ramifica hacia
la direccin del operando de destino. Si CX no es igual a 0 y la
bandera de cero esta activada, CX cambia en decrementos de 1
y ocurre la ramificacin. Si CX es 0 o si la bandera de cero esta
limpia, no ocurre decremento o ramificacin, y la ejecucin
continua en la siguiente instruccin. Esta instruccin es
funcionalmente equivalente a LOOPZ.

Prof. Juan Jos Fajardo S. 58
LOOPNE Loop While Not Equal
Es equivalente a : LOOPNZ

(Ciclo mientras no es igual o mientras no cero): Basndose
en el contenido de CX y en la bandera de cero, la ejecucin
del programa se ramifica hacia la direccin del operando de
destino.

Si CX no es igual a 0 y la bandera de cero esta limpia, CX
cambia en decrementos de 1 y ocurre la ramificacin. Si CX es
0 o la bandera de cero esta activada, no ocurre decremento o
ramificacin y la ejecucin continua en la siguiente
instruccin.
Prof. Juan Jos Fajardo S. 59
LOOPZ Loop While Zero
(Ciclo mientras es cero): Basndose en el Contenido de
CX y en la bandera de cero, la ejecucin del programa se
ramifica hacia la direccin del operando de destino. Si
CX no es igual a 0 y la bandera de 0 esta activada, CX
cambia en decrementos de 1 y ocurre la ramificacin. Si
CX es 0 o la bandera de cero esta limpia, no ocurre
decremento o ramificacin, y la ejecucin continua con
la siguiente instruccin. Esta instruccin es
funcionalmente equivalente a LOOPE.

Prof. Juan Jos Fajardo S. 60
REP Manipulacin de cadenas
Repeat
(Repetir): REP ocasiona que las instrucciones de
manipulacin de cadenas se repitan tantas veces como
se indique en CX.
Ejemplo de codificacin
REP MOVSB

Prof. Juan Jos Fajardo S. 61
REPE o REPZ Manipulacin de cadenas
Repite cualquiera de las instrucciones CMPSB, CMPSW,
SCASB, SCASW mientras ZF = 1, mximo CX veces.

REPNE o REPNZ Manipulacin de cadenas
Repite cualquiera de las instrucciones CMPSB, CMPSW,
SCASB, SCASW mientras ZF = O, mximo CX veces.

Prof. Juan Jos Fajardo S. 62
Instrucciones para Manejo de
Cadenas.
Operacin MOVSB/MOVSW: Mover cadena
Descripcin Mueve cadenas entre localidades de memoria. El primer
operando es apuntado por ES:DI (destino) y el segundo operando por DS:SI
(fuente). Normalmente se utiliza el prefijo REP que hace que la operacin se
ejecute CX veces (se le resta uno a CX tras cada operacin), de forma que segn
DF sea uno o cero, tras cada transferencia (byte o palabra) DI y SI disminuyen o
aumentan.
Banderas No las afecta.
Formato [REP] MOVSB/MOVSW
Ejemplo MOV CX,3
REP MOVSB
Prof. Juan Jos Fajardo S. 63
Operacin LODSB/LODSW: Cargar un byte/palabra
Descripcin Carga el registro acumulador (AX o AL) con el valor de la localidad
de memoria determinada por DS:SI. SI se incrementa tras la transferencia.
Banderas No las afecta.
Formato LODSB/LODSW
Ejemplo LODSB/LODSW
Nota: STOSB y STOSW son similares a las
dos instrucciones anteriores pero se
utilizan para almacenar bytes o palabras
en posiciones de memoria.
Prof. Juan Jos Fajardo S. 64
Instrucciones de Control de Flags.
Mnemnico Descripcin de la
Operacin
CLD DF = 0
STD DF = 1
CLI IF = 0
STI IF = 1
CLC CF = 0
STC CF = 1
CMC Complementar CF
Prof. Juan Jos Fajardo S. 65
Instrucciones de entrada/salida.
Operacin IN: Entrada
Descripcin Transfiere desde un puerto de entrada un byte a AL o una palabra
a AX
Banderas No las afecta.
Formato IN {AX/AL},{nmero_puerto/DX}
Nmero_puerto entre [0..255]
DX est en [0..65535]
Ejemplo IN AL, 0Bh
Prof. Juan Jos Fajardo S. 66
Operacin OUT: Salida
Descripcin Transfiere un byte desde AL o una palabra desde AX hasta el
puerto.
Banderas No las afecta.
Formato OUT {nmero_puerto/DX},{AX/AL}
Nmero_puerto est en [0..255]
DX est en [0..65535]
Ejemplo OUT AL,0Bh
Prof. Juan Jos Fajardo S. 67
Las llamadas reducen el nmero de lneas de cdigo
Permiten una mejor organizacin del programa.
Facilitan la localizacin de errores.
Aumentan la legibilidad del programa.
Las llamadas a procedimientos se gestiona mediante
dos instrucciones: CALL y RET.
Llamadas a procedimientos
(subrutinas).
Prof. Juan Jos Fajardo S. 68
Operacin CALL: Llamar a un procedimiento
Descripcin Llama a un procedimiento cercano o lejano. En una llamada a un
procedimiento cercano se guarda en la pila IP. Despus se carga
el IP con el desplazamiento de la direccin de destino (donde se encuentra la
primera instruccin del procedimiento). Si la llamada es a un procedimiento
lejano, el proceso a seguir es el mismo pero ahora el tratamiento de las direcciones
incluye tambin considerar el registro de segmento CS.
Banderas No las afecta.
Formato CALL {registro/memoria}
Ejemplo CALL PROCEDIMIENTO
Operacin RET: Regresar de un procedimiento
Descripcin Regresa de un procedimiento al que se entr previamente con un
CALL cercano o lejano. Lo que hace esta instruccin es recuperar de la pila la
direccin de la siguiente instruccin que se almacen al hacer la llamada. Esto
permitir continuar la ejecucin del programa en la siguiente instruccin al CALL.
Banderas No las afecta.
Formato RET [VALOR POP]
Ejemplo RET
Prof. Juan Jos Fajardo S. 69

También podría gustarte