有人可以向我解释这个 emu8086 代码吗?

Can someone explain to me this emu8086 code?

mov bx,offset array
dec bx
 mov cx,100
next: inc bx
 cmp [bx],0FFH
 
 loope next

你能解释一下为什么我们 (DEC BX) 和 AGAIN (INC BX) 吗?寻找完整的答案thx

我们在循环之前递减bx ,然后循环中的第一条指令递增bx。

这样,在循环的第一次迭代中,bx 再次指向 array 的开头。在第二次迭代中,它指向第二个项目,依此类推。

最初看起来做这样的事情更直接:

      mov bx, offset array
next: cmp [bx], 0ffh
      inc bx
      loopne next

这个问题是我们依赖 cmp 来设置 Z 标志,loopne 指令使用它——但 inc 指令也影响 Z 标志,因此这会丢失 cmp 的结果,因此 loopne 将无法再正常工作。

话虽如此,这似乎与 repne scasb 可以做的大致相同:

mov di, offset array
mov al, 0ffh
mov cx, 100
repne scasb     ; this instruction implements the entire loop

最大的不同是 repne scasb 总是在一个基数在 es:di 中给出的数组中搜索,这有时处理起来很笨拙(例如,如果您已经在使用 es 指向其他东西)。