Assembly 变量行为异常(英特尔8086)
编辑:回答了我自己的问题。见下文-_- 我在.data段中定义了一个变量,如下所示:Assembly 变量行为异常(英特尔8086),assembly,variables,intel,x86-16,code-view,Assembly,Variables,Intel,X86 16,Code View,编辑:回答了我自己的问题。见下文-_- 我在.data段中定义了一个变量,如下所示: retVal DW 0100h ;stores hex fraction of the intermediate value. Starts at 1.00 这是我加上或减去得到返回值的值 它第一次出现在代码段中是在以下时间点: sub [retVal], ax ; 我已经使用了调试器,并且可以确认在执行此操作时,ax寄存器为:0000h 但是,如果我在其前面添加以下代码行: mov dx, 0
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调试器)如果这是真正的8086(即分段体系结构),那么在执行减法时,ds
设置为什么?首先想到的是,你可能正在改变一个完全不同的记忆位置
除此之外,您还应提供:
- 展示问题行为的最短可能完整的程序(你可能会发现你在这样做时解决了自己的问题——我经常这样做)
- 在这两种情况下,
设置的实际值都不正确retVal
ds
设置为什么?首先想到的是,你可能正在改变一个完全不同的记忆位置
除此之外,您还应提供:
- 展示问题行为的最短可能完整的程序(你可能会发现你在这样做时解决了自己的问题——我经常这样做)
- 在这两种情况下,
设置的实际值都不正确retVal
如果不重新声明变量,则在第二次或以后运行子例程时,不会使用先前声明的值,而是在第一次执行结束时更改的值。所述程序是否为子例程 如果是,并且您反复调用子例程,您是否正在重置您更改的变量
如果不重新声明变量,则在第二次或以后运行子例程时,您不会使用先前声明的值,而是在第一次执行结束时更改的值。如果您只向我们显示您认为是导致问题的代码行,我们将无法猜出发生了什么错误。请发布一个简短、完整的示例,演示您所看到的问题。别忘了清楚地说明预期结果和实际结果。如果您只向我们显示您认为是导致问题的代码行,我们将无法猜测出发生了什么问题。请发布一个简短、完整的示例,演示您所看到的问题。别忘了清楚地说明预期结果和实际结果。