2010-07-19 62 views
2

編輯:回答我自己的問題。見下文。 -_-行爲奇怪的變數(Intel 8086)

我在.data段中定義的變量如下:

retVal DW 0100h ;stores hex fraction of the intermediate value. Starts at 1.00 

這是我加上或減去來讓我的返回值。

第一次它在代碼段示出了在以下點:

sub [retVal], ax  ; 

我已經使用的調試器,並且可以確認,在此操作的時間,AX寄存器是:0000H 。

不過,如果我添加下面的代碼行之前立即:

mov dx, 0100h; 
mov [retVal], 0100h; 

我得到一個完全不同的值(也是錯誤的)。我很困惑。我在這裏從根本上濫用變量嗎?我不明白爲什麼加載變量最初初始化爲(並且尚未從中修改)的相同值會改變結果。

任何想法?否則,有人會提醒我如何通過CodeView跟蹤變量的值? (我正在使用的DOSBox調試器)

+0

如果您只向我們展示您認爲會導致問題的代碼行,我們無法猜測出現了什麼問題。請發佈一個簡短的完整示例,說明您遇到的問題。不要忘記明確說明*預期*和*實際*結果。 – 2010-07-19 01:41:10

回答

0

有問題的程序是一個子程序嗎?

如果是,並且您重複調用子例程,是否重設了您更改的變量?

如果您不重新聲明變量,那麼您在第二次或將來運行子例程時未使用先前聲明的值,而是在第一次執行結束時使用了已更改的值。

0

如果這是真正的8086(即分段體系結構),那麼ds設置爲在您進行減法的位置?首先想到的是,你可能正在改變一個完全不同的存儲位置。

最重要的是,你應該提供:

  • 最短的完整的程序,顯示出有問題的行爲(你可能會發現你解決你自己的問題,而這樣做 - 我經常這樣做)。
  • 在兩種情況下,retVal正在設置的實際不正確值。