我有這樣的代碼:
mov eax, 0
mov [left], eax
mov eax, [len]
dec eax
mov [right], eax
我需要0在left和len - 1中right。但不知何故left得到 0 后行也得到len - 1了。我嘗試為 使用另一個暫存器right,但結果相同。
mov eax, 0
mov [left], eax
mov ebx, [len]
dec ebx
mov [right], ebx
所以,它給出了相同的結果。
完整代碼:
section .data
len dd 10
section .bss
left resd 0
right resd 0
section .text
global main
push rbp
mov rbp, rsp
mov eax, 0
mov [left], eax
mov eax, [len]
dec eax
mov [right], eax
在這一行我已經遇到了問題
uj5u.com熱心網友回復:
從 nasm 手冊:
RESB、RESW、RESD、RESQ、REST、RESO、RESY 和 RESZ 被設計用于模塊的 BSS 部分:它們宣告未初始化的存盤空間。每個都采用單個運算元,即要保留的位元組數、字數、雙字數或任何內容。
所以你的
left resd 0
right resd 0
為leftand保留 0 個雙字right,即根本沒有記憶體。因此,它們最終會到達同一個地址,您會觀察到,寫給一個的似乎也寫了另一個。
你可能想要left resd 1,等等。
您可能一直認為 0 作為初始化的值,例如dd,但重點resd是您無法指定初始值;在該.bss部分它自動為零。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/377378.html
上一篇:MongoDb2.6歸檔問題
