4.5 标号

标号是一种特殊的标识符,它代表代码段中的某个具体位置,它主要用于表明转移的目标位置。其说明形式如下:

标号:  汇编语言指令   ;注释

解释:标号必须是一个合法的标识符,在其后面紧跟一个冒号":",冒号与汇编语言指令之间要有分隔符。通常用若干个空格、TAB来作分隔符,一般用分隔符使有关内容对齐为宜。

4.6 内存变量和标号的属性

变量是一个符号地质,其值会根据其数据类型来对应从该地址以后的若干个存储单元中所存的数值。标号也是一个符号地址,它所对应的存储单元中存放的是指令代码。虽然它们在某些性质上有所不同,但它们都是一个符号地址,代表一个存储单元的地址,所以,它们都具有存储单元的属性。除此之外,它们还有各自特殊的属性。

下面介绍内存变量和标号的属性及其有关操作符。

4.6.1 段属性操作符

段属性操作符(SEG)返回该标识符所在段的段地址。我们一般只会取内存变量所在段的段地址,而很少取标号所在段的段地址。

假设有下面变量定义:

SCORE DW ?
NAME  DB 10 DUP(10)  ;数据段的变量定义
MOV AX, SEG SCORE ;代码段的指令
MOV BX, SEG NAME

由于SCORENAME在同一段中定义,所以,寄存器AXBX的值是相等的。

4.6.2 偏移量属性操作符

偏移量属性操作符(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,因为它要跳过二个双字,其它如此类推。

由于NAMESCORE之后,且SCORE之后有二个字,占四个字节,所以,BX的值要比AX的值大4。