变量是一个符号地质,其值会根据其数据类型来对应从该地址以后的若干个存储单元中所存的数值。标号也是一个符号地址,它所对应的存储单元中存放的是指令代码。虽然它们在某些性质上有所不同,但它们都是一个符号地址,代表一个存储单元的地址,所以,它们都具有存储单元的属性。除此之外,它们还有各自特殊的属性。
下面介绍内存变量和标号的属性及其有关操作符。
段属性操作符(SEG)返回该标识符所在段的段地址。我们一般只会取内存变量所在段的段地址,而很少取标号所在段的段地址。
假设有下面变量定义:
… SCORE DW ? NAME DB 10 DUP(10);数据段的变量定义 … MOV AX, SEG SCORE? ;代码段的指令 MOV BX, SEG NAME
由于SCORE和NAME在同一段中定义,所以,寄存器AX和BX的值是相等的。
偏移量属性操作符(OFFSET)返回该标识符离它所在段的段地址有多少字节。一般情况,程序员只会取内存变量的偏移量,而不太关心标号的偏移量。
假设有下面变量定义:
FIRST DD 12345678H, 0 ;数据段的变量定义 SCORE DW ?, 12H NAME DB 10 DUP(10) … MOV AX, OFFSET SCORE ;代码段的指令 MOV BX, OFFSET NAME …
假设FIRST是数据段的第一个被定义的变量名,它的偏移量为0,SCORE的偏移量为8,因为它要跳过二个双字,其它如此类推。
由于NAME在SCORE之后,且SCORE之后有二个字,占四个字节,所以,BX的值要比