我正在使用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”功能是使用二进制补码方法打印带符号数字的功能。
感谢您的帮助!