我需要处理来自旧式Mac时代(旧式Motorola CPU)的文件。字节是大端,所以我有一个功能,交换和INT64英特尔小端。该功能是ASM,适用于32位CPU,但不适用于64位。对于64位,我有一个不是ASM的功能。我想结合使用IFDEF的功能。我可以这样做吗?这会成为一个问题吗?将ASM与非asm编码(或需要SwapInt64 ASM功能)相结合
interface
function SwapInt64(Value: Int64): Int64; assembler;
implementation
{$IFDEF CPUx86}
function SwapInt64(Value: Int64): Int64; assembler; { Does not work on 64 bit } {
asm
MOV EDX,[DWORD PTR EBP + 12]
MOV EAX,[DWORD PTR EBP + 8]
BSWAP EAX
XCHG EAX,EDX
BSWAP EAX
end;
{$else}
function SwapInt64 (Value: Int64): Int64;
var P: PInteger;
begin
Result: = (Value shl 32) or (Value shr 32);
P: = @Result;
P ^: = (Swap (P ^) shl 16) or (Swap (P^shr 16));
Inc (P);
P ^: = (Swap (P ^) shl 16) or (Swap (P^shr 16));
end;
{$ENDIF}
我觉得编译器会正确编译/调用相应的功能不管一个是ASM,另一个是帕斯卡。
Mac也使用小端。你实际上是在寻找网络来主办功能?你为什么觉得需要重新实现它们?你为什么想要使用asm?那不是你造成什么问题吗?如果你使用Pascal,你会回家并且干燥? –
@ DavidHeffernan-对不起。我的意思是'老苹果'。大端(sparc)。 – Ampere
@DavidHeffernan - 请参阅与数据来源有关的说明(旧mac) – Ampere