L'Assembly 'appel' vs 'jmp'

Je me suis dit d'essayer et d'utiliser 'jmp plutôt que "d'appel", mais " jmp " n'est pas aimer moi .. quand je saute, il ne retourne pas (donc il se ferme jamais et pas des jours heureux ), mais l'appel retourne et sort comme d'habitude.

Je suis heureux à l'aide de "appel" mais est-il réellement une raison que je devrais essayer de surmonter 'jmp' ?

ce simple code montre juste si quand je 'jmp' il ne revient jamais et les sorties.

Merci à l'avance pour toute aide.

_start:

    jmp _Print
    jmp _Exit

ret


_Exit:

    ; normal exit 

ret


_Print

    ; print something

ret

aussi .. je suis en cours d'exécution tout cela dans un terminal linux si cela change quoi que ce soit

C'est ambigu, et très flou. JMP n'a pas mis en place de la pile (en poussant la valeur de retour) donc, quand vous faites une ret, une fausse adresse de retour obtient sauté hors de la pile et de votre code sauts. Vous pouvez simuler une call avec un jmp mais avant de faire jmp vous devez pousser l'adresse de retour sur la pile vous-même. Ce que l'assembleur et quel système d'exploitation êtes-vous cibler? 16 ou 32 bits?
Je pense que votre question peut avoir une réponse de ce type: stackoverflow.com/a/28133370/3857942 .
Il n'y a pas de raison que je pense (dans ce cas) à utiliser JMP au lieu de cela, sauf à faire à l'école pour vous apprendre comment faire un CALL et RET fonction de la simulation de l' CALL avec JMP. Il sera également vous apprendre quelque chose à propos de la pile
Certaines des réponses sur ce fil pourrait être utile. stackoverflow.com/questions/41205054/...

OriginalL'auteur user3502489 | 2015-09-26