我正在寫操作系統無關的無鎖隊列,隊列工作正常(與默認的Windows \ Linux原子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
我知道我還有CMPXCHG
之前添加lock
,它應該與結構工作,但現在我更感興趣的是它的工作。
我編譯使用NASM,05年2月10日使用此命令nasm.exe -f elf -o cas.o cas.asm
,我得到這個錯誤testas\cas.asm:14: error: invalid combination of opcode and operands
此方法限制您使用x86平臺。 –