Академический Документы
Профессиональный Документы
Культура Документы
5 Saltos
Sintaxis:
JMP destino
Esta instrucción se utiliza para desviar el flujo de un programa sin tomar en cuenta las
condiciones actuales de las banderas ni de los datos.
Instrucción JA (JNBE)
Sintaxis:
JA Etiqueta
Después de una comparación este comando salta si está arriba o salta si no está
abajo o si no es igual.
Sintaxis:
JAE etiqueta
Instrucción JB (JNAE)
Sintaxis:
JB etiqueta
Sintaxis:
JBE etiqueta
El salto se efectúa si CF está activado o si ZF está activado (que cualquiera sea igual
a 1).
Instrucción JE (JZ)
Sintaxis:
JE etiqueta
Sintaxis:
JNE etiqueta
Instrucción JG (JNLE)
Sintaxis:
JG etiqueta
Sintaxis:
JGE etiqueta
El salto se realiza si SF = OF
Instrucción JL (JNGE)
Propósito: salto condicional, se toma en cuenta el signo.
Sintaxis:
JL etiqueta
Sintaxis:
JLE etiqueta
Instrucción JC
Sintaxis:
JC etiqueta
El salto se realiza si CF = 1
Instrucción JNC
JNC etiqueta
El salto se efectúa si CF = 0.
Instrucción JNO
Sintaxis:
JNO etiqueta
El salto se efectua si OF = 0.
Sintaxis:
JNP etiqueta
El salto ocurre si PF = 0.
Instrucción JNS
Sintaxis:
JNP etiqueta
El salto se efectúa si SF = 0.
Instrucción JO
Sintaxis:
JO etiqueta
El salto se realiza si OF = 1.
Instrucción JP (JPE)
Sintaxis:
JP etiqueta
El salto se efectúa si PF = 1.
Instrucción JS
Sintaxis:
JS etiqueta
Salta si el signo está prendido.
El salto se efectúa si SF = 1.
registro banderas.
En esta tabla vemos algunos de esos bits. Por ejemplo. El salto condicional se
escribe Jcc. Estas dos cc se sustituyen por letras que indican la condición. Dentro
del código máquina las instrucciones condicionales usan 4 bits para evaluar la
condición. Uno de esos bits es el ‘bit de negación’. 3 bits indican la condición y el
cuarto niega la condición determinada por esos 3 bits: En la tabla la primera
columna es el SubCode o Subcódigo Máquina Condicional, la segunda es el
subnemónico y la tercera indica el estado de las banderas.
La etiqueta de una instrucción, tal como A90:, terminada con dos puntos (:) para darle
atributo de cercana - esto es, la etiqueta esta dentro de un procedimiento en el mismo
segmento de código.
Cuidado: Un error común es la omisión de los dos puntos. Note que una etiqueta de
dirección en un operando de instrucción (como JMP A90) no tiene un carácter de dos
puntos.
La instrucción JMP (Salto incondicional)
Una instrucción usada comúnmente para la transferencia de control es la instrucción
JMP (jump, salto, bifurcación). Un salto es incondicional, ya que la operación transfiere
el control bajo cualquier circunstancia. También JMP vacía el resultado de la
instrucción previamente procesada; por lo que, un programa con muchas operaciones
de salto puede perder velocidad de procesamiento. El formato general para JMP es:
En este caso, el ensamblador genera una instrucción de maquina de dos bytes. Una
JMP que excede -128 a 127 bytes se convierte en un salto cercano, para que el
ensamblador genere un código de maquina diferente (E9) y un operando de dos bytes
(procesadores 8088/8086) o un operando de cuatro bytes (procesadores 80386 y
posteriores). En un salto hacia adelante, el ensamblador aun no ha encontrado el
operando designado:
JMP A90
...
A90:
Ya que algunas versiones del ensamblador no saben en este punto si el salto es corto
o cercano, generan de forma automática una instrucción de tres bytes.
Page 60,132
TITLE P08JUMP (COM) Uso de JMP para iterar
.MODEL SMALL
.CODE
ORG 100H
MAIN PROC NEAR
MOV AX,01 ;Iniciación de AX,
MOV BX,01 ;BX y
MOV CX,01 ;CX a 01
A20:
ADD AX, 01 ;Sumar 01 a AX
ADD BX, AX ;Sumar AX a BX
SHL CX, 1 ;Multiplicar por dos a CX
JMP A20 ;Saltar a la etiqueta A20
MAIN ENDP
END MAIN
La instrucción LOOP
La instrucción LOOP, requiere un valor inicial en el registro CX. En cada iteración,
LOOP de forma automática disminuye 1 de CX. Si el valor en el CX es cero, el control
pasa a la instrucción que sigue; si el valor en el CX no es cero, el control pasa a la
dirección del operando. La distancia debe ser un salto corto, desde -128 hasta +127
bytes. Para una operación que exceda este limite, el ensamblador envía un mensaje
como "salto relativo fuera de rango". El formato general de la instrucción LOOP es:
Page 60,132
TITLE P08LOOP (COM) Ilustración de LOOP
.MODEL SMALL
.CODE
ORG 100H
MAIN PROC NEAR
MOV AX,01 ;Iniciación de AX,
MOV BX,01 ;BX y
MOV CX,01 ;CX a 01
MOV CX,10 ;Iniciar
A20: ;Número de iteraciones
ADD AX, 01 ;Sumar 01 a AX
ADD BX, AX ;Sumar AX a BX
SHL DX, 1 ;Multiplicar por dos a DX
LOOP A20 ;Iterar si es diferente de cero
MOV AX, 4C00H ;Salida a DOS
MAIN ENDP
END MAIN
Existen dos variaciones de la instrucción LOOP, ambas también decrementan el CX
en 1. LOOPE/LOOPZ (repite el ciclo mientras sea igual o repite el ciclo mientras sea
cero) continua el ciclo mientras que el valor en el CX es cero o la condición de cero
esta establecida.
LOOPNE/LOOPNZ (repite el ciclo mientras no sea igual o repite el ciclo mientras sea
cero) continua el ciclo mientras el valor en el CX no es cero o la condición de cero no
esta establecida.
INSTRUCCIONES DE SALTO CONDICIONAL
El ensamblador permite usar una variedad de instrucciones de salto condicional que
transfieren el control dependiendo de las configuraciones en el registro de banderas.
Por ejemplo, puede comparar dos campos y después saltar de acuerdo con los valores
de las banderas que la comparación establece. El formato general para el salto
condicional es:
compara el contenido de AX con el contenido del BX. Para datos sin signo, el valor AX
es mayor; sin embargo, para datos con signo el valor AX es menor a causa del signo
negativo.
Saltos con base en datos sin signo
Instrucción INC
INC AX
Incrementa en uno el valor de AX
IN WORD PTR
Incrementa la palabra situada en CS.
Instrucción DEC
DEC AX
Decremento AX, le resta uno.
DEC WORD PTR
Decrementa la palabra situada en CS
INCREMENTO Y DECREMENTO Las instrucciones del ensamblador Instrucciones de
transferencia Son utilizadas para mover los contenidos de los operandos. Cada instrucción se puede
usar con diferentes modos de direccionamiento. MOV MOVS (MOVSB) (MOVSW) Instrucción
MOV Propósito: Transferencia de datos entre celdas de memoria, registros y acumulador. Sintaxis:
MOV Destino, Fuente
Donde Destino es el lugar a donde se moverán los datos y fuente es el lugar donde se encuentran
dichos datos. Los diferentes movimientos de datos permitidos para esta instrucción son: Destino:
memoria. Fuente: acumulador Destino: acumulador. Fuente: memoria Destino: registro de
segmento. Fuente: memoria/registro Destino: memoria/registro. Fuente: registro de segmento
Destino: registro. Fuente: registro Destino: registro. Fuente: memoria Destino: memoria. Fuente:
registro Destino: registro. Fuente: dato inmediato Destino: memoria. Fuente: dato inmediato La
instrucción MOV y los modos de direccionamiento. He aquí nuestra primera instrucción: MOV
destino, origen Efectivamente, sirve para mover. Lo que hace es copiar lo que haya en "origen" en
"destino". Lo de que primero vaya el destino y luego el origen es común a todas las instrucciones del
8086 que tengan dos operandos, lo cual creará más de un quebradero de cabeza al principio. MOV
AX,BL MOV AX, BX sin embargo hace que el procesador coja el contenido de BX y lo copiara en
AX; lo que había anteriormente en AX se pierde (puesto que un registro al fin y al cabo es un
número, en este caso de 16 bits, y ahora le hemos asignado un nuevo valor), mientras que BX no se
ve afectado. Cuando decimos "mover" en realidad sería más apropiado "copiar", porque no
alteramos en absoluto el operando origen.
Operación Equivalente