使用帶有thumb指令集和Keil realview編譯器的ARM cortex,訪問32位整數是否安全?由於拇指寄存器組是16位的,這是否意味着,獲取32位int需要2條機器指令?如果是這樣,訪問32位不會是原子的。如果我的擔心是真的,那麼這是否意味着int賦值應該受關鍵區域保護?當使用ARM Thumb指令集時訪問(加載/存儲)32位整數是原子嗎?
2
A
回答
1
Thumb與ARM使用相同的32位寄存器,所以這裏沒有問題。減半是指令大小(即使這不是嚴格適用於Thumb-2)。
別擔心,如果您編譯爲Thumb,則不需要更改代碼。
0
指令大小在Thumb模式下是16位,而不是寄存器大小。
這意味着一個常量賦值 - 如i=1;
- 可以看作原子。儘管生成了多條指令,但即使i
爲int32_t
,也只有一條指令會修改內存位置i
。
但是,您需要一個關鍵的部分,一旦你像i=i+1
的東西。這當然不是原子的。
相關問題
- 1. 什麼是ARM Thumb指令集?
- 2. ARM 32位指令STR
- 3. 混合ARM和THUMB指令
- 4. ARM是更安全的指令集嗎?
- 5. 在ARM/Thumb(IOS)上解碼BLX指令
- 6. Apple AS和ARM/Thumb ADDS指令
- 7. 原子訪問ARM外設寄存器
- 8. 32位IR保持加載指令?(RISC風格32位架構)
- 9. 64位程序集的32位指令
- 10. 如何在SMLAWy指令中存儲低32位?
- 11. WinPhone8支持ARM(非Thumb)嗎?
- 12. MOV x86指令是否實現了C++ 11 memory_order_release原子存儲?
- 13. 拇指指令與arm指令集相比如何增加?
- 14. arm指令是'UNDEFINED'?
- 15. Nexus/Maven可以同時存儲32位和64位工件嗎?
- 16. 原子加載和存儲函數產生與非原子加載和存儲相同的彙編代碼
- 17. mips是否有32位地址和32位指令?
- 18. 子指令訪問每個父指令
- 19. 爲什麼不使用32位ARM指令地址的2個LSB
- 20. 上的ARM/Thumb解碼BLX指令(安卓)
- 21. 在Cortex-M3中使用B指令(thumb)
- 22. 訪問ARM-Cortex-M4寄存器的JTAG指令
- 23. 使用Twitterizer存儲Twitter訪問令牌
- 24. ndb可以與Java數據存儲訪問同時使用嗎?
- 25. 32位PPC rlwinm指令
- 26. 32位訪問和32位Java
- 27. 訪問32位內存地址c#
- 28. QWORD使用32位REG存儲/實現。
- 29. Twitter訪問令牌存儲
- 30. 在加載指令後訪問子元素圖像
同樣,thumb和thumb2都保留了ldm/stm指令,每條指令最多有8個寄存器,並且看起來像是thumb2的完整補充。基本上,如果你對ARM的行爲感到滿意,那麼不要擔心thumb/thumb2。這是一個指令解碼器的東西,而不是執行的東西。 –
但是,LDM/STM指令對於最多8個寄存器的整個集合並不是原子的。原子性只能保證每32位字。 – unixsmurf