所以,我对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寄存器。
提前感谢您的帮助。
答案 0 :(得分:1)
将字符串地址加载到DS:SI
和ES:DI
,并将长度放入CX
(如果使用C字符串,请将其设为FFFFh
,否则将长度零延长在那里字节或将已知长度放入其中)。
然后使用DF
清除CLD
(方向标记)并使用REPE CMPSB
进行比较。结果在ZF
(零/等于标志)。