1 / 12

第十三章 高级汇编语言技术及其使用简介

第十三章 高级汇编语言技术及其使用简介. 第一节 结构. 结构 是把 逻辑 上互相关联的一组数据以某种形式组合在一起。在程序中, 若要多次使用相同的一组数据格式,则可把这一组数据格式定义为一个结构数据 。例如,建立学生档案,首先确定一名学生的档案,如分别用不相等字节来记载学号、姓名、性别、年龄、系别等项。 此时,这个 结构即数据格式本身并不需要占用存储单元 ,然后,可按此结构,在存储单元中布局相同的数据格式,用来记载全班所有学生的档案。 在程序中使用结构数据时,须先定义,后进行预置与分配存储单元。只有这样,才能对结构中相关数据进行存取或修改。. 1.1 结构的定义.

zasha
Download Presentation

第十三章 高级汇编语言技术及其使用简介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十三章 • 高级汇编语言技术及其使用简介

  2. 第一节 结构 • 结构是把逻辑上互相关联的一组数据以某种形式组合在一起。在程序中,若要多次使用相同的一组数据格式,则可把这一组数据格式定义为一个结构数据。例如,建立学生档案,首先确定一名学生的档案,如分别用不相等字节来记载学号、姓名、性别、年龄、系别等项。 此时,这个结构即数据格式本身并不需要占用存储单元,然后,可按此结构,在存储单元中布局相同的数据格式,用来记载全班所有学生的档案。 • 在程序中使用结构数据时,须先定义,后进行预置与分配存储单元。只有这样,才能对结构中相关数据进行存取或修改。

  3. 1.1 结构的定义 • 定义结构必须使用结构定义伪指令STRUC/ENDS。其语句格式如下: • 其中,结构名不能缺省并要满足标识符的条件,它在程序中必须是惟一的。数据定义语句序列定义了结构中的各字段,这些语句中的变量名称为字段名或域名。每个字段只能用数据定义伪指令及注释加以说明,可以有一个或几个初值。 • 每一个字段名同普通变量一样,也具有三种属性:段、局部偏移量和类型。段是指所在段的段基址,局部偏移量是指字段名的第一个字节与结构起点之间的字节数,类型仍然是指字节、字或双字。 结构名 STRUC <数据定义语句序列> 结构名 ENDS

  4. 例如,建立学生档案的结构: Student STRUC NUMBER DW? NAME DB 8 DUP(?) SEX DB ‘M’ AGE DB 20 Student ENDS • 上述结构中,结构名是Student。字段名为NUMBER、NAME、SEX和AGE,它们具有相同的段基址,局部偏移量分别为0、2、10、11,它们的类型和初值由数据定义伪指令及表达式定义。 • 定义结构只是定义了一种数据类型,即只有形式而不生成具体数据,因此宏汇编程序不产生目标代码,也就不为它分配存储单元。

  5. 1.2 结构变量的预置与存储器分配 在结构已定义后,就可直接引用结构名来预置结构变量,这时将为结构变量分配存储单元。结构变量预置语句格式如下: 其中: (1)结构名是结构定义时用的名字。 (2)结构变量名是结构变量(结构副本)的标识符,它与其它变量一样有三个属性:段、偏移量和类型属性。但类型表示的是结构的总字节数。 (3)字段值表用来给结构变量的字段赋初值,表中各字段的排列顺序及类型应与结构定义时一致。各字段间以逗号分开。 结构变量名 结构名 <字段值表>

  6. 通过结构变量预置语句,可以对结构变量的字段进行初始化,但初始化有一定的规定和限制:通过结构变量预置语句,可以对结构变量的字段进行初始化,但初始化有一定的规定和限制: • 若某些字段的内容采用定义时的初值,作为结构变量的预置隐含值,则在预置语句中对应字段的位置只写一个逗号即可。若所有字段都采用定义时的初值,则语句中仅用一对尖括号表示。 • 预置时,只能修改单项数据的字段;而不能修改用DUP定义的字段或一个字段后有多个数据项的字段。例如不能修改以下这样的结构字段: • DW 20H DUP(0) • DB 12H,34H,56H • DB ‘ABC’,‘DEF’ • DW VAR1,VAR2

  7. 例13.1.1 有以下结构定义和结构变量预置: STR STRUC VA1 DB 12H VA2 DW 10H DUP(?) VA3 DW VAR VA4 DB ‘ABC’ STR ENDS DATA SEGMENT DAW DW 123H,0A34H S1 STR < > S2 STR <20H,DAW,’DEF’> S3 STR 10H DUP(<30H>) S4 STR <30H,,’XYZ’> DATA ENDS 在此结构预置中,结构变量S1保留结构中各字段的初值。结构变量S2除不能修改VA2字段外,其余各字段均作修改。结构变量S3同时预置10H个结构副本,每一个副本中只修改第一个字段初值,其余保持不变。结构变量S4除不能修改VA2字段外,VA3字段采用了预置隐含值(逗号之间的空缺表示采用预置隐含值),其余各字段均作修改。

  8. 根据上述预置,结构变量S1、S2、S3、S4的存储空间分配情况如图13-1所示。

  9. 1.3 对结构变量及其字段的操作 在程序中引用结构变量与一般变量相同,可直接写结构变量名,来作为一条指令的操作数。若要引用结构变量中的某个字段,则使用如下形式: 也可先将结构变量起始地址的偏移量送入某个地址寄存器,再用以下形式: 例如,若要引用结构变量S2的VA3字段的第3个字符,则以下两种方法都可以: (1)MOV AL,S2.VA3[2] (2)MOV BX,OFFSET S2 MOV AL,[BX].VA3[2] 结构变量名.字段名 或 结构变量名.字段名[指定字节个数] [地址寄存器].字段名

  10. 在结构变量前使用运算符时,TYPE运算符所表示的是结构的总字节数。其它运算符如OFFSET、LENGTH、SIZE等,所表示的含义与一般变量相同。例如:在结构变量前使用运算符时,TYPE运算符所表示的是结构的总字节数。其它运算符如OFFSET、LENGTH、SIZE等,所表示的含义与一般变量相同。例如: MOV CX,TYPE S1 ;CX 26H MOV AX,ENGTH S2 ;AX 1 MOV BX,SIZE S2 ;BX 26H*1 MOV AX,LENGTH S3 ;DX 10H MOV BX,SIZE S3 ;BX 26H*10H MOV AX,TYPE S1.V2 ;AX 2

  11. 1.4 结构应用举例 定义一个学生成绩的结构,编写一个对5个学生的成绩进行管理的程序。 例13.1.2 有5个学生的姓名、学号及英语、数学、物理成绩用结构的形式存放在主存中,试编程显示数学不及格的学生的姓名。 根据题意,首先定义学生成绩的结构,然后在数据段预置5个学生的结构变量。编写的源程序如下:

  12. STUD STRUC NAME DB ‘ ’ NUM DB ? ENGLISH DB ? MATHS DB ? PHYSICS DB ? STUD ENDS DATA SEGMENT ST1 STUD <‘WANG’,1,80,78,90> ST2 STUD <‘LI’,2,60,55,70> ST3 STUD <‘SUN’,3,76,87,83> ST4 STUD <‘QIAN’,4,74,85,81> ST5 STUD <‘ZHAN’,5,70,54,65> DATA ENDS STACK0 SEGMENT PARA STACK DW 20H DUP(0) STACK0 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK0 START: MOV AX,DATA MOV DS,AX MOV CX,5 MOV SI,OFFSET ST1 ;SI指向ST1的首字节 LOP1: CMP [SI].MATHS,60 ;MATHS字段60? JAE NSHOW ;大于或等于60分,不显示 MOV BL,4 MOV DI,SI ;DI指向NAME字段首字节 SHOW: MOV DL,[DI] ;显示姓名 MOV AH,2 INT 21H INC DI DEC BL JNZ SHOW NSHOW: ADD SI,TYPE ST1 ;SI指向下一个结构变量 LOOP LOP1 MOV AH,4CH INT 21H CODE ENDS END START

More Related