第3章 汇编语言及编程N.pdf
《第3章 汇编语言及编程N.pdf》由会员分享,可在线阅读,更多相关《第3章 汇编语言及编程N.pdf(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章汇编语言及编程汇编语言及编程3.1 3.1 汇编语言程序结构与汇编语句汇编语言程序结构与汇编语句3.2 3.2 伪指令语句伪指令语句3 3.3 .3 汇编语言编程环境汇编语言编程环境3 3.4 .4 DOS/BIOSDOS/BIOS功能调用功能调用3.5 3.5 三种基本结构程序的设计三种基本结构程序的设计3 3.6 .6 子程序设计与调用子程序设计与调用3.1 3.1 汇编语言程序结构与汇编语句汇编语言程序结构与汇编语句3 3.1 1.1 1 汇编语言源程序结构汇编语言源程序结构3 3.1 1.2 2 汇编语言的语句汇编语言的语句3.1.1 3.1.1 汇编语言源程序结构汇编语言
2、源程序结构8080X86/PentiumX86/Pentium系列系列MPUMPU汇编语言都是以逻汇编语言都是以逻辑段为基础,按段的概念来组织代码和数据的。辑段为基础,按段的概念来组织代码和数据的。因此,源程序结构与逻辑段的定义方法密切相因此,源程序结构与逻辑段的定义方法密切相关,而宏汇编语言关,而宏汇编语言MASM 5.0MASM 5.0以上的版本中,逻以上的版本中,逻辑段既可用辑段既可用完整段完整段定义,又可用定义,又可用简化段简化段定义。定义。1.1.标准的单模块源程序框架标准的单模块源程序框架.586586 DATADATASEGMENTSEGMENTUSEUSE1616/USE/US
3、E3232;定义数据段定义数据段;数据定义伪指令序列;数据定义伪指令序列DATADATAENDSENDSSTACKSTACKSEGMENTSEGMENTUSEUSE1616/USE/USE3232 STACKSTACK;定义堆栈段定义堆栈段;数据定义伪指令序列;数据定义伪指令序列STACKSTACKENDSENDSCODECODESEGMENTSEGMENTUSEUSE1616/USE/USE3232;定义代码段定义代码段ASSUMEASSUMECSCS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,ESES:DATADATASTARTSTART:MOVMOVA
4、XAX,DATADATA;取数据段基址取数据段基址MOVMOVDSDS,AXAX;建立建立DSDS的可寻址性的可寻址性MOVMOVESES,AXAX;建立建立ESES段的可寻址性段的可寻址性;核心程序段;核心程序段MOVMOVAHAH,4 4CHCH;返回返回DOSDOS操作系统操作系统INTINT2121H HCODECODEENDSENDSENDENDSTARTSTART 一个源程序由若干逻辑段一个源程序由若干逻辑段组成。一般一个源程序具有数组成。一般一个源程序具有数据段、附加数据段、堆栈段和据段、附加数据段、堆栈段和代码段;代码段;但只有代码段是必不但只有代码段是必不可少的。可少的。采用
5、完整段定义时,对程序采用完整段定义时,对程序中定义的逻辑段,要说明中定义的逻辑段,要说明逻辑逻辑段与段寄存器的寻址关系。段与段寄存器的寻址关系。ASSUME CSASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,ESES:DATADATA对数据段对数据段(有时还有堆栈段有时还有堆栈段),程,程序中要包含序中要包含初始化段寄存器初始化段寄存器的语句。的语句。MOV AXMOV AX,DATADATAMOV DSMOV DS,AXAXMOV ESMOV ES,AXAX程序中要包含程序中要包含返返回回DOSDOS的语句。的语句。MOV AHMOV AH
6、,4CH4CHINT 21HINT 21H源程序(模块)源程序(模块)以以ENDEND伪指令结束伪指令结束END STARTEND START3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构(1)(1)使用使用DOSDOS的的4 4CHCH号功能调用号功能调用这种方法是在代码段结束前加调用语句:这种方法是在代码段结束前加调用语句:MOVMOVAHAH,4 4CHCH;功能号功能号4 4CHAHCHAHINTINT2121H H;中断调用中断调用(2)(2)使用使用2020H H号软功能调用号软功能调用调用方式是在代码段结束
7、前加调用语句:调用方式是在代码段结束前加调用语句:INT 20HINT 20H(3)(3)使用使用DOSDOS的的0 0号功能调用号功能调用调用方式是在代码段结束前加调用语句:调用方式是在代码段结束前加调用语句:MOV AHMOV AH,0 0INT 21HINT 21H2.2.返回返回DOSDOS状态的方法状态的方法(4)(4)将主程序定义为远过程将主程序定义为远过程也称为也称为“标准序标准序”方法。这种方法是在代码段开方法。这种方法是在代码段开始处按下述方式定义主程序:始处按下述方式定义主程序:CODECODESEGMENTSEGMENTASSUMEASSUME主过程名主过程名PROCPR
8、OCFARFARPUSHPUSHDSDSSUBSUBAXAX,AXAX;标准序标准序PUSHPUSHAXAX RETRET主过程名主过程名ENDPENDP ENDEND主过程名主过程名3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构 指令语句指令语句 伪指令语句伪指令语句 宏指令语句宏指令语句3.1.2 3.1.2 汇编语言的语句汇编语言的语句语句是汇编语言程序的基本组成单位,用于规定汇编语句是汇编语言程序的基本组成单位,用于规定汇编语言的一个基本操作。汇编语言包含三种基本语句:语言的一个基本操作。汇编语言包含三种基本语句:是可执行语句是可执行语句,由硬件由硬件(CPU)CPU)完
9、成其功能完成其功能,汇汇编时产生目标代码编时产生目标代码。不可执行语句,不可执行语句,其功能由相应软其功能由相应软件完成,件完成,不产生不产生目标代码目标代码。用户定义的新指令,汇编用户定义的新指令,汇编时产生相应的目标代码。时产生相应的目标代码。标号和名字标号和名字分别是给指令单元和伪指令起的分别是给指令单元和伪指令起的符号名称,统称为标识符。符号名称,统称为标识符。(注意组成的语法规则注意组成的语法规则)助记符和定义符助记符和定义符分别用于规定指令语句的操分别用于规定指令语句的操作性质和伪指令语句的伪操作功能,统称操作符。作性质和伪指令语句的伪操作功能,统称操作符。操作数操作数操作数允许有
10、多个,这时各操作数之操作数允许有多个,这时各操作数之间要用逗号间要用逗号“,”隔开。隔开。3.1.2 3.1.2 汇编语言的语句汇编语言的语句指令语句:指令语句:标号:标号:助记符助记符 操作数操作数 ;注释;注释 伪指令语句:伪指令语句:名字名字 定义符定义符 操作数操作数 ;注释;注释 1.1.语句格式语句格式2.2.数数 据据汇编语言中使用的数据有常数、变量和标号。汇编语言中使用的数据有常数、变量和标号。(1)(1)常数常数常数是指那些在汇编过程中已常数是指那些在汇编过程中已有确定数值的有确定数值的量量,分为数值常数和字符串常数两类。主要用作,分为数值常数和字符串常数两类。主要用作:指令
11、语句中的立即操作数指令语句中的立即操作数 基址、变址或基址加变址寻址中的位移量基址、变址或基址加变址寻址中的位移量 伪指令语句中用于给变量赋初值伪指令语句中用于给变量赋初值3.1.2 3.1.2 汇编语言的语句汇编语言的语句标号标号是指令的符号化地址,一定在代码段,而是指令的符号化地址,一定在代码段,而变变量量是数据的符号化地址,是数据的符号化地址,一般在数据段,有时也可在一般在数据段,有时也可在代码段定义代码段定义。变量与标号有三个共同属性:变量与标号有三个共同属性:段基址:段基址:所在段的起始地址所在段的起始地址(SEG)SEG)偏移值:偏移值:相对于段基址的位移量相对于段基址的位移量(O
12、FFSET)OFFSET)类型:类型:所占字节数所占字节数(TYPE)TYPE)(2)(2)变量与标号变量与标号3.1.2 3.1.2 汇编语言的语句汇编语言的语句变量与标号区别变量与标号区别标号可以用作标号可以用作转移控制类指令的操作数转移控制类指令的操作数,但但变量不能。变量不能。变量可以用作变量可以用作基址、变址或基址加变址寻址基址、变址或基址加变址寻址的位移量的位移量,但标号不能。但标号不能。3.1.2 3.1.2 汇编语言的语句汇编语言的语句例例3.13.1假设假设VAR1VAR1和和VAR2VAR2为字变量,为字变量,LABLAB为程序中为程序中的一个标号,判断下列指令是否正确,若
13、错误请指出的一个标号,判断下列指令是否正确,若错误请指出错误之处:错误之处:ADDADDVARVAR1 1,VARVAR2 2SUBSUBALAL,VARVAR1 1JNZJNZVARVAR1 1JMPJMPLABSILABSIJMPJMPNEARNEARLABLABMOVMOVAXAX,VARVAR1 1BXBXJMPJMPVARVAR2 2BXBX错,不允许存储器变量间直接传数错,不允许存储器变量间直接传数错,源与目的操作数错,源与目的操作数类型不一致类型不一致错,变量不能用作条错,变量不能用作条件转移指令的操作数件转移指令的操作数错,标号不能用作变错,标号不能用作变址寻址的位移量址寻址的
14、位移量错,缺错,缺PTRPTR运算符运算符正确正确正确正确3.1.2 3.1.2 汇编语言的语句汇编语言的语句3.3.表达式表达式表达式是汇编语句操作数的基本形式,由运表达式是汇编语句操作数的基本形式,由运算符和运算对象组成。算符和运算对象组成。算术运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符汇编语言特定的运算符汇编语言特定的运算符运算符运算符常数、变量和标号常数、变量和标号操作数操作数构成程序的段和偏移量构成程序的段和偏移量运算对象运算对象3.1.2 3.1.2 汇编语言的语句汇编语言的语句指在汇编过程中能够由汇编程序计算出数值的表指在汇编过程中能够由汇编程序计算出数值的表达式。
15、可作为达式。可作为指令中的立即操作数和数据区中的初值指令中的立即操作数和数据区中的初值使用。使用。例如:例如:MOV BXMOV BX,0FFF0H AND 0B234H0FFF0H AND 0B234HMOVMOVALAL,4 4CHCHEQEQ2 2MOVMOVAHAH,4 4CHCHGTGT1 1MOVMOVAXAX,SEGSEG LABLELABLE表达式又分为数值表达式和地址表达式:表达式又分为数值表达式和地址表达式:3.1.2 3.1.2 汇编语言的语句汇编语言的语句数值表达式数值表达式其值表示存储器地址,一般都是段内的偏移地其值表示存储器地址,一般都是段内的偏移地址。与变量一样,
16、地址表达式也具有段值、偏移值址。与变量一样,地址表达式也具有段值、偏移值和类型属性。地址表达式主要用来表示指令语句中和类型属性。地址表达式主要用来表示指令语句中的操作数,的操作数,例如:例如:MOV AXMOV AX,BASEEAXEBXBASEEAXEBXJMP JMP BASEEAXBASEEAXLEA BXLEA BX,BASE+12BASE+123.1.2 3.1.2 汇编语言的语句汇编语言的语句地址表达式地址表达式3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3.2.2 3.2.2 符号定义伪指令符号定义伪指令3.2.3 3.2.3 数据定义伪指令数据定义伪指令3.2.
17、4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令3.2.5 3.2.5 结构定义伪指令结构定义伪指令3.2 3.2 伪指令语句伪指令语句3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句方式选择伪指令方式选择伪指令完整段定义伪指令完整段定义伪指令指定地址伪指令指定地址伪指令模块定义伪指令模块定义伪指令这类语句是与程序结构紧密相关的基本伪指令语这类语句是与程序结构紧密相关的基本伪指令语句,用于说明句,用于说明CPUCPU的类型、逻辑段结构、源程序的类型、逻辑段结构、源程序(或模或模块块)起止信息和段内存的安排等。主要包括起止信息和段内存的安排等。主要包括:1.1.方式选择伪指令方式
18、选择伪指令方式选择伪指令用于通知汇编程序方式选择伪指令用于通知汇编程序,当前的当前的源程序指令是哪一种源程序指令是哪一种CPUCPU指令指令,经过汇编链接之后经过汇编链接之后生成的目标程序在哪一种生成的目标程序在哪一种CPUCPU机型上运行机型上运行。不属于不属于选定选定CPUCPU的指令均为非法指令的指令均为非法指令。所以所以,方式选择伪方式选择伪指令本质上也就是指令集选择伪指令指令本质上也就是指令集选择伪指令。通常通常,方式选择伪指令放在程序的头部方式选择伪指令放在程序的头部,作为作为源程序的第一条语句。缺省时默认源程序的第一条语句。缺省时默认80868086指令集。指令集。3.2.1 3
19、.2.1 程序结构伪指令语句程序结构伪指令语句2.2.完整段定义伪指令完整段定义伪指令采用完整段定义伪指令可具体控制汇编程序采用完整段定义伪指令可具体控制汇编程序(MASMMASM)和链接程序(和链接程序(LINKLINK)在内存中组织代码在内存中组织代码和数据的方式。和数据的方式。主要包括主要包括段定义语句段定义语句和和段寄存器说明语句段寄存器说明语句。3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句 段定义语句段定义语句 格式:格式:段名段名 SEGMENTSEGMENT 定位类型定位类型,组合类型组合类型,字长选择字
20、长选择,类别类别 段体段体;由指令;由指令、伪指令和宏指令语句组成伪指令和宏指令语句组成段名段名 ENDSENDS 说明:说明:(1)(1)SEGMENT/ENDSSEGMENT/ENDS是一对段定义语句是一对段定义语句,一个逻辑段从一个逻辑段从SEGMENTSEGMENT语句开始,到语句开始,到ENDSENDS语句结束。语句结束。(2)(2)段名段名是用户定义的段的标识符,用于指明段的基址。是用户定义的段的标识符,用于指明段的基址。(3)(3)4 4个可选参数个可选参数用于为源程序的汇编、连接提供必要的信用于为源程序的汇编、连接提供必要的信息,特别是模块化程序,各个模块如何定位息,特别是模块
21、化程序,各个模块如何定位,彼此之间如何连彼此之间如何连接,将较多地涉及到接,将较多地涉及到定位类型定位类型和和组合类型组合类型的选择。的选择。指定段起点的边界类型指定段起点的边界类型:BYTEBYTE(字节)字节)WORDWORD(字)字)DWORDDWORD(双字)双字)PARAPARA(节)节)PAGEPAGE(页)页)定位类型定位类型告诉链接程序本段与其它模块中同名段的组合连接关系告诉链接程序本段与其它模块中同名段的组合连接关系:PUBLIC PUBLIC 连接到同一个物理段中连接到同一个物理段中STACK STACK 连接到同一个物理堆栈段中连接到同一个物理堆栈段中,并给并给SS:ES
22、PSS:ESP赋值赋值COMMON COMMON 产生一个覆盖段。产生一个覆盖段。MEMORY MEMORY ATAT表达式表达式组合类型组合类型定义段中使用的偏移地址和寄存器的字长定义段中使用的偏移地址和寄存器的字长USE16 USE16 表示该段字长为表示该段字长为1616位位USE32 USE32 表示该段字长为表示该段字长为3232位位字长选择字长选择 组合连接组合连接举例:举例:模块模块2 2(从模块):(从模块):DSEG SEGMENT COMMONDSEG SEGMENT COMMONARRAY_B DW 200 DUP(?)ARRAY_B DW 200 DUP(?)DSEG
23、ENDSDSEG ENDSSSEG SEGMENT STACKSSEG SEGMENT STACKDW 50 DUP(?)DW 50 DUP(?)SSEG ENDSSSEG ENDSCSEG SEGMENT PUBLICCSEG SEGMENT PUBLIC CSEG ENDSCSEG ENDSENDEND模块模块1 1(主模块):(主模块):DSEG SEGMENT COMMONDSEG SEGMENT COMMONARRAY_A DW 100 DUP(?)ARRAY_A DW 100 DUP(?)DSEG ENDSDSEG ENDSSSEG SEGMENT STACKSSEG SEGMEN
24、T STACKDW 50 DUP(?)DW 50 DUP(?)SSEG ENDSSSEG ENDSCSEG SEGMENT PUBLICCSEG SEGMENT PUBLICASSUME CS:CSEG,DS:DSEG,SS:SSEGASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART:MOV AXSTART:MOV AX,DSEGDSEGMOV DSMOV DS,AXAX CSEG ENDSCSEG ENDSEND STARTEND STARTCSEGCSEGDSEGDSEG(共共400400字节字节)模块模块2 2代码代码模块模块2 2数据数据SSEGSSEG(共共200
25、200字节字节)模块模块1 1代码代码模块模块2 2堆栈堆栈模块模块1 1数据数据逻辑段组合示意图逻辑段组合示意图模块模块1 1堆栈堆栈3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句 段寄存器说明语句段寄存器说明语句 格式:格式:ASSUME ASSUME 段寄存器段寄存器:段名段名,段寄存器,段寄存器:段名,段名,功能功能:说明源程序中定义的段由那个段寄存器去寻址。说明源程序中定义的段由那个段寄存器去寻址。说明:说明:CSCS只能用于包含有程序的段只能用于包含有程序的段,反之含有程序的段也反之含有程序的段也只能以只能以CSCS作为段寄存器。作为段寄存器。SSSS也一样,只能与堆
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 汇编语言及编程N 汇编语言 编程
限制150内