En esta sección examinaremos unas cuantas de las estructuras
condicionales más comunes que se utilizan en los lenguajes de programación de
alto nivel. Veremos cómo puede traducirse fácilmente cada estructura a lenguaje
ensamblador. Consideremos que una estructura condicional es una o más
expresiones condicionales que activan una elección entre dos bifurcaciones
lógicas distintas. Cada bifurcación hace que se ejecute una secuencia distinta
de instrucciones.
FIGURA 6.1 |
mov eax,op1
cmp eax,op2 ; ¿op1 == op2?
jne L1 ;
sí: salta a L1
jmp L2 ;
no: salta las asignaciones
mov X,1 ;
sí: asigna X y Y
Si implementamos el operador
usando JE, el código resultante será menos compacto (seis instrucciones,
en vez de cinco):
mov eax,op1
cmp eax,op2 ;
¿op1 == op2?
je L1 ;
sí: salta a L1
jmp L2 ; no: salta las asignaciones
mov X,1 ;
sí: asigna X y Y
LOOPS
Las instrucciones de bucle se usan para realizar estructuras repetitivas, y utilizan el registro CX como contador.
instruction | operation and jump condition | opposite instruction |
LOOP | decrease cx, jump to label if cx not zero. | DEC CX and JCXZ |
LOOPE | decrease cx, jump to label if cx not zero and equal (zf = 1). | LOOPNE |
LOOPNE | decrease cx, jump to label if cx not zero and not equal (zf = 0). | LOOPE |
LOOPNZ | decrease cx, jump to label if cx not zero and zf = 0. | LOOPZ |
LOOPZ | decrease cx, jump to label if cx not zero and zf = 1. | LOOPNZ |
JCXZ | jump to label if cx is zero. | OR CX, CX and JNZ |
Las instrucciones de bucle se usan para realizar estructuras repetitivas, y utilizan el registro CX como contador.
LOOP esta instrucción hace que el programa salte a la dirección especificada (salto dentro del segmento), mientras que CX sea distinto de 0 y decrementa CX en 1 cada vez.
LOOP salto
Ejemplo:
MOV CX, 100
COMIENZO: …
…
LOOP COMIENZO; este bucle se repite 100
LOOPNE/LOOPNZ: esta instrucción salta a la dirección especificada mientras que CX sea distinto de 0 y si ZF = 0.
LOOPNE/LOOPNZ salto
Esta instrucción proporciona una ruptura del bucle adicional.
LOOPE/LOOPZ esta instrucción actúa como la anterior pero la condición adicional es ZF = 1.
LOOPE/LOOPZ salto
JCXZ esta instrucción realiza un salto si CX = 0.
JCXZ salto
Ninguna de estas instrucciones afecta al registro de estado.
No hay comentarios:
Publicar un comentario