私は 'call'ではなく 'jmp'を試して使用するように言われましたが、 'jmp'は私には好きではありません..ジャンプすると終了しません幸せな日ではない)、通常通りコールを返して終了する。アセンブリ 'call'と 'jmp'
「コール」を使用して満足していますが、実際には「jmp」を試して克服すべき理由はありますか?
このシンプルなコードは、私が 'jmp'のときに戻ったり出たりしないかどうかを示しています。
ありがとうございました。
_start:
jmp _Print
jmp _Exit
ret
_Exit:
; normal exit
ret
_Print
; print something
ret
も...それは何も
これは、あいまいな、と非常に不明瞭である使用することができます。ここ
が行われたときに、他のラベルにジャンプの一例です。 JMPは(戻り値を押すことによって)スタックを設定しないので、 'ret'を実行すると、偽の戻りアドレスがスタックからポップされ、コードがジャンプします。あなたは 'jmp'で' call'を偽装することができますが、jmpを実行する前にスタック上のリターンアドレスを自分でプッシュする必要があります。どのアセンブラとどのOSをターゲットにしていますか? 16または32ビット? –
私はあなたの質問がこれに似た答えを持っているかもしれないと思います:http://stackoverflow.com/a/28133370/3857942。 –
'JMP 'を使って' CALL'をシミュレートすることで、 'CALL'と' RET'関数が一緒にどのように一緒になるかを教えるために学校で行われることを除いて、(この場合は) 'JMP'を使用する理由はありません'。スタックについても教えてくれます –