私はコードのチャンクをMASMからCインラインアセンブラ(x86、Windows、MS VC)に移植しています。Foolowingは実際のコードではなく、単なるアイデアを与えるためのなりすましです。静的配列または2つのラベル間のコードチャンクとして定義されたデータがあり、そのサイズを取得する必要があるとします。
label1:
bla bla bla
label2:
....
mov eax, (offset label2 - offset label1)
このようなコードは、MASMではチャームのように機能しますが、CIでは次のエラーメッセージが表示されます。「エラーC2425:'-':'第2オペランド'の非定数式」コンパイルできます:
mov eax, offset label1
mov eax, offset label2
コンパイラがコンパイル時に(offset label1-offset label2)を評価することを期待していますが、間違っているようです。オフセットも追加できません(なぜですか?これらはコンパイル中に追加された2つの整数です...?)確かに、mov eax、offset label2 mov edx、offset label1 sub eax、edxをコンパイルできますが、それは余分なコードです定数を計算するためだけに。誰かが私に説明してもらえますか、私のコードの何が問題になっていますか?
引っ越しによるものでしょうか?どのようにそれを押し通すのですか?
回答をお待ちしております、ありがとうございます。