0

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

我已将字符串的偏移量放入 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'

它打印出 no,即使它们是相同的。

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

提前感谢您的帮助。

4

1 回答 1

0

将字符串地址加载到DS:SIandES:DI中,并将长度放入CXFFFFh如果您使用 C 字符串,则制作它,否则将长度字节零扩展或放入已知长度)。

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

于 2014-01-29T15:32:14.047 回答