《04第四章汇编程序设计基础(自).ppt》由会员分享,可在线阅读,更多相关《04第四章汇编程序设计基础(自).ppt(91页珍藏版)》请在金锄头文库上搜索。
1、【本章主要内容本章主要内容】 汇编语言基础汇编语言基础 汇编语言程序结构框架汇编语言程序结构框架 汇编语言程序设计方法汇编语言程序设计方法 汇编程序的开发过程汇编程序的开发过程第第4 4章汇编程序设计基础章汇编程序设计基础( (自学自学)4.1 4.1 4.1 4.1 汇编语言基础汇编语言基础汇编语言基础汇编语言基础第第4 4章汇编程序设计基础章汇编程序设计基础 4.1.1 4.1.1 4.1.1 4.1.1 概述概述概述概述 汇编语言是一种面向机器结构的低级程序设汇编语言是一种面向机器结构的低级程序设汇编语言是一种面向机器结构的低级程序设汇编语言是一种面向机器结构的低级程序设计语言,汇编语言
2、程序是将机器指令组成的机器计语言,汇编语言程序是将机器指令组成的机器计语言,汇编语言程序是将机器指令组成的机器计语言,汇编语言程序是将机器指令组成的机器语言程序语言程序语言程序语言程序“符号化符号化符号化符号化”,它同机器语言的目标代码,它同机器语言的目标代码,它同机器语言的目标代码,它同机器语言的目标代码一一对应。一一对应。一一对应。一一对应。 汇编语设计程序设计能充分发挥机器硬件的汇编语设计程序设计能充分发挥机器硬件的汇编语设计程序设计能充分发挥机器硬件的汇编语设计程序设计能充分发挥机器硬件的性能,提高计算机的运行效率,汇编语言比机器性能,提高计算机的运行效率,汇编语言比机器性能,提高计算
3、机的运行效率,汇编语言比机器性能,提高计算机的运行效率,汇编语言比机器语言易于辨认、维护和修改。语言易于辨认、维护和修改。语言易于辨认、维护和修改。语言易于辨认、维护和修改。 第第4 4章汇编程序设计基础章汇编程序设计基础 4.1.2 4.1.2 4.1.2 4.1.2 汇编语言语句种类与格式汇编语言语句种类与格式汇编语言语句种类与格式汇编语言语句种类与格式 指令语句指令语句指令语句指令语句 每条指令语句经编译后都要产生一条可执行每条指令语句经编译后都要产生一条可执行每条指令语句经编译后都要产生一条可执行每条指令语句经编译后都要产生一条可执行的目标代码(机器指令),所以这种语句属于的目标代码(
4、机器指令),所以这种语句属于的目标代码(机器指令),所以这种语句属于的目标代码(机器指令),所以这种语句属于可执行语句。可执行语句。可执行语句。可执行语句。例如:例如:例如:例如: MOV AX , 32HMOV AX , 32H AND BX , 01010111B AND BX , 01010111B第第4 4章汇编程序设计基础章汇编程序设计基础 伪指令语句伪指令语句伪指令语句伪指令语句 指示汇编程序如何编译源程序,伪指令不产指示汇编程序如何编译源程序,伪指令不产指示汇编程序如何编译源程序,伪指令不产指示汇编程序如何编译源程序,伪指令不产生目标代码。生目标代码。生目标代码。生目标代码。例如
5、:例如:例如:例如: ORG 100HORG 100H 宏指令语句宏指令语句宏指令语句宏指令语句 用户定义的新指令,用于替代源程序中一段用户定义的新指令,用于替代源程序中一段用户定义的新指令,用于替代源程序中一段用户定义的新指令,用于替代源程序中一段有独立功能的程序。有独立功能的程序。有独立功能的程序。有独立功能的程序。第第4 4章汇编程序设计基础章汇编程序设计基础 1. 1. 1. 1. 语句格式语句格式语句格式语句格式标号:标号:标号:标号:指令助记符指令助记符指令助记符指令助记符 操作数操作数操作数操作数 ; ; 注释注释注释注释指令的符号指令的符号指令的符号指令的符号地址地址地址地址指
6、明该指令指明该指令指明该指令指明该指令的功能的功能的功能的功能若有若有若有若有多个操作数用多个操作数用多个操作数用多个操作数用“ “,” ”隔开隔开隔开隔开起说明作用的起说明作用的起说明作用的起说明作用的字符串字符串字符串字符串第第4 4章汇编程序设计基础章汇编程序设计基础 标号的命名规则:标号的命名规则:标号的命名规则:标号的命名规则: 字符个数为字符个数为字符个数为字符个数为1 1 1 131313131个。个。个。个。 第一个字符不能是数字,可以使用字母或第一个字符不能是数字,可以使用字母或第一个字符不能是数字,可以使用字母或第一个字符不能是数字,可以使用字母或点号点号点号点号. . .
7、 .、 、$ $ $ $、?和下划线、?和下划线、?和下划线、?和下划线_ _ _ _;从第二个字符;从第二个字符;从第二个字符;从第二个字符开始,可以是字符、数字和特殊字符。开始,可以是字符、数字和特殊字符。开始,可以是字符、数字和特殊字符。开始,可以是字符、数字和特殊字符。不能与系统专用的保留字相同不能与系统专用的保留字相同不能与系统专用的保留字相同不能与系统专用的保留字相同第第4 4章汇编程序设计基础章汇编程序设计基础 4.1.3 4.1.3 4.1.3 4.1.3 汇编语言数据和表达式汇编语言数据和表达式汇编语言数据和表达式汇编语言数据和表达式 1. 1. 1. 1. 常量常量常量常量
8、 数值常量数值常量数值常量数值常量 例如:例如:例如:例如: 25D25D、 80H80H、101001B101001B、4545 字符串常量字符串常量字符串常量字符串常量 例如:例如:例如:例如: 22、 A A 、” ”Computer”Computer”第第4 4章汇编程序设计基础章汇编程序设计基础 符号常量符号常量符号常量符号常量 用一个符号来代表常。用一个符号来代表常。用一个符号来代表常。用一个符号来代表常。1) 1) 1) 1) 等值伪指令等值伪指令等值伪指令等值伪指令EQUEQU格式:符号格式:符号格式:符号格式:符号 EQU EQU 表达式表达式表达式表达式例如:例如:例如:例
9、如: S1 EQU ABCDS1 EQU ABCDS1 EQU ABCDS1 EQU ABCD N EQU 12 N EQU 12 N EQU 12 N EQU 12 NUM EQU 23+25+N NUM EQU 23+25+N NUM EQU 23+25+N NUM EQU 23+25+N ADR1 EQU DS:BP+14H ADR1 EQU DS:BP+14H ADR1 EQU DS:BP+14H ADR1 EQU DS:BP+14H第第4 4章汇编程序设计基础章汇编程序设计基础 2) 2) 2) 2) 等号伪指令等号伪指令等号伪指令等号伪指令= = = =格式:符号格式:符号格式:符
10、号格式:符号 = = = = 表达式表达式表达式表达式例如:例如:例如:例如: NUM = 10HNUM = 10HNUM = 10HNUM = 10H 伪伪伪伪指指指指令令令令(EQU)(EQU)(EQU)(EQU)和和和和伪伪伪伪指指指指令令令令(=)(=)(=)(=)的的的的区区区区别别别别是是是是:在在在在同同同同一一一一源源源源程程程程序序序序中中中中,同同同同一一一一符符符符号号号号不不不不能能能能用用用用EQUEQUEQUEQU伪伪伪伪指指指指令令令令重重重重新定义,新定义,新定义,新定义,“=”=”=”=”可以。可以。可以。可以。第第4 4章汇编程序设计基础章汇编程序设计基础
11、2. 2. 2. 2. 变量变量变量变量 变量是指存放在存储单元中的数据,这变量是指存放在存储单元中的数据,这变量是指存放在存储单元中的数据,这变量是指存放在存储单元中的数据,这些数据在程序运行过程中可以改变。些数据在程序运行过程中可以改变。些数据在程序运行过程中可以改变。些数据在程序运行过程中可以改变。(1) (1) (1) (1) 数据定义伪指令数据定义伪指令数据定义伪指令数据定义伪指令 DBDBDBDB变量名变量名变量名变量名 DW DW DW DW 表达式表达式表达式表达式1 1 1 1,表达式,表达式,表达式,表达式2 2 2 2, DD DD DD DD可选,是分配可选,是分配可选
12、,是分配可选,是分配的存储单元的的存储单元的的存储单元的的存储单元的符号地址符号地址符号地址符号地址按按按按字节字节字节字节(DB)(DB)(DB)(DB)、字字字字(DW)(DW)(DW)(DW)和双字和双字和双字和双字(DD)(DD)(DD)(DD)分配内存单元分配内存单元分配内存单元分配内存单元设定设定设定设定变量的变量的变量的变量的初值初值初值初值第第4 4章汇编程序设计基础章汇编程序设计基础 1) 1) 1) 1) 数值表达式数值表达式数值表达式数值表达式 VARB1 DB 10HVARB1 DB 10HVARB1 DB 10HVARB1 DB 10H VARB2 DB 20H VA
13、RB2 DB 20H VARB2 DB 20H VARB2 DB 20H,30H30H30H30H,40H40H40H40H VARW DW 1122H VARW DW 1122H VARW DW 1122H VARW DW 1122H,3344H3344H3344H3344HVARB110HVARB220H30H40HVARW22H11H44H33H 上述变量的存储单元分配上述变量的存储单元分配上述变量的存储单元分配上述变量的存储单元分配及初始化情况如右图所示。及初始化情况如右图所示。及初始化情况如右图所示。及初始化情况如右图所示。 第第4 4章汇编程序设计基础章汇编程序设计基础 2) 2)
14、 2) 2) 字符串表达式字符串表达式字符串表达式字符串表达式 STR1 DB ABCDSTR1 DB ABCDSTR1 DB ABCDSTR1 DB ABCD STR2 DW AB, C STR2 DW AB, C STR2 DW AB, C STR2 DW AB, C 上述变量的存储单元分配上述变量的存储单元分配上述变量的存储单元分配上述变量的存储单元分配及初始化情况如右图所示。及初始化情况如右图所示。及初始化情况如右图所示。及初始化情况如右图所示。 STR141H42H43H44HSTR242H41H43H00H第第4 4章汇编程序设计基础章汇编程序设计基础 3) “?” 3) “?”
15、3) “?” 3) “?” 表达式表达式表达式表达式 STR1 DB ? , ?STR1 DB ? , ?STR1 DB ? , ?STR1 DB ? , ?4) DUP4) DUP4) DUP4) DUP表达式表达式表达式表达式 在连续的存储单元中重复定义一组数据。在连续的存储单元中重复定义一组数据。在连续的存储单元中重复定义一组数据。在连续的存储单元中重复定义一组数据。例如:例如:例如:例如: NUM1 DB 20H DUPNUM1 DB 20H DUPNUM1 DB 20H DUPNUM1 DB 20H DUP(5 5 5 5) NUM2 DW 10H DUPNUM2 DW 10H DU
16、PNUM2 DW 10H DUPNUM2 DW 10H DUP(? ? ? ?)第第4 4章汇编程序设计基础章汇编程序设计基础 4. 4. 4. 4. 运算符与表达式运算符与表达式运算符与表达式运算符与表达式(1) (1) (1) (1) 算术运算符算术运算符算术运算符算术运算符 参见下表。参见下表。参见下表。参见下表。第第4 4章汇编程序设计基础章汇编程序设计基础 表4.1-1 算术运算符 运算符运算符运算符运算符表达式表达式表达式表达式运算功能运算功能运算功能运算功能+ + 表达式表达式表达式表达式 正数正数正数正数( ( ( (单项运算符单项运算符单项运算符单项运算符) ) ) )- -
17、 - 表达式表达式表达式表达式 负数负数负数负数( ( ( (单项运算符单项运算符单项运算符单项运算符) ) ) )+表达式表达式表达式表达式1 + 1 + 表达式表达式表达式表达式2 2 加法加法加法加法- -表达式表达式表达式表达式1 - 1 - 表达式表达式表达式表达式2 2减法减法减法减法* *表达式表达式表达式表达式1 * 1 * 表达式表达式表达式表达式2 2乘法乘法乘法乘法 / /表达式表达式表达式表达式1 / 1 / 表达式表达式表达式表达式2 2除法(取商)除法(取商)除法(取商)除法(取商) MODMOD表达式表达式表达式表达式1 1 MODMODMODMOD 表达式表达式
18、表达式表达式2 2模除(取余数模除(取余数模除(取余数模除(取余数 )SHRSHR表达式表达式表达式表达式1 SHR 1 SHR 表达式表达式表达式表达式2 2右移右移右移右移 SHLSHL表达式表达式表达式表达式1 SHL 1 SHL 表达式表达式表达式表达式2 2左移左移左移左移 第第4 4章汇编程序设计基础章汇编程序设计基础 (2) (2) (2) (2) 逻辑运算符逻辑运算符逻辑运算符逻辑运算符表4.1-2 逻辑运算符 运算符运算符运算符运算符表达式表达式表达式表达式运算功能运算功能运算功能运算功能NOTNOTNOT NOT 表达式表达式表达式表达式 逻辑非逻辑非逻辑非逻辑非 ANDA
19、ND表达式表达式表达式表达式1 AND 1 AND 表达式表达式表达式表达式2 2 逻辑与逻辑与逻辑与逻辑与 OROR表达式表达式表达式表达式1 OR 1 OR 表达式表达式表达式表达式2 2 逻辑或逻辑或逻辑或逻辑或 XORXOR表达式表达式表达式表达式1 XOR 1 XOR 表达式表达式表达式表达式2 2 逻辑异或逻辑异或逻辑异或逻辑异或第第4 4章汇编程序设计基础章汇编程序设计基础 (3) (3) (3) (3) 关系运算符关系运算符关系运算符关系运算符表4.1-3 关系运算符 运算符运算符运算符运算符表达式表达式表达式表达式运算功能运算功能运算功能运算功能EQEQ表达式表达式表达式表达
20、式1 EQ 1 EQ 表达式表达式表达式表达式2 2 两个表达式相等为真两个表达式相等为真两个表达式相等为真两个表达式相等为真 NENE表达式表达式表达式表达式1 NE 1 NE 表达式表达式表达式表达式2 2 两个表达式不相等为真两个表达式不相等为真两个表达式不相等为真两个表达式不相等为真 LTLT表达式表达式表达式表达式1 LT 1 LT 表达式表达式表达式表达式2 2 表达式表达式表达式表达式1 1 表达式表达式表达式表达式2 2 为真为真为真为真 LELE表达式表达式表达式表达式1 LE 1 LE 表达式表达式表达式表达式2 2 表达式表达式表达式表达式1 = 1 1 1 1 表达式表
21、达式表达式表达式2 2 2 2 为真为真为真为真 GEGE表达式表达式表达式表达式1 GE 1 GE 表达式表达式表达式表达式2 2 表达式表达式表达式表达式1 = 1 = 1 = 1 = 表达式表达式表达式表达式2 2 2 2 为真为真为真为真 第第4 4章汇编程序设计基础章汇编程序设计基础 (4) (4) (4) (4) 数值返回运算符数值返回运算符数值返回运算符数值返回运算符1) SEG1) SEG1) SEG1) SEG和和和和OFFSETOFFSETOFFSETOFFSET运算符运算符运算符运算符 SEGSEGSEGSEG:取变量或标号所在段的段基值;取变量或标号所在段的段基值;取变
22、量或标号所在段的段基值;取变量或标号所在段的段基值; OFFSETOFFSETOFFSETOFFSET:取变量名或标号所在段内的偏移量。取变量名或标号所在段内的偏移量。取变量名或标号所在段内的偏移量。取变量名或标号所在段内的偏移量。例如:例如:例如:例如: MOV AXMOV AXMOV AXMOV AX,SEG VAR1SEG VAR1SEG VAR1SEG VAR1 MOV SI MOV SI MOV SI MOV SI,OFFSET VAR3OFFSET VAR3OFFSET VAR3OFFSET VAR3第第4 4章汇编程序设计基础章汇编程序设计基础 (5) (5) (5) (5) 属
23、性运属性运属性运属性运算符算符算符算符1) PTR1) PTR1) PTR1) PTR运算符运算符运算符运算符 格式格式格式格式:类型类型类型类型 PTR PTR PTR PTR 地址表达式地址表达式地址表达式地址表达式第第4 4章汇编程序设计基础章汇编程序设计基础 4.2.14.2.1源程序的基本结构框架源程序的基本结构框架 8086/80888086/80888086/80888086/8088汇编程序采用分段结构,一个完整汇编程序采用分段结构,一个完整汇编程序采用分段结构,一个完整汇编程序采用分段结构,一个完整的源程序可以包含多个逻辑段,但当前段最多只的源程序可以包含多个逻辑段,但当前段
24、最多只的源程序可以包含多个逻辑段,但当前段最多只的源程序可以包含多个逻辑段,但当前段最多只能有能有能有能有4 4 4 4个:数据段、堆栈段、附加段和代码段。个:数据段、堆栈段、附加段和代码段。个:数据段、堆栈段、附加段和代码段。个:数据段、堆栈段、附加段和代码段。4.2.1 4.2.1 4.2.1 4.2.1 段定义段定义段定义段定义段名段名段名段名 SEGMENT SEGMENT SEGMENT SEGMENT 定位类型定位类型定位类型定位类型 组合类型组合类型组合类型组合类型 类别名类别名类别名类别名 段名段名段名段名 ENDSENDSENDSENDS第第4 4章汇编程序设计基础章汇编程序
25、设计基础 例如:例如:例如:例如: Data1 Data1 SegmentSegment DB ? , 10H DB ? , 10H V1 DB 20H V1 DB 20H Data1 Data1 EndsEnds第第4 4章汇编程序设计基础章汇编程序设计基础 4.2.2 4.2.2 4.2.2 4.2.2 段寻址伪指令段寻址伪指令段寻址伪指令段寻址伪指令(ASSUME)(ASSUME)(ASSUME)(ASSUME) 段段段段寻寻寻寻址址址址伪伪伪伪指指指指令令令令用用用用来来来来建建建建立立立立段段段段与与与与段段段段寄寄寄寄存存存存器器器器之之之之间间间间的的的的联系。联系。联系。联系。
26、格式:格式:格式:格式: ASSUME ASSUME ASSUME ASSUME 段段段段寄寄寄寄存存存存器器器器名名名名: : : :段段段段名名名名,段段段段寄寄寄寄存存存存器器器器名名名名: : : :段段段段名名名名, 例如:例如:例如:例如: 第第4 4章汇编程序设计基础章汇编程序设计基础 DATA1DATA1SEGMENTSEGMENT ;定义段定义段定义段定义段DATA1DATA1 VAR1 DB 12H VAR1 DB 12HDATA1DATA1ENDSENDS ;DATA1DATA1段定义结束段定义结束段定义结束段定义结束DATA2DATA2SEGMENTSEGMENT ;定
27、义段定义段定义段定义段DATA2DATA2 VAR2 DB 34HVAR2 DB 34HDATA2DATA2ENDSENDS ;DATA2DATA2段定义结束段定义结束段定义结束段定义结束CODECODE SEGMENTSEGMENT VAR3 DB 56H VAR3 DB 56H ASSUME CS:CODE ASSUME CS:CODE,DS:DATA1DS:DATA1第第4 4章汇编程序设计基础章汇编程序设计基础 4.2.3 END4.2.3 END伪伪伪伪指令指令指令指令格式:格式: END 地址表达式地址表达式4.2.4 4.2.4 段寄存器的装入段寄存器的装入段寄存器的装入段寄存器
28、的装入1. DS1. DS和和和和ESES的装入的装入的装入的装入 在在在在指指指指令令令令中中中中直直直直接接接接引引引引用用用用段段段段名名名名时时时时,得得得得到到到到的的的的是是是是这这这这个段的段基值,这个段基值是个段的段基值,这个段基值是个段的段基值,这个段基值是个段的段基值,这个段基值是16161616位的立即数。位的立即数。位的立即数。位的立即数。第第4 4章汇编程序设计基础章汇编程序设计基础 例如:例如:例如:例如: CODE SEGMENTCODE SEGMENT ASSUME CS:CODE ASSUME CS:CODE,DS:DATA1DS:DATA1,ES:DATA2
29、ES:DATA2STARTSTART: MOV AXMOV AX,DATA1DATA1 ;设置设置设置设置DSDSDSDS MOV DSMOV DS,AXAX MOV AXMOV AX,DATA2DATA2 ;设置设置设置设置ESESESES MOV ESMOV ES,AXAX 第第4 4章汇编程序设计基础章汇编程序设计基础 2. SS2. SS的装入的装入的装入的装入 (1) (1) 自动装入自动装入自动装入自动装入 Stack1 Segment Para Stack1 Segment Para StackStack DwDw 20H dup(?) 20H dup(?)Stack1 Ends
30、 Stack1 Ends code Segment code Segment Assume code:CS , Stack1:SS Assume code:CS , Stack1:SS 第第4 4章汇编程序设计基础章汇编程序设计基础 (2) (2) 执行程序装入执行程序装入执行程序装入执行程序装入 Stack1 SegmentStack1 Segment DwDw 20H dup(?) 20H dup(?)Stack1 Ends Stack1 Ends code Segment code Segment Assume code:CS , Stack1:SS Assume code:CS , S
31、tack1:SS MovMov AX , Stack1 AX , Stack1 MovMov SS , AX SS , AX 第第4 4章汇编程序设计基础章汇编程序设计基础 2. CS2. CS的装入的装入的装入的装入 CSCS和和和和IPIP控控控控制制制制程程程程序序序序的的的的执执执执行行行行流流流流程程程程。装装装装载载载载目目目目标标标标代代代代码码码码时时时时自自自自动动动动将将将将CSCS和和和和IPIP初初初初始始始始化化化化为为为为程程程程序序序序将将将将要要要要执执执执行行行行的的的的第第第第一一一一条条条条指指指指令令令令的的的的段段段段基基基基值值值值和和和和偏偏偏偏移
32、移移移量量量量,它它它它们们们们由由由由ENDEND伪伪伪伪指指指指令令令令提提提提供供供供。如如如如果果果果ENDEND伪伪伪伪指指指指令令令令没没没没有有有有指指指指定定定定地地地地址址址址表表表表达达达达式式式式,则则则则源源源源程程程程序序序序中中中中第第第第一条指令语句的地址作为程序执行的起始地址。一条指令语句的地址作为程序执行的起始地址。一条指令语句的地址作为程序执行的起始地址。一条指令语句的地址作为程序执行的起始地址。基本框架STATCKSEGMENT STACK ;定义堆栈段定义堆栈段.STACKENDSDATASEGMENT;定义数据段;定义数据段DATAENDSCODESE
33、GMENT;定义代码段;定义代码段ASSUME CS:CODE, DS:DATA, SS:STATCK ;仅告诉汇编程序,;仅告诉汇编程序, 并不能赋值并不能赋值START:MOV AX, DATAMOV DS, AX.MOV AH, 4CH ;程序结束程序结束 返回返回DOSINT 21HCODEENDSEND START(X+125-X*Y)/ZSTATCK SEGMENT STACK DW 100H DUP(?)STACKENDSDATSEGMENTX DW 3Y DW 4Z DW 10DATENDSCODSEGMENTASSUME CS:COD, DS:DAT, SS:STACKSTA
34、RT:MOV AX, DATMOV DS, AXMOV AX, XIMUL YMOV CX, AXMOV BX, DXMOV AX, XADD AX,125CWDSUB AX, CXSBB DX, BXIDIV ZMOV X, AXMOV Y, DXMOV AH, 4CHINT 21HCOD ENDSEND START第第4 4章汇编程序设计基础章汇编程序设计基础 1 1、 返回返回返回返回DOSDOS系统的方式系统的方式系统的方式系统的方式 MovMov AH , 4CH AH , 4CH IntInt 21H 21H 2 2、 从键盘接收一串字符从键盘接收一串字符从键盘接收一串字符从键盘接
35、收一串字符MOV AH, 0AHMOV AH, 0AHINT 21HINT 21H ;DS:DX :DS:DX :缓冲区可接收的字符缓冲区可接收的字符缓冲区可接收的字符缓冲区可接收的字符 缓冲区缓冲区缓冲区缓冲区 4.3 系统功能调用第第4 4章汇编程序设计基础章汇编程序设计基础 3 3、 显示一个字符显示一个字符显示一个字符显示一个字符MOV DL, 41H ; AMOV DL, 41H ; A的的ASCIIASCII MOV AH , 2MOV AH , 2 INT 21H INT 21H 4 4、 从键盘接收一串字符从键盘接收一串字符从键盘接收一串字符从键盘接收一串字符MOV AH, 0
36、AHMOV AH, 0AHINT 21HINT 21H ;DS:DX :DS:DX :缓冲区可接收的字符缓冲区可接收的字符缓冲区可接收的字符缓冲区可接收的字符 缓冲区缓冲区缓冲区缓冲区 第第4 4章汇编程序设计基础章汇编程序设计基础 4.3 4.3 其它伪指令其它伪指令其它伪指令其它伪指令4.3.14.3.1 过程定义伪指令过程定义伪指令过程定义伪指令过程定义伪指令 格式:格式:格式:格式: 过程名过程名过程名过程名 PROC NEAR/FARPROC NEAR/FAR Ret Ret 过程名过程名过程名过程名 ENDPENDP第第4 4章汇编程序设计基础章汇编程序设计基础 4.3.24.3.
37、2 ORGORG伪指令伪指令伪指令伪指令 格式:格式:格式:格式: ORG ORG 数值表达式数值表达式数值表达式数值表达式 将将将将表表表表达达达达式式式式的的的的值值值值赋赋赋赋给给给给当当当当前前前前位位位位置置置置计计计计数数数数器器器器,符符符符号号号号“ “$ $” ”就代表当前位置计数器。就代表当前位置计数器。就代表当前位置计数器。就代表当前位置计数器。 例:例:例:例:第第4 4章汇编程序设计基础章汇编程序设计基础 DATA SEGMENT DATA SEGMENT ;定义段定义段定义段定义段DATADATA ORG 30H ORG 30H VAB1 DB 12H VAB1 D
38、B 12H,34H34H ORG $+20H ORG $+20H STR DB STRING STR DB STRING DATA ENDS DATA ENDS 第第4 4章汇编程序设计基础章汇编程序设计基础 4.44.4 汇编程序设计方法汇编程序设计方法汇编程序设计方法汇编程序设计方法 4.4.14.4.1 概述概述概述概述1.1. 程序设计步骤程序设计步骤程序设计步骤程序设计步骤 (1)(1) 分析问题,确定算法分析问题,确定算法分析问题,确定算法分析问题,确定算法 (2)(2) 绘制程序流程图绘制程序流程图绘制程序流程图绘制程序流程图 (3)(3) 编写程序编写程序编写程序编写程序(4)
39、(4) 调试程序调试程序调试程序调试程序第第4 4章汇编程序设计基础章汇编程序设计基础 4.4.24.4.2 顺序程序的设计顺序程序的设计顺序程序的设计顺序程序的设计例例例例 4-1 4-1 试编制程序,计算:试编制程序,计算:试编制程序,计算:试编制程序,计算: Z = (3X+Y-5)/2 Z = (3X+Y-5)/2 其中其中其中其中 X = 15H Y = 10HX = 15H Y = 10HDATADATA Segment Segment ; ;数据段数据段数据段数据段 X DW 15H X DW 15H Y DW 10H Y DW 10H Z DW Z DW ? DATA DATA
40、 EndsEnds第第4 4章汇编程序设计基础章汇编程序设计基础 CODECODE Segment ; Segment ;代码段代码段代码段代码段 Assume CS:CODE , DS:DATAAssume CS:CODE , DS:DATAStart:Start:MovMov AX, DATA AX, DATA MovMov DS, AX DS, AX; ;初始化初始化DSDS MovMov AX , X AX , X ShlShl AX , 1 AX , 1 ;AX;AX2X2X Add AX, X Add AX, X ;AX ;AX3X3X第第4 4章汇编程序设计基础章汇编程序设计基础
41、 Add AX, YAdd AX, Y;AX;AX3X+Y3X+Y Sub AX, 5 Sub AX, 5;AX;AX3X+Y-53X+Y-5 SarSar AX, 1 ;AX AX, 1 ;AX(3X+Y-5)/2(3X+Y-5)/2 MovMov Z, AX Z, AX; ;存放结果存放结果存放结果存放结果 MovMov AH, 4CH AH, 4CH IntInt 21H ; 21H ;返回返回返回返回DOSDOSCODE CODE EndsEnds End Start End Start第第4 4章汇编程序设计基础章汇编程序设计基础 4.4.3 4.4.3 4.4.3 4.4.3 分支
42、程序设计分支程序设计分支程序设计分支程序设计 在在在在汇汇汇汇编编编编语语语语言言言言中中中中分分分分支支支支程程程程序序序序主主主主要要要要是是是是通通通通过过过过转转转转移移移移指令来实现。指令来实现。指令来实现。指令来实现。1. 1. 1. 1. 转移指令转移指令转移指令转移指令(1) (1) (1) (1) 无条件转移指令无条件转移指令无条件转移指令无条件转移指令功能:无条件转移到功能:无条件转移到功能:无条件转移到功能:无条件转移到“目标地址目标地址目标地址目标地址”处执行。处执行。处执行。处执行。指令格式:指令格式:指令格式:指令格式: JMPJMP 目标地址目标地址目标地址目标地
43、址例如例如: jmp Label1 jmp BX第第4 4章汇编程序设计基础章汇编程序设计基础 (2) (2) (2) (2) 条件转移指令条件转移指令条件转移指令条件转移指令功功功功能能能能:条条条条件件件件成成成成立立立立时时时时转转转转移移移移到到到到“目目目目标标标标地地地地址址址址”处处处处执执执执行。行。行。行。指令格式:指令格式:指令格式:指令格式: J JXXXX 目标地址目标地址目标地址目标地址XX为1-3个字母表字母表字母表字母表示的转移条件示的转移条件示的转移条件示的转移条件说说说说明明明明:条条条条件件件件转转转转移移移移指指指指令令令令只只只只能能能能在在在在段段段段
44、内内内内转转转转移移移移,转转转转移移移移范围只能在范围只能在范围只能在范围只能在-128-128-128-128 127127127127之间。之间。之间。之间。 条件:条件:条件:条件: S SF(S SF(S SF(S SF(符号标志符号标志符号标志符号标志) ) ) ) C CF( C CF( C CF( C CF(进位标志进位标志进位标志进位标志) ) ) )第第4 4章汇编程序设计基础章汇编程序设计基础 Z ZF(Z ZF(Z ZF(Z ZF(零标志零标志零标志零标志) ) ) ) N NOT N NOT N NOT N NOT A Above A Above A Above A
45、Above L Less L Less L Less L Less E Equal E Equal E Equal E Equal G - Great G - Great G - Great G - Great例如:例如:例如:例如: JZ Lab1 JZ Lab1 JZ Lab1 JZ Lab1 JNZ Lab2 JNZ Lab2 JNZ Lab2 JNZ Lab2第第4 4章汇编程序设计基础章汇编程序设计基础 2.2.2.2.分支程序的设计分支程序的设计分支程序的设计分支程序的设计条件条件条件条件YN条件条件条件条件图图图图4.4-34.4-3 分支程序结构形式分支程序结构形式分支程序结构
46、形式分支程序结构形式第第4 4章汇编程序设计基础章汇编程序设计基础 1 1条件转移指令实现分支程序条件转移指令实现分支程序条件转移指令实现分支程序条件转移指令实现分支程序例例例例2 2 编制程序,把编制程序,把编制程序,把编制程序,把DA1DA1字节单元中数据变成偶数。字节单元中数据变成偶数。字节单元中数据变成偶数。字节单元中数据变成偶数。 TEST DA1, 01HTEST DA1, 01HTEST DA1, 01HTEST DA1, 01H JZ NEXT ; JZ NEXT ; JZ NEXT ; JZ NEXT ;是偶数,转移是偶数,转移是偶数,转移是偶数,转移 INC DA1 ;IN
47、C DA1 ;INC DA1 ;INC DA1 ;是奇数,加是奇数,加是奇数,加是奇数,加1 1 1 1NEXT: NEXT: NEXT: NEXT: 第第4 4章汇编程序设计基础章汇编程序设计基础 例例例例3 3 设设设设X X、Y Y为为为为带带带带符符符符号号号号的的的的字字字字节节节节变变变变量量量量,编编编编程程程程实实实实现现现现下面的公式。下面的公式。下面的公式。下面的公式。 1 X0Y= 0 X=0 -1 X0 CMP X, 0 ;CMP X, 0 ;比较比较比较比较X X与与与与0 0进行比较进行比较进行比较进行比较JGE BIGER ;XJGE BIGER ;X 0 0,
48、,转移到转移到转移到转移到BIGERBIGERMOV Y, -1 ;X0MOV Y, -1 ;X0 ;X0,Y Y置置置置1 1 JMP NEXT JMP NEXTEQUL: EQUL: MOV Y, 0 MOV Y, 0 ;Y ;Y置置0 0NEXT: NEXT: 第第4 4章汇编程序设计基础章汇编程序设计基础 2 2 2 2用跳转表实现多路分支用跳转表实现多路分支用跳转表实现多路分支用跳转表实现多路分支 对于多分支结构通常采用跳转表来实现。对于多分支结构通常采用跳转表来实现。对于多分支结构通常采用跳转表来实现。对于多分支结构通常采用跳转表来实现。 例例例例4 4 4 4 现现现现有有有有若
49、若若若干干干干个个个个程程程程序序序序段段段段,每每每每个个个个程程程程序序序序段段段段的的的的入入入入口口口口地地地地址址址址分分分分别别别别是是是是Sub1Sub1Sub1Sub1、Sub2Sub2Sub2Sub2、SubnSubnSubnSubn,试试试试编编编编制制制制一一一一程程程程序,根据指定的参数转入相应的程序段。序,根据指定的参数转入相应的程序段。序,根据指定的参数转入相应的程序段。序,根据指定的参数转入相应的程序段。DATA SEGMENT DATA SEGMENT ;定义数据段定义数据段定义数据段定义数据段JUMP_TABLE DW SUB1, SUB2, SUB3JUMP
50、_TABLE DW SUB1, SUB2, SUB3 DW SUB4, SUB5 DW SUB4, SUB5 PARAM PARAM DB 3 DB 3DATADATA ENDS ENDS ;数据段结束数据段结束数据段结束数据段结束第第4 4章汇编程序设计基础章汇编程序设计基础 STACK1STACK1SEGMENT STACK SEGMENT STACK ;定义堆栈段定义堆栈段定义堆栈段定义堆栈段 DW 20H DUP(0)DW 20H DUP(0)STACK1STACK1ENDS ENDS ;堆栈段结束堆栈段结束堆栈段结束堆栈段结束CODECODESEGMENT SEGMENT ;定义代码
51、段定义代码段定义代码段定义代码段 ASSUME CS:CODE, DS:DATA, SS:STACK1ASSUME CS:CODE, DS:DATA, SS:STACK1BEGIN:BEGIN: MOV MOVAX, DATAAX, DATA; ;取取取取DATADATA段的段基值段的段基值段的段基值段的段基值 MOV MOV DS, AXDS, AX; ;初始化段寄存器初始化段寄存器初始化段寄存器初始化段寄存器DSDS XOR AH, AHXOR AH, AH ;寄存器寄存器寄存器寄存器AHAH清清清清0 0第第4 4章汇编程序设计基础章汇编程序设计基础 MOV AL, PARAM MOV
52、AL, PARAM ;参数参数参数参数PARAMPARAM送送送送ALALDEC ALDEC AL ;ALAL(AL)-1(AL)-1SHL AL, 1SHL AL, 1 ;ALAL(AL)*2(AL)*2LEA BX, JUMP_TABLE LEA BX, JUMP_TABLE ;取跳转表首址取跳转表首址取跳转表首址取跳转表首址ADD ADD BX, AXBX, AXJMP JMP BXBX ; ;转移到对应分支转移到对应分支转移到对应分支转移到对应分支SUB1: SUB1: JMP JMP END0END0SUB2: SUB2: JMP JMP END0END0第第4 4章汇编程序设计基础
53、章汇编程序设计基础 END0:END0: MOV MOVAH, 4CH AH, 4CH ;返回返回返回返回DOSDOS INT INT 21H21HCODE CODE ENDS ENDS END END BEGINBEGIN第第4 4章汇编程序设计基础章汇编程序设计基础 4.4.44.4.4 循环程序设计循环程序设计循环程序设计循环程序设计1 1 1 1循环控制指令循环控制指令循环控制指令循环控制指令(1) LOOP(1) LOOP(1) LOOP(1) LOOP指令指令指令指令 格式:格式:格式:格式:LOOP LOOP LOOP LOOP 目标地址目标地址目标地址目标地址 功功功功能能能能
54、:首首首首先先先先将将将将CXCXCXCX内内内内容容容容减减减减1 1 1 1,若若若若(CX)0(CX)0(CX)0(CX)0,则则则则转转转转至目标地址处执循环,否则顺序执行。例如:至目标地址处执循环,否则顺序执行。例如:至目标地址处执循环,否则顺序执行。例如:至目标地址处执循环,否则顺序执行。例如: Loop1: Loop Loop1条件:条件:条件:条件:(CX)0(CX)0(CX)0(CX)0 ,否则否则否则否则第第4 4章汇编程序设计基础章汇编程序设计基础 例例例例6 6 计算计算计算计算1+2+3+1001+2+3+100的和。的和。的和。的和。 MOV CX , 100 MO
55、V CX , 100 ;设置循环次数设置循环次数设置循环次数设置循环次数 MOV AX MOV AX ,0 0 ;AXAX保存计算结果保存计算结果保存计算结果保存计算结果L1:L1: ADD AX , CX ADD AX , CX LOOP L1 LOOP L1 第第4 4章汇编程序设计基础章汇编程序设计基础 (1) LOOPZ/LOOPE(1) LOOPZ/LOOPE(1) LOOPZ/LOOPE(1) LOOPZ/LOOPE指令指令指令指令 格式:格式:格式:格式: LOOPZ/LOOPE LOOPZ/LOOPE LOOPZ/LOOPE LOOPZ/LOOPE 目标地址目标地址目标地址目标
56、地址 功功功功能能能能:首首首首先先先先将将将将CXCXCXCX内内内内容容容容减减减减1 1 1 1,若若若若(CX)0(CX)0(CX)0(CX)0且且且且ZF=1ZF=1ZF=1ZF=1,则则则则转转转转至至至至目目目目标标标标地地地地址址址址处处处处执执执执循循循循环环环环,否否否否则则则则顺顺顺顺序序序序执执执执行行行行。例例例例如:如:如:如: Loop1: Loopz Loop1条件:条件:条件:条件:(CX)0(CX)0(CX)0(CX)0且且且且ZF=1ZF=1ZF=1ZF=1,否则否则否则否则第第4 4章汇编程序设计基础章汇编程序设计基础 例例例例7 7 7 7 编编编编程
57、程程程实实实实现现现现在在在在字字字字符符符符串串串串中中中中查查查查找找找找第第第第一一一一个个个个非非非非空空空空字字字字符,并将其在字符串中的位置送入符,并将其在字符串中的位置送入符,并将其在字符串中的位置送入符,并将其在字符串中的位置送入INDEXINDEXINDEXINDEX单元。单元。单元。单元。 STR DB STR DB “ “ THIS IS A TEST. THIS IS A TEST.” ” LEN EQU $-STR LEN EQU $-STR MOV CX, LEN MOV CX, LEN;设置循环次数设置循环次数设置循环次数设置循环次数 MOV BX, -1MOV
58、BX, -1;地址指针初值地址指针初值地址指针初值地址指针初值 NEXT: NEXT: INC BX INC BX CMP STRBX, 20H CMP STRBX, 20H ;判断是否为空字符判断是否为空字符判断是否为空字符判断是否为空字符第第4 4章汇编程序设计基础章汇编程序设计基础 LOOPE NEXTLOOPE NEXT ;空字符且空字符且空字符且空字符且CX0CX0,继续循环继续循环继续循环继续循环 JNE FOUNDJNE FOUND ;找到非空字符找到非空字符找到非空字符找到非空字符 JMP NONFOUND JMP NONFOUND ; 未找到非空字符未找到非空字符未找到非空字
59、符未找到非空字符 FOUNDFOUND: JMP END0JMP END0NONFOUND:NONFOUND: JMP END0 JMP END0第第4 4章汇编程序设计基础章汇编程序设计基础 (3) LOOPNZ/LOOPNE(3) LOOPNZ/LOOPNE(3) LOOPNZ/LOOPNE(3) LOOPNZ/LOOPNE指令指令指令指令 格式:格式:格式:格式: LOOPNZ/LOOPNE LOOPNZ/LOOPNE LOOPNZ/LOOPNE LOOPNZ/LOOPNE 目标地址目标地址目标地址目标地址 功功功功能能能能:首首首首先先先先将将将将CXCXCXCX内内内内容容容容减减减
60、减1 1 1 1,若若若若(CX)0(CX)0(CX)0(CX)0且且且且ZF=0ZF=0ZF=0ZF=0,则则则则转转转转至至至至目目目目标标标标地地地地址址址址处处处处执执执执循循循循环环环环,否否否否则则则则顺顺顺顺序序序序执执执执行行行行。例例例例如:如:如:如: Loop1: Loopz Loop1条件:条件:条件:条件:(CX)0(CX)0(CX)0(CX)0且且且且ZF=0ZF=0ZF=0ZF=0,否则否则否则否则第第4 4章汇编程序设计基础章汇编程序设计基础 2 2 2 2 循环程序结构循环程序结构循环程序结构循环程序结构初始化部分初始化部分初始化部分初始化部分 工作部分工作部
61、分工作部分工作部分 修改部分修改部分修改部分修改部分 结束处理部分结束处理部分结束处理部分结束处理部分 循环结束循环结束循环结束循环结束? ? ? ?图图图图4.4-9 4.4-9 4.4-9 4.4-9 (a a a a)先执行后判断先执行后判断先执行后判断先执行后判断 N NY Y第第4 4章汇编程序设计基础章汇编程序设计基础 初始化部分初始化部分初始化部分初始化部分 工作部分工作部分工作部分工作部分 修改部分修改部分修改部分修改部分 结束处理部分结束处理部分结束处理部分结束处理部分 循环结束循环结束循环结束循环结束? ? ? ?图图图图4.4-9 4.4-9 4.4-9 4.4-9 (b
62、 b b b)先判断后执行先判断后执行先判断后执行先判断后执行 N NY Y第第4 4章汇编程序设计基础章汇编程序设计基础 3 3 3 3单重循环程序设计单重循环程序设计单重循环程序设计单重循环程序设计 (1) (1) (1) (1) 计数控制循环计数控制循环计数控制循环计数控制循环 即即即即用用用用CXCXCXCX的的的的值值值值来来来来控控控控制制制制循循循循环环环环次次次次数数数数,常常常常用用用用于于于于循循循循环环环环次次次次数数数数已已已已知知知知的的的的情情情情况况况况。每每每每循循循循环环环环一一一一次次次次,计计计计数数数数器器器器计计计计数数数数一一一一次次次次,直直直直到
63、计数器达到预定值到计数器达到预定值到计数器达到预定值到计数器达到预定值(CX)= 0(CX)= 0(CX)= 0(CX)= 0,循环结束。循环结束。循环结束。循环结束。 (2) (2) (2) (2) 条件控制循环条件控制循环条件控制循环条件控制循环 循循循循环环环环次次次次数数数数无无无无法法法法事事事事先先先先确确确确定定定定,只只只只能能能能用用用用“条条条条件件件件”来来来来控控控控制制制制循循循循环环环环。每每每每循循循循环环环环一一一一次次次次,便便便便对对对对条条条条件件件件进进进进行行行行检检检检测测测测,若若若若满满满满足终止循环的条件,便结束循环,否则继续循环。足终止循环的
64、条件,便结束循环,否则继续循环。足终止循环的条件,便结束循环,否则继续循环。足终止循环的条件,便结束循环,否则继续循环。 第第4 4章汇编程序设计基础章汇编程序设计基础 4 4多重循环程序设计多重循环程序设计多重循环程序设计多重循环程序设计 多多多多重重重重循循循循环环环环结结结结构构构构是是是是指指指指循循循循环环环环程程程程序序序序的的的的循循循循环环环环体体体体中中中中又又又又包包包包含了另一个循环,即循环的嵌套。含了另一个循环,即循环的嵌套。含了另一个循环,即循环的嵌套。含了另一个循环,即循环的嵌套。 在在在在编编编编制制制制多多多多重重重重循循循循环环环环程程程程序序序序时时时时,首
65、首首首先先先先要要要要分分分分清清清清内内内内外外外外循循循循环环环环的的的的任任任任务务务务和和和和要要要要求求求求,接接接接着着着着划划划划分分分分内内内内外外外外循循循循环环环环中中中中有有有有规规规规律律律律变变变变化化化化的的的的参参参参数数数数,如如如如哪哪哪哪些些些些是是是是内内内内循循循循环环环环的的的的地地地地址址址址指指指指针针针针、计计计计数数数数器器器器,哪哪哪哪些些些些是是是是外外外外循循循循环环环环的的的的地地地地址址址址指指指指针针针针、计计计计数数数数器器器器。然然然然后后后后分分分分别别别别确确确确定内外循环的控制方法和具体实施。定内外循环的控制方法和具体实施
66、。定内外循环的控制方法和具体实施。定内外循环的控制方法和具体实施。 注意:内外循环都要修改注意:内外循环都要修改注意:内外循环都要修改注意:内外循环都要修改CXCXCXCX寄存器的内容。寄存器的内容。寄存器的内容。寄存器的内容。第第4 4章汇编程序设计基础章汇编程序设计基础 4.4.54.4.5 子程序设计子程序设计子程序设计子程序设计 在在在在程程程程序序序序设设设设计计计计使使使使用用用用子子子子程程程程序序序序可可可可减减减减少少少少重重重重复复复复编编编编写写写写程程程程序序序序,缩短目标代码,节省内存空间,便于阅读程序。缩短目标代码,节省内存空间,便于阅读程序。缩短目标代码,节省内存
67、空间,便于阅读程序。缩短目标代码,节省内存空间,便于阅读程序。 在在在在汇汇汇汇编编编编语语语语言言言言中中中中子子子子程程程程序序序序是是是是以以以以“ “过过过过程程程程” ”的的的的形形形形式式式式出出出出现的。现的。现的。现的。第第4 4章汇编程序设计基础章汇编程序设计基础 1.1. 过程定义伪指令过程定义伪指令过程定义伪指令过程定义伪指令 格式:格式:格式:格式: 过程名过程名过程名过程名 Proc Near /FarProc Near /Far RetRet 过程名过程名过程名过程名 EndpEndp 过程定义必在一个逻辑段内。过程定义必在一个逻辑段内。过程定义必在一个逻辑段内。过
68、程定义必在一个逻辑段内。Code1 Segment p1 Proc p1 Endp P2 Proc Far p2 endpCode Ends第第4 4章汇编程序设计基础章汇编程序设计基础 2.2. 子程序调用与子程序调用与子程序调用与子程序调用与 调用格式:调用格式:调用格式:调用格式: CallCall 子程序入口地址子程序入口地址子程序入口地址子程序入口地址 返回格式:返回格式:返回格式:返回格式: Ret Ret n n ( (其中其中其中其中n n是偶数是偶数是偶数是偶数) )第第4 4章汇编程序设计基础章汇编程序设计基础 在编写子程序时,应满足下面的基本要求:在编写子程序时,应满足下
69、面的基本要求:在编写子程序时,应满足下面的基本要求:在编写子程序时,应满足下面的基本要求:1 1适度地划分并确定子程序功能适度地划分并确定子程序功能适度地划分并确定子程序功能适度地划分并确定子程序功能 2 2选择适当的参量传递途径选择适当的参量传递途径选择适当的参量传递途径选择适当的参量传递途径 3 3信息的保存信息的保存信息的保存信息的保存 4 4清晰的子程序文本清晰的子程序文本清晰的子程序文本清晰的子程序文本 4 4子程序与主程序的参数传递和设计举例子程序与主程序的参数传递和设计举例子程序与主程序的参数传递和设计举例子程序与主程序的参数传递和设计举例第第4 4章汇编程序设计基础章汇编程序设
70、计基础 (1) (1) 通过寄存器传递参量通过寄存器传递参量通过寄存器传递参量通过寄存器传递参量 例例例例12 12 12 12 设设设设在在在在数数数数据据据据段段段段中中中中有有有有一一一一数数数数组组组组,数数数数组组组组中中中中元元元元素素素素为为为为字字字字类类类类型型型型。试试试试编编编编制制制制程程程程序序序序,用用用用减减减减奇奇奇奇数数数数法法法法对对对对数数数数组组组组中中中中各各各各个个个个数数数数据据据据逐逐逐逐一一一一开开开开平平平平方方方方,并并并并把把把把结结结结果果果果依依依依次次次次存存存存入入入入字字字字节节节节数数数数组组组组PFGPFGPFGPFG中。中
71、。中。中。DATA SEGMENTDATA SEGMENT DA1 DW 1234H DA1 DW 1234H,5678H5678H,3456H3456H COUNT EQU COUNT EQU ( ($-DA1$-DA1)/)/2 2 PFG DB COUNT DUP PFG DB COUNT DUP(0 0)DATA ENDSDATA ENDS第第4 4章汇编程序设计基础章汇编程序设计基础 DATA SEGMENTDATA SEGMENT DA1 DW 1234H DA1 DW 1234H,5678H5678H,3456H3456H COUNT EQU COUNT EQU ( ($-DA1
72、$-DA1)/)/2 2 PFG DB COUNT DUP PFG DB COUNT DUP(0 0)DATA ENDSDATA ENDSSTACK1 STACK1 SEGMENT PARA STACKSEGMENT PARA STACK DW 20H DUP DW 20H DUP(0 0)STACK1 STACK1 ENDSENDS第第4 4章汇编程序设计基础章汇编程序设计基础 CODECODE SEGMENTSEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATA,SS:STACK1SS:STACK1STARTSTART: MOV AXMOV A
73、X,DATADATA MOV DS MOV DS,AXAX MOV CX MOV CX,COUNTCOUNT ; ;循环计数器初值循环计数器初值循环计数器初值循环计数器初值 LEA SILEA SI,DA1DA1 LEA DI LEA DI,PFGPFG LOP LOP: MOV AXMOV AX,SISI ; ;取被开方数取被开方数取被开方数取被开方数第第4 4章汇编程序设计基础章汇编程序设计基础 PUSH CXPUSH CX ; ; 保存循环计数器保存循环计数器保存循环计数器保存循环计数器CALL SQR_PROC ; CALL SQR_PROC ; 调用子程序调用子程序调用子程序调用子程
74、序MOV DIMOV DI,CLCL; ;存平方根存平方根存平方根存平方根POP CXPOP CX; ;恢复循环计数器恢复循环计数器恢复循环计数器恢复循环计数器ADD SIADD SI,2 2; ;修改地址指针修改地址指针修改地址指针修改地址指针INC DIINC DILOOP LOPLOOP LOPMOV AHMOV AH,4CH4CHINT 21HINT 21H第第4 4章汇编程序设计基础章汇编程序设计基础 ; ;子程序子程序子程序子程序SQR_PROC SQR_PROC :开平方开平方开平方开平方; ; 入口参数入口参数入口参数入口参数:; (AX) ; (AX) 为被开方数为被开方数为
75、被开方数为被开方数; (CL); (CL)为开方结果为开方结果为开方结果为开方结果SQR_PROC PROCSQR_PROC PROC; ;开平方子程序开平方子程序开平方子程序开平方子程序 MOV CLMOV CL,0 0; ;开平方计数器开平方计数器开平方计数器开平方计数器CLCL0 0 MOV DX MOV DX,1 1; ;奇数奇数奇数奇数1 1第第4 4章汇编程序设计基础章汇编程序设计基础 SQRSQR: SUB AXSUB AX,DXDX ; ;减奇数减奇数减奇数减奇数 JB EXIT0JB EXIT0 ; ;不够减,转移不够减,转移不够减,转移不够减,转移 INC CLINC CL
76、 ; ;够减,计数够减,计数够减,计数够减,计数 ADD DXADD DX,2 2 ; ;形成下一个奇数形成下一个奇数形成下一个奇数形成下一个奇数 JMP SQRJMP SQR EXIT0: RETEXIT0: RET; ;子程序返回子程序返回子程序返回子程序返回 SQR_PROC ENDPSQR_PROC ENDPCODE ENDSCODE ENDS END START END START第第4 4章汇编程序设计基础章汇编程序设计基础 (2) (2) 通过堆栈传递参数通过堆栈传递参数通过堆栈传递参数通过堆栈传递参数 将将将将要要要要传传传传递递递递的的的的参参参参数数数数放放放放在在在在寄寄
77、寄寄存存存存器器器器中中中中,主主主主程程程程序序序序和和和和子子子子程序通过对堆栈的访问取得所需的参数。程序通过对堆栈的访问取得所需的参数。程序通过对堆栈的访问取得所需的参数。程序通过对堆栈的访问取得所需的参数。(3)(3)(3)(3)用存储单元传递参数用存储单元传递参数用存储单元传递参数用存储单元传递参数4 4子程序嵌套与递归调用子程序嵌套与递归调用子程序嵌套与递归调用子程序嵌套与递归调用(1) (1) 子程序嵌套子程序嵌套子程序嵌套子程序嵌套 即一个子程可以调用另外一个子程序。即一个子程可以调用另外一个子程序。即一个子程可以调用另外一个子程序。即一个子程可以调用另外一个子程序。第第4 4
78、章汇编程序设计基础章汇编程序设计基础 2 2子程序递归调用子程序递归调用子程序递归调用子程序递归调用 一一一一个个个个子子子子程程程程序序序序直直直直接接接接或或或或间间间间接接接接调调调调用用用用自自自自己己己己,叫叫叫叫递递递递归归归归调调调调用用用用。递递递递归归归归调调调调用用用用是是是是子子子子程程程程序序序序嵌嵌嵌嵌套套套套的的的的特特特特例例例例,在在在在某某某某些些些些应应应应用用用用场场场场合合合合它是很有用的程序设计技术。它是很有用的程序设计技术。它是很有用的程序设计技术。它是很有用的程序设计技术。例例例例14 14 14 14 子程序递归调用示例(计算子程序递归调用示例(
79、计算子程序递归调用示例(计算子程序递归调用示例(计算N N N N!)。!)。!)。!)。N! =N(N-1)! N11 N=1第第4 4章汇编程序设计基础章汇编程序设计基础 DATADATA SEGMENTSEGMENT N DW 6 N DW 6 M DW M DW ? DATA DATA ENDSENDSSTK1 STK1 SEGMENT STACKSEGMENT STACKDW 40H DUPDW 40H DUP(0 0)STK1 STK1 ENDSENDSCODE CODE SEGMENTSEGMENT ASSUME CS:CODE, DS:DATA, SS:STK1 ASSUME
80、CS:CODE, DS:DATA, SS:STK1STARTSTART: 第第4 4章汇编程序设计基础章汇编程序设计基础 MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAX MOV AX MOV AX,N N CALL FACT ; CALL FACT ;调用子程序调用子程序 MOV AHMOV AH,4CH4CH INT 21H ; INT 21H ;返回返回DOSDOS第第4 4章汇编程序设计基础章汇编程序设计基础 FACT FACT PROCPROCCMP AXCMP AX,1 1JNE NEXTJNE NEXT; ;不等于不等于不等于不等于1 1 MOV
81、M MOV M,1 1 JMP EXIT0 JMP EXIT0 NEXT NEXT: PUSH AXPUSH AX; ;压栈压栈压栈压栈 DEC AXDEC AX CALL FACTCALL FACT ; ;递归调用递归调用递归调用递归调用 POP AXPOP AX MUL MMUL M第第4 4章汇编程序设计基础章汇编程序设计基础 MOV MMOV M,AXAXEXIT0EXIT0:RETRETFACT FACT ENDPENDPCODE CODE ENDSENDS END START END START 递递递递归归归归调调调调用用用用可可可可以以以以简简简简化化化化算算算算法法法法,且且
82、且且程程程程序序序序简简简简洁洁洁洁,但但但但由由由由于要使用堆栈,因此在存储空间上需要一些开销。于要使用堆栈,因此在存储空间上需要一些开销。于要使用堆栈,因此在存储空间上需要一些开销。于要使用堆栈,因此在存储空间上需要一些开销。 举例在ADDR单元中存放着16位数Y的地址,统计Y中放1的个数,结果存入COUNT单元中例:按15行*16列的表格形式显示ASCII码10H FFH的所有字符。每16个字符为1行,每行中的相邻两个字符之间用空格隔开。MOV AH, 02HMOV DL, 输出字符的ASCIIINT 21HCOD SEGMENTASSUME CS:CODSTART:MOV DL,10H
83、 ;显示的字符MOV CH,15NEXT_H:MOV CL,16 ;1行显示的个数NEXT_L:MOV AH,02INT 21HPUSH DXMOV DL,20H; 显示空格INT 21HPOP DXINC DLDEC CLJNZ NEXT_LPUSH DXMOV AH,02MOV DL, 0DH; 换行INT 21HMOV DL, 0AH;回车INT 21HPOP DXDEC CH JNZ NEXT_HMOV AH,4CHINT 21HCODENDSEND START两个6字节数相加第第4 4章汇编程序设计基础章汇编程序设计基础 4.5 4.5 4.5 4.5 汇编语言程序的开发过程汇编语言
84、程序的开发过程汇编语言程序的开发过程汇编语言程序的开发过程 汇汇汇汇编编编编语语语语言言言言程程程程序序序序的的的的开开开开发发发发过过过过程程程程须须须须经经经经过过过过:汇汇汇汇编编编编连连连连接接接接、最后可执行程序。最后可执行程序。最后可执行程序。最后可执行程序。下下下下 面面面面 介介介介 绍绍绍绍 宏宏宏宏 汇汇汇汇 编编编编 MASMMASMMASMMASM软软软软 件件件件 的的的的 使使使使 用用用用 , 假假假假 定定定定 在在在在C:MASMC:MASMC:MASMC:MASM目目目目录录录录下下下下,存存存存放放放放了了了了宏宏宏宏汇汇汇汇编编编编程程程程序序序序MAS
85、MMASMMASMMASM和和和和源源源源程程程程序序序序EXAMPLE.ASMEXAMPLE.ASMEXAMPLE.ASMEXAMPLE.ASM。第第4 4章汇编程序设计基础章汇编程序设计基础 一一一一MASMMASMMASMMASM的操作的操作的操作的操作 在在在在C C C C:MASMMASMMASMMASM提提提提示示示示状状状状态态态态下下下下,运运运运行行行行MASMMASMMASMMASM,即即即即键键键键入入入入命令:命令:命令:命令:C C C C:MASMMASMMASMMASMMASMMASMMASMMASM Source filename .ASM:Source fi
86、lename .ASM:Source filename .ASM:Source filename .ASM:EXAMPLEEXAMPLEEXAMPLEEXAMPLE Object filename EXAMPLE.OBJ:Object filename EXAMPLE.OBJ:Object filename EXAMPLE.OBJ:Object filename EXAMPLE.OBJ: SourcelistingSourcelistingSourcelistingSourcelisting NUL.LST: NUL.LST: NUL.LST: NUL.LST: Cross-reference
87、 NUL.CRF:Cross-reference NUL.CRF:Cross-reference NUL.CRF:Cross-reference NUL.CRF: 第第4 4章汇编程序设计基础章汇编程序设计基础 在在在在结结结结束束束束上上上上述述述述提提提提示示示示应应应应答答答答之之之之后后后后,MASMMASMMASMMASM便便便便对对对对源源源源程程程程序序序序进进进进行行行行扫扫扫扫描描描描和和和和语语语语法法法法检检检检查查查查。在在在在没没没没有有有有严严严严重重重重语语语语法法法法错错错错误误误误的的的的情情情情况况况况下下下下生生生生成成成成目目目目标标标标文文文文件件件件
88、,扩扩扩扩展展展展名名名名为为为为.OBJ.OBJ.OBJ.OBJ。若若若若有有有有语语语语法法法法错错错错误,则显示错误信息。误,则显示错误信息。误,则显示错误信息。误,则显示错误信息。第第4 4章汇编程序设计基础章汇编程序设计基础 二汇编状态信息和错误代码二汇编状态信息和错误代码二汇编状态信息和错误代码二汇编状态信息和错误代码在汇编后,显示如下信息在汇编后,显示如下信息在汇编后,显示如下信息在汇编后,显示如下信息: :Microsoft (R) Macro Assembler Version 5.00Microsoft (R) Macro Assembler Version 5.00Mic
89、rosoft (R) Macro Assembler Version 5.00Microsoft (R) Macro Assembler Version 5.00Copyright(C) Copyright(C) Copyright(C) Copyright(C) Microsoft Microsoft Microsoft Microsoft Corp.1981, Corp.1981, Corp.1981, Corp.1981, 1987, 1987, 1987, 1987, All All All All right reservedright reservedright reservedr
90、ight reserved47904 + 353887 Bytes symbol space free47904 + 353887 Bytes symbol space free47904 + 353887 Bytes symbol space free47904 + 353887 Bytes symbol space free0 Warning Errors0 Warning Errors0 Warning Errors0 Warning Errors0 Severe Errors0 Severe Errors0 Severe Errors0 Severe Errors第第4 4章汇编程序设
91、计基础章汇编程序设计基础 三生成的文件三生成的文件三生成的文件三生成的文件1 1 1 1目标文件(目标文件(目标文件(目标文件(OBJOBJOBJOBJ) 一个二进制目标文件。一个二进制目标文件。一个二进制目标文件。一个二进制目标文件。2 2 2 2列表文件(列表文件(列表文件(列表文件(LSTLSTLSTLST) 列表文件是一个有助于程序调试的文本文件。列表文件是一个有助于程序调试的文本文件。列表文件是一个有助于程序调试的文本文件。列表文件是一个有助于程序调试的文本文件。3 3 3 3交叉引用文件(交叉引用文件(交叉引用文件(交叉引用文件(CRFCRFCRFCRF) 列列列列出出出出源源源源
92、程程程程序序序序自自自自定定定定义义义义的的的的各各各各个个个个符符符符号号号号,指指指指明明明明这这这这些些些些符符符符号号号号在源程序的定义位置和符号引用位置。在源程序的定义位置和符号引用位置。在源程序的定义位置和符号引用位置。在源程序的定义位置和符号引用位置。 第第4 4章汇编程序设计基础章汇编程序设计基础 4.5.3 4.5.3 连接连接连接连接 连连连连接接接接程程程程序序序序LINKLINK能能能能够够够够把把把把一一一一个个个个或或或或多多多多个个个个独独独独立立立立的的的的目目目目标标标标文文文文件件件件和和和和定定定定义义义义于于于于库库库库文文文文件件件件.LIB.LIB中
93、中中中的的的的子子子子程程程程序序序序与与与与变变变变量量量量,连连连连接接接接装装装装配配配配成成成成一一一一个个个个可可可可重重重重定定定定位位位位的的的的可可可可执执执执行行行行文文文文件件件件,扩扩扩扩展展展展名名名名为为为为.EXE.EXE。连连连连接接接接时时时时,除除除除了了了了生生生生成成成成.EXE.EXE程程程程序序序序外外外外,用用用用户户户户还还还还可可可可以根据需要,生成相应的内存映像文件。以根据需要,生成相应的内存映像文件。以根据需要,生成相应的内存映像文件。以根据需要,生成相应的内存映像文件。在在在在DOSDOSDOSDOS提示状态下执行如下命令:提示状态下执行如
94、下命令:提示状态下执行如下命令:提示状态下执行如下命令:C:MASMC:MASMLINKLINK 第第4 4章汇编程序设计基础章汇编程序设计基础 Object Modules.OBJObject Modules.OBJObject Modules.OBJObject Modules.OBJ:EXAMPLEEXAMPLEEXAMPLEEXAMPLE Run File EXAMPLE. EXE:Run File EXAMPLE. EXE:Run File EXAMPLE. EXE:Run File EXAMPLE. EXE: List FileNUL.MAP:List FileNUL.MAP:Li
95、st FileNUL.MAP:List FileNUL.MAP: Libraries.LIB:Libraries.LIB:Libraries.LIB:Libraries.LIB: 4.5.4 4.5.4 调试与运行调试与运行调试与运行调试与运行 程程程程序序序序中中中中的的的的错错错错误误误误分分分分为为为为两两两两类类类类:一一一一类类类类是是是是语语语语法法法法错错错错误误误误,另另另另一一一一类类类类是是是是逻逻逻逻辑辑辑辑错错错错误误误误。在在在在程程程程序序序序的的的的汇汇汇汇编编编编和和和和连连连连接接接接中中中中,可可可可以以以以检检检检查查查查出出出出语语语语法法法法错错错错误
96、误误误。而而而而对对对对逻逻逻逻辑辑辑辑错错错错误误误误的的的的检检检检测测测测最最最最常常常常用用用用的工具软件是的工具软件是的工具软件是的工具软件是DEBUGDEBUGDEBUGDEBUG。第第4 4章汇编程序设计基础章汇编程序设计基础 一进入与退出一进入与退出一进入与退出一进入与退出DEBUGDEBUGDEBUGDEBUG状态状态状态状态在在在在DOSDOSDOSDOS状态下直接启动状态下直接启动状态下直接启动状态下直接启动DEBUGDEBUGDEBUGDEBUG,例如:例如:例如:例如:CMASMCMASMCMASMCMASMDEBUG filenameDEBUG filenameDE
97、BUG filenameDEBUG filename - - - - 当当当当 要要要要 退退退退 出出出出 DEBUGDEBUGDEBUGDEBUG, 返返返返 回回回回 操操操操 作作作作 系系系系 统统统统 时时时时 , 可可可可 使使使使 用用用用Q Q Q Q(QUITQUITQUITQUIT)命令,如:命令,如:命令,如:命令,如:- - - -Q Q Q Q CMASMCMASMCMASMCMASM 二二二二DEBUGDEBUGDEBUGDEBUG常用命令常用命令常用命令常用命令 请同学参阅书中相关部分。请同学参阅书中相关部分。请同学参阅书中相关部分。请同学参阅书中相关部分。一进入与退出一进入与退出DEBUGDEBUG状态状态在在DOSDOS状态下直接启动状态下直接启动DEBUGDEBUG,例如:例如:CMASMCMASMDEBUG filenameDEBUG filename - - 当当要要退退出出DEBUGDEBUG,返返回回操操作作系系统统时时,可可使使用用Q Q(QUITQUIT)命令,如:命令,如:- -Q Q CMASMCMASM二二DEBUGDEBUG常用命令常用命令 请同学参阅书中相关部分。请同学参阅书中相关部分。