首页 > 解决方案 > 将 Windows 64 位的汇编程序函数 InterlockedCompareAndStore128() 转换为 Linux 64 位的非汇编程序

问题描述

大家好,我对 delphi 很陌生,在我的应用程序中,有很多以前用于 Windows(32 位和 64 位)的汇编程序函数。但是现在我正在将我的应用程序从 Windows 迁移到 Linux(64 位)那里不支持 asm 函数。所以如果有人可以支持/帮助理解这个 asm 函数。提前致谢。

function InterlockedCompareAndStore128(var dest, newVal, oldVal) : boolean; assembler;
asm
  push  rbx
  push  rdi
  mov   rdi, rcx            // ptr to dest -> RDI
  mov   rcx, [rdx+8]        // newVal -> RCX:RBX
  mov   rbx, [rdx]
  mov   rdx, [r8+8]         // oldVal -> RDX:RAX
  mov   rax, [r8]
  lock cmpxchg16b [rdi]

  mov   rax, 0
  jnz   @exit
  inc   rax
@exit:
  pop   rdi
  pop   rbx
end;

标签: linuxdelphiassemblyx86-64compare-and-swap

解决方案


推荐阅读