汇编中word ptr对dd变量及数组的+1寻址差异咨询
问题解答
不管是单个dd变量还是dd数组,汇编里的符号num始终代表第一个元素的起始内存地址,num + 1就是这个起始地址向后偏移1字节的位置,和后面是否有其他数组元素无关。
第一段代码分析
代码如下:
.data num dd 090F0433H .code mov ax, @data mov ds, ax mov ax, word ptr num + 1
单个dd变量num的值为090F0433H,x86架构采用小端存储,内存中字节从低到高排布为:33H → 04H → 0FH → 09H
word ptr num + 1 是从num起始地址+1的位置读取2个连续字节,也就是04H和0FH,最终ax的值为0F04H。
第二段代码分析
代码如下:
.data num dd 090F0433H,081234FEH .code mov ax, @data mov ds, ax mov ax, word ptr num + 1
num是包含两个dd元素的数组,第一个元素起始地址为num,第二个元素起始地址为num + 4(每个dd占4字节)。
num + 1依然指向第一个元素起始地址偏移1字节的位置,读取的是第一个元素的第2、3字节(对应内存中的04H和0FH),最终ax的值还是0F04H——这不是第二个元素的第一个字节,第二个元素的第一个字节在num + 4的位置。
内容的提问来源于stack exchange,提问作者zizo
相关产品推荐
相关产品推荐

