【问题标题】:ASM 8086 : Reading the value of a variable is different from the value assigned to the variableASM 8086:读取变量的值与分配给变量的值不同
【发布时间】:2015-01-23 23:36:17
【问题描述】:

我正在用 Assembly 8086 编写一个小程序,我必须使用变量。

所以我有一个在数据段中定义的变量:

myVar BYTE 3,0

之后在我的代码中,我必须访问变量并使用它的值。但是该程序并没有像预期的那样工作。所以我在我的代码中搜索了错误,我发现当我访问“myVar”时,该值与我分配给它的值不同。

当我打印“myVar”的内容时,它会打印 173 而不是 3:

xor dx, dx
mov dl, myVar
push dx
CALL tprint

"tprint" 是我编写的一个函数,它将显示通过堆栈作为参数传递的数字。所以在这种情况下它会打印 DX 寄存器的内容。

当我将 3 放入 dx 然后打印它时,它会打印 3,所以“tprint”工作正常:

xor dx, dx
mov dl, 3
push dx
CALL tprint

所以问题是当我在DL寄存器中移动变量“myVar”的内容时,DL中放入了错误的值(分配给“myVar”的值之外的另一个值)

xor dx, dx
mov dl, myVar ; DL != 3 --> why???

我真的不明白这种行为,我搜索了很多网站,他们都是这样做的,为什么它对他们很好,而对我却没有?

备注:“tprint”函数是使用二进制补码法打印有符号数的函数。

感谢您的帮助!

【问题讨论】:

  • 尝试使用括号将其设为mov dl, [myVar]。我不确定您使用的是什么汇编程序,但您可能正在加载地址而不是值
  • mov es,ax ;把这个放在es中。你把这个放在ds哪里了?
  • @rkhb:谢谢!这就是问题所在! :)

标签: variables assembly x86-16


【解决方案1】:

当您从寄存器中移动一个值时,您希望使用括号来移动实际值而不是内存地址。所以对于

mov dl, myVar

您可能只是移动了指针而不是值。

看到这个link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多