OS に依存しないロックレス キューを作成しています。キューは正常に動作します (デフォルトの 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
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