0

アセンブリ言語で、スタックを使用して関数に引数を渡す利点があるかどうか疑問に思っていました。これが私が意味することです:

readString PROTO :DWORD ;Prototype for function
;Now we call the function by moving a DWORD value into eax and pushing eax
mov eax, FAD37EABh
push eax
CALL readString

この方法を次の方法よりも使用する利点はありますか?

INVOKE readString, FAD37EABh

よろしく、

デブジート

4

2 に答える 2

1

あまり; invoke基本的には、とにかくほとんど同じコードに展開される単なる組み込みマクロです。

于 2011-05-02T04:10:15.523 に答える
1

いいえ、最終的なコードに違いはありませんが、非常に便利です。これは、引数の型が一致するかどうかを自動的にチェックするマクロであるため、エラーの発見に役立ちます。もちろん、invoke readString, eaxまたはpush eax; call readStringほとんど同じですが、何千ものパラメーターを使用して Win32'a API を呼び出す必要があるとします。

    NULL をプッシュ
    プッシュインスト
    NULL をプッシュ
    NULL をプッシュ
    プッシュ 200
    プッシュ 300
    CW_USEDEFAULT を押す
    CW_USEDEFAULT を押す
    WS_OVERLAPPEDWINDOW をプッシュ
    push addr アパメ
    プッシュ アドレス Classame
    プッシュ WS_EX_CLIENTEDGE
    CreateWindowEx を呼び出す
    INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
           CW_USEDEFAULT,300,200,NULL,NULL,\
           hInst,NULL

この場合、 uninginvokeははるかに役に立ち、読みやすくなります。

于 2011-05-02T17:34:40.057 に答える