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