1

我一直在从事我的装配项目,遇到了一个我无法理解的事实。

我有一个名为“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

返回相等,这让我感到困惑。我需要第一个案例在我的代码中工作。如果这是一个蹩脚的问题,我很抱歉,但我无法在互联网上找到合适的答案。提前致谢

4

3 回答 3

2

第二种情况是将 的一个字节与 . 的一个字节进行比较。该字节匹配(ZF=1)。

但是,第一种情况实际上是将 的两个字节与 . 中的两个字节进行比较。两个字节中只有一个匹配。因此,您得到 ZF=0。

于 2013-05-09T16:10:54.213 回答
2

Sparky 的回答是正确的。为避免混淆和检测错误,请尝试使用大小前缀,例如

mov di, offset lent
mov cl, 0d
cmp byte ptr [di], cl

如果您尝试使用单词 ptr 前缀,例如

cmp word ptr [di], cl

使用 debug.exe,它会显示一个错误消息。

于 2013-05-09T19:53:06.803 回答
0

mov ds:[di] 到一个寄存器并查看它

mov di,offset lent

mov cx,0d

cmp ds:[di],cx

变成:

mov di,offset lent

mov cx,0d

mov 斧头,[di]

cmp al,cl

cmp ax,cx

cmp 啊,ch

看看和调试它有点像

于 2013-05-09T18:17:22.563 回答