我无法理解LOOPNE的用处。即使LOOPNE不在那里,只有LOOP在那里,它也会在这里做同样的事情。请帮帮我。
MOV CX, 80
MOV AH,1
INT 21H
CMP AL, ' '
LOOPNE BACK
答案 0 :(得分:3)
CMP
或多或少是SUB
指令而不更改值,这意味着它设置了标志,如ZF(零标志)。
LOOPNE
有2个条件要循环:cx > 0
和ZF = 0
LOOP
有一个条件要循环:cx > 0
因此,正常LOOP
将遍历所有字符,而LOOPNE
将遍历所有字符,或直到遇到空格。以先到者为准
答案 1 :(得分:1)
当比较失败时,LOOPNE循环,并且当存在剩余的非零迭代计数时(在递减之后)。对于在已知长度的线性列表中查找元素,这可以说非常方便。
在现代x86 CPU中几乎没有用处。
LOOPNE指令很可能通过微指令在CPU内部实现,因此实际上相当于JNE / DEC CX / JNE。 由于CPU设计人员需要投入大量精力来优化比较/分支/寄存器算法,因此在高度流水线化的CPU上,等效的指令序列可能几乎同样快速地执行。它实际上可能执行得更慢;你只会通过计时来知道。而你对它的作用感到困惑的事实使它成为编码错误的来源。
我现在编写等效的指令序列,因为我有一点误会。我对CMP和JNE并不感到困惑。