Documente Academic
Documente Profesional
Documente Cultură
Nota: En las instruciones de doble operando el destino es el primer operando (el de la izauierda) en la instrucción.
4-1
ADC DX,MEM_WORD
ADC BETA[DI],BX
ADC AL,3
ADC AL,BYTE PTR [DI]
ADC SI,333
- ADD (Suma).
Suma el operando destino con el origen y deja el resultado en el destino.
- SUB (Resta).
Resta el operando destino con el origen y deja el resultado en el destino.
El valor DEST se extrae de dos byte que siguen al código de la instrucción si es directo el CALL y si es
indirecto se extraen de una palabra de 16 bits almacenada en un registro o en una localización de memoria.
El valor SEG se extrae de los dos byte que siguen a DEST en el código de la instrucción, si es directo el
CALL y, si es indirecto se toman de los dos bytes siguientes a los del DEST en memoria (en este caso se
sacan de memoria solamente).
Ejemplos:
CALL ETIQUETANEAR ;Directo Intra-segmento
CALL SUBRUTINAFAR ;Directo Inter-segmento
CALL WORD PTR TABLA [SI] ;Indirecto intra-segmento
CALL DWORD PTR [BX] ;Indirecto inter-segmento
CALL AX ;Indirecto intra-segmento
CALL MEM_DOUBLE_WORD ;Indirecto inter-segmento
Ejemplos:
MOV SI,OFFSET STRING 1
MOV DI,OFFSET STRING 2
CMPSB ; Para STRING 1,STRING 2 bytes.
CMPSW ; Para STRING 1,STRING 2.
4-3
- DAA (Ajuste decimal para la suma).
Realiza una corrección del resultado (en AL) de sumar 2 operandos decimales empaquetados
(packed), dando como resultado una suma decimal empaquetada (packed).
Ejemplos:
1.- Para dividir una palabra por un byte.
MOV AX, NUMERATOR_WORD
DIV DIVISOR_BYTE ;Cociente en AL, resto en AH.
(a) Si BYTE : NUMR = AX, DIVR = EA, COC = AL, RESTO = AH,
MAX = 7FH
(b) Si WORD: NUMR = DX:AX, DIVR = EA, COC = AX, RESTO = DX,
MAX = 7FFFH
Ejemplos:
Ejemplos:
1.- MOV AL,OPERANDOBYTE
IMUL BL ;Resultado en AX
- IN (Leer de Puerto).
El contenido del acumulador se reemplaza por el contenido del puerto seleccionado, AL si es de byte y AX
si es de palabra.
Si se desea variar fácilmente la dirección del puerto o la dirección no cabe en un byte, en este caso la
dirección viene en el registro DX.
Ejemplos: INC CL
INC DI
INC BYTE PTR [BX]
INC MEM-WORD [BX]
INC WORD PTR[BX]
- INTO (Interrupción si OF = 1)
Operación:
Si (OF)=1 entonces:
(SP) <-- (SP)-2
((SP)+1:(SP)) <--- FLAGS
(IF) <--- 0
(TF) <--- 0
(SP) <--- (SP)-2
((SP)+1:(SP)) <--- (CS)
(CS) <--- (12H)
(SP) <--- (SP)-2
4-7
((SP)+1:(SP)) <--- (IP)
(IP) <--- (10H)
- Saltos Condicionales.
Operación:
Si se cumple la condición especificada, se le suma al IP la distancia desde el final de la
instrucción hasta la etiqueta destino. En caso contrario no se opera.
Ejemplo: JZ ETIQUETA
Nota: La etiqueta de destino debe estar en el rango de -128 a +127 bytes de la instrucción
de salto condicional [Vea tabla de saltos Condicionales].
El IP es reemplazado por el offset del destino en los saltos intersegmentos y en los intrasegmentos
indirecto. Cuando el salto es directo intrasegmento, la distancia desde el fin de la instrucción hasta la
etiqueta de destino, es añadida a IP. Los saltos intersegmentos primero reemplazan CS usando la segunda
palabra después de la instrucción (directo), o usando la segunda palabra que sigue a la dirección indicada
(indirecto).
Intra segmento directo (largo):
Nota: El destino debe estar dentro de un rango de -128 a +127 bytes de esta instrucción.
El Desp es el offset destino explicado en la instrucción.
Intersegmento directo:
Ejemplos: JMP ETIQ_DECLARED_FAR
JMP FAR PTR ETIQ
JMP FAR PTR ETIQ_NEAR
Intersegmento Indirecto:
CS <--- (MEM + 2)
IP <--- (MEM)
4-8
Ejemplos: JMP VAR_DOUBLEWORD
JMP DWORD PTR [DI]
- LOCK
4-9
Activa la señal *LOCK en modo máximo durante los ciclos de máquina de la instrucción que le sigue.
En sistemas con multiprocesadores con recursos compartidos es necesario tener mecanismos que
controlen el acceso a dichos recursos. Tales mecanismos, aunque generalmente se logran mediante los
sistemas operativos, necesitan una base circuital. Un mecanismo suficiente para lograr esto es el locked
exchange (conocido también como "test and set lock"). Se asume que un circuito externo, al recibir esta
señal, prohiba el acceso al bus de otros posible amos del bus durante el período en el cual se mantenga
activo.
Ejemplo:
Chequea: MOV AL,1 ;Poner AL a 1 (implica locked)
LOCK XCHG Sema,AL ;test and set lock
TEST AL,AL ;Chequear si estaba activo el semáforo y si es así se
JNZ Chequea ;chequeando si el recurso esta libre
;Programa a ejecutar que usa el recurso.
MOV Sema,0 ;Semáforo=0 avisando fin del uso del recurso.
Ejemplos:
CLD ;DF = 0
MOV SI,OFFSET BYTE_STRING
LODSB
Nota: La etiqueta destino debe estar dentro del rango de -128 a +127 bytes de la
instrucción LOOP.
- OR (OR lógico).
Se efectúa una operación OR-logica bit a bit entre los dos operandos. El resultado queda en el destino. CF y
OF toman 0.
Ejemplos: OR BL,DH
OR AX, 8000H
OR CL, 37
OR MEM_byte,DH
OF -- bit 11 ZF -- bit 6
DF -- bit 10 AF -- bit 4
IF -- bit 9 PF -- bit 2
TF -- bit 8 CF -- bit 0
SF -- bit 7
Ejemplos: PUSH AX
PUSH SS
PUSH CS es legal
PUSH BETA
PUSH BETA [BX+DI]
Ejemplos:
RCL AH, 1
RCL MEM_BYTE, 1
MOV CL, 3
RCL DH, CL ;rota 3 bits a la izquierda
Ejemplos:
REP MOVS
REPE CMPSB ;Repite mientras que sea igual y CX <> 0. Se sale del lazo antes
;que CX = 0 solo si el byte fuente y destino son iguales.
MOV CL,3
ROL DH,CL
Se resta el AL (AX) menos el valor en (ES:DI) y se alteran solos las banderas. DI se incrementa o decrementa
en 1 (2) si la operación de byte (palabra). Si DF = 0 se incrementa.
- SUB (Resta).
Resta el operando destino (izquierdo) menos el origen (derecho) y el resultado se almacena en el destino.
- XCHG (Intercambia).
Se intercambia el contenido de los operandos en la instrucción, los cuales deben ser del mismo tipo, o sea,
bytes o palabras. Intercambia registros o registros con memoria, nunca con registros de segmento.
4-16