我正在编写与操作系统无关的无锁队列,队列工作正常(使用默认的 windows\linux atomic CAS),但我想让队列在不改变 linux 和 windows 的情况下工作。所以我想我应该在汇编程序中编写自己的 CAS,还是有其他方法可以实现它?
到目前为止,我有这个代码:
global _CAS
_CAS:
mov eax, [esp+4]
mov edx, [esp+8]
mov ecx, [esp+12]
;XCHG eax, edx <- this function works fine
CMPXCHG ecx, eax, ebx
ret
我知道我lock
之前仍然需要添加CMPXCHG
它,它应该适用于结构,但现在我更感兴趣的是让它工作。
我使用 nasm-2.10.05 使用此命令进行编译,但nasm.exe -f elf -o cas.o cas.asm
出现此错误testas\cas.asm:14: error: invalid combination of opcode and operands