我正在開發一個有趣的虛擬 CPU,我目前正在組裝部件。
現在我想知道該.data部分中的值是否應該是可變的。
section .data
MyGlobalVar dw 10h
在我參考MyGlobalVar的地方,我應該在裝配時還是運行時決議值?哪種方法最合適?
mov ra, 10h ; Assembly time resolved value
mov ra, [0x00000000] ; Address of MyGlobalVar dereferenced when executed
uj5u.com熱心網友回復:
如果您在匯編時隱式取消參考以生成立即常量,您將始終從源代碼中獲取值。這就是equ目的;如果這是他們想要的,程式員可以使用它,而不是從.rodata. (在這種情況下,該部分中的位元組只能由索引查找表或類似內容的代碼訪問。)
顯然,這對于可變資料根本不起作用,它必須是從其他代碼可能已修改的記憶體位置加載。
它是匯編語言;不要將程式指令更改為具有不同架構效果的東西。 您正在撰寫匯編程式,而不是編譯器。即使是像.rodata這樣通常被映射到只讀頁面的部分也可能被除錯器修改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498467.html
