第7章汇编语言的扩展 讲授要点 结构的定义与访问方法。 宏指令与重复块的基本用法。 条件汇编的用途 ■多模块程序设计的基本方法。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 第7章汇编语言的扩展 讲授要点 ▪ 结构的定义与访问方法。 ▪ 宏指令与重复块的基本用法。 ▪ 条件汇编的用途。 ▪ 多模块程序设计的基本方法
7.1结构 7.1.1结构类型的定义 1.定义方法 使用伪指令 STRUCT与ENDS。形式如下 结构名 STRUCT 字段定义 结构名END 说明 类型定义本身不占内存空间。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 7.1 结构 7.1.1 结构类型的定义 1. 定义方法 使用伪指令STRUCT与ENDS。形式如下: 结构名 STRUCT ... ; 字段定义 结构名 END 说明: 类型定义本身不占内存空间
2.结构定义例 Person struct PName db *水******** ,10个字符 Dept 20dup(?) db Address db 30dup(?) Person 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 2. 结构定义例 Person struct PName db '**********' ; 10个字符 Dept db 20 dup (?) Age db 0 Address db 30 dup (?) Person ends
7.1.2结构变量的定义 1.定义方法 结构变量名结构名{字段初值表 结构变量名结构名重复次数DUP({字段初值表}) 2.定义时需遵循的规则 各字段值的类型及排列顺序必须与结构类型定义时一致。 对于初值表中为空的字段,以结构类型定义时给出的值作为初始值。 只有单项字段或字符串字段才能在结构变量定义时赋值。 对于字符串字段,指定的串不能超出结构类型定义时给出的长度。 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 7.1.2 结构变量的定义 1. 定义方法 结构变量名 结构名 {字段初值表} 结构变量名 结构名 重复次数 DUP ( {字段初值表} ) 2. 定义时需遵循的规则 ▪ 各字段值的类型及排列顺序必须与结构类型定义时一致。 ▪ 对于初值表中为空的字段,以结构类型定义时给出的值作为初始值。 ▪ 只有单项字段或字符串字段才能在结构变量定义时赋值。 ▪ 对于字符串字段,指定的串不能超出结构类型定义时给出的长度
3.结构变量定义例 P1 Person 4个字段均以类型定义时给定的值作为初始值 P2 Person{ Zhang,20,};为字段 PName与Age指定了初始值 P3 Person 50 dup(o) 定义了一个含有50个元素的结构数组 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 3. 结构变量定义例 P1 Person { } ; 4个字段均以类型定义时给定的值作为初始值 P2 Person {'Zhang', , 20, } ; 为字段PName 与Age指定了初始值 P3 Person 50 dup ( { } ) ; 定义了一个含有50个元素的结构数组
7.1.3结构变量及其字段的访问 1.结构变量的访问 与简单变量一样,按名访问。 2.结构字段的访问 可以采用下列种方法。 ①计算字段所在地址,通过地址访问。例如 mov byte ptr P1[30],10 ②使用点操作符()。基本形式为 结构变量名字段名 全等价于 结构变量名+字段在结构中的位移量 例如 mov PI Age, 10 等价于 mov byte ptr Pl+30,10 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 7.1.3 结构变量及其字段的访问 1. 结构变量的访问 与简单变量一样,按名访问。 2. 结构字段的访问 可以采用下列2种方法。 ① 计算字段所在地址,通过地址访问。例如: mov byte ptr P1[30], 10 ② 使用点操作符(.)。基本形式为: 结构变量名.字段名 完全等价于 结构变量名 + 字段在结构中的位移量 例如: mov P1.Age, 10 ; 等价于 mov byte ptr P1 + 30, 10
3.说明 对于MASM6ⅹ,当通过指针访问结构字段时,必须以伪字段的形式明确指出结构类型 名。例如 PPtr dd PI bx, PPtr mov es:|bx] Person Age,10;等价于 mov byte ptr es:30bx],10 4.结构应用实例 例71等 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 3. 说明 对于MASM 6.x,当通过指针访问结构字段时,必须以伪字段的形式明确指出结构类型 名。例如: PPtr dd P1 les bx, PPtr mov es:[bx].Person.Age, 10 ; 等价于 mov byte ptr es:30[bx], 10 4. 结构应用实例 例7.1等
7.2宏指令 7.2.1宏定义、宏调用与宏展开 1.宏定义 由伪指令 MACRO与ENDM实现。形式如下: 宏指令名 MACRO[形式参数表] 宏体 ENDM 2.宏调用 形式如下: 宏指令名实在参数表] 3.宏展开 当源程序被汇编时,MASM用相应的宏体取代每个宏调用,并用实在参数按位置替换 宏定义中的形式参数 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 7.2 宏指令 7.2.1 宏定义、宏调用与宏展开 1. 宏定义 由伪指令MACRO与ENDM实现。形式如下: 宏指令名 MACRO [形式参数表] ... ; 宏体 ENDM 2. 宏调用 形式如下: 宏指令名 [实在参数表] 3. 宏展开 当源程序被汇编时,MASM用相应的宏体取代每个宏调用,并用实在参数按位置替换 宏定义中的形式参数
4.说明 实在参数的类型与顺序应与宏定义时的形式参数一致。 宏展开时,若实在参数的个数多于形式参数,则忽略多余的实在参数;若实 在参数的个数少于形式参数,则多余的形式参数为空。 宏定义只是告诉MASM用一个名字来表示一段语句序列,其本身不被汇编。 ■宏指令的参数非常灵活,可以出现在指令的操作数或操作码部分,MASM在 宏展开时对参数进行文本替换。 5.实例 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 4. 说明 ▪ 实在参数的类型与顺序应与宏定义时的形式参数一致。 ▪ 宏展开时,若实在参数的个数多于形式参数,则忽略多余的实在参数;若实 在参数的个数少于形式参数,则多余的形式参数为空。 ▪ 宏定义只是告诉MASM用一个名字来表示一段语句序列,其本身不被汇编。 ▪ 宏指令的参数非常灵活,可以出现在指令的操作数或操作码部分,MASM在 宏展开时对参数进行文本替换。 5. 实例
7.2.2与宏有关的伪指令 1.L0CAL伪指令 LOCAL用来指定宏内局部符号。形式如下 LOCAL符号名, ,符号名 作用:在宏展开时,MASM将源文件中的所有局部符号统一按出现次序替换为唯一的标识 符(??0000?FFF),以避免符号的重复定义。 2.EXIM伪指令 用来立即终止宏展开,通常与条件汇编结合使用。MASM忽略 EXITM与ENDM之间的所 有语句。 3.实例 2021//21 80x86汇编语言程序设计
2021/1/21 80x86汇编语言程序设计 7.2.2 与宏有关的伪指令 1. LOCAL伪指令 LOCAL用来指定宏内局部符号。形式如下: LOCAL 符号名,...,符号名 作用:在宏展开时,MASM将源文件中的所有局部符号统一按出现次序替换为唯一的标识 符(??0000 ~ ??FFFF),以避免符号的重复定义。 2. EXITM 伪指令 用来立即终止宏展开,通常与条件汇编结合使用。MASM忽略EXITM与ENDM之间的所 有语句。 3. 实例