私はパスカルに精通しており、このアセンブリ関数で何が問題になっているのか理解できません:
{$ASMMODE intel}
function SomeType.doSomething : boolean; assembler;
var i : integer; // for testing
asm
mov EAX, field
mov i, EAX // line 42
and EAX, 4
mov i, EAX
//...
end;
クラスの宣言:
type
SomeType = class(TObject)
private
field : integer;
function doSomething : boolean;
// ...
end;
このメソッドを呼び出す前にfield
(クラスのフィールドSomeType
) が 4 の場合、IDE (Lazarus) は 42 行目で 8 が割り当てられていることを報告しますi
(上記の行番号を参照)。
私が見逃しているインラインアセンブリについて何かありますか?
EAX
フィールドの値が正しく保存および/またはロードされないのはなぜですか?
更新: 64 ビットをターゲットにしている可能性があると思います。