汇编学习笔记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,那么汇编程序会给对应记录类型变量分配两个字节,否则,就给对应记录变量分配一个字节。

posted @ 2011-01-19 20:32  杨海龙  阅读(363)  评论(0编辑  收藏  举报