ITEEDU

4.4.4 记录类型的定义

1、记录类型的说明

汇编语言的记录类型与高级语言的记录类型不同,它是为按二进制位存取数据提供方便的。记录类型的说明要用到另一个保留字RECORD,其说明格式如下:

 记录名 RECORD 字段 [, 字段, ……]

其中“字段”代表:字段名:宽度[=初值表达式]

解释:

  1. 记录名代表该记录类型;
  2. 记录类型可以由多个字段组成,每个字段之间要用逗号','分开;
  3. 字段的属性包括字段名、宽度和初值;
  4. 字段的“宽度”表示该字段所占的二进制位数,它必须是一个常数,并且所有字段的宽度之和不能大于16;如果记录的总宽度大于8,则系统为该记录类型分配二个字节,否则,只分配一个字节;
    记录的最后一个字段排在所分配空间的最低位,然后对记录中的字段依次“从右向左”分配二进制位,左边没有分完的二进制位补0;
  5. 初值表达式给出的是该字段的缺省值。如果初值超过了该字段的表示范围,那么,在汇编时将产生错误提示信息;如果某字段没有初值表达式,则其初值为0。

例如:

 COLOR RECORD BLINK:1, BACK:3=0, INTENSE:1=1,  FORE:3
  FLOAT? RECORD DSIGN:1, DATA:8, ESIGN:1, EXP:4

记录类型COLOR有四个字段:BLINK、BACK、INTENSE和FORE,它们的宽度分别为:1、3、1和3,所以,该记录类型共有8位二进制,系统分配给它一个字节。
记录类型COLOR的二进制位分布如右图4.9所示。


图4.9 记录类型COLOR的二进制位分配示意图

记录类型FLOAT用来模仿《计算机原理》中的浮点数表示法,它也有四个字段:

DSIGN (尾数的符号位);
DATA (尾数);
ESIGN (指数的符号位);
EXP (指数)。


图4.10 记录类型FLOAT的二进制位分配示意图

它们的总宽度是14,所以,系统要给它分配二个字节。记录类型FLOAT的二进制位分布如右图4.10所示。

2、记录变量的定义

在程序中,必须先说明记录类型,然后才能定义该记录类型的变量。记录变量是把其二进制位分成一个或多个字段的字节或字变量。其定义格式与其它类型变量的定义方式类似,具体如下:

 [变量名]  记录名 <[字段值表]>

解释:

  1. 变量名即为该记录类型的变量名,它可省缺。如果省缺,则不能用符号名来访问该内存单元;
  2. 字段值表是给字段赋初值,中间用逗号','分开,其字段值的排列顺序及大小应与该记录说明时各字段相一致;
  3. 如果记录变量的某字段用其说明时的缺省值,那么,可用逗号来表示;如果所有字段都如此,则可省去字段值表,但必须保留一对尖括号"<"、">"。

例如:

 COLOR1 COLOR <>, <1, 7, 0, 5>,  <1, , 0, 7>
  FLOAT1? FLOAT <1, 23H, 0, 3>, <0, 89H,  1, 5>

3、记录的专用操作符

操作符WIDTH和MASK是作用于记录类型的两个专用保留字,利用它们可得到记录类型的不同属性。

操作符WIDTH

操作符WIDTH返回记录或其字段的二进制位数,即其宽度。其一般书写格式如下:
WIDTH 记录名 或 WIDTH 记录字段名
假设有前面定义的记录类型COLOR,那么,WIDTH COLOR的值为8,WIDTH BACK的值为3,WIDTH BLINK的值为1。

操作符MASK

操作符MASK返回一个8位或16位二进制数。在该二进制数中,被指定记录或字段使用的对应位的值为1,否则,其值为0。其一般书写格式如下:
MASK 记录名 或 MASK 记录字段名
假设有前面定义的记录类型FLOAT,那么,MASK EXP的值为000FH,MASK DATA的值为1FE0H,WIDTH DSIGN的值为2000H。

记录字段

记录字段名是一个特殊的操作符,它本身也是操作数,其返回值是该字段移到所在记录的最低位所需要的位数,即该字段最低位在记录中的位置。
假设有前面定义的记录类型FLOAT,那么,有:

MOV CL, EXP 相当于 MOV CL, 0
MOV CL, DATA 相当于 MOV CL, 5

4.4.5 标号

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

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

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