【发布时间】:2026-01-04 02:15:02
【问题描述】:
我的应用程序中有这个汇编器函数,用 delphi 编写,它在 windows 上执行得很好。但是我的要求是在 Linux 上执行它,因为我在 Linux 上迁移我的应用程序。在 Linux 中编译此函数时出现错误:“不支持的语言功能:'ASM'”。
任何人都可以帮助或建议如何在 c++ 或 delphi 中实现它,以便它适用于 Linux。 分享我的代码:
type
PVersionizedPointer = ^TVersionizedPointer;
TVersionizedPointer = packed record
Ver : NativeInt;
Ptr : Pointer;
end;
TVersionizedPointerStorage = array[0 .. 2 * sizeof(TVersionizedPointer) - 1] of byte;
function GetVersionizedPointer(var PointerStorage : TVersionizedPointerStorage) :
PVersionizedPointer; assembler;
const
vp_size = sizeof(TVersionizedPointer);
// Note: sizeof(any) inside asm is always $31
asm
{$ifdef CPUX86}
add EAX, vp_size - 1
and EAX, not(vp_size - 1)
{$endif}
{$ifdef CPUX64}
mov RAX, RCX
add RAX, vp_size - 1
and RAX, not(vp_size - 1)
{$endif}
end;
end;
【问题讨论】:
-
你能给出
TVersionizedPointerStorage的定义吗? -
对代码应该做什么的一些提示会有所帮助。答案可能是不要打扰汇编代码并相信编译器会生成好的代码
-
我一定会分享信息的。
-
请不要在 cmets 中添加详细信息。您可以编辑问题并在此处添加信息
-
确定@David。下次会注意的。