linux - 将 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;
解决方案
推荐阅读
- c# - 为什么有一个“使用命名空间”,然后是“使用命名空间.class”
- python - 将一行的所有列的内容合并到整个文件中(一个csv文件)
- javascript - Firebase 在添加新子之前删除子
- terraform - Terraform 循环遍历 json 文件
- java - 带有 H2 错误的 Spring Entity Manager:列“EMPLOYEE_ID”错误不允许为 NULL
- javascript - 我可以将 websocket 连接到非 websocket 服务器吗
- angular - 如何有条件地以角度在谷歌地图上触发点击事件
- typo3 - 未注册标识符为“default-not-found”的图标
- reactjs - 警告:必须先调用 ReactGA.initialize,否则应手动加载 GoogleAnalytics
- grammar - 如何使此 CFG 无冲突?