版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 五 章 高 级 汇 编 语 言 程 序 设 计封面第 五 章 高 级 汇 编 语 言 程 序 设 计第五章高级汇编语言程序设计 第五章第五章 高级汇编语言程序设计高级汇编语言程序设计 5.1 5.1 高级语言特性高级语言特性 5.2 5.2 宏结构程序设计宏结构程序设计 5.3 5.3 模块化程序设计模块化程序设计 5.4 5.4 输入输出程序设计输入输出程序设计 本章重点及习题分析本章重点及习题分析第 五 章 高 级 汇 编 语 言 程 序 设 计5.1 高级语言特性5.1 5.1 高级语言特性高级语言特性通过引入一些伪指令,使汇编语言程序设计具有高通过引入一些伪指令,使汇编语言程序设计
2、具有高级语言程序设计的特性,即可以采用类似高级语言的形级语言程序设计的特性,即可以采用类似高级语言的形式设计分支、循环和子程序结构,大大减轻了使用汇编式设计分支、循环和子程序结构,大大减轻了使用汇编语言编程的工作量。语言编程的工作量。 5.1.1 5.1.1 条件控制伪指令条件控制伪指令 5.1.2 5.1.2 循环控制伪指令循环控制伪指令 5.1.3 5.1.3 过程声明和调用伪指令过程声明和调用伪指令第 五 章 高 级 汇 编 语 言 程 序 设 计5.1.1 条件控制伪指令 5.1.1 5.1.1 条件控制伪指令条件控制伪指令 .IF/.ELSEIF/.ELSE/.ENDIF:.IF/.
3、ELSEIF/.ELSE/.ENDIF:类似高级语言的类似高级语言的IF/THINIF/THIN,ELSEELSE和和ENDIFENDIF的相应功能。汇编时展开,自动的相应功能。汇编时展开,自动生成相应的比较和条件转移指令,实现分支结构。生成相应的比较和条件转移指令,实现分支结构。 .IF .IF 条件表达式条件表达式 ;条件为真,执行分支体条件为真,执行分支体1 1 分支体分支体1 1 .ELSEIF .ELSEIF 条件表达式条件表达式 ;前面前面IFIF及前面及前面ELSEIFELSEIF为假,为假, 分支体分支体2 2 ;当前条件为真,执行分支体当前条件为真,执行分支体2 2 .ELS
4、E .ELSE ;前面前面IFIF及前面及前面ELSEIFELSEIF为假,为假, 分支体分支体3 3 ;执行分支体执行分支体3 3 .ENDIF .ENDIF ;分支结束分支结束第 五 章 高 级 汇 编 语 言 程 序 设 计条件控制伪指令不考虑多层嵌套,有不考虑多层嵌套,有4 4种基本格式种基本格式 .IF .IF 条件表达式条件表达式 ;条件表达式为真,执行条件表达式为真,执行 分支体分支体 ;分支体,否则执行后面分支体,否则执行后面 .ENDIF .ENDIF ;语句语句 .IF .IF 条件表达式条件表达式 分支体分支体1 1 .ELSE .ELSE 分支体分支体2 2 .ENDI
5、F .ENDIF ;分支体分支体1 1、2 2必做其一必做其一1.2.第 五 章 高 级 汇 编 语 言 程 序 设 计条件控制伪指令 .IF .IF 条件表达式条件表达式 分支体分支体1 1 .ELSEIF .ELSEIF 条件表达式条件表达式 分支体分支体2 2 ;分支体分支体1 1和分支体和分支体2 2可能可能 .ENDIF.ENDIF ;都不做都不做 .IF .IF 条件表达式条件表达式 ;条件为真,执行分支体条件为真,执行分支体1 1 分支体分支体1 1 .ELSEIF .ELSEIF 条件表达式;条件表达式;前面前面IFIF及前面及前面ELSEIFELSEIF, 分支体分支体2 2
6、 ;为假当前条件为真,执行分支体为假当前条件为真,执行分支体2 2 .ELSE .ELSE ;前面前面IFIF及前面及前面ELSEIFELSEIF为假,为假, 分支体分支体3 3 ;执行分支体执行分支体3 3 .ENDIF .ENDIF ;分支结束分支结束3.4.第 五 章 高 级 汇 编 语 言 程 序 设 计条件表达式的三个问题 三个问题:三个问题: 1.1.关于条件表达式中的操作符关于条件表达式中的操作符2.2.条件表达式举例条件表达式举例3.3.条件表达式中的有符号数和无符号数的规定条件表达式中的有符号数和无符号数的规定第 五 章 高 级 汇 编 语 言 程 序 设 计1.关于条件表达
7、式中的操作符 1. 1.关于条件表达式中的操作符关于条件表达式中的操作符 1 1)表)表5.15.1列出的操作符用于伪指令的条件表达式,列出的操作符用于伪指令的条件表达式,第三章介绍的操作符用于数值表达式和地址表达式第三章介绍的操作符用于数值表达式和地址表达式(构成指令的操作数),两类操作符不可混淆。例如(构成指令的操作数),两类操作符不可混淆。例如表示相等,条件表达式用表示相等,条件表达式用“=”=”,数值表达式用,数值表达式用“EQ”EQ”;表示逻辑与,条件表达式用表示逻辑与,条件表达式用“&”,&”,数值表达式用数值表达式用ANDAND。 2 2)操作符可分为:比较、逻辑
8、运算和测试三类,)操作符可分为:比较、逻辑运算和测试三类,其中测试又可分为:标志测试、位测试、寄存器测试、其中测试又可分为:标志测试、位测试、寄存器测试、存储单元测试(存储单元测试(regmemregmem)。)。 3 3)操作符中,单目操作符为!、标志测试、寄存器)操作符中,单目操作符为!、标志测试、寄存器测试和存储单元测试,其他都是双目操作符。测试和存储单元测试,其他都是双目操作符。 4 4)操作符的优先级可用圆括号规定。)操作符的优先级可用圆括号规定。第 五 章 高 级 汇 编 语 言 程 序 设 计2.条件表达式举例/1 2. 2.条件表达式举例条件表达式举例n reg reg ; ;
9、寄存器不为寄存器不为0 0,条件为真;为,条件为真;为0 0,条件为假,条件为假 .if al.if al dec al dec al .endif .endif n mem mem ; ;存储器不为存储器不为0 0,条件为真;为,条件为真;为0 0,条件为假,条件为假 .if byte ptrbx.if byte ptrbx dec al dec al .endif .endifn carry?carry? / / overflow?overflow? n 位测试操作符使用格式:位测试操作符使用格式: 数值表达式数值表达式 & & 位数位数 如如 “ “AL & 5”
10、,AL & 5”,测试测试ALAL寄存器的寄存器的 D5D5。第 五 章 高 级 汇 编 语 言 程 序 设 计 /2n reg OP regreg OP reg ;OPOP为表为表5.15.1中任意双目操作符中任意双目操作符 ax=bx / al=bl / al & bl ax=bx / al=bl / al & bl n reg OP memreg OP memn reg OP reg OP 立即数立即数n mem OP mem OP 立即数立即数n 单目操作符单目操作符!:可以放在前述任意表达式前面,测:可以放在前述任意表达式前面,测 试相反条件试相反条件 !re
11、greg ; ;寄存器不为寄存器不为0 0,条件为假;为,条件为假;为0 0,条件为真,条件为真 注释:注释:1 1)条件控制伪指令不支持数值表达式,如)条件控制伪指令不支持数值表达式,如 .if (x+1)=5.if (x+1)=dx)(ax=bx)&(cx=dx)。第 五 章 高 级 汇 编 语 言 程 序 设 计3.条件表达式中的符号数/1 3.3.条件表达式中比较的两个数据可能是无符号数,条件表达式中比较的两个数据可能是无符号数,也可能是有符号数,可分成以下情况:也可能是有符号数,可分成以下情况:v 数据为变量:用数据为变量:用DBDB、DWDW、DDDD等定义的变量一律作等定
12、义的变量一律作为无符号数,若需要进行有符号数比较,为无符号数,若需要进行有符号数比较,必须使用必须使用SBYTESBYTE、SWORDSWORD、SDWORDSDWORD定义。定义。v 数据为寄存器或存储单元:默认为无符号数,若数据为寄存器或存储单元:默认为无符号数,若需要进行有符号数比较,必须使用操作符需要进行有符号数比较,必须使用操作符SBYTE PTRSBYTE PTR或或SWORD PTRSWORD PTR指明类型。指明类型。SBYTE PTR BXSBYTE PTR BXSBYTE PTR BX+SI+DISPSBYTE PTR BX+SI+DISPVar db 1 var sbyt
13、e 1Var db 1 var sbyte 1.If alsbyte ptr var .if alvar.If alsbyte ptr var .if al= AX.IF SWORD PTR BX = AX,AXAX被强制作为被强制作为有符号数看待。有符号数看待。 (对变量不适用。若变量作为有符号数使用,(对变量不适用。若变量作为有符号数使用, 必须用必须用sbyte/sword/sdwordsbyte/sword/sdword定义)定义)第 五 章 高 级 汇 编 语 言 程 序 设 计条件控制伪指令(end)6 6)本节新增内容:)本节新增内容:用于条件表达式的操作符用于条件表达式的操作符
14、有符号数专用的变量定义伪指令有符号数专用的变量定义伪指令有符号数专用的类型说明操作符有符号数专用的类型说明操作符分析教材举例分析教材举例浏览汇编结果浏览汇编结果例题例题5.1(5.1(实根判断)实根判断)第 五 章 高 级 汇 编 语 言 程 序 设 计5.1.2循环控制伪指令5.1.25.1.2循环控制伪指令循环控制伪指令 .WHILE.WHILE和和 .ENDW .ENDW :当型循环结构:当型循环结构 .REPEAT.REPEAT和和 .UNTIL/.REPEAT.UNTIL/.REPEAT和和 .UNTILCXZ.UNTILCXZ:直到型:直到型 .BREAK.BREAK:退出循环;:
15、退出循环;.CONTINUE .CONTINUE :转向循环体开始:转向循环体开始 格式格式 1 1.WHILE 条件表达式条件表达式;表达式为真,执行循环体;表达式为真,执行循环体 循环体循环体 ; .ENDW ;循环体结束;循环体结束第 五 章 高 级 汇 编 语 言 程 序 设 计循环控制伪指令 格式格式 2 2 .REPEAT ;重复执行循环体;重复执行循环体 循环体循环体 .UNTIL 条件表达式条件表达式 ;直到条件表达式为真;直到条件表达式为真 格式格式 3 3 .REPEAT ;重复执行循环体;重复执行循环体 循环体循环体 .UNTILCXZ 条件表达式条件表达式 ;CXCX-
16、1CXCX-1,直到,直到CX=0CX=0 ;或条件表达式结果为真;或条件表达式结果为真第 五 章 高 级 汇 编 语 言 程 序 设 计循环控制伪指令注注 释:对释:对.REPEAT/.UNTILCXZ(.REPEAT/.UNTILCXZ(条件表达式)条件表达式) 1 1)不带表达式,结束循环的条件为)不带表达式,结束循环的条件为CX-1CX-1减到减到0 0,循环控制被汇编为循环控制被汇编为LOOPLOOP指令。指令。2 2)带条件表达式,结束循环的条件为)带条件表达式,结束循环的条件为CXCX减到减到0 0 或或表达式为真,表达式只能比较寄存器与寄存器(存储单表达式为真,表达式只能比较寄
17、存器与寄存器(存储单元、常数),以及存储单元与常数相等(元、常数),以及存储单元与常数相等(=)或不等)或不等(!(!= =),所以,汇编后的指令为),所以,汇编后的指令为LOOPELOOPE或或LOOPNELOOPNE。 分析教材举例分析教材举例 浏览汇编结果浏览汇编结果例题例题 5.25.2:求数组前若干非负数之和:求数组前若干非负数之和。 浏览例题浏览例题5.25.2汇编结果汇编结果第 五 章 高 级 汇 编 语 言 程 序 设 计5.1.3过程声明和调用伪指令5.1.2 5.1.2 过程声明和过程调用伪指令过程声明和过程调用伪指令利用堆栈传递参数为常用方式,但传统的编程方法利用堆栈传递
18、参数为常用方式,但传统的编程方法容易出错。容易出错。MASM6.XMASM6.X扩充了扩充了PROCPROC伪指令的功能,并新增了伪指令的功能,并新增了几条伪指令,使调用子程序具有高级语言的特性。几条伪指令,使调用子程序具有高级语言的特性。按使用顺序介绍:按使用顺序介绍:1.1.过程声明过程声明 PROTOPROTO过程名过程名 PROTO PROTO 语言类型语言类型 ,参数名参数名:类型类型,注释:注释:1 1)使用带参数的过程调用,必须定义语言)使用带参数的过程调用,必须定义语言类型,一般用类型,一般用C C或或STDCALLSTDCALL。2 2)参数必须用逗号打头;)参数必须用逗号打
19、头;多个参数之间用逗号分割。多个参数之间用逗号分割。3 3)参数名可省略,类型不)参数名可省略,类型不可省略。可省略。例例5.3 5.3 CHECKSUMD PROTO C ,V1:WORD,V2:WORDCHECKSUMD PROTO C ,V1:WORD,V2:WORD第 五 章 高 级 汇 编 语 言 程 序 设 计过程定义格式2.2.过程定义过程定义PROCPROC 过程名过程名 PROC PROC 语言类型语言类型 USES USES 寄存器列表寄存器列表 , , 形参形参1:1:类型类型, ,形参形参2:2:类型类型 LOCAL LOCAL 参数表参数表 过程名过程名 ENDPEN
20、DP注释:注释:1 1)语言类型与)语言类型与 USES USES 之间用空格分割。之间用空格分割。 2 2)寄存器列表:用空格分割的通用寄存器,决定)寄存器列表:用空格分割的通用寄存器,决定保护现场和恢复现场。保护现场和恢复现场。3 3)参数用逗号打头,且用逗号分割;参数名为形)参数用逗号打头,且用逗号分割;参数名为形参名,调用时被实参替换。参名,调用时被实参替换。4 4)如果过程用到局部变量,用)如果过程用到局部变量,用LOCALLOCAL伪指令定义。伪指令定义。第 五 章 高 级 汇 编 语 言 程 序 设 计几个可选项的说明 过程定义中其他几个可选项的说明:过程定义中其他几个可选项的说
21、明:1 1)调用距离:为)调用距离:为NEARNEAR或或FARFAR,简化段定义格式中,由,简化段定义格式中,由 .model.model语句选择的存储模式决定,语句选择的存储模式决定,smallsmall模式下,调模式下,调 用距离为用距离为NEARNEAR。可省略。可省略。2 2)作用范围:为)作用范围:为PUBLICPUBLIC、PRIVATEPRIVATE等,表示该过程是否等,表示该过程是否 对其他模块可见(可引用)。默认为对其他模块可见(可引用)。默认为PUBLICPUBLIC,表示,表示 该过程其他模块可见(可引用)。可省略。该过程其他模块可见(可引用)。可省略。3 3)起始参数
22、:是一个可带参数的宏的名字。该宏决定)起始参数:是一个可带参数的宏的名字。该宏决定 过程的起始代码和结束代码,例如控制参数如何设过程的起始代码和结束代码,例如控制参数如何设 置、如何保存寄存器等。置、如何保存寄存器等。MASMMASM调用的宏由用户自行调用的宏由用户自行 定义。可省略。定义。可省略。第 五 章 高 级 汇 编 语 言 程 序 设 计过程定义举例例例5.3 5.3 过程定义过程定义 checksumd PROC c USES bx cx ,countp : word ,arryp : wordmov bx,arrypmov cx,countp retchecksumd ENDP语
23、言类型语言类型寄存器列表寄存器列表形参、形参类型形参、形参类型第 五 章 高 级 汇 编 语 言 程 序 设 计过程调用 3.3.过程调用伪指令过程调用伪指令 INVOKEINVOKE 过程名过程名 ,实参,实参1 1,实参,实参2 2, INVOKE checksumd ,count ,offset array调用时:调用时: 实参用逗号打头,且用逗号分隔。实参用逗号打头,且用逗号分隔。 实参实参1 1替换形参替换形参1 1,实参,实参2 2替换形参替换形参2 2。 例题例题5.35.3源程序(语言类型:源程序(语言类型:C C) 例题例题5.35.3汇编结果汇编结果 例题例题5.3a5.3
24、a源程序(语言类型:源程序(语言类型:STDCALLSTDCALL) 例题例题5.3a5.3a汇编结果汇编结果第 五 章 高 级 汇 编 语 言 程 序 设 计过程定义的说明(end) 几点几点说明:说明: 如果在过程中使用参数,必须指定语言类型。如果在过程中使用参数,必须指定语言类型。 如果在如果在 .MODEL.MODEL语句中和过程定义中都没有指定语句中和过程定义中都没有指定语言类型,会产生汇编错误。语言类型,会产生汇编错误。 如果在如果在 .MODEL.MODEL语句中指定了语言类型,则过程语句中指定了语言类型,则过程声明和过程定义中可以省略语言类型。声明和过程定义中可以省略语言类型。
25、 .MODEL SMALL.MODEL SMALL,C C ;指定了;指定了C C语言类型语言类型 过程定义和过程声明必须一致。如编程过程中修过程定义和过程声明必须一致。如编程过程中修改了一个,忘记修改另一个,则会造成错误。为避免此改了一个,忘记修改另一个,则会造成错误。为避免此种情况发生,可以把全部过程定义放在代码段内开始的种情况发生,可以把全部过程定义放在代码段内开始的部分(部分(.STARTUP.STARTUP之前),而省略过程声明。之前),而省略过程声明。第 五 章 高 级 汇 编 语 言 程 序 设 计5.2宏结构程序设计5.25.2宏结构程序设计宏结构程序设计对常用的、具有独立功能
26、的程序段,除了可定义为对常用的、具有独立功能的程序段,除了可定义为过程外,还可定义为宏结构或宏指令。宏指令提供了简过程外,还可定义为宏结构或宏指令。宏指令提供了简化程序设计的另一种方法。化程序设计的另一种方法。 通常与宏指令配合使用的伪指令还有重复汇编和条通常与宏指令配合使用的伪指令还有重复汇编和条件汇编。宏指令、重复汇编和条件汇编统称宏结构。件汇编。宏指令、重复汇编和条件汇编统称宏结构。 本节介绍宏指令的定义和调用,以及重复汇编和条本节介绍宏指令的定义和调用,以及重复汇编和条件汇编。件汇编。 5.2.1 5.2.1 宏汇编宏汇编 5.2.2 5.2.2 重复汇编重复汇编 5.2.3 5.2.
27、3 条件汇编条件汇编第 五 章 高 级 汇 编 语 言 程 序 设 计5.2.1 宏汇编 宏的定义和调用 5.2.1 5.2.1 宏汇编宏汇编1.1.宏的定义和调用、宏展开宏的定义和调用、宏展开宏定义宏定义宏名宏名 MACRO 形参形参1 1,形参,形参2 2, 宏定义体;指令语句的组合宏定义体;指令语句的组合 ENDM宏调用宏调用 宏名宏名 实参实参1 1,实参,实参2 2, 例题例题5.4a+5.4b5.4a+5.4b第 五 章 高 级 汇 编 语 言 程 序 设 计宏展开 宏展开宏展开 汇编时,用宏体取代宏调用,用实参取代形参,汇编时,用宏体取代宏调用,用实参取代形参, 称为宏展开。称为
28、宏展开。v宏展开时,实参替代形参按位置匹配的原则。宏展开时,实参替代形参按位置匹配的原则。v实参与形参的个数可以不等,参数替换时,多余实参与形参的个数可以不等,参数替换时,多余的实参不于考虑;多余的形参以空格替代。的实参不于考虑;多余的形参以空格替代。v实参替代形参时,不进行类型检查,完全是字符实参替代形参时,不进行类型检查,完全是字符串的替代,替代后是否合法有效,由汇编程序翻串的替代,替代后是否合法有效,由汇编程序翻译时进行语法检查。译时进行语法检查。 宏展开后宏展开后5.4B5.4B第 五 章 高 级 汇 编 语 言 程 序 设 计宏的参数及宏操作符 2.2.宏的参数宏的参数 参数的形式灵
29、活多变,可以是常数、变量、存储参数的形式灵活多变,可以是常数、变量、存储单元、指令操作码或它们的一部分,也可以是表达式,单元、指令操作码或它们的一部分,也可以是表达式,使用灵活多变的参数,同一个宏定义甚至可以执行不使用灵活多变的参数,同一个宏定义甚至可以执行不同的操作。同的操作。v几个宏操作符几个宏操作符: :替换操作符:用于将参数与其他字符分开。用替换操作符:用于将参数与其他字符分开。用在宏体中。如果参数紧接在其他字符之前或之后,在宏体中。如果参数紧接在其他字符之前或之后, 或者参数出现在带引号的字符串中,就必须使用或者参数出现在带引号的字符串中,就必须使用该伪操作符该伪操作符第 五 章 高
30、 级 汇 编 语 言 程 序 设 计宏操作符: :字符串传递操作符字符串传递操作符: :用在宏调用的实参中。用在宏调用的实参中。 在宏调用中,如果传递的字符串实参数含在宏调用中,如果传递的字符串实参数含 有逗号、空格等间隔符号,则必须用这对有逗号、空格等间隔符号,则必须用这对 操作符,以保证字符串的完整操作符,以保证字符串的完整!: :转义操作符转义操作符: :指示其后的一个字符作为一般指示其后的一个字符作为一般 字符,无特殊意义。如字符,无特殊意义。如 !/!&!/!&: :表达式操作符表达式操作符: :将后面跟的表达式的值作为将后面跟的表达式的值作为 实参,而不是将表达式本
31、身作为参数。用在实参,而不是将表达式本身作为参数。用在 实参中。实参中。;: :宏注释符,用于表示在宏定义中的注释。采宏注释符,用于表示在宏定义中的注释。采 用这个符号的注释,在宏展开时不出现用这个符号的注释,在宏展开时不出现“:REQ、:=默认值默认值”可参考可参考宏汇编大全宏汇编大全第 五 章 高 级 汇 编 语 言 程 序 设 计与宏有关的伪指令13.3.与宏有关的伪指令与宏有关的伪指令局部标号伪指令局部标号伪指令LOCAL LOCAL 标号列表标号列表;当宏定义体内有标号,同一程;当宏定义体内有标号,同一程序内多次调用,会造成标号的重复定义。序内多次调用,会造成标号的重复定义。用用LO
32、CALLOCAL说明的标号,第一次宏展开时,产生的标说明的标号,第一次宏展开时,产生的标号为号为?0000?0000,第二次宏展开时产生的标号为,第二次宏展开时产生的标号为?0001?0001,(?ffff)(?ffff) 注释:注释:只能在宏体内使用。只能在宏体内使用。 只能紧接在宏定义语句之后使用。只能紧接在宏定义语句之后使用。第 五 章 高 级 汇 编 语 言 程 序 设 计与宏有关的伪指令2如宏定义:如宏定义:ABSOL MACRO OPRDABSOL MACRO OPRD LOCAL NEXT LOCAL NEXT CMP OPRD CMP OPRD,0 0 JGE NEXT JGE
33、 NEXT NEG OPRD NEG OPRD NEXTNEXT: ENDMENDM宏调用宏调用1 1:ABSOL WORD PTR BXABSOL WORD PTR BX宏调用宏调用2: ABSOL BX2: ABSOL BX第 五 章 高 级 汇 编 语 言 程 序 设 计与宏有关的伪指令3宏展开后的代码:宏展开后的代码:CMP WORD PTRBXCMP WORD PTRBX,0 0JGE ?0000JGE ?0000NEG WORD PTRBXNEG WORD PTRBX?0000:?0000:CMP BX,0CMP BX,0JGE ?0001JGE ?0001NEG BXNEG BX
34、?0001:?0001:第一个宏展开第一个宏展开第二个宏展开第二个宏展开第 五 章 高 级 汇 编 语 言 程 序 设 计与宏有关的伪指令2宏定义删除宏定义删除PURGE PURGE 宏名表;在各类名字中,只有宏名可以和宏名表;在各类名字中,只有宏名可以和指令同名;当同名时,宏定义优先级最高。指令同名;当同名时,宏定义优先级最高。宏定义退出宏定义退出(宏展开退出)(宏展开退出)EXITMEXITM;对;对EXITMEXITM后面的语句停止宏展开。后面的语句停止宏展开。第 五 章 高 级 汇 编 语 言 程 序 设 计宏与子程序 4.4.宏与子程序宏与子程序相同点:简化源程序的设计和结构相同点:
35、简化源程序的设计和结构不同点:不同点: 处理时间段不同。处理时间段不同。 对目标程序的长度影响不同。对目标程序的长度影响不同。 对目标程序执行速度的影响不同。对目标程序执行速度的影响不同。 传递参数的方式不同;传递参数过程中如出现传递参数的方式不同;传递参数过程中如出现错误,错误的性质不同。错误,错误的性质不同。(宏:语法;子程序:逻辑)(宏:语法;子程序:逻辑)通常,当程序段较短,要求较快执行时,用宏定义。通常,当程序段较短,要求较快执行时,用宏定义。当程序段较长,或为减小目标代码长度,用子程序。当程序段较长,或为减小目标代码长度,用子程序。第 五 章 高 级 汇 编 语 言 程 序 设 计
36、5.2.2重复汇编 5.2.25.2.2重复汇编重复汇编 重复汇编重复汇编指在汇编过程中,重复展开一段(基本)指在汇编过程中,重复展开一段(基本)相同的语句。相同的语句。 如果程序中需要连续重复一段相同的语句或基本相如果程序中需要连续重复一段相同的语句或基本相同的语句,可以使用重复汇编伪指令,也就是让汇编程同的语句,可以使用重复汇编伪指令,也就是让汇编程序代替程序员完成重复的工作。序代替程序员完成重复的工作。 重复汇编伪指令常在宏体内使用,但也可以在宏体重复汇编伪指令常在宏体内使用,但也可以在宏体外使用。重复汇编没有名字,不能被调用。外使用。重复汇编没有名字,不能被调用。 重复汇编伪指令有重复
37、汇编伪指令有3 3条,条,3 3条伪指令区别在于如何规条伪指令区别在于如何规定重复次数。定重复次数。第 五 章 高 级 汇 编 语 言 程 序 设 计按参数值重复伪指令 1.1.按参数值重复伪指令按参数值重复伪指令 REPEAT REPEAT 重复次数重复次数重复体重复体 ENDMENDM例例5.8 5.8 定义定义2626个大写字母个大写字母char = Achar = AAztabel EQU THIS BYTEAztabel EQU THIS BYTEREPEAT REPEAT 2626DB charDB charchar = char+1char = char+1ENDMENDM汇编结
38、果:汇编结果:DB charDB charchar = char+1char = char+1DB charDB charchar = char+1char = char+1DB charDB charchar = char+1char = char+1第 五 章 高 级 汇 编 语 言 程 序 设 计按参数个数重复伪指令 1. 1.按参数个数重复伪指令按参数个数重复伪指令 FOR FOR 形参,形参, 重复体重复体 ENDMENDM例例5.9a 5.9a 保护常用寄存器保护常用寄存器FOR regad ,FOR regad ,PUSH regadPUSH regadENDMENDM汇编结果:
39、汇编结果: PUSH AXPUSH AXPUSH BXPUSH BXPUSH CXPUSH CXPUSH DXPUSH DX形参:重复体中使用的参数形参:重复体中使用的参数 注意:形参只有一个注意:形参只有一个实参:汇编展开时使用的参实参:汇编展开时使用的参数,用其替换重复体中出现数,用其替换重复体中出现的形参;按实参个数重复。的形参;按实参个数重复。 必须使用必须使用“”括起。括起。第 五 章 高 级 汇 编 语 言 程 序 设 计按参数字符个数重复伪指令 1. 1.按参数按参数字符字符个数重复伪指令个数重复伪指令 FORC FORC 形参,字符串形参,字符串 ;FORC FORC 形参,形
40、参, 重复体重复体 ENDMENDM例例5.9b 5.9b 恢复常用寄存器恢复常用寄存器FORC regad ,dcbaFORC regad ,dcbaPOP ®ad&xPOP ®ad&xENDMENDM汇编结果:汇编结果:POP DX POP DX POP CXPOP CXPOP BXPOP BXPOP AXPOP AX第 五 章 高 级 汇 编 语 言 程 序 设 计5.2.3 条件汇编 5.2.3 5.2.3 条件汇编条件汇编条件汇编伪指令使汇编程序根据某种条件是否成立条件汇编伪指令使汇编程序根据某种条件是否成立决定是否汇编某段语句序列决定是否
41、汇编某段语句序列条件汇编伪指令格式:条件汇编伪指令格式:IFIFxxxx 表达式表达式分支语句体分支语句体 1 1ELSEELSE分支语句体分支语句体 22ENDIFENDIF伪指令中的伪指令中的“xxxx”为组成条件汇编伪指令的其他字符,为组成条件汇编伪指令的其他字符,不同的不同的“xx”xx”,表达的条件不同。如,表达的条件不同。如“IF IF 表达式表达式”,表达,表达的条件为:如表达式的值不为的条件为:如表达式的值不为0 0,则条件满足;,则条件满足;“IFIFE E 表达式表达式”表达的条件为:如表达式的值为表达的条件为:如表达式的值为0 0,则条件,则条件满足。(见教材表满足。(见
42、教材表5.35.3)第 五 章 高 级 汇 编 语 言 程 序 设 计条件汇编伪指令(IF|IFE)中的表达式 条件汇编伪指令(条件汇编伪指令(IF|IFEIF|IFE)中的表达式:)中的表达式: 运算符使用第三章介绍的关系运算符:运算符使用第三章介绍的关系运算符: EQEQ、NENE、GTGT、LTLT、GEGE、LELE 注意,不同于条件控制伪指令(注意,不同于条件控制伪指令(.IF.IF)中使用的运)中使用的运 算符。算符。 表达式用表达式用0FFFFH0FFFFH(或任意非(或任意非0 0数)表示真,用数)表示真,用0 0表表 示假。示假。第 五 章 高 级 汇 编 语 言 程 序 设
43、 计例5.10 例例5.105.10:定义一个元素个数不超过:定义一个元素个数不超过100100个的数组。个的数组。 PDATAPDATAMACRO NUMMACRO NUM IF NUM LT 100 IF NUM LT 100 DB NUM DUP DB NUM DUP(?)(?) ELSEELSE DB 100 DUP DB 100 DUP(?)(?) ENDIFENDIFENDMENDM宏调用宏调用:PDATAPDATA 1212宏展开宏展开:DB 12 DUP (DB 12 DUP (?) )宏调用宏调用:PDATA 105PDATA 105宏展开宏展开:DB 100 DUP (DB
44、 100 DUP (?) )第 五 章 高 级 汇 编 语 言 程 序 设 计例5.11/1例例5.11 5.11 编写宏编写宏MAXNUMMAXNUM,计算,计算3 3个以内的数据中的最大值,个以内的数据中的最大值,并将结果送入并将结果送入AXAX寄存器,要求根据宏调用时的实参个数寄存器,要求根据宏调用时的实参个数展开相应代码。展开相应代码。 分析:分析:1 1)至少应有一个参数,故第一个参数设为不)至少应有一个参数,故第一个参数设为不 可缺少;可缺少; 2 2)宏指令应能够作到:根据实参情况产生不)宏指令应能够作到:根据实参情况产生不 同的程序段,进行不同的处理。实参可分同的程序段,进行不
45、同的处理。实参可分 三种情况:三种情况:A.A.只有一个参数只有一个参数 B.B.有两个参数有两个参数 C.C.有三个参数有三个参数 显然,应使用条件汇编。显然,应使用条件汇编。第 五 章 高 级 汇 编 语 言 程 序 设 计/2 MAXNUM MACRO WX:REQ,WY,WZLOCAL MAXNUM1,MAXNUM2MOV AX,WX ;只有一个实参替换;只有一个实参替换WX IFNB ;还有;还有WY时时CMP AX,WYJGE MAXNUM1MOV AX,WYENDIFMAXNUM1: IFNB ;当有;当有WZ时,汇编本段时,汇编本段CMP AX,WZJGE MAXNUM2MOV
46、 AX,WZENDIFMAXNUM2:ENDM第 五 章 高 级 汇 编 语 言 程 序 设 计/3 宏调用:宏调用: 汇编结果:汇编结果:Maxnum bx ;只有只有1个参数个参数Mov ax , bx ;只有只有1个参数个参数Maxnum 3, 4 ;有有2个参数个参数 Mov ax, 3 Cmp ax, 4 Jge ?0000 Mov ax, 4?0000:第 五 章 高 级 汇 编 语 言 程 序 设 计/4 宏调用:宏调用: 汇编结果:汇编结果:Maxnum n1, n2, n3 ;有有3个参数个参数 mov ax, n1 cmp ax, n2 jge ?0000 mov ax,
47、n2?0000: cmp ax, n3 jge ?0001 mov ax, n3?0001: 注意区别注意区别条件控制伪指令条件控制伪指令 和和条件汇编伪指令条件汇编伪指令第 五 章 高 级 汇 编 语 言 程 序 设 计P149例题/1P149P149例题:用宏结构实现信息显示。例题:用宏结构实现信息显示。dstringdstring MACRO stringMACRO string ;定义字符串定义字符串db &string&,0dh,0ah,$db &string&,0dh,0ah,$ENDMENDMmainbeginmainbeginMACRO dsse
48、gMACRO dsseg;设置数据段地址设置数据段地址mov ax,dssegmov ax,dssegmov ds,axmov ds,axENDMENDMdispmsgdispmsg MACRO message;MACRO message;显示,形参为偏移地址显示,形参为偏移地址mov dx,offset messagemov dx,offset messagemov ah,09hmov ah,09hint 21hint 21hENDMENDM第 五 章 高 级 汇 编 语 言 程 序 设 计/2mainendmainend MACRO retnumMACRO retnum ;返回返回DOSD
49、OS,可不带参数,可不带参数 ifb ;ifb ;宏调用没有实参数宏调用没有实参数 mov ah,4chmov ah,4ch else ; else ; 有参数有参数 mov ax,4c00h+(retnum AND 0ffh)mov ax,4c00h+(retnum AND 0ffh) endif endif int 21h int 21hENDMENDM保证不破坏保证不破坏AH的内容的内容第 五 章 高 级 汇 编 语 言 程 序 设 计/3 .model small .model small .stack 256 .stack 256 .data .datamsg1msg1 equ th
50、is byte equ this bytedstringdstring msg2msg2 equ this byte equ this bytedstringdstring .code .codestart:mainbegin data ;start:mainbegin data ;建立建立DSDS内容内容dispmsg msg1dispmsg msg1 ; ;显示显示msg1msg1字符串字符串dispmsg msg2dispmsg msg2 ; ;显示显示msg2msg2字符串字符串mainendmainend ; ;返回返回DOSDOSend startend start第 五 章 高
51、级 汇 编 语 言 程 序 设 计5.3 模块化程序设计 5.3 5.3 模块化程序设计模块化程序设计 开发大型或较复杂的程序时,往往需要结合使用其开发大型或较复杂的程序时,往往需要结合使用其他方法,如源程序文件的包含、目标代码文件的连接、他方法,如源程序文件的包含、目标代码文件的连接、子程序库的使用等等。子程序库的使用等等。 本节简单介绍以上三种方法。本节简单介绍以上三种方法。 5.3.1 5.3.1 源程序文件的包含源程序文件的包含 5.3.2 5.3.2 目标代码文件的连接目标代码文件的连接 5.3.3 5.3.3 子程序库的使用子程序库的使用第 五 章 高 级 汇 编 语 言 程 序
52、设 计5.3.1 源程序文件的包含 5.3.1 5.3.1 源程序文件的包含源程序文件的包含 对大型源程序,可以分成几个源文件,待汇编时在对大型源程序,可以分成几个源文件,待汇编时在用包含伪指令用包含伪指令INCLUDEINCLUDE将它们结合成一个文件进行汇编。将它们结合成一个文件进行汇编。 格式为:格式为:INCLUDE INCLUDE 文件名文件名 汇编时,汇编程序将指定的文件插在伪指令所在的汇编时,汇编程序将指定的文件插在伪指令所在的位置,与其他部分同时汇编。位置,与其他部分同时汇编。 适用于:汇集常用的子程序为一个源文件适用于:汇集常用的子程序为一个源文件(.asm)(.asm);
53、汇集常用的宏定义为一个宏库文件汇集常用的宏定义为一个宏库文件(.mac)(.mac); 汇集常用的常量定义和声明为一个包含文件汇集常用的常量定义和声明为一个包含文件(.inc)(.inc)。 当源程序需要使用上述文件中的某些内容时,不用当源程序需要使用上述文件中的某些内容时,不用重新编写,只要使用包含伪指令将文件包含即可。重新编写,只要使用包含伪指令将文件包含即可。第 五 章 高 级 汇 编 语 言 程 序 设 计例5.12a 例例5.12a 5.12a 利用源程序包含的方法实现将输入的数据利用源程序包含的方法实现将输入的数据按升序输出。按升序输出。 要求:最多输入要求:最多输入100100个
54、无符号字节数据;以十六进制个无符号字节数据;以十六进制形式输入;按照升序排序并显示。形式输入;按照升序排序并显示。 源程序由三个单独的文件组成:源程序由三个单独的文件组成: 宏库文件宏库文件 lt512a.maclt512a.mac(显示字符和字符串)(显示字符和字符串) 子程序文件子程序文件 sub512a.asmsub512a.asm(输入、排序)(输入、排序) 主程序文件主程序文件 lt512a.asmlt512a.asm(提供入口参数、处理(提供入口参数、处理 出口参数、排序、显示)出口参数、排序、显示)第 五 章 高 级 汇 编 语 言 程 序 设 计宏库文件 lt512a.mac
55、1 1)宏库文件)宏库文件 lt512a.maclt512a.macdispchardispchar macro charmacro char ; ;显示显示charchar字符字符mov dl,charmov dl,charmov ah,2mov ah,2int 21hint 21hendmendmdispmsgdispmsg macro messagemacro message; ;显示显示messagemessage字符串字符串mov dx,offset messagemov dx,offset messagemov ah,9mov ah,9int 21hint 21hendmendm第
56、 五 章 高 级 汇 编 语 言 程 序 设 计子程序文件 sub512a.asm 2 2)子程序文件)子程序文件 sub512a.asmsub512a.asm子程序源文件有子程序源文件有3 3个子程序个子程序ALdispALdisp; ;显示显示2 2位位1616进制数子程序(例进制数子程序(例4.104.10)sortingsorting ; ;排序子程序(例排序子程序(例4.84.8)inputinput; ;键盘输入子程序键盘输入子程序(后面分析)(后面分析)还包含一个宏还包含一个宏convertconvert ;将将DXDX两位两位ASCIIASCII码转换为两位码转换为两位1616
57、进制数进制数第 五 章 高 级 汇 编 语 言 程 序 设 计主程序文件 lt512a.asm 3 3)主程序文件)主程序文件 lt512a.asmlt512a.asm include lt421a.mac ;包含宏库文件,置于主程;包含宏库文件,置于主程.model /.stack /.data / .code.model /.stack /.data / .code等等 序头部序头部dispmsg msg1dispmsg msg1 ; ;提示输入数据提示输入数据mov bx,offset bufmov bx,offset bufcall inputcall input ; ;数据输入数据输
58、入cmp cx,0cmp cx,0je start4je start4 ; ;没有输入数据则退出没有输入数据则退出mov count,cxmov count,cx. ; ;显示输入的数据显示输入的数据. ; ;数据排序数据排序. ; ;显示经排序后的数据显示经排序后的数据start4:.exit 0start4:.exit 0include sub421a.asm ;包含子程序文件;包含子程序文件endend将三个文件分别编辑,主程序文件用将三个文件分别编辑,主程序文件用两条包含伪指令将宏库文件和子程序两条包含伪指令将宏库文件和子程序文件包含(注意包含伪指令的位置),文件包含(注意包含伪指令的
59、位置),然后汇编并连接主程序文件,即可得然后汇编并连接主程序文件,即可得到可执行文件。到可执行文件。第 五 章 高 级 汇 编 语 言 程 序 设 计键盘输入子程序/1 键盘输入子程序:键盘输入子程序:;每次输入;每次输入1 1位或位或2 2位位 十六进制数字;十六进制数字;空格或逗号确认输入;空格或逗号确认输入;退格键删除当前输入;退格键删除当前输入 的数据;的数据;回车表示所有数据;回车表示所有数据 输入结束。输入结束。;入口参数:;入口参数:ds:bx=ds:bx= 存放数据的缓冲区存放数据的缓冲区;出口参数:;出口参数:cx=cx= 数据个数数据个数转换和保存转换和保存返回返回转换和保
60、存转换和保存错误处理错误处理A输入一个字符输入一个字符退格?退格?空格?空格?回车?回车?逗号?逗号?有效?有效?AA存入存入DH DL第 五 章 高 级 汇 编 语 言 程 序 设 计/2inputinputprocprocpush axpush axpush dxpush dxxor cx,cxxor cx,cx ; ;数据个数清数据个数清0 0input01:input01: xor dx,dxxor dx,dx; ;输入字符清输入字符清0 0input02:input02: mov ah,1mov ah,1 ; ;键盘输入一个字符键盘输入一个字符int 21hint 21h第 五 章 高 级 汇 编 语 言 程 序 设 计/3input10:input10: cmp al,0dhcmp al,0dhje input30
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年广东省深圳市南山区中考英语三模试卷
- 2 哪些领域对闪电定位仪的需求比较大
- 浙江省台州市台州十校联考2024-2025学年高一上学期期中考试生物试题含答案
- 人教版二年级上册美术教案
- 第三单元《珍爱我们的生命》-2024-2025学年七年级道德与法治上册单元测试卷(统编版2024新教材)
- 广东省珠海市第九中学2024-2025学年九年级上学期11月期中化学试题(含答案)
- 职业学院船舶工程技术专业人才培养方案
- 便携式遥控阻车器产业深度调研及未来发展现状趋势
- 手表自动上弦器产品供应链分析
- 医用人体成分分析仪产业运行及前景预测报告
- 设备包机到人管理制度
- 初中英语-现在进行时 过去进行时(含练习)
- 中小学校财务管理案例分析
- 《我们小点儿声》评课报告
- 人 大 代 表 履 职 档 案
- C25喷射混凝土配合比设计与使用
- 企业经营模拟实训知到章节答案智慧树2023年华南农业大学
- (完整版)全国各省份城市明细表
- 胆总管囊肿护理查房
- 《Matlab语言与及其应用》实验报告
- 俄罗斯地缘政治学
评论
0/150
提交评论