LOOPNE的用处

时间:2012-05-01 19:14:19

标签: x86-16 assembly

我无法理解LOOPNE的用处。即使LOOPNE不在那里,只有LOOP在那里,它也会在这里做同样的事情。请帮帮我。

MOV CX, 80
MOV AH,1
INT 21H
CMP AL, ' '
LOOPNE BACK

2 个答案:

答案 0 :(得分:3)

CMP或多或少是SUB指令而不更改值,这意味着它设置了标志,如ZF(零标志)。

LOOPNE有2个条件要循环:cx > 0ZF = 0

LOOP有一个条件要循环:cx > 0

因此,正常LOOP将遍历所有字符,而LOOPNE将遍历所有字符,或直到遇到空格。以先到者为准

答案 1 :(得分:1)

当比较失败时,LOOPNE循环,并且当存在剩余的非零迭代计数时(在递减之后)。对于在已知长度的线性列表中查找元素,这可以说非常方便。

在现代x86 CPU中几乎没有用处。

LOOPNE指令很可能通过微指令在CPU内部实现,因此实际上相当于JNE / DEC CX / JNE。 由于CPU设计人员需要投入大量精力来优化比较/分支/寄存器算法,因此在高度流水线化的CPU上,等效的指令序列可能几乎同样快速地执行。它实际上可能执行得更慢;你只会通过计时来知道。而你对它的作用感到困惑的事实使它成为编码错误的来源。

我现在编写等效的指令序列,因为我有一点误会。我对CMP和JNE并不感到困惑。