1. 数据标号:
1) 往往有这种需求,想在db/dw/dd等数据定义之前加个标号以便于对定义的数据区的访问,但是汇编语法不支持这样做(会直接报错的!),但MASM提供了一种更加便捷的方式来实现这种内存的访问方式,并且比想象中的功能还要强大;
2) 以上的这种标号在MASM中叫做数据标号,和普通地址标号不同的地方在于定义它不需要使用冒号:,而是直接在db/dw/dd之前写标号:tag db/dw/dd .....
a dw 1, 2, 3
b db 10 dup(?)
*但是数据标号也只能用在db/dw/dd之前以定义数据区,不能用在其它地方;
3) 数据标号的双重功能:
i. 支持索引式的随机访问:比如tag[index]就表示以tag开头的低index字节处的内存单元(索引以0开始,索引为0就代表tag处的内存单元),并且[index]的形式和之前讲过的内存访问方式相同,比如tag[bx]、tag[bx + si + 5]等,注意!立即数不要在作为前缀了,但是也支持tag[bx][si][5]的写法;
ii. 包含有类型信息:可以根据dX判断数据区中元素的类型(是字节、字还是双字),这在访问内存空间的时候可以体现
a db 10 dup(?)
mov a[2], 5 ; 正确!a本身包含了元素是字节的类型信息,因此可以正常执行
add al, a[1