problema con saltos condicionales
Hola muy buenas, estoy haciendo un programilla que me ha dejado algo perplejo en un salto concreto.
El tema es que tengo que hacer un salto condicional y no \'saltar\' sino llamar a un procedimiento con un call porque sino no hago un procedimiento me da error por ser un salto demasiado grande, aunque no se si es posible que igual que existe un \'short\' pueda existir lo contrario por ejemplo un \'long\' ja,ja no funciona.
Alguien seria tan amable de ayudarme a poder hacer ese salto grande o decirme como usar un call dependiendo de una condicional, un saludo y gracias.
El tema es que tengo que hacer un salto condicional y no \'saltar\' sino llamar a un procedimiento con un call porque sino no hago un procedimiento me da error por ser un salto demasiado grande, aunque no se si es posible que igual que existe un \'short\' pueda existir lo contrario por ejemplo un \'long\' ja,ja no funciona.
Alguien seria tan amable de ayudarme a poder hacer ese salto grande o decirme como usar un call dependiendo de una condicional, un saludo y gracias.
Bien dices... existen los saltos cortos (que en vez de una direccion son un desplazamiento de +/-127) tambien llamados shorts jumps (o "JMP SHORT label" en ensamblador) y los saltos largo (mejor... LEJANOS) tambien llamados far jumps (o en ensamblador "JMF FAR label") Estos "saltos lejanos" son realmente los saltos comunes que tienen la direccion (segmento:offset) de la memoria...
Supongo que esto solucionara tu problema... pero a proposito de los CALL condicionales... en X86 no existe nada parecido (en ARM y MIPS si, pero esas son arquitecturas decentes...) lo que se hace es:
cmp algo, otracosa
label_if:
j??? label_if_else
CALL la_funcion_correspondiente
jmp label_endif:
label_if_else:
CALL la_otra_funcion
label_endif:
; mas codigo...
Bueno, es un if...then...else...endif pero se puede implementar un if...then simple o un switch(...) case: complicado con el mismo criterio...
Suerte...
Supongo que esto solucionara tu problema... pero a proposito de los CALL condicionales... en X86 no existe nada parecido (en ARM y MIPS si, pero esas son arquitecturas decentes...) lo que se hace es:
cmp algo, otracosa
label_if:
j??? label_if_else
CALL la_funcion_correspondiente
jmp label_endif:
label_if_else:
CALL la_otra_funcion
label_endif:
; mas codigo...
Bueno, es un if...then...else...endif pero se puede implementar un if...then simple o un switch(...) case: complicado con el mismo criterio...
Suerte...