【发布时间】: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:谢谢!这就是问题所在! :)