变量名加上一个位移就形成直接偏移量操作数,可以访问没有显式标记的内存位置。
arrayB byte 10h, 20h, 30h, 40h, 50h
mov al, arrayB ;al = 10h
mov al, arrayB + 1 ;al=20h
mov al, [arrayB + 2] ;al=30h,中括号可有可无。
mov al, [arrayB + 5] ;MASM没有内置的有效地址范围检查功能,如果arrayB+5将访问数组以外的一个字节,结果会是难以发现的错误,因此要特别小心。
arrayW word 100h, 200h, 300h
mov ax, arrayW ;ax=100h
mov ax, arrayW + 2 ;ax=200h,由于是word所以每个元素占2字节,要加2才能跳转到下一个元素。
mov ax, arrayW + 4 ;ax=300h,加4跳转到下下个元素,以此类推