2

編集:自分の質問に答えました。下記参照。-_-

次のように .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 デバッガー)

4

2 に答える 2

0

これが実際の 8086 (つまり、セグメント化されたアーキテクチャ) でdsある場合、減算を行う時点で何に設定されていますか? 最初に頭に浮かぶのは、まったく異なるメモリの場所を変更している可能性があるということです。

それに加えて、次のものを提供する必要があります。

  • 問題のある動作を示す最短の完全なプログラム (そして、これを実行している間に自分の問題を解決できることに気付くかもしれません - 私は頻繁にそうしています)。
  • retValどちらの場合も、設定されている実際の誤った値。
于 2010-07-19T01:57:33.127 に答える
0

問題のプログラムはサブルーチンですか?

その場合、サブルーチンを繰り返し呼び出して、変更した変数をリセットしていますか?

変数を再宣言しない場合、サブルーチンを実行する 2 回目以降に以前に宣言された値は使用されませんが、最初の実行の最後に変更された値が使用されます。

于 2010-07-19T02:49:56.963 に答える