「call」ではなく「jmp」を使用するように言われましたが、「jmp」は私を好きではありません..正常。
「呼び出し」を使用して満足していますが、実際に「jmp」を試して克服しなければならない理由はありますか?
この単純なコードは、私がjmp
のときに戻ることも終了することもないことを示しています。
_start:
jmp _Print
jmp _Exit
ret
_Exit:
; normal exit
ret
_Print
; print something
ret
また..それが何かを変更する場合、私はこれをすべてLinux端末で実行しています。
まず、jmp
は、指定したラベル(プログラム命令がメモリに格納されているメモリアドレス)に単に「ジャンプ」しますが、call
はその場所を格納しますスタック内の(call
命令の下)、jmp
ラベルに戻り、ret
命令で、jmp
が元の場所に戻ります(上記のように、呼び出し命令の下に)保存されます。ご覧のとおり、少し違いがあります。私見、私はそれがc _ ++コンパイラが関数で行うことであるので、単にcall
関数で良いと信じていますが、jmp
が必要な場合は、それから、Push
戻り位置または別のラベルを作成して、何らかのコードの実行が完了したら戻ります。
完了時に他のラベルにジャンプする例を次に示します。
_start:
jmp _Print;
_start_label:
jmp _Exit;
_Exit:
; exit stuff goes here
ret;
_Print:
;print stuff goes here
jmp _start_label;
または、単にcallを使用できます:)