2016-02-28 52 views

回答

3

目前還不清楚您「輸出」的意思。即你打印的價值(如果是這樣,如何?),或者你在調試器等中看它?

在任何情況下,8位值246和-10在二進制補碼(這是大多數處理器使用的)中共享相同的位模式:11110110。這些位是否代表246或-10取決於您是選擇將它們視爲有符號還是無符號值。

但是,您的問題似乎可能來自僅修改部分變量_resS
如果我們假設您打印/檢查_resS作爲一個32位的值,而_resS初始值爲0,那麼很容易明白爲什麼你得到你所描述的結果:

  1. _resS包含00000000
  2. mov al,-10 - >al包含-10(或246),其等於0xF6
  3. mov [_resS], al - >_resS包含0x000000F6,即246

在第二種情況下,你會得到:

  1. _resS包含00000000
  2. mov eax,-10 - >eax包含-10,這等於0xFFFFFFF6
  3. mov [_resS], eax - >resS包含0xFFFFFFF6,即-10。
+0

感謝您的幫助,但是在錄製時不記錄在_resS 0中,它是空的。 「輸出:」這個結論_resS在C++程序中的值 – Strelok2014Strelok

+0

內存位置不能爲「空」。它有一定的價值。當你測試它時,它可能最初的值爲0。取決於你聲明'_resS'的方式和位置,它既可能是預期的結果,也可能是巧合。 – Michael

+0

在C++文件中聲明的變量如下:int resS; – Strelok2014Strelok