在Intel x86處理器上,是否可以在特定內存位置比較一個值與另一個值,如果比較成功就重置內存而不必擔心多線程/處理器問題?我看到指令CMPXCHG - 是否可以工作?還是有一些比較和設置的用例?用於比較和重置內存的Intel x86彙編
0
A
回答
0
A compare-and-set
是compare-and-swap
的變種,您可以在此獲得存儲器位置數據是否與給定值相匹配的真/假指示,以及存儲器位置是否已更新。 compare-and-swap
的替代方案是您從內存中讀取內容,並且可以自己與給定值進行比較。
http://en.wikipedia.org/wiki/Compare-and-swap
的CMPXCHG指令實際上是一個compare-and-set
指令。如果存儲器中的值與EAX中給出的值匹配(隱式寄存器),則置位零標誌(EFLAGS.ZF),此時源操作數(明確寄存器)中的值存儲在存儲器中。要成爲一個compare-and-swap
指令將要求指令讀從內存中,比較與EAX,寫到目標存儲和寫到源寄存器,這將是不自然的,甚至對於X86是CISC看齊卓越。
您必須使用LOCK
前綴來確保CMPXCHG以原子方式執行,也就是說,執行CMPXCHG的線程可以讀取,然後在任何其他線程訪問之前寫入內存位置。
你說resetting the memory if the compare succeeded
如果你的意思是將內存位置設置爲零,那麼零是你想要在源寄存器中的值。
對於做compare-and-swap
的便攜方式見資源this SO question
注意的CMPXCHG指令允許目標操作數是寄存器和存儲器位置。測試8個字節時,您可以使用CMPXCHG8B指令。在CMPXCHG8B指令中指定LOCK
前綴並指定寄存器作爲目的地時,Pentium處理器中存在一個錯誤,您可以閱讀更多關於它的信息here
相關問題
- 1. x86彙編:浮點比較
- 2. x86彙編比較參數
- 3. intel x86彙編到C
- 4. x86 intel操作碼彙編
- 5. x86彙編 - 比較SF和OF標誌
- 6. Intel x86彙編代碼行爲問題
- 7. Intel x86轉ARM彙編轉換
- 8. Intel x86彙編語法寄存器中的括號
- 9. x86彙編堆內存分配
- 10. x86彙編(masm32) - 替代內置宏
- 11. 我可以在GCC上使用x86彙編的Intel語法嗎?
- 12. POPF x86彙編
- 13. GCD/LCM x86 Intel NASM彙編程序中的LCM計算錯誤
- 14. 如何調試x86彙編
- 15. x86彙編,增加和子
- 16. x86-64 GNU彙編
- 17. x86彙編錯誤
- 18. x86彙編代碼
- 19. 從intel x86語法彙編中識別操作數類型
- 20. 在Intel x86彙編手冊中,00+是什麼意思?
- 21. 使用x86彙編語言
- 22. 彙編符號比較
- 23. 彙編比較指令
- 24. x86彙編添加
- 25. x86彙編語言
- 26. 關於圖形的x86彙編練習
- 27. .NET - NGEN編譯x86彙編
- 28. Intel HD GPU vs Intel CPU性能比較
- 29. x86彙編學習平臺
- 30. shrl vs sarl .. x86彙編gnu