首页 > 解决方案 > 有人可以向我解释一下这个emu8086代码吗?

问题描述

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

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

标签: emu8086

解决方案


我们在循环之前递减 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指向其他东西)。


推荐阅读