我一直致力于我的装配项目,并遇到了一个我无法理解的事实。
我有一个名为“lent”的单词数组,里面填充了一些数字。当我打印0索引下的内容时,它显示ASCII 0(NULL)。但是,当我使用CMP检查值是否为0时,我遇到了一些麻烦。这是一些代码:
mov di,offset lent
mov cx,0d
cmp ds:[di],cx
它返回不相等,好像[di]不包含零。 但是:
mov di,offset lent
mov cl,0d
cmp ds:[di],cl
返回平等,让我感到困惑。我需要第一个案例在我的代码中工作。 如果这是一个蹩脚的问题,我很抱歉,但我无法在互联网上找到合适的答案。提前致谢
答案 0 :(得分:2)
第二种情况是将一个字节与一个字节进行比较。该字节匹配(ZF = 1)。
但是,第一种情况实际上是将两个字节与两个字节进行比较。两个字节中只有一个匹配。因此,您得到ZF = 0。
答案 1 :(得分:2)
Sparky的回答是正确的。 为避免混淆和检测错误,请尝试使用大小前缀,如
mov di, offset lent
mov cl, 0d
cmp byte ptr [di], cl
如果您尝试使用单词ptr前缀,例如
cmp word ptr [di], cl
使用debug.exe,它会显示错误信息。
答案 2 :(得分:0)
mov ds:[di]到一个寄存器并查看它
mov di,offset lent
mov cx,0d
cmp ds:[di],cx
变为:
mov di,offset lent
mov cx,0d
mov ax,[di]
cmp al,cl
cmp ax,cx
cmp啊,ch
看看并调试它有点像