复杂汇编程序设计.ppt
《复杂汇编程序设计.ppt》由会员分享,可在线阅读,更多相关《复杂汇编程序设计.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章 复杂汇编程序设计第7章 复杂汇编程序设计7.1 结构结构7.2 记录记录7.3 联合联合 7.4 应用举例应用举例 第7章 复杂汇编程序设计7.1 结结 构构7.1.1 结构的定义结构的定义 用STURC和ENDS把一系列数据定义语句括起来就成了一个结构。格式:结构名 STRUC 结构名 ENDS 功能:定义结构类型的数据,但并不真正给结构分配存储空间,只是说明包括结构名、域名及其数据类型在内的结构的类型。第7章 复杂汇编程序设计说明:说明:结构名由用户定义,结构内数据定义语句中的变量名称为结构字段名,简称为字段名;结构的使用应是先定义后使用,即应在为结构数据分配空间之前定义;结构定义
2、中的结构名必须有且STURC和ENDS前的结构名必须一致。第7章 复杂汇编程序设计例例7-1 SAFY STRUC NO DB?NAME DB ABCDEFG SAGE DW?DEP DB COMPUTER SAFY ENDS 在结构SAFY中,定义了4个字段,分别是NO、NAME、DEP和SAGE字段,字段NO、NAME和DEP是字节型数据,SAGE是字型数据。第7章 复杂汇编程序设计7.1.2 结构的存储分配和预置结构的存储分配和预置 结构定义仅仅是告诉汇编程序存在这样一种形式的变量,只有进行结构的存储分配和预置后,才使结构变量真正占有内存,也才能使用结构变量。格式:结构变量名 结构名 功
3、能:为结构变量分配存储空间及初始化。第7章 复杂汇编程序设计说明:说明:(1)结构名是结构定义时用的名字,结构变量名与具体的存储空间及数据相联系,程序中可以直接引用它;(2)字段值表用来给结构变量赋初值。规定如下:各字段值的排列顺序及类型应与结构定义时相一致,中间以逗号分隔;如果采用在结构定义时的初值,仅写一个逗号即可,若所有字段均采用在结构定义时的初值,仅写一个尖括号即可;只有在结构定义中具有一项数据的字段(包括字符串字段)才可重新赋初值;在结构预置中,若分配给结构的数据有多个且相同,可以使用DUP操作符;尖括号什么时侯也不可省略。第7章 复杂汇编程序设计例例7-2A1 SAFY A2 SA
4、FY其中,A1 SAFY仅对SAFY结构中的NO、NAME和SAGE这3个字段赋初值,第4个字段采用结构定义时的值;对A2 SAFY而言,是采用结构定义时的初值。已经定义了一个结构之后,就可以通过结构的存储分配和预置得到多个结构变量。如前所述,可将学生简历定义为一个结构,根据每个学生的情况组成多个字段值表,再用多条结构预置语句就可以产生每个学生的登记表。第7章 复杂汇编程序设计7.1.3 结构及其字段的引用结构及其字段的引用 要访问结构变量,可以直接写结构变量名。要访问结构变量中某一字段,可采用两种方法:(1)结构变量名结构字段名;(2)预先将结构变量的起始地址、偏移量送往某个地址寄存器,再用
5、地址寄存器名代替结构变量名。第7章 复杂汇编程序设计例例7-3 MOV AL,A1.NO ;结构变量的访问采用“结构变量名结构字段名”的方法或 MOV BX,OFFSET A1 ;结构变量的访问采用预先将结构变量的起始地址,MOV AL,BX.NO ;偏移量送BX地址寄存器,再用BX代替A1的方法第7章 复杂汇编程序设计例例7-4 引用结构,在数据段定义和预置结构,在代码段引用结构。;定义结构 LIKE STRUC TO DW 0 FRM DW?INO DB 99 DUP(?)LIKE ENDS ;存储分配和预置结构 MAS LIKE TXN LIKE CHA LIKE 500 DUP();预
6、置500个结构变量 ;将CHA中所有FRM字段预置0第7章 复杂汇编程序设计 MOV BX,OFFSET CHA MOV BX.FRM,0 MOV SI,TYPE CHA ;SI一个结构的字节数 MOV CX,LENGTH CHA-1 ;CX结构变量个数-1PLG:MOV BX*SIFRM,0 ADD BX,SI LOOP PLG ;将MAS中FRM字段改为TXN中TO字段的值 MOV AX,TXN.TO MOV MAS.FRH,AX第7章 复杂汇编程序设计结构在以下几种场合特别适用:多次定位同样的存储格式;单个文件多重缓冲;列表处理;栈寻址。第7章 复杂汇编程序设计7.2 记记 录录7.2.
7、1 记录的概念和定义记录的概念和定义格式:记录名 RECORD字段名:宽度=表达式,功能:定义记录类型的数据。第7章 复杂汇编程序设计说明:说明:记录名和字段名必须具有惟一性。宽度表示相应字段所占的位数(116位)。如果各字段的宽度和大于8位,那么汇编程序按字处理,否则按字节处理。若所定义的总位数少于8位或16位,那么所有字段就靠右对齐到字节或字的最低有效位位置。表达式是赋给相应字段的初值,可以省略。若某字段的位数为7时,可定义为一字符。如FID:7=A。第7章 复杂汇编程序设计 例例7-5 使用记录类型变量描述工作人员的情况。其中工龄占6位,性别占1位(0表示男,1表示女),健康状况占1位(
8、0表示健康,1表示不健康)。定义的记录如下:STATUS RECORD AGE:635,SEX:1,STAU:10该记录定义了一个占1个字节,有3个位域的记录类型。AGE位域初值为35,STAU位域初值为0,SEX位域初值未指出,被认为是0。该记录各位域在这1个字节中的分配形式为第7章 复杂汇编程序设计 1 0 0 0 1 1 0 0b7 b6 b5 b4 b3 b2 b1 b0 AGE SEX STAU第7章 复杂汇编程序设计7.2.2 记录的存储分配和预置记录的存储分配和预置 与结构定义一样,记录定义只提供一个记录的模板,只有经过存储分配和预置后,才真正占有内存。格式:记录变量名 记录名
9、功能:为记录变量分配存储空间及初始化。说明:字段值表是赋给各字段的初值,用尖括号括起,各项间用逗号分隔;各项的顺序应与记录定义时相一致,若某一或某几个字段都采用记录定义时的初值,对应项可省略,仅写逗号即可,若仅写尖括号,表示全部采用定义时的初值。第7章 复杂汇编程序设计例例7-6 ZHA STATUS WAN STATUS 将在存储器中分配两个记录变量ZHA(其值为22H)和WAN(其值为43H)。第7章 复杂汇编程序设计7.2.3 记录操作符记录操作符 对记录进行操作的专用操作符有3个:WIDTH、记录字段名、MASK。1)WIDTH 格式:WIDTH 记录名或记录字段名 功能:返回记录或记
10、录字段所占的位数。例7-7 MOV DH,WIDTH STATUS ;DH 8 MOV AL,WIDTH AGE ;AL 6第7章 复杂汇编程序设计 2)记录字段名 格式:这个操作符直接引用,不带操作数。功能:返回一个立即数,表示该字段移到所在记录的最右边所需的移位次数。例7-8 MOV CL,YER ;CL 2 第7章 复杂汇编程序设计 3)MASK 格式:MASK记录字段名 功能:返回一个8位或16位的二进制数,这个二进制数中相应于该字段的各位为1,其余各位为0。例7-9 MOV BL,MASK SEX ;BL 00000010B MOV BH,MASK AGE ;BH 11111100B
11、 记录操作符可以与运算符NOT、OR、AND及操作符SHL(左移)、SHR(右移)配合使用。第7章 复杂汇编程序设计例例7-10 MOV CH,NOT MASK SEX ;CH 11111101B MOV CL,12 SHL SEX ;CL 12左移1位第7章 复杂汇编程序设计7.2.4 记录及其字段的引用记录及其字段的引用利用各种记录操作符,可对记录及其字段进行操作。例例7-11 下述程序可根据工作人员的条件做不同的安排,条件是:工龄10年,女性和健康。WAN DB?BTRC RECORD YER:6,SEX:1,STAU:1 ;判断工作人员是否满足指定的条件 MOV AL,WAN TEST
12、 AL,MASK SEX第7章 复杂汇编程序设计 JZ RJT TEST AL,MASK STAU JNZ RJT MOV CL,YER SHR AL,CL CMP AL,10 JL RJT ;满足条件时的安排 ;不满足条件时的安排RJT:HLT第7章 复杂汇编程序设计7.2.5 记录与结构的比较记录与结构的比较 (1)不同之处:结构用于处理按字节计算的数据信息集合,而记录用于处理按二进制位计算的数据信息集合。记录可用于定义一个字节、字或双字的记录变量集合,在这些集合中,同一字节、字或双字的不同位可能代表不同的意义;结构也是一个字节、字或双字的记录变量集合,在这些集合中,同一字节、字或双字的不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复杂 汇编程序 设计
限制150内