




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 复杂汇编程序设计,7.1 结构 7.2 记录 7.3 联合 7.4 应用举例,7.1 结 构,7.1.1 结构的定义 用STURC和ENDS把一系列数据定义语句括起来就成了一个结构。 格式: 结构名 STRUC 结构名 ENDS 功能:定义结构类型的数据,但并不真正给结构分配存储空间,只是说明包括结构名、域名及其数据类型在内的结构的类型。,说明: 结构名由用户定义,结构内数据定义语句中的变量名称为结构字段名,简称为字段名; 结构的使用应是先定义后使用,即应在为结构数据分配空间之前定义; 结构定义中的结构名必须有且STURC和ENDS前的结构名必须一致。,例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.1.2 结构的存储分配和预置 结构定义仅仅是告诉汇编程序存在这样一种形式的变量,只有进行结构的存储分配和预置后,才使结构变量真正占有内存,也才能使用结构变量。 格式: 结构变量名 结构名 功能:为结构变量分配存储空间及初始化。,说明: (1) 结构名是结构定义时用的名字,结构变量名与具体的存储空间及数据相联系,程序中可以直接引用它; (2) 字段值表用来给结构变量赋初值。规定如下: 各字段值的排列顺序及类型应与结构定义时相一致,中间以逗号分隔; 如果采用在结构定义时的初值,仅写一个逗号即可,若所有字段均采用在结构定义时的初值,仅写一个尖括号即可; 只有在结构定义中具有一项数据的字段(包括字符串字段)才可重新赋初值; 在结构预置中,若分配给结构的数据有多个且相同,可以使用DUP操作符; 尖括号什么时侯也不可省略。,例7-2 A1 SAFY A2 SAFY 其中,A1 SAFY仅对SAFY结构中的NO、NAME和SAGE这3个字段赋初值,第4个字段采用结构定义时的值;对A2 SAFY而言,是采用结构定义时的初值。 已经定义了一个结构之后,就可以通过结构的存储分配和预置得到多个结构变量。如前所述,可将学生简历定义为一个结构,根据每个学生的情况组成多个字段值表,再用多条结构预置语句就可以产生每个学生的登记表。,7.1.3 结构及其字段的引用 要访问结构变量,可以直接写结构变量名。要访问结构变量中某一字段,可采用两种方法: (1) 结构变量名结构字段名; (2) 预先将结构变量的起始地址、偏移量送往某个地址寄存器,再用地址寄存器名代替结构变量名。,例7-3 MOV AL,A1.NO ;结构变量的访问采用“结构变量名结构字段名”的方法 或 MOV BX,OFFSET A1 ;结构变量的访问采用预先将结构变量的起始地址, MOV AL,BX.NO ;偏移量送BX地址寄存器,再用BX代替A1的方法,例7-4 引用结构,在数据段定义和预置结构,在代码段引用结构。 ;定义结构 LIKE STRUC TO DW 0 FRM DW ? INO DB 99 DUP(?) LIKE ENDS ;存储分配和预置结构 MAS LIKE TXN LIKE CHA LIKE 500 DUP() ;预置500个结构变量 ;将CHA中所有FRM字段预置0,MOV BX,OFFSET CHA MOV BX.FRM,0 MOV SI,TYPE CHA ;SI一个结构的字节数 MOV CX,LENGTH CHA-1 ;CX结构变量个数-1 PLG:MOV BX*SIFRM,0 ADD BX,SI LOOP PLG ;将MAS中FRM字段改为TXN中TO字段的值 MOV AX,TXN.TO MOV MAS.FRH,AX,结构在以下几种场合特别适用: 多次定位同样的存储格式; 单个文件多重缓冲; 列表处理; 栈寻址。,7.2 记 录,7.2.1 记录的概念和定义 格式: 记录名 RECORD字段名:宽度=表达式, 功能:定义记录类型的数据。,说明: 记录名和字段名必须具有惟一性。 宽度表示相应字段所占的位数(116位)。如果各字段的宽度和大于8位,那么汇编程序按字处理,否则按字节处理。若所定义的总位数少于8位或16位,那么所有字段就靠右对齐到字节或字的最低有效位位置。 表达式是赋给相应字段的初值,可以省略。 若某字段的位数为7时,可定义为一字符。如FID:7=A。,例7-5 使用记录类型变量描述工作人员的情况。其中工龄占6位,性别占1位(0表示男,1表示女),健康状况占1位(0表示健康,1表示不健康)。 定义的记录如下: STATUS RECORD AGE:635,SEX:1,STAU:10 该记录定义了一个占1个字节,有3个位域的记录类型。AGE位域初值为35,STAU位域初值为0,SEX位域初值未指出,被认为是0。该记录各位域在这1个字节中的分配形式为,7.2.2 记录的存储分配和预置 与结构定义一样,记录定义只提供一个记录的模板,只有经过存储分配和预置后,才真正占有内存。 格式: 记录变量名 记录名 功能:为记录变量分配存储空间及初始化。 说明: 字段值表是赋给各字段的初值,用尖括号括起,各项间用逗号分隔; 各项的顺序应与记录定义时相一致,若某一或某几个字段都采用记录定义时的初值,对应项可省略,仅写逗号即可,若仅写尖括号,表示全部采用定义时的初值。,例7-6 ZHA STATUS WAN STATUS 将在存储器中分配两个记录变量ZHA(其值为22H)和WAN(其值为43H)。,7.2.3 记录操作符 对记录进行操作的专用操作符有3个:WIDTH、记录字段名、MASK。 1) WIDTH 格式:WIDTH 记录名或记录字段名 功能:返回记录或记录字段所占的位数。 例7-7 MOV DH,WIDTH STATUS ;DH 8 MOV AL,WIDTH AGE ;AL 6,2) 记录字段名 格式:这个操作符直接引用,不带操作数。 功能:返回一个立即数,表示该字段移到所在记录的最右边所需的移位次数。 例7-8 MOV CL,YER ;CL 2,3) MASK 格式:MASK记录字段名 功能:返回一个8位或16位的二进制数,这个二进制数中相应于该字段的各位为1,其余各位为0。 例7-9 MOV BL,MASK SEX ;BL 00000010B MOV BH,MASK AGE ;BH 11111100B 记录操作符可以与运算符NOT、OR、AND及操作符SHL(左移)、SHR(右移)配合使用。,例7-10 MOV CH,NOT MASK SEX ;CH 11111101B MOV CL,12 SHL SEX ;CL 12左移1位,7.2.4 记录及其字段的引用 利用各种记录操作符,可对记录及其字段进行操作。 例7-11 下述程序可根据工作人员的条件做不同的安排,条件是: 工龄10年,女性和健康。 WAN DB ? BTRC RECORD YER:6,SEX:1,STAU:1 ;判断工作人员是否满足指定的条件 MOV AL,WAN TEST AL,MASK SEX,7.2.5 记录与结构的比较 (1) 不同之处:结构用于处理按字节计算的数据信息集合,而记录用于处理按二进制位计算的数据信息集合。记录可用于定义一个字节、字或双字的记录变量集合,在这些集合中,同一字节、字或双字的不同位可能代表不同的意义;结构也是一个字节、字或双字的记录变量集合,在这些集合中,同一字节、字或双字的不同位代表的意义相同,且同一字节、字或双字是作为一个整体使用的。 (2) 相同之处:记录与结构都是汇编语言提供给用户自定义的数据结构,无论是定义结构,还是定义记录,应分别使用结构定义伪指令语句和记录定义伪指令语句。,7.3 联 合,7.3.1 联合的概念和定义 联合也是一种结构性数据,是对结构定义的一个补充,它与结构可同时使用,是MASM 6.0新增的一种结构性数据,可嵌套使用。同结构数据语句一样,联合数据语句也必须先定义内存数据结构形式,然后按数据定义伪指令的使用方式,用它定义联合变量并赋初值。,说明:UNION/ENDS为系统规定的保留字,联合名和域为用户定义的名字。每个域用一条数据伪指令定义,一般不应有初值。从格式可看出,UNION与STRUC的定义类似,只是域的偏移地址不同:STRUC中的域是相对于结构顺序分配的;而UNION中的域则是相对于联合重叠分配的,其偏移地址均为0,所以域中不应有初值,如果有初值,汇编时只保留第一个域的初值。,例7-12 一个联合类型的说明。 UNINAME UNION XX DB ? YY DW ? ZZ DD ? UNINAME ENDS,7.3.3 联合变量的说明与赋初值 格式:变量名 联合名 功能:定义一个联合变量,分配存储空间并给它的各域变量赋初值。 说明:联合变量及域值表的说明与结构变量的一样,赋值规定也一致。,例7-13 使用例7-12定义的联合“UNINAME”,再定义下列联合变量: VAR UNINAME 其中各个域的变量为:VAR.XX、VAR.YY、VAR.ZZ,并赋给了如下初值: (VAR.XX)21H (VAR.YY)2143H (VAR.ZZ)21436587H,7.4 应 用 举 例,例7-14 描述学生基本情况的结构的定义和引用。 STUDENT STRUC ;定义数据结构 STU_NO DD 9703001H ;学号 SNAME DB 王美云 ;姓名 SEX DB 0 ;性别:0,女;1,男 AGE DB 20 ;年龄 POLITICA DB 团员 ;政治面貌 CREDIT DW 120 ;成绩,STU1 STUDENT ;定义6个结构变量 STT2 STUDENT STU3 STUDENT STU4 STUDENT STU5 STUDENT STU6 STUDENT DSEG ENDS CODE SEGMENT PARA PUBLIC CODE ASSUME CS:CODE,DS:DSEG START: MOV AX,STU1.CREDIT ;比较王美云和张皋笠的成绩 CMP AX,STU6.CREDIT CODE ENDS END START,例7-15 日期结构的定义和引用。 DATE STRUC ;定义一个日期的数据结构 MONTH DB ? ;月 DAY DB ? ;日 YEAR DW ? ;年 DATE ENDS .DATA YESTERDAY DATE ;定义结构变量 TODAY DATE TOMORROW DATE ,.CODE MOV AL,YESTERDAY.DAY ;取结构中的一个域 MOV AH,TODAY.MONTH MOV DX,2003 MOV TODAY.YEAR,DX ;改写结构中的一个域 MOV BX,OFFSET YESTERDAY ;取结构的基地址 MOV AX,BX.YEAR ;YEAR是相对于结构基址的偏移量 需要特别说明的是,联合和结构均可以嵌套,既可以结构套结构,联合套联合,又可以结构和联合相互嵌套。,例7-16 结构定义的嵌套,即一个结构域中可有另一结构的变量。 FUN STRUC X DW ? Y DW 200 FUN ENDS EXTR STRUC EXX FUN EYY FUN MN DB 5678 EXTR ENDS,例7-17 联合定义的嵌套,即一个联合中的域可有另一联合的变量。设UNNAME是一个已定义的联合。 UNNAME UNION UBYTE DB ? UDD UNINAME UZL DW ? UNNAME ENDS,例7-18 结构和联合定义的相互嵌套,即结构或联合的定义中的域可以是联合变量或结构变量,甚至可以是结构或联合的定义。 UNAS UNION ;定义联合UNAS STRUC ;UNAS中的域为两个结构定义 M1 DW ? M2 DD ? ENDS STRUC N1 DB ?,N2 DD ? ENDS UNAS ENDS LABA UNAS ;定义联合变量LABA,其中,M1和M2的偏移地址不同,N1和N2的偏移地址也不同。但是M1与N1的偏移地址相同,即M1、M2与N1、N2共享同一存储空间。该定义适用于面向对象程序设计的结构,还常用于I/O端口的描述。对域变量的访问可用下面形式: LABA.M1,LABA.M2,LABA.N1,LABA.N2 或用间接存储器变量形式: MOV BX,OFFSET TLABA MOV AX,BX.M1,例7-19 用STRUC伪指令定义的参数表NAMELIST如下: NAMELIST STRUC MAXLEN DB 100 ACTLEN DB ? NAMEIN DB 100 DUP NAMELIST ENDS,(1) 请用结构预置语句分配此结构的存储区。 (2) 编写一段指令,从键盘输入字符存入结构中,然后将输入的字符数送入DISPFILE单元中。 解:(1) 用结构预置语句分配结构存储区为 STUDENTS NAMELIST 其中STUDENTS为假设的变量名。,(2) 按照要求编写程序段如下: MOV AH,0AH ;从键盘输入字符 LEA DX,STUDENTS INT 21H MOV AL,STUDENTS.ACTLEN ;将字符送DISPFILE MOV DISPFILE,AL,习 题 七,7.1 为结构类型PARAMS分配存储空间,并采用原缺省值,结构变量名为APROC;为结构类型POLAR分配存储空间,并赋初值。,7.2 结构类型OVERRIDABLE的定义如下: OVERRIDABLE STRUC ASTRING DB DONTCARE DW AREAL DD OVERRIDABLE ENDS VARO是OVERRIDABLE类型变量,试给出OVERRIDABLE每个域的初始值,并为VARO变量赋值,使其域的缺省值可以被替换。,7.3 结构类型NONOVERRIDE的定义如下: NONOVERRIDE STRUC ALIST DB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓储物流信息化管理与运输服务合同
- 跨国公司境内股权转让及税务筹划协议
- 生态柴油购销合同范本与规范
- 成都租赁合同(含租客租后押金退还)
- 民宿民宿风格改造装修合同
- 互联网保险保本投资协议
- 北京二手房交易税费减免咨询与代理合同
- 餐饮店拆伙协议及员工安置合同
- 时尚购物广场门面房租赁与品牌合作合同
- 肿瘤的影像学诊断
- 广东省广州市天河区2023-2024学年八年级下学期期末历史试卷(含答案)
- 2025-2030年中国有机肥料行业市场投资分析及未来发展趋势预测研究报告
- AI技术赋能中小学教学模式创新与实践研究
- 山西焦煤集团招聘笔试题库2025
- 2025汾西矿业井下操作技能人员招聘300人(山西)笔试参考题库附带答案详解析
- 健康吃肉课件
- 《国家粮食和物资储备局垂直管理系统重大生产安全事故隐患判定标准(试行)》解读与培训
- 2025至2030年中国速冻豆角行业投资前景及策略咨询报告
- (2025)交管12123驾驶证学法减分题库含答案大全
- 学校食堂合同范本模板
- 2025年卫生类事业单位(医学基础知识)公开招聘必刷题库(300题)
评论
0/150
提交评论