首页 > 解决方案 > 在单词数组中将指针增加 1:从两个单词之间加载一个单词?

问题描述

考虑下面的代码。如果增加2 给了我数组的第二个元素,那么增加1SI到底会给我什么?SI

.data  
var dw 1,2,3,4  
.code  
LEA SI,VAR  
MOV AX,[SI]  
INC SI  
MOV AX,[SI]

标签: arraysassemblyx86-16masm

解决方案


语句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


推荐阅读