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



我正在汇编 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"功能是使用二进制补码方法打印有符号数字的功能。

感谢您的帮助!

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

mov dl, myVar

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

查看此链接

最新更新