汇编学习笔记43
第七单 宏指令语句
1.掌握宏指令及其用法
一、结构和记录
一、结构
结构是为了更有效地对数据进行组织和描述
宏, 汇编语言除了提供简单数据变量的伪指令(如DB, DW, DD)外,还提供了用于说明复杂数据类型的伪指令。
利用这些伪指令能够说明复杂的数据类型,从而定义复杂的数据变量。
1. 结构类型的说明
结构伪操作指令STRUC是MASM支持的一种伪操作,它可以把各种不同类型的数据放在同一个数据结构里,便于某些数据处理的需要。
格式:
结构名 STRUC
数据定义语句序列(DB, DW, DD等)
结构名 ENDS
其中由DW, DB, DD等伪操作指令定义不同类型的数据,它们可以使用变量名来表示各个字段起始地址,所以变量名又称为字段名。
在说明结构类型时,可以给予字段赋初值,也可以不赋初值。如果字段是一个字符串,那么要确保其初值有足够的长度,以适应可能最长的字符串。
如下语句说明了一个名为MESST的结构类型
MESST STRUC
ID DW ?
STORE DB 0
PNAME DB 'ABCDEFGH'
MESST ENDS
字段ID, STORE, PNAME分别有偏移值为0,2,3
在说明结构时,结构名必须是唯一的,各字段名也应该是唯一的
注意,在说明结构类型时,不进行任何存储分配,只有在定义结构变量时才进行存储分配
2. 结构变量的定义
结构变量的定义一般格式如下:
[变量名] 结构名 <[字段值表]>
例:
STUDENT1 MESST <103, 88, 'WANG'>
STUDENT2 MESST <104, 89>
STUDENT3 MESST <>
MESS 99DUP(<>)
对宏汇编程序MASM而言,如果某个字段有多值,那么在定义结构变量时,就不能给该字段重赋初值。
3.结构变量及存取字段的访问
通过结构变量名可以直接存取结构变量。若要存取结构变量中的某一字段,则可采用如下形式:
结构变量中.结构字段名
结构字段名所代表的字段必须是对应结构所具有的字段,这种形式表示的变量地址偏移值是结构变量地址(起始地址)的偏移值与相应字段偏移值之各。
结构变量的地址的偏移值先存入某个基址或变址寄存器,然后用[寄存器名]代替结构变量名。
MOV BX, OFFSET YESTERDAY
MOV AL, [BX].MONTH
二、记录
1.记录类型的说明
在描述记录型数据或使用记录型变量之前,要说明记录类型
格式如下:
记录名 RECORD 字段[, 字段]
每一字段的格式为:
字段名: 宽度[=表达式]
字段名是记录中字段的名字,宽度表示相应的字段所占的位数。宽度必须是常数,最大为16.
一个记录可以有多个字段,字段之间以逗号分隔开,但在一般情况下各字段的宽度之和不超过16
如:
COLOR RECORD BLINK:1, BACK: 3, INTENSE: 1, FORE: 3
这四个字段所占总宽度是8位,所以称为字节记录类型。
在说明记录类型时,不实际分配存储单元。
如果一个记录中所有说明字段的总宽度大于8,那么汇编程序会给对应记录类型变量分配两个字节,否则,就给对应记录变量分配一个字节。