gpt4 book ai didi

delphi - 将 GCC 内联汇编器转换为 delphi 内联汇编器

转载 作者:行者123 更新时间:2023-12-03 14:52:15 25 4
gpt4 key购买 nike

请给我这段 GCC 内联汇编代码

int   src = 0;
dword n;
__asm(
"sar %%cl,%%edx"
: "=d" (n) // saves in eax,edx
: "c" (src), "d" (n) // the inputs
);

我的delphi尝试是:

asm
mov ecx, &src
mov edx, &n
sar cl,edx
mov eax,edx
end;

请问这是正确的吗?

最佳答案

内联汇编器在 Delphi 中的工作方式与在 GCC 中的工作方式不同。对于初学者来说,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 block 中,您可以自由使用 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;

关于delphi - 将 GCC 内联汇编器转换为 delphi 内联汇编器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9430463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com