arrays - 在单词数组中将指针增加 1:从两个单词之间加载一个单词?
问题描述
考虑下面的代码。如果增加2 给了我数组的第二个元素,那么增加1SI
到底会给我什么?SI
.data
var dw 1,2,3,4
.code
LEA SI,VAR
MOV AX,[SI]
INC SI
MOV AX,[SI]
解决方案
语句var dw 1,2,3,4
告诉汇编器在段的开头静态定义内存中的八个字节.data
。数据字节的布局将是
|01|00|02|00|03|00|04|00|
第一个MOV AX,[SI]
将用 01 加载 AL,用 00 加载 AH。
当您仅将 SI 增加 1 时,下一个MOV AX,[SI]
将用 00 加载 AL,用 02 加载 AH。
如果您想继续用整个 16 位字加载 AX,请将 SI 增加 2 ( ADD SI,2
)。
您也可以用一条指令LODSWMOV AX,[SI]
替换两者和,它做同样的事情并且只占用一个字节而不是五个。在这种情况下,您应该确保重置方向标志(使用程序开头的指令CLD)。ADD SI,2
推荐阅读
- python - 两个数据帧之间的比较?
- gremlin - tinkerpop gremlin clear 控制台不工作
- spring-cloud - feign.FeignException:在微服务调用中读取状态 404
- python - 无法使用 xmlrunner 为 unittest 打印日志记录输出
- reactjs - 使用反应导航移动到新页面后每次调用函数/解析器?
- c++ - 为什么这段代码只适用于 && 而不是 ||?使用 || 代替 && 程序永远持续下去
- javascript - Quill 示例 => 未捕获的错误:[Parchment] 无法将链接插入块中
- oracle - Docker 容器内的 Oracle 表单和报表服务器
- c# - 在 for 循环中从 ICollection 列表读取的 Asp.NET CSHTML 数据在页面加载时未设置
- node.js - 错误无法使用 express 和节点发布 /