emu8086 - 有人可以向我解释一下这个emu8086代码吗?
问题描述
mov bx,offset array
dec bx
mov cx,100
next: inc bx
cmp [bx],0FFH
loope next
你能解释一下为什么我们(DEC BX)和再次(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
指向其他东西)。
推荐阅读
- android - Leakcanaray,仅在某些设备上发生内存泄漏
- python - 导入模块隐式与显式
- javascript - 在 Javascript 中,如何在对象的选项中创建数据属性?
- java - 本机查询SELECT多表休眠和oracle
- azure - 天蓝色批处理搅拌机自定义图像
- c - 如何计算给定微控制器单元的机器周期时间
- python - 如何避免在 python pexpect 缓冲区中捕获随机控制台消息
- node.js - SyntaxError: Unexpected token - 在位置 0 的 JSON 中,在 postman 中上传 pdf 文件时
- amazon-ec2 - AWS内部ALB前面的Nginx代理:连接上游时上游超时(110:连接超时)
- java - 如何有一个带有 backgroundTint 和圆角半径的按钮