2

最近、2 つのオフセットの違いVisual-C++ インライン アセンブラーの2 つのオフセットの違いについてコミュニティに質問したところ、すぐに返信がありました。どうもありがとうございます。今、私は別の問題に遭遇しました。これはさらに悪いことです。

のような指示があります。

    ..naked...
    __asm{
    ...
    mov eax, dword ptr [ebx + offset data1]
    ...
    }

本当の問題は、それが次のようにコンパイルされることです

    mov eax, [offset data1]

この行にはコンパイラの警告 (/WAll モード) はありませんが、コードが大幅に変更されています。静かに。それはコンパイラのバグですか、それとも機能ですか? たぶん、追加のフラグを指定する必要がありますか?

問題はオフセットのみです。

    mov eax, dword ptr [ebx + 0xconst]

正しくコンパイルされます。

はい、コードを操作できます

    mov eax, offset data1
    add eax, ebx
    mov eax, [eax]

しかし、その場合、変更するコードがたくさんあります。私を悩ませているのは、警告がないことです。

4

1 に答える 1

0

最後に、MSDN フォーラムで回答を見つけました。mov eax, [ebx + offset data1location] ではなく、単に mov eax, [ebx + data1location] を使用すると、正しくコンパイルされます。ただし、'offset' は、MS C++ コンパイラで受け入れられるべき MASM 構文の正当なキーワードです。しかし、その後、「ebx +」は黙って捨てられます。

于 2012-11-25T14:28:05.990 に答える