1

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

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

2 回答 2

4

CMP或多或少是一条SUB不改变值的指令,这意味着它设置了诸如 ZF(零标志)之类的标志。

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

LOOP有 1 个条件循环:cx > 0

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

于 2012-05-01T19:20:56.703 回答
1

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

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

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

我目前对等效的指令序列进行了编码,因为我曾经误会过一次。我对 CMP 和 JNE 并不感到困惑。

于 2012-05-01T19:42:43.430 回答