汇编语言程序设计第7章_第1页
汇编语言程序设计第7章_第2页
汇编语言程序设计第7章_第3页
汇编语言程序设计第7章_第4页
汇编语言程序设计第7章_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章复杂汇编程序设计 7 1结构7 2记录7 3联合7 4应用举例 7 1结构 7 1 1结构的定义用STURC和ENDS把一系列数据定义语句括起来就成了一个结构 格式 结构名STRUC结构名ENDS功能 定义结构类型的数据 但并不真正给结构分配存储空间 只是说明包括结构名 域名及其数据类型在内的结构的类型 说明 结构名由用户定义 结构内数据定义语句中的变量名称为结构字段名 简称为字段名 结构的使用应是先定义后使用 即应在为结构数据分配空间之前定义 结构定义中的结构名必须有且STURC和ENDS前的结构名必须一致 例7 1SAFYSTRUCNODB NAMEDB ABCDEFG SAGEDW DEPDB COMPUTER SAFYENDS在结构SAFY中 定义了4个字段 分别是NO NAME DEP和SAGE字段 字段NO NAME和DEP是字节型数据 SAGE是字型数据 7 1 2结构的存储分配和预置结构定义仅仅是告诉汇编程序存在这样一种形式的变量 只有进行结构的存储分配和预置后 才使结构变量真正占有内存 也才能使用结构变量 格式 结构变量名结构名功能 为结构变量分配存储空间及初始化 说明 1 结构名是结构定义时用的名字 结构变量名与具体的存储空间及数据相联系 程序中可以直接引用它 2 字段值表用来给结构变量赋初值 规定如下 各字段值的排列顺序及类型应与结构定义时相一致 中间以逗号分隔 如果采用在结构定义时的初值 仅写一个逗号即可 若所有字段均采用在结构定义时的初值 仅写一个尖括号即可 只有在结构定义中具有一项数据的字段 包括字符串字段 才可重新赋初值 在结构预置中 若分配给结构的数据有多个且相同 可以使用DUP操作符 尖括号什么时侯也不可省略 例7 2A1SAFYA2SAFY其中 A1SAFY仅对SAFY结构中的NO NAME和SAGE这3个字段赋初值 第4个字段采用结构定义时的值 对A2SAFY而言 是采用结构定义时的初值 已经定义了一个结构之后 就可以通过结构的存储分配和预置得到多个结构变量 如前所述 可将学生简历定义为一个结构 根据每个学生的情况组成多个字段值表 再用多条结构预置语句就可以产生每个学生的登记表 7 1 3结构及其字段的引用要访问结构变量 可以直接写结构变量名 要访问结构变量中某一字段 可采用两种方法 1 结构变量名 结构字段名 2 预先将结构变量的起始地址 偏移量送往某个地址寄存器 再用 地址寄存器名 代替结构变量名 例7 3MOVAL A1 NO 结构变量的访问采用 结构变量名 结构字段名 的方法或MOVBX OFFSETA1 结构变量的访问采用预先将结构变量的起始地址 MOVAL BX NO 偏移量送BX地址寄存器 再用 BX 代替A1的方法 例7 4引用结构 在数据段定义和预置结构 在代码段引用结构 定义结构LIKESTRUCTODW0FRMDW INODB99DUP LIKEENDS 存储分配和预置结构MASLIKETXNLIKECHALIKE500DUP 预置500个结构变量 将CHA中所有FRM字段预置0 MOVBX OFFSETCHAMOV BX FRM 0MOVSI TYPECHA SI 一个结构的字节数MOVCX LENGTHCHA 1 CX 结构变量个数 1PLG MOV BX SI FRM 0ADDBX SILOOPPLG 将MAS中FRM字段改为TXN中TO字段的值MOVAX TXN TOMOVMAS FRH AX 结构在以下几种场合特别适用 多次定位同样的存储格式 单个文件多重缓冲 列表处理 栈寻址 7 2记录 7 2 1记录的概念和定义格式 记录名RECORD字段名 宽度 表达式 功能 定义记录类型的数据 说明 记录名和字段名必须具有惟一性 宽度表示相应字段所占的位数 1 16位 如果各字段的宽度和大于8位 那么汇编程序按字处理 否则按字节处理 若所定义的总位数少于8位或16位 那么所有字段就靠右对齐到字节或字的最低有效位位置 表达式是赋给相应字段的初值 可以省略 若某字段的位数为7时 可定义为一字符 如FID 7 A 例7 5使用记录类型变量描述工作人员的情况 其中工龄占6位 性别占1位 0表示男 1表示女 健康状况占1位 0表示健康 1表示不健康 定义的记录如下 STATUSRECORDAGE 6 35 SEX 1 STAU 1 0该记录定义了一个占1个字节 有3个位域的记录类型 AGE位域初值为35 STAU位域初值为0 SEX位域初值未指出 被认为是0 该记录各位域在这1个字节中的分配形式为 7 2 2记录的存储分配和预置与结构定义一样 记录定义只提供一个记录的模板 只有经过存储分配和预置后 才真正占有内存 格式 记录变量名记录名功能 为记录变量分配存储空间及初始化 说明 字段值表是赋给各字段的初值 用尖括号括起 各项间用逗号分隔 各项的顺序应与记录定义时相一致 若某一或某几个字段都采用记录定义时的初值 对应项可省略 仅写逗号即可 若仅写尖括号 表示全部采用定义时的初值 例7 6ZHASTATUSWANSTATUS将在存储器中分配两个记录变量ZHA 其值为22H 和WAN 其值为43H 7 2 3记录操作符对记录进行操作的专用操作符有3个 WIDTH 记录字段名 MASK 1 WIDTH格式 WIDTH记录名或记录字段名功能 返回记录或记录字段所占的位数 例7 7MOVDH WIDTHSTATUS DH 8MOVAL WIDTHAGE AL 6 2 记录字段名格式 这个操作符直接引用 不带操作数 功能 返回一个立即数 表示该字段移到所在记录的最右边所需的移位次数 例7 8MOVCL YER CL 2 3 MASK格式 MASK记录字段名功能 返回一个8位或16位的二进制数 这个二进制数中相应于该字段的各位为1 其余各位为0 例7 9MOVBL MASKSEX BL 00000010BMOVBH MASKAGE BH 11111100B记录操作符可以与运算符NOT OR AND及操作符SHL 左移 SHR 右移 配合使用 例7 10MOVCH NOTMASKSEX CH 11111101BMOVCL 12SHLSEX CL 12左移1位 7 2 4记录及其字段的引用利用各种记录操作符 可对记录及其字段进行操作 例7 11下述程序可根据工作人员的条件做不同的安排 条件是 工龄 10年 女性和健康 WANDB BTRCRECORDYER 6 SEX 1 STAU 1 判断工作人员是否满足指定的条件MOVAL WANTESTAL MASKSEX 7 2 5记录与结构的比较 1 不同之处 结构用于处理按字节计算的数据信息集合 而记录用于处理按二进制位计算的数据信息集合 记录可用于定义一个字节 字或双字的记录变量集合 在这些集合中 同一字节 字或双字的不同位可能代表不同的意义 结构也是一个字节 字或双字的记录变量集合 在这些集合中 同一字节 字或双字的不同位代表的意义相同 且同一字节 字或双字是作为一个整体使用的 2 相同之处 记录与结构都是汇编语言提供给用户自定义的数据结构 无论是定义结构 还是定义记录 应分别使用结构定义伪指令语句和记录定义伪指令语句 7 3联合 7 3 1联合的概念和定义联合也是一种结构性数据 是对结构定义的一个补充 它与结构可同时使用 是MASM6 0新增的一种结构性数据 可嵌套使用 同结构数据语句一样 联合数据语句也必须先定义内存数据结构形式 然后按数据定义伪指令的使用方式 用它定义联合变量并赋初值 说明 UNION ENDS为系统规定的保留字 联合名和域为用户定义的名字 每个域用一条数据伪指令定义 一般不应有初值 从格式可看出 UNION与STRUC的定义类似 只是域的偏移地址不同 STRUC中的域是相对于结构顺序分配的 而UNION中的域则是相对于联合重叠分配的 其偏移地址均为0 所以域中不应有初值 如果有初值 汇编时只保留第一个域的初值 例7 12一个联合类型的说明 UNINAMEUNIONXXDB YYDW ZZDD UNINAMEENDS 7 3 3联合变量的说明与赋初值格式 变量名联合名功能 定义一个联合变量 分配存储空间并给它的各域变量赋初值 说明 联合变量及域值表的说明与结构变量的一样 赋值规定也一致 例7 13使用例7 12定义的联合 UNINAME 再定义下列联合变量 VARUNINAME其中各个域的变量为 VAR XX VAR YY VAR ZZ 并赋给了如下初值 VAR XX 21H VAR YY 2143H VAR ZZ 21436587H 7 4应用举例 例7 14描述学生基本情况的结构的定义和引用 STUDENTSTRUC 定义数据结构STU NODD9703001H 学号SNAMEDB 王美云 姓名SEXDB0 性别 0 女 1 男AGEDB20 年龄POLITICADB 团员 政治面貌CREDITDW120 成绩 STU1STUDENT 定义6个结构变量STT2STUDENTSTU3STUDENTSTU4STUDENTSTU5STUDENTSTU6STUDENTDSEGENDSCODESEGMENTPARAPUBLIC CODE ASSUMECS CODE DS DSEGSTART MOVAX STU1 CREDIT 比较王美云和张皋笠的成绩CMPAX STU6 CREDITCODEENDSENDSTART 例7 15日期结构的定义和引用 DATESTRUC 定义一个日期的数据结构MONTHDB 月DAYDB 日YEARDW 年DATEENDS DATAYESTERDAYDATE 定义结构变量TODAYDATETOMORROWDATE CODEMOVAL YESTERDAY DAY 取结构中的一个域MOVAH TODAY MONTHMOVDX 2003MOVTODAY YEAR DX 改写结构中的一个域MOVBX OFFSETYESTERDAY 取结构的基地址MOVAX BX YEAR YEAR是相对于结构基址的偏移量需要特别说明的是 联合和结构均可以嵌套 既可以结构套结构 联合套联合 又可以结构和联合相互嵌套 例7 16结构定义的嵌套 即一个结构域中可有另一结构的变量 FUNSTRUCXDW YDW200FUNENDSEXTRSTRUCEXXFUNEYYFUNMNDB 5678 EXTRENDS 例7 17联合定义的嵌套 即一个联合中的域可有另一联合的变量 设UNNAME是一个已定义的联合 UNNAMEUNIONUBYTEDB UDDUNINAMEUZLDW UNNAMEENDS 例7 18结构和联合定义的相互嵌套 即结构或联合的定义中的域可以是联合变量或结构变量 甚至可以是结构或联合的定义 UNASUNION 定义联合UNASSTRUC UNAS中的域为两个结构定义M1DW M2DD ENDSSTRUCN1DB N2DD ENDSUNASENDSLABAUNAS 定义联合变量LABA 其中 M1和M2的偏移地址不同 N1和N2的偏移地址也不同 但是M1与N1的偏移地址相同 即M1 M2与N1 N2共享同一存储空间 该定义适用于面向对象程序设计的结构 还常用于I O端口的描述 对域变量的访问可用下面形式 LABA M1 LABA M2 LABA N1 LABA N2或用间接存储器变量形式 MOVBX OFFSETTLABAMOVAX BX M1 例7 19用STRUC伪指令定义的参数表NAMELIST如下 NAMELISTSTRUCMAXLENDB100ACTLENDB NAMEINDB100DUPNAMELISTENDS 1 请用结构预置语句分配此结构的存储区 2 编写一段指令 从键盘输入字符存入结构中 然后将输入的字符数送入DISPFILE单元中 解 1 用结构预置语句分配结构存储区为STUDENTSNAMELIST其中STUDENTS为假设的变量名 2 按照要求编写程序段如下 MOVAH 0AH 从键盘输入字符LEADX STUDENTSINT21HMOVAL STUDENTS ACTLEN 将字符送DISPFILEMOVDISPFILE AL 习题七 7 1为结构类型PARAMS分配存储空间 并采用原缺省值 结构变量名为APROC 为结构类型POLAR分配存储空间 并赋初值 7 2结构类型OVERRIDABLE的定义如下 OVERRIDABLESTRUCASTRINGDBDONTCAREDWAREALDDOVERRIDABLEENDSVARO是OVERRIDABLE类型变量 试给出OVERRIDABLE每个域的初始值 并为VARO变量赋值 使其域的缺省值可以被替换 7 3结构类型NONOVERRIDE的定义如下 NONOVERRIDESTRUCALISTDBADUPDWNONOVERRIDEENDS试给出NONOVERRIDE每个域的初始值 使其域的缺省值是不能替换的 7 4用STRUC伪指令定义的参数表NAMELIST如下 NAMELISTSTRUCMAXLENDB100ACTLENDB NAMEINDB100DUP NAMELISTENDS 1 用结构预置语句分配此结构的存储区 2 编写一段指令 从键盘输入字符存入结构中 然后将输入的字符数送入DISPFILE单元中 7 5利用结构的概念定义并分配一个通信录 7 6定义一个长度为DWORD的记录类型 若ERRFLAG是一个DWORD的记录类型且定义如下 ERRFLAGRECORDIO 3 0 SYS 3 0 MEM 24

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论