《04第四章汇编程序设计基础(自).ppt》由会员分享,可在线阅读,更多相关《04第四章汇编程序设计基础(自).ppt(91页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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 100H ORG 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.常量常量常量常量 数值常量数值常量数值常量数值常量 例如:例如:例如:例如:25D25D、80H8
8、0H、101001B101001B、4545 字符串常量字符串常量字符串常量字符串常量 例如:例如:例如:例如:22、A A、”Computer”Computer”第第4 4章汇编程序设计基础章汇编程序设计基础 符号常量符号常量符号常量符号常量 用一个符号来代表常。用一个符号来代表常。用一个符号来代表常。用一个符号来代表常。1)1)1)1)等值伪指令等值伪指令等值伪指令等值伪指令EQUEQU格式:符号格式:符号格式:符号格式:符号 EQU EQU 表达式表达式表达式表达式例如:例如:例如:例如:S1 EQU ABCD S1 EQU ABCD S1 EQU ABCD S1 EQU ABCD N
9、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)等号伪指令等号伪指令等号伪指令等号伪指令=格式:符号格式:符号格式:符号格式:符号=表达式表达式表达式表达式例如:例如:例如:例如:NUM=10H NUM=10H NUM=10H NUM=1
10、0H 伪伪伪伪指指指指令令令令(EQU)(EQU)(EQU)(EQU)和和和和伪伪伪伪指指指指令令令令(=)(=)(=)(=)的的的的区区区区别别别别是是是是:在在在在同同同同一一一一源源源源程程程程序序序序中中中中,同同同同一一一一符符符符号号号号不不不不能能能能用用用用EQUEQUEQUEQU伪伪伪伪指指指指令令令令重重重重新定义,新定义,新定义,新定义,“=”“=”“=”“=”可以。可以。可以。可以。第第4 4章汇编程序设计基础章汇编程序设计基础 2.2.2.2.变量变量变量变量 变量是指存放在存储单元中的数据,这变量是指存放在存储单元中的数据,这变量是指存放在存储单元中的数据,这变量是
11、指存放在存储单元中的数据,这些数据在程序运行过程中可以改变。些数据在程序运行过程中可以改变。些数据在程序运行过程中可以改变。些数据在程序运行过程中可以改变。(1)(1)(1)(1)数据定义伪指令数据定义伪指令数据定义伪指令数据定义伪指令 DBDBDBDB变量名变量名变量名变量名 DW DW DW DW 表达式表达式表达式表达式1 1 1 1,表达式,表达式,表达式,表达式2 2 2 2,DD DD DD DD可选,是分配可选,是分配可选,是分配可选,是分配的存储单元的的存储单元的的存储单元的的存储单元的符号地址符号地址符号地址符号地址按字节按字节按字节按字节(DB)(DB)(DB)(DB)、字
12、、字、字、字(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 VARB2 DB 20H VARB2 DB 20H VARB2 DB 20H,30H30H30H30H,40H40H40H40H VARW DW 1122H VARW
13、 DW 1122H VARW DW 1122H VARW DW 1122H,3344H3344H3344H3344HVARB110HVARB220H30H40HVARW22H11H44H33H 上述变量的存储单元分配上述变量的存储单元分配上述变量的存储单元分配上述变量的存储单元分配及初始化情况如右图所示。及初始化情况如右图所示。及初始化情况如右图所示。及初始化情况如右图所示。第第4 4章汇编程序设计基础章汇编程序设计基础 2)2)2)2)字符串表达式字符串表达式字符串表达式字符串表达式 STR1 DB ABCDSTR1 DB ABCDSTR1 DB ABCDSTR1 DB ABCD STR2
14、DW AB,C STR2 DW AB,C STR2 DW AB,C STR2 DW AB,C 上述变量的存储单元分配上述变量的存储单元分配上述变量的存储单元分配上述变量的存储单元分配及初始化情况如右图所示。及初始化情况如右图所示。及初始化情况如右图所示。及初始化情况如右图所示。STR141H42H43H44HSTR242H41H43H00H第第4 4章汇编程序设计基础章汇编程序设计基础 3)“?”3)“?”3)“?”3)“?”表达式表达式表达式表达式 STR1 DB?,?STR1 DB?,?STR1 DB?,?STR1 DB?,?4)DUP4)DUP4)DUP4)DUP表达式表达式表达式表达式
15、 在连续的存储单元中重复定义一组数据。在连续的存储单元中重复定义一组数据。在连续的存储单元中重复定义一组数据。在连续的存储单元中重复定义一组数据。例如:例如:例如:例如:NUM1 DB 20H DUP NUM1 DB 20H DUP NUM1 DB 20H DUP NUM1 DB 20H DUP(5 5 5 5)NUM2 DW 10H DUP NUM2 DW 10H DUP NUM2 DW 10H DUP NUM2 DW 10H DUP(?)第第4 4章汇编程序设计基础章汇编程序设计基础 4.4.4.4.运算符与表达式运算符与表达式运算符与表达式运算符与表达式(1)(1)(1)(1)算术运算符
16、算术运算符算术运算符算术运算符 参见下表。参见下表。参见下表。参见下表。第第4 4章汇编程序设计基础章汇编程序设计基础 表4.1-1 算术运算符 运算符运算符运算符运算符表达式表达式表达式表达式运算功能运算功能运算功能运算功能+表达式表达式表达式表达式 正数正数正数正数(单项运算符单项运算符单项运算符单项运算符)-表达式表达式表达式表达式 负数负数负数负数(单项运算符单项运算符单项运算符单项运算符)+表达式表达式表达式表达式1+1+表达式表达式表达式表达式2 2 加法加法加法加法-表达式表达式表达式表达式1-1-表达式表达式表达式表达式2 2减法减法减法减法*表达式表达式表达式表达式1*1*表
17、达式表达式表达式表达式2 2乘法乘法乘法乘法 /表达式表达式表达式表达式1/1/表达式表达式表达式表达式2 2除法(取商)除法(取商)除法(取商)除法(取商)MODMOD表达式表达式表达式表达式1 1 MODMODMODMOD 表达式表达式表达式表达式2 2模除(取余数模除(取余数模除(取余数模除(取余数 )SHRSHR表达式表达式表达式表达式1 SHR 1 SHR 表达式表达式表达式表达式2 2右移右移右移右移 SHLSHL表达式表达式表达式表达式1 SHL 1 SHL 表达式表达式表达式表达式2 2左移左移左移左移 第第4 4章汇编程序设计基础章汇编程序设计基础 (2)(2)(2)(2)逻
18、辑运算符逻辑运算符逻辑运算符逻辑运算符表4.1-2 逻辑运算符 运算符运算符运算符运算符表达式表达式表达式表达式运算功能运算功能运算功能运算功能NOTNOTNOT NOT 表达式表达式表达式表达式 逻辑非逻辑非逻辑非逻辑非 ANDAND表达式表达式表达式表达式1 AND 1 AND 表达式表达式表达式表达式2 2 逻辑与逻辑与逻辑与逻辑与 OROR表达式表达式表达式表达式1 OR 1 OR 表达式表达式表达式表达式2 2 逻辑或逻辑或逻辑或逻辑或 XORXOR表达式表达式表达式表达式1 XOR 1 XOR 表达式表达式表达式表达式2 2 逻辑异或逻辑异或逻辑异或逻辑异或第第4 4章汇编程序设计
19、基础章汇编程序设计基础 (3)(3)(3)(3)关系运算符关系运算符关系运算符关系运算符表4.1-3 关系运算符 运算符运算符运算符运算符表达式表达式表达式表达式运算功能运算功能运算功能运算功能EQEQ表达式表达式表达式表达式1 EQ 1 EQ 表达式表达式表达式表达式2 2 两个表达式相等为真两个表达式相等为真两个表达式相等为真两个表达式相等为真 NENE表达式表达式表达式表达式1 NE 1 NE 表达式表达式表达式表达式2 2 两个表达式不相等为真两个表达式不相等为真两个表达式不相等为真两个表达式不相等为真 LTLT表达式表达式表达式表达式1 LT 1 LT 表达式表达式表达式表达式2 2
20、 表达式表达式表达式表达式1 1 表达式表达式表达式表达式2 2 为真为真为真为真 LELE表达式表达式表达式表达式1 LE 1 LE 表达式表达式表达式表达式2 2 表达式表达式表达式表达式1=1 1 1 1 表达式表达式表达式表达式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)SEG
21、1)SEG1)SEG和和和和OFFSETOFFSETOFFSETOFFSET运算符运算符运算符运算符 SEG SEG SEG SEG:取变量或标号所在段的段基值;:取变量或标号所在段的段基值;:取变量或标号所在段的段基值;:取变量或标号所在段的段基值;OFFSET OFFSET OFFSET OFFSET:取变量名或标号所在段内的偏移量。:取变量名或标号所在段内的偏移量。:取变量名或标号所在段内的偏移量。:取变量名或标号所在段内的偏移量。例如:例如:例如:例如:MOV AX MOV AX MOV AX MOV AX,SEG VAR1SEG VAR1SEG VAR1SEG VAR1 MOV SI
22、 MOV SI MOV SI MOV SI,OFFSET VAR3OFFSET VAR3OFFSET VAR3OFFSET VAR3第第4 4章汇编程序设计基础章汇编程序设计基础 (5)(5)(5)(5)属性运属性运属性运属性运算符算符算符算符1)PTR1)PTR1)PTR1)PTR运算符运算符运算符运算符 格式:类型格式:类型格式:类型格式:类型 PTR PTR PTR PTR 地址表达式地址表达式地址表达式地址表达式第第4 4章汇编程序设计基础章汇编程序设计基础 源程序的基本结构框架源程序的基本结构框架 8086/8088 8086/8088 8086/8088 8086/8088汇编程序
23、采用分段结构,一个完整汇编程序采用分段结构,一个完整汇编程序采用分段结构,一个完整汇编程序采用分段结构,一个完整的源程序可以包含多个逻辑段,但当前段最多只的源程序可以包含多个逻辑段,但当前段最多只的源程序可以包含多个逻辑段,但当前段最多只的源程序可以包含多个逻辑段,但当前段最多只能有能有能有能有4 4 4 4个:数据段、堆栈段、附加段和代码段。个:数据段、堆栈段、附加段和代码段。个:数据段、堆栈段、附加段和代码段。个:数据段、堆栈段、附加段和代码段。4.2.1 4.2.1 4.2.1 4.2.1 段定义段定义段定义段定义段名段名段名段名 SEGMENT SEGMENT SEGMENT SEGM
24、ENT 定位类型定位类型定位类型定位类型 组合类型组合类型组合类型组合类型 类别名类别名类别名类别名 段名段名段名段名 ENDS ENDS ENDS ENDS第第4 4章汇编程序设计基础章汇编程序设计基础 例如:例如:例如:例如: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)(ASSUM
25、E)段段段段寻寻寻寻址址址址伪伪伪伪指指指指令令令令用用用用来来来来建建建建立立立立段段段段与与与与段段段段寄寄寄寄存存存存器器器器之之之之间间间间的的的的联系。联系。联系。联系。格式:格式:格式:格式:ASSUME ASSUME ASSUME ASSUME 段段段段寄寄寄寄存存存存器器器器名名名名:段段段段名名名名,段段段段寄寄寄寄存存存存器器器器名名名名:段段段段名名名名,例如:例如:例如:例如:第第4 4章汇编程序设计基础章汇编程序设计基础 DATA1DATA1SEGMENTSEGMENT ;定义段定义段定义段定义段DATA1DATA1 VAR1 DB 12H VAR1 DB 12HDA
26、TA1DATA1ENDSENDS ;DATA1DATA1段定义结束段定义结束段定义结束段定义结束DATA2DATA2SEGMENTSEGMENT ;定义段定义段定义段定义段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.
27、3 END伪指令伪指令伪指令伪指令格式:格式:END 地址表达式地址表达式4.2.4 4.2.4 段寄存器的装入段寄存器的装入段寄存器的装入段寄存器的装入1.DS1.DS和和和和ESES的装入的装入的装入的装入 在在在在指指指指令令令令中中中中直直直直接接接接引引引引用用用用段段段段名名名名时时时时,得得得得到到到到的的的的是是是是这这这这个段的段基值,这个段基值是个段的段基值,这个段基值是个段的段基值,这个段基值是个段的段基值,这个段基值是16161616位的立即数。位的立即数。位的立即数。位的立即数。第第4 4章汇编程序设计基础章汇编程序设计基础 例如:例如:例如:例如:CODE SEGM
28、ENTCODE SEGMENT ASSUME CS:CODE ASSUME CS:CODE,DS:DATA1DS:DATA1,ES:DATA2ES:DATA2STARTSTART:MOV AX MOV 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
29、Para Stack1 Segment Para StackStack Dw 20H dup(?)Dw 20H dup(?)Stack1 Ends Stack1 Ends code Segment code Segment Assume code:CS,Stack1:SS Assume code:CS,Stack1:SS 第第4 4章汇编程序设计基础章汇编程序设计基础 (2)(2)执行程序装入执行程序装入执行程序装入执行程序装入 Stack1 SegmentStack1 Segment Dw 20H dup(?)Dw 20H dup(?)Stack1 Ends Stack1 Ends code
30、 Segment code Segment Assume code:CS,Stack1:SS Assume code:CS,Stack1:SS Mov AX,Stack1 Mov AX,Stack1 Mov SS,AX Mov SS,AX 第第4 4章汇编程序设计基础章汇编程序设计基础 2.CS2.CS的装入的装入的装入的装入 CSCS和和和和IPIP控控控控制制制制程程程程序序序序的的的的执执执执行行行行流流流流程程程程。装装装装载载载载目目目目标标标标代代代代码码码码时时时时自自自自动动动动将将将将CSCS和和和和IPIP初初初初始始始始化化化化为为为为程程程程序序序序将将将将要要要要执执
31、执执行行行行的的的的第第第第一一一一条条条条指指指指令令令令的的的的段段段段基基基基值值值值和和和和偏偏偏偏移移移移量量量量,它它它它们们们们由由由由ENDEND伪伪伪伪指指指指令令令令提提提提供供供供。如如如如果果果果ENDEND伪伪伪伪指指指指令令令令没没没没有有有有指指指指定定定定地地地地址址址址表表表表达达达达式式式式,则则则则源源源源程程程程序序序序中中中中第第第第一条指令语句的地址作为程序执行的起始地址。一条指令语句的地址作为程序执行的起始地址。一条指令语句的地址作为程序执行的起始地址。一条指令语句的地址作为程序执行的起始地址。基本框架STATCKSEGMENT STACK ;定义
32、堆栈段定义堆栈段.STACKENDSDATASEGMENT;定义数据段;定义数据段DATAENDSCODESEGMENT;定义代码段;定义代码段ASSUME CS:CODE,DS:DATA,SS:STATCK ;仅告诉汇编程序,;仅告诉汇编程序,并不能赋值并不能赋值START:MOV AX,DATAMOV DS,AX.MOV AH,4CH ;程序结束程序结束 返回返回DOSINT 21HCODEENDSEND START(X+125-X*Y)/ZSTATCKSTATCKSEGMENT STACK SEGMENT STACK DW 100H DUP(?)DW 100H DUP(?)STACKST
33、ACKENDSENDSDATDATSEGMENTSEGMENTX DW 3X DW 3Y DW 4Y DW 4Z DW 10Z DW 10DATDATENDSENDSCODCODSEGMENTSEGMENTASSUME CS:COD,DS:DAT,SS:STACKASSUME CS:COD,DS:DAT,SS:STACKSTART:START:MOV AX,DATMOV AX,DATMOV DS,AXMOV DS,AXMOV AX,XMOV AX,XIMUL YIMUL YMOV CX,AXMOV CX,AXMOV BX,DXMOV BX,DXMOV AX,XMOV AX,XADD AX,12
34、5ADD AX,125CWDCWDSUB AX,CXSUB AX,CXSBB DX,BXSBB DX,BXIDIV ZIDIV ZMOV X,AXMOV X,AXMOV Y,DXMOV Y,DXMOV AH,4CHMOV AH,4CHINT 21HINT 21HCOD COD ENDSENDSEND STARTEND START第第4 4章汇编程序设计基础章汇编程序设计基础 1 1、返回返回返回返回DOSDOS系统的方式系统的方式系统的方式系统的方式 Mov AH,4CH Mov AH,4CH Int 21H Int 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,0AHMOV AH,0AH
36、INT 21HINT 21H ;DS:DX :DS:DX :缓冲区可接收的字符缓冲区可接收的字符缓冲区可接收的字符缓冲区可接收的字符 缓冲区缓冲区缓冲区缓冲区 第第4 4章汇编程序设计基础章汇编程序设计基础 4.3 4.3 其它伪指令其它伪指令其它伪指令其它伪指令 过程定义伪指令过程定义伪指令过程定义伪指令过程定义伪指令 格式:格式:格式:格式:过程名过程名过程名过程名 PROC NEAR/FARPROC NEAR/FAR Ret Ret 过程名过程名过程名过程名 ENDP ENDP第第4 4章汇编程序设计基础章汇编程序设计基础 ORGORG伪指令伪指令伪指令伪指令 格式:格式:格式:格式:O
37、RG ORG 数值表达式数值表达式数值表达式数值表达式 将将将将表表表表达达达达式式式式的的的的值值值值赋赋赋赋给给给给当当当当前前前前位位位位置置置置计计计计数数数数器器器器,符符符符号号号号“$”就代表当前位置计数器。就代表当前位置计数器。就代表当前位置计数器。就代表当前位置计数器。例:例:例:例:第第4 4章汇编程序设计基础章汇编程序设计基础 DATA SEGMENT DATA SEGMENT ;定义段定义段定义段定义段DATADATA ORG 30H ORG 30H VAB1 DB 12H VAB1 DB 12H,34H34H ORG$+20H ORG$+20H STR DB STRI
38、NG STR DB STRING DATA ENDS DATA ENDS 第第4 4章汇编程序设计基础章汇编程序设计基础 4.44.4 汇编程序设计方法汇编程序设计方法汇编程序设计方法汇编程序设计方法 概述概述概述概述1.1.程序设计步骤程序设计步骤程序设计步骤程序设计步骤 (1)(1)分析问题,确定算法分析问题,确定算法分析问题,确定算法分析问题,确定算法 (2)(2)绘制程序流程图绘制程序流程图绘制程序流程图绘制程序流程图 (3)(3)编写程序编写程序编写程序编写程序(4)(4)调试程序调试程序调试程序调试程序第第4 4章汇编程序设计基础章汇编程序设计基础 顺序程序的设计顺序程序的设计顺序
39、程序的设计顺序程序的设计例例例例 4-1 4-1 试编制程序,计算:试编制程序,计算:试编制程序,计算:试编制程序,计算:Z=(3X+Y-5)/2 Z=(3X+Y-5)/2 其中其中其中其中 X=15H Y=10H X=15H Y=10HDATADATA Segment Segment ;数据段数据段数据段数据段 X DW 15H X DW 15H Y DW 10H Y DW 10H Z DW Z DW?DATA DATA EndsEnds第第4 4章汇编程序设计基础章汇编程序设计基础 CODECODE Segment ;Segment ;代码段代码段代码段代码段 Assume CS:CODE
40、,DS:DATA Assume CS:CODE,DS:DATAStart:Start:Mov AX,DATAMov AX,DATA Mov DS,AX Mov DS,AX;初始化初始化DSDS Mov AX,X Mov AX,X Shl AX,1 Shl AX,1;AX;AX2X2X Add AX,X Add AX,X ;AX ;AX3X3X第第4 4章汇编程序设计基础章汇编程序设计基础 Add AX,Y Add AX,Y;AX;AX3X+Y3X+Y Sub AX,5 Sub AX,5;AX;AX3X+Y-53X+Y-5 Sar AX,1 ;AX Sar AX,1 ;AX(3X+Y-5)/2(
41、3X+Y-5)/2 Mov Z,AX Mov Z,AX;存放结果存放结果存放结果存放结果 Mov AH,4CHMov AH,4CH Int 21H ;Int 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 目标地址目标地址目标地址目标地址例如例如:jmp Label1 jmp BX第第4 4章汇编程序设计基础章汇编程序设计基础 (2)(2)(2)(2)条件转移指令条件转移指令条件转移指令条件转移指令功功功功能能能能:条条条条件件件件成成成成立立立立时时时时转转转转移移移移到到到
43、到“目目目目标标标标地地地地址址址址”处处处处执执执执行。行。行。行。指令格式:指令格式:指令格式:指令格式:J JXXXX 目标地址目标地址目标地址目标地址XX为1-3个字母表字母表字母表字母表示的转移条件示的转移条件示的转移条件示的转移条件说说说说明明明明:条条条条件件件件转转转转移移移移指指指指令令令令只只只只能能能能在在在在段段段段内内内内转转转转移移移移,转转转转移移移移范围只能在范围只能在范围只能在范围只能在-128-128-128-128 127127127127之间。之间。之间。之间。条件:条件:条件:条件:S SF(S SF(S SF(S SF(符号标志符号标志符号标志符号标
44、志)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 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
45、Lab2 JNZ Lab2 JNZ Lab2第第4 4章汇编程序设计基础章汇编程序设计基础 2.2.2.2.分支程序的设计分支程序的设计分支程序的设计分支程序的设计条件条件条件条件YN条件条件条件条件图图图图4.4-34.4-3 分支程序结构形式分支程序结构形式分支程序结构形式分支程序结构形式第第4 4章汇编程序设计基础章汇编程序设计基础 1 1条件转移指令实现分支程序条件转移指令实现分支程序条件转移指令实现分支程序条件转移指令实现分支程序例例例例2 2 编制程序,把编制程序,把编制程序,把编制程序,把DA1DA1字节单元中数据变成偶数。字节单元中数据变成偶数。字节单元中数据变成偶数。字节单元
46、中数据变成偶数。TEST DA1,01H TEST DA1,01H TEST DA1,01H TEST DA1,01H JZ NEXT ;JZ NEXT ;JZ NEXT ;JZ NEXT ;是偶数,转移是偶数,转移是偶数,转移是偶数,转移 INC DA1 ;INC DA1 ;INC DA1 ;INC DA1 ;是奇数,加是奇数,加是奇数,加是奇数,加1 1 1 1NEXT:NEXT:NEXT:NEXT:第第4 4章汇编程序设计基础章汇编程序设计基础 例例例例3 3 设设设设X X、Y Y为为为为带带带带符符符符号号号号的的的的字字字字节节节节变变变变量量量量,编编编编程程程程实实实实现现现现
47、下面的公式。下面的公式。下面的公式。下面的公式。1 X0Y=0 X=0 -1 X0 CMP X,0 ;CMP X,0 ;比较比较比较比较X X与与与与0 0进行比较进行比较进行比较进行比较JGE BIGER ;XJGE BIGER ;X 0 0,转移到转移到转移到转移到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用跳转表实现多路分支用跳转表实现多路分支用
48、跳转表实现多路分支用跳转表实现多路分支 对于多分支结构通常采用跳转表来实现。对于多分支结构通常采用跳转表来实现。对于多分支结构通常采用跳转表来实现。对于多分支结构通常采用跳转表来实现。例例例例4 4 4 4 现现现现有有有有若若若若干干干干个个个个程程程程序序序序段段段段,每每每每个个个个程程程程序序序序段段段段的的的的入入入入口口口口地地地地址址址址分分分分别别别别是是是是Sub1Sub1Sub1Sub1、Sub2Sub2Sub2Sub2、SubnSubnSubnSubn,试试试试编编编编制制制制一一一一程程程程序,根据指定的参数转入相应的程序段。序,根据指定的参数转入相应的程序段。序,根据
49、指定的参数转入相应的程序段。序,根据指定的参数转入相应的程序段。DATA SEGMENT DATA SEGMENT;定义数据段定义数据段定义数据段定义数据段JUMP_TABLE DW SUB1,SUB2,SUB3JUMP_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;定义堆栈段定义堆栈段定义堆栈
50、段定义堆栈段 DW 20H DUP(0)DW 20H DUP(0)STACK1STACK1ENDS ENDS;堆栈段结束堆栈段结束堆栈段结束堆栈段结束CODECODESEGMENT SEGMENT;定义代码段定义代码段定义代码段定义代码段 ASSUME CS:CODE,DS:DATA,SS:STACK1 ASSUME CS:CODE,DS:DATA,SS:STACK1BEGIN:BEGIN:MOV MOVAX,DATAAX,DATA;取取取取DATADATA段的段基值段的段基值段的段基值段的段基值 MOV MOV DS,AXDS,AX;初始化段寄存器初始化段寄存器初始化段寄存器初始化段寄存器D