內聯彙編程序在德爾福中的工作方式與在GCC中的工作方式不同。對於初學者來說,你沒有同類型的德爾福宏觀和模板支撐,所以如果你想使用一個聲明,一旦通用匯編程序,你必須將其聲明爲一個函數:
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位。在這樣的模塊中,您可以自由使用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;
我的建議是將此代碼轉換爲Pascal而不是彙編程序。 – 2012-02-24 12:07:35