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.
La única manera de traducir esta instrucción IF en lenguaje ensamblador es utilizar una instrucción CMP seguida de uno o más saltos condicionales. Como op1 y op2 son operandos de memoria, hay que mover uno de ellos a un registro antes de ejecutar la instrucción CMP. El siguiente código implementa la instrucción IF de la manera más eficiente posible, invirtiendo la condición de igualdad y usando la instrucción JNE:
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 YLOOP etiqueta La instrucción loop decrementa CX en 1, y transfiere el flujo del programa a la etiqueta dada como operando si CX es diferente a 1.
Instrucción LOOPE Propósito: Generar un ciclo en el programa considerando el estado de ZF Sintaxis: LOOPE etiqueta Esta instrucción decrementa CX en 1. Si CX es diferente a cero y ZF es igual a 1, entonces el flujo del programa se transfiere a la etiqueta indicada como operando.
Instrucción LOOPNE Propósito: Generar un ciclo en el programa, considerando el estado de ZF Sintaxis: LOOPNE etiqueta Esta instrucción decrementa en uno a CX y transfiere el flujo del programa solo si ZF es diferente a 0.
No hay comentarios.:
Publicar un comentario