0
mov al, -10
mov [_resS], al
輸出:resS = 246.爲什麼?畢竟,「-10」值應該放在al寄存器中。爲什麼錯誤地記錄一個負值? NASM
隨着寄存器eax工作正常。
mov eax, -10
mov [_resS], eax
mov al, -10
mov [_resS], al
輸出:resS = 246.爲什麼?畢竟,「-10」值應該放在al寄存器中。爲什麼錯誤地記錄一個負值? NASM
隨着寄存器eax工作正常。
mov eax, -10
mov [_resS], eax
目前還不清楚您「輸出」的意思。即你打印的價值(如果是這樣,如何?),或者你在調試器等中看它?
在任何情況下,8位值246和-10在二進制補碼(這是大多數處理器使用的)中共享相同的位模式:11110110
。這些位是否代表246或-10取決於您是選擇將它們視爲有符號還是無符號值。
但是,您的問題似乎可能來自僅修改部分變量_resS
。
如果我們假設您打印/檢查_resS
作爲一個32位的值,而_resS
初始值爲0,那麼很容易明白爲什麼你得到你所描述的結果:
_resS
包含00000000mov al,-10
- >al
包含-10(或246),其等於0xF6mov [_resS], al
- >_resS
包含0x000000F6,即246在第二種情況下,你會得到:
_resS
包含00000000mov eax,-10
- >eax
包含-10,這等於0xFFFFFFF6mov [_resS], eax
- >resS
包含0xFFFFFFF6,即-10。
感謝您的幫助,但是在錄製時不記錄在_resS 0中,它是空的。 「輸出:」這個結論_resS在C++程序中的值 – Strelok2014Strelok
內存位置不能爲「空」。它有一定的價值。當你測試它時,它可能最初的值爲0。取決於你聲明'_resS'的方式和位置,它既可能是預期的結果,也可能是巧合。 – Michael
在C++文件中聲明的變量如下:int resS; – Strelok2014Strelok