在Assembly中比较字符串

时间:2014-01-29 14:01:36

标签: string assembly cmp

所以,我对assemlby很新。我的任务是检查字符串中的子字符串并打印出是/否答案。两个字符串都由用户输入。

我已将字符串的偏移量放入bx寄存器,将子字符串偏移到bp寄存器中。在di和si寄存器中使用索引号,我想比较字符串的字符。我的两个索引寄存器都设置为2,它应该是字符串的第一个字符。

mov dl,[bx+di]
mov al,[bp+si]
cmp dl,al
jz AnswerYes
jmp AnswerNo

我用它来比较每个字符串中的第一个字符。

当我在两个字符串中加上'a'时,程序应跳转到AnswerYes并打印出'yes'。当我打印[bx + di]和[bp + si]时,它会为这两个打印出'a',这意味着它们是相同的,但程序总是跳转到AnswerNo。

如果我这样做:

cmp dl,'a'

它打印我们的是,意味着它们是相同的。

当我这样做时:

cmp al,'a'

它打印出来没有,即使它们是相同的。

我怀疑问题在于我使用bp寄存器,因为我之前从未使用过它。我总是在我的程序中只使用一个字符串,为此我总是使用bx寄存器。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

将字符串地址加载到DS:SIES:DI,并将长度放入CX(如果使用C字符串,请将其设为FFFFh,否则将长度零延长在那里字节或将已知长度放入其中)。

然后使用DF清除CLD(方向标记)并使用REPE CMPSB进行比较。结果在ZF(零/等于标志)。