ASM 8086:读取变量的值与赋给变量的值不同

时间:2014-11-25 20:02:51

标签: variables assembly x86-16

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

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

myVar BYTE 3,0

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

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

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

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

当我在dx中放入3然后打印它时,它打印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”功能是使用二进制补码方法打印带符号数字的功能。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

从寄存器移动值时,您希望使用括号移动实际值而不是内存地址。

mov dl, myVar

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

请参阅此link