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

有问题的程序是子程序吗?

如果是,并且您重复调用子程序,您是否重置了您更改的变量?

如果您不重新声明变量,那么您不会在第二次或将来运行子例程时使用先前声明的值,而是在第一次执行结束时使用更改后的值。

于 2010-07-19T02:49:56.963 回答