汇编-第6章.ppt
《汇编-第6章.ppt》由会员分享,可在线阅读,更多相关《汇编-第6章.ppt(32页珍藏版)》请在三一文库上搜索。
1、第6章 结构与记录,6.1 结构 6.2记录,6.1 结构 611结构的概念 逻辑上互相关联的一组数据以某种形式组合在一起就是结构。在程序中,若要多次使用相同的一组数据格式,就可以把这一组数据格式定义为一个结构。结构定义仅仅是一种对存储形式的描述,并不真正分配存储空间。结构一经定义就可以以此结构如同DB、DW、DD一样用来预置和分配变量的存储空间。 612 结构的定义 在一个程序中,使用结构前必须用结构伪指令STRUC/ENDS先定义。结构伪指令的使用格式如下: 结构名 STRUC ,结构名 ENDS 其中结构名是标识符,不能缺省,且在一源程序中必须是唯一的。数据定义语句序列是用DB,DW或D
2、D定义结构中各字段(Fields),这些语句中的变量名叫结构字段名。 每一个结构字段名有局部偏移量及类型的属性。局部偏移量是指结构字段的第一个字节与结构起点之间的字节数,类型仍然是指字节、字或双字。例如定义一个结构: STUDENT STRUC NAME DB 0123456789ABCDEF SEX DB 0 CITY DB 20H DUP(?) ID DW ?,FACE DB ? STUDENT END 上述结构中NAME、SEX、CITY、ID、FACE分别是结构STUDENT的字段名,它们的局部偏移量分别是0,l0H,11H,31H,33H。结构中各字段可以指定具体的数值或字符作为结构
3、字段的初值。用伪指令STRUCENDS定义的结构,不产生任何目标代码,因而也不分配存储单元。 注意标记一个结构类型结束的伪指令与标记一个段结束的伪指令用相同的助记符ENDS,汇编程序通过上下文理解ENDS的含义,因此要确保每一SEGMENT伪指令和每一STRUC伪指令有各自对应的ENDS伪指令。,613 结构的预置与存储分配 当结构定义后,我们可在程序中直接引用结构名,为结构预置副本,定义结构变量,分配存存储空间。结构变量定义格式为: 结构变量名 结构名 其中,结构名是用STRUCENDS伪指令定义结构时的结构名。结构变量名是当前定义的结构变量的名称,它同其他变量一样有三个属性:段、偏移量和类
4、型属性。段、偏移量表示结构变量的地址,类型表示结构的总字节数。字段值表为结构变量中各字段进行预置,其中各字段值的排列顺序及类型应与结构定义时各字段相一致,中间以逗号分隔。如果某个字段采用在说明结构时所给定缺省的初值,那么可简单地用逗号表示;如果结构变量的所有字段均如此,那么可省去字段值表,但尖括号不能省略。,例如,假设已说明了上述结构STUDENT ,那么可定义如下结构变量: DATA SEGMENT STD1 STUDENT STD2 STUDENT ,STD3 STUDENT STD4 STUDENT 10H DUP() DATA ENDS 在上述结构预置中,结构变量STDl对结构中所有字
5、段不加修改,保留各字段的初值。结构变量STD2仅修改第一个字段,其余各字段保留其初值。结构变量STD3除第三个字段(字段名为CITY)外,其余各字段均作修改。按照上述结构变量的定义,变量STDl,STD2和STD3的存储空间分配情况如下图所示。,对结构字段初值的修改,并非所有字段的初值都可以修改,只有简单结构字段和字符串字段初值才可以修改。所谓简单结构字段就是由伪指令DB,DW或DD定义的单项变量,如结构STUDENT中SEX,ID,FACE就是只有单项的简单结构字段。而NAME是用DB伪指令定义的字符串,也可以用其他字符串进行修改。而多项(多重)变量的结构字段初值(如CITY)不能修改。例如
6、下面就是多项(多重)的结构字段: DB 10H DUP(?) DW 1234H,5678H,0ABCDH,DB ABCD,EFGH DW BUF,CUT 结构变量名STD4同时预置10H个结构副本,每一个副本中都是仅修改第二个字段初值,其余保留不变。这10H个结构数据在分配存储空间时,依次存放。,614 结构变量及其字段的访问 通过结构变量名可直接存取结构变量,如果要访问结构变量中的某一字段,需使用结构字段运算符“.”,该运算符使用格式如下: 结构变量名结构字段名 例如: STDl.NAME ;表示结构变量STDl中的NAME字段 STD2.ID ;表示结构变量STD2中的ID字段,STD3.
7、SEX ;表示结构变量STD3中的SEX字段 在结构变量字段名前加运算符与一般变量名前加运算符有相同意义。例如: MOV DI,OFFSET STD1.NAMEl3 ;DI34H MOV CX,TYPE STD2.ID ;CX2 MOV CX,TYPE STD3.FACE ;CX1 为传送结构变量STD1的 NAME字段的第个字符给AL,可以用:,MOV BX,OFFSET STD1 MOV AL,BX.NAME 或者 MOV AL,STD2.NAME 若要取出结构变量STD4中的第五个副本的NAME字段的第5个字符,可用下面的指令序列: MOV BX,OFFSET STD4 ADD BX,T
8、YPE STD4,MOV AL,BXNAME4 与一般变量一样,结构变量也可作为一条指令的操作数,不过使用某些运算符时有不同的意义。当结构变量前面使用运算符时,运算符TYPE所表示的是结构所占的总字节数。其他运算符(如OFFSET,LENGTH,SIZE等)所表示的意义与一般变量的使用相同。例如: MOV AX,TYPE STD3 ;BX34H MOV CX,LENGTH STD4 ;CX10H MOV DX,SIZE STDl ;DX34H MOV BX,OFFSET STDl ;BX0 MOV BX,OFFSET STD2 ;BX34H,615 程序举例 例61 下面定义一学生的成绩结构,
9、其中SClSC5是五个连续字段,分别存储每个学生五门课程的成绩;AVER字段记录该学生的平均成绩。在数据段中已预置20位学生的结构副本。另有程序已完成20位学生成绩的录入。现要求编制一子程序计算每位学生五门课程的平均成绩并送入相应的AVER字段中。结构定义及数据段中结构预置如下: STD_SCOR STRUC : :,SC1 DB ? SC2 DB ? SC3 DB ? SC4 DB ? SC5 DB ? AVER DB 0 : : STD_SCOR ENDS,: CLASS_SCOR STD_SCOR 30 DUP() 由于记录每位学生五门课程成绩的字段是连续的,因此只需要用一个地址指针(如
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编
链接地址:https://www.31doc.com/p-2909477.html