Ensamblador - DO WHILE O WHILE

 
Vista:

DO WHILE O WHILE

Publicado por Ivan Cujes (1 intervención) el 26/04/2007 01:33:33
HOLA , TENGO UN PROBLEMA , SOY NUEVO EN ENSAMBLADOR , PERO NECESITO SABER COMO HACER UN WHILE O DO WHILE EN ASSEMBLER, PERO COMOSE NO HAY ESTO EN ASSEMBLER , POR ESO NECESITO UN CODIGO QUE SE LE PAREZCA A ESTAS INSTRUCCIONES, POR FAVOR SI ALGUIEN ME LO PODRIA ENVIAR A MI CORREO , SE LO AGRADECERIA MUCHO , GRACIAS , HASTA LUEGO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:DO WHILE O WHILE

Publicado por Asmprogramer (12 intervenciones) el 26/04/2007 10:09:12
A ver si te vale.....
entrada_bucle:
cmp al,cero
jz salir_bucle
........
........
.......
dec al
jmp entrada_bucle
salida_bucle:
...........
.........
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DO WHILE O WHILE

Publicado por Karla (1 intervención) el 28/09/2007 19:24:52
Traducción de un bucle while
Una de las construcciones más comunes en lenguajes de alto nivel para ejecutar código de forma iterativa es el bucle while. Se muestra su estructura. La palabra reservada while da paso a una expresión booleana entre paréntesis que se evalúa y en caso de ser cierta pasa a ejecutar el bloque del código interno tras cuyo final se vuelve de nuevo a evaluar la condición.

Estructura de un bucle while

while (expresión booleana) {
Código interno
}

En este bloque es importante tener en cuenta que la expresión booleana se evalúa al menos una vez y se continúa evaluando hasta que sea falsa. Supóngase que la evaluación de la expresión es cero en caso de ser falsa y diferente de cero si es cierta y el valor resultante se almacena en %eax. Se muestra la estructura genérica en lenguaje ensamblador resultante de traducir un bucle while en este supuesto.


Traducción de un bucle while a ensamblador

eval: ... # Evaluar la expresión booleana
... # Resultado en %eax
cmp $0, %eax
je finwhile
... # Traducción del código interno
...
jmp eval
finwhile:
... # Resto del programa


Tras evaluar la condición se ejecuta una instrucción que salta al final del bloque si es falsa. En caso de ser cierta se ejecuta el bloque de código y tras él un salto incondicional a la primera instrucción con la que comenzó la evaluación de la condición. El destino de este salto no puede ser la instrucción de comparación porque es muy posible que las variables que intervienen en la condición hayan sido modificadas por lo que la evaluación se debe hacer a partir de estos valores. Se muestra la traducción de un bucle while con una de estas condiciones. Se asume que las variables x, i y j son de tipo entero y están almacenadas en memoria con etiquetas con el mismo nombre.


Traducción de un bucle while a ensamblador

Código de alto nivel Código ensamblador
while ((x == i) || (y < x)) { Código interno } eval: # Comienza evaluación mov x, %eax cmp i, %eax # Comparar si x == i je codigointerno # Si cierto ejecutar código cmp y, %eax jle finwhile # Si falso ir al finalcodigointerno: ... # Código interno ... jmp eval # Evaluar de nuevofinwhile: # Final de traducción

En este caso la condición del bucle es una disyunción con lo que si una de las condiciones es cierta, se puede ejecutar el código interno del bucle sin evaluar la segunda. Por este motivo se utiliza el salto condicional je tras la primera comparación. En caso de éxito se pasa a ejecutar directamente el bloque de código interno al bucle. Si la primera condición es falsa se evalúa la segunda. El correspondiente salto condicional en este caso tiene una condición inversa a la incluida en el código, pues si ésta es falsa, se debe transferir el control al final del bucle.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar