インラインアセンブラはGCCと同じようにDelphiで動作しません。まず第一に、あなたは、Delphiでのマクロとテンプレートのサポートの同じ種類を持っていないので、あなたが宣言ワンス汎用アセンブラルーチンを使用する場合、あなたは関数として宣言する必要があります。
function ShiftArithmeticRight(aShift: Byte; aValue: LongInt): LongInt;
{$IFDEF WIN64}
asm
sar edx,cl
mov eax,edx
end;
{$ELSE}
{$IFDEF CPU386}
asm
mov cl,al
sar edx,cl
mov eax,edx
end;
{$ELSE}
begin
if aValue < 0 then
Result := not (not aValue shr aShift)
else
Result := aValue shr aShift;
end;
{$ENDIF}
{$ENDIF}
Delphiでは、インラインアセンブラは、使用されている場所でインプリメントする必要があり、32ビットでのみサポートされています。このようなasmブロックでは、EAX、ECX、EDXを自由に使用し、周囲のコードにある識別子を自由に使用することができます。例:
var
lValue: LongInt;
lShift: Byte;
begin
// Enter pascal code here
asm
mov cl,lShift
sar lValue,cl
end;
// Enter pascal code here
end;
私の助言は、このコードをアセンブラではなくパスカルに変換することです。 –