第3章汇编语言及编程精选文档.ppt
《第3章汇编语言及编程精选文档.ppt》由会员分享,可在线阅读,更多相关《第3章汇编语言及编程精选文档.ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章汇编语言及编程本讲稿第一页,共八十一页3.1 3.1 汇编语言程序结构与汇编语句汇编语言程序结构与汇编语句3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构 3.1.2 3.1.2 汇编语言的语句汇编语言的语句本讲稿第二页,共八十一页3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构 80 80X86/PentiumX86/Pentium系列系列MPUMPU汇编语言都是以逻辑段汇编语言都是以逻辑段为基础,按段的概念来组织代码和数据的。因此,为基础,按段的概念来组织代码和数据的。因此,源程序结构与逻辑段的定义方法密切相关,而宏汇源程序结构与逻辑段的定义方法密切相关,而宏
2、汇编语言编语言MASM 5.0MASM 5.0以上的版本中,逻辑段既可用以上的版本中,逻辑段既可用完整完整段段定义,又可用定义,又可用简化段简化段定义。定义。本讲稿第三页,共八十一页1.1.标准的单模块源程序框架标准的单模块源程序框架 .586 .586DATA SEGMENT USE16/USE32DATA SEGMENT USE16/USE32;定义数据段;定义数据段 ;数据定义伪指令序列;数据定义伪指令序列DATA ENDSDATA ENDSSTACK SEGMENT USE16/USE32 STACKSTACK SEGMENT USE16/USE32 STACK;定义堆栈段;定义堆栈段
3、 ;数据定义伪指令序列;数据定义伪指令序列STACK ENDSSTACK ENDSCODE SEGMENT USE16/USE32CODE SEGMENT USE16/USE32;定义代码段;定义代码段 ASSUME CSASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,ESES:DATADATASTART:MOV AXSTART:MOV AX,DATADATA;取数据段基址;取数据段基址 MOV DSMOV DS,AXAX;建立;建立DSDS的可寻址性的可寻址性 MOV ESMOV ES,AX AX;建立;建立ESES段的可寻址性段的可寻址性
4、;核心程序段;核心程序段 MOV AHMOV AH,4CH4CH;返回;返回DOSDOS操作系统操作系统 INT 21HINT 21HCODE ENDSCODE ENDS END STARTEND START一个源程序由若干逻辑段组成。一个源程序由若干逻辑段组成。一般一个源程序具有数据段、附加一般一个源程序具有数据段、附加数据段、堆栈段和代码段;数据段、堆栈段和代码段;但只有但只有代码段是必不可少的。代码段是必不可少的。采用完整段定义时,对程序中采用完整段定义时,对程序中定义的逻辑段,要说明定义的逻辑段,要说明逻辑段与逻辑段与段寄存器的寻址关系。段寄存器的寻址关系。ASSUME CSASSUM
5、E CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,ESES:DATADATA对数据段对数据段(有时还有堆栈段有时还有堆栈段),程序,程序中要包含中要包含初始化段寄存器初始化段寄存器的语句。的语句。MOV AXMOV AX,DATADATAMOV DSMOV DS,AXAXMOV ESMOV ES,AXAX程序中要包含程序中要包含返返回回DOSDOS的语句。的语句。MOV AHMOV AH,4CH4CHINT 21HINT 21H源程序(模块)源程序(模块)以以ENDEND伪指令结束伪指令结束END STARTEND START3.1.1 3.1.1 汇编语
6、言源程序结构汇编语言源程序结构本讲稿第四页,共八十一页3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构(1)(1)使用使用DOSDOS的的4 4CHCH号功能调用号功能调用这种方法是在代码段结束前加调用语句:这种方法是在代码段结束前加调用语句:MOV AHMOV AH,4CH 4CH ;功能号;功能号4 4CHAHCHAH INT 21H INT 21H ;中断调用;中断调用(2)(2)使用使用2020H H号软功能调用号软功能调用调用方式是在代码段结束前加调用语句:调用方式是在代码段结束前加调用语句:INT 20HINT 20H(3)(3)使用使用DOSDOS的的0 0号功能调用
7、号功能调用调用方式是在代码段结束前加调用语句:调用方式是在代码段结束前加调用语句:MOV AHMOV AH,0 0 INT 21H INT 21H2.2.返回返回DOSDOS状态的方法状态的方法 本讲稿第五页,共八十一页(4)(4)将主程序定义为远过程将主程序定义为远过程 也称为也称为“标准序标准序”方法。这种方法是在代码段开始处方法。这种方法是在代码段开始处按下述方式定义主程序:按下述方式定义主程序:CODE CODE SEGMENT SEGMENT ASSUME ASSUME 主过程名主过程名PROC FARPROC FARPUSH DS PUSH DS SUB AXSUB AX,AX A
8、X ;标准序;标准序 PUSH AXPUSH AX RET RET主过程名主过程名 ENDPENDPEND END 主过程名主过程名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 汇编语言的语句汇编语言的语句本讲稿第九页,共八十一页 标号标号是指令的符号化地址,一定在代码段,而是指令的符号化地址,一定在代码段,而变量变量是是数据的符号化地址,数据的符号化地址,一般在数据段,有时也可在代码段定一般在数据段,有时也可在代码段定义义。q变量与标号有三个共同属性:变量与标号有三个共同属性:段基址:段基址:所在段的起始地址所在段的起始地址(SEG)SEG)
12、偏移值:偏移值:相对于段基址的位移量相对于段基址的位移量(OFFSET)OFFSET)类型:类型:所占字节数所占字节数(TYPE)TYPE)(2)(2)变量与标号变量与标号3.1.2 3.1.2 汇编语言的语句汇编语言的语句本讲稿第十页,共八十一页q变量与标号区别变量与标号区别标号可以用作标号可以用作转移控制类指令的操作数转移控制类指令的操作数,但变量不但变量不能。能。变量可以用作变量可以用作基址、变址或基址加变址寻址的位移量基址、变址或基址加变址寻址的位移量,但标号不能。但标号不能。3.1.2 3.1.2 汇编语言的语句汇编语言的语句本讲稿第十一页,共八十一页 例例3.13.1 假设假设VA
13、R1VAR1和和VAR2VAR2为字变量,为字变量,LABLAB为程序中的一为程序中的一个标号,判断下列指令是否正确,若错误请指出错误之处:个标号,判断下列指令是否正确,若错误请指出错误之处:ADD VAR1 ADD VAR1,VAR2VAR2 SUB AL SUB AL,VAR1 VAR1 JNZ VAR1 JNZ VAR1 JMP LABSI JMP LABSI JMP NEAR LAB JMP NEAR LAB MOV AX MOV AX,VAR1BXVAR1BX JMP VAR2BX JMP VAR2BX错,不允许存储器变量间直接传数错,不允许存储器变量间直接传数错,源与目的操作数错,
14、源与目的操作数类型不一致类型不一致错,变量不能用作条件转移错,变量不能用作条件转移指令的操作数指令的操作数错,标号不能用作变址错,标号不能用作变址寻址的位移量寻址的位移量错,缺错,缺PTRPTR运算符运算符正确正确正确正确3.1.2 3.1.2 汇编语言的语句汇编语言的语句本讲稿第十二页,共八十一页3.3.表达式表达式 表达式是汇编语句操作数的基本形式,由运算符和表达式是汇编语句操作数的基本形式,由运算符和运算对象组成。运算对象组成。算术运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符汇编语言特定的运算符汇编语言特定的运算符运算符运算符常数、变量和标号常数、变量和标号操作数操作数构成程
15、序的段和偏移量构成程序的段和偏移量 运算对象运算对象3.1.2 3.1.2 汇编语言的语句汇编语言的语句本讲稿第十三页,共八十一页 指在汇编过程中能够由汇编程序计算出数值的表达式。指在汇编过程中能够由汇编程序计算出数值的表达式。可作为可作为指令中的立即操作数和数据区中的初值使用。指令中的立即操作数和数据区中的初值使用。例例如:如:MOV BXMOV BX,0FFF0H AND 0B234H0FFF0H AND 0B234H MOV AL MOV AL,4CH EQ 24CH EQ 2 MOV AH MOV AH,4CH GT 14CH GT 1 MOV AX MOV AX,SEG LABLES
16、EG LABLE表达式又分为数值表达式和地址表达式:表达式又分为数值表达式和地址表达式:3.1.2 3.1.2 汇编语言的语句汇编语言的语句q数值表达式数值表达式本讲稿第十四页,共八十一页 其值表示存储器地址,一般都是段内的偏移地址。其值表示存储器地址,一般都是段内的偏移地址。与变量一样,地址表达式也具有段值、偏移值和类型与变量一样,地址表达式也具有段值、偏移值和类型属性。地址表达式主要用来表示指令语句中的操作数,属性。地址表达式主要用来表示指令语句中的操作数,例如:例如:MOV AXMOV AX,BASEEAXEBXBASEEAXEBX JMP JMP BASEEAXBASEEAX LEA
17、BXLEA BX,BASE+12BASE+123.1.2 3.1.2 汇编语言的语句汇编语言的语句q地址表达式地址表达式本讲稿第十五页,共八十一页3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3.2.2 3.2.2 符号定义伪指令符号定义伪指令3.2.3 3.2.3 数据定义伪指令数据定义伪指令3.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令3.2.5 3.2.5 结构定义伪指令结构定义伪指令 3.2 3.2 伪指令语句伪指令语句本讲稿第十六页,共八十一页3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句方式选择伪指令方式选择伪指令完整段定义伪指令完整段定义
18、伪指令指定地址伪指令指定地址伪指令模块定义伪指令模块定义伪指令 这类语句是与程序结构紧密相关的基本伪指令语句,这类语句是与程序结构紧密相关的基本伪指令语句,用于说明用于说明CPUCPU的类型、逻辑段结构、源程序的类型、逻辑段结构、源程序(或模块或模块)起止信息起止信息和段内存的安排等。主要包括和段内存的安排等。主要包括:本讲稿第十七页,共八十一页1.1.方式选择伪指令方式选择伪指令 方方式式选选择择伪伪指指令令用用于于通通知知汇汇编编程程序序,当当前前的的源源程程序序指指令令是是哪哪一一种种CPUCPU指指令令,经经过过汇汇编编链链接接之之后后生生成成的的目目标标程程序序在在哪哪一一种种CPU
19、CPU机机型型上上运运行行。不不属属于于选选定定CPUCPU的的指指令令均均为为非非法法指指令令。所所以以,方方式式选选择择伪伪指指令令本本质质上上也也就就是是指令集选择伪指令指令集选择伪指令。通常通常,方式选择伪指令放在程序的头部方式选择伪指令放在程序的头部,作为源程序作为源程序的第一条语句。缺省时默认的第一条语句。缺省时默认80868086指令集。指令集。3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句本讲稿第十八页,共八十一页2.2.完整段定义伪指令完整段定义伪指令 采用完整段定义伪指令可具体控制汇编程序采用完整段定义伪指令可具体控制汇编程序(MASMMASM)和链接程序()
20、和链接程序(LINKLINK)在内存中组织代码和数)在内存中组织代码和数据的方式。据的方式。主要包括主要包括段定义语句段定义语句和和段寄存器说明语句段寄存器说明语句。3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句本讲稿第十九页,共八十一页3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句 段定义语句段定义语句 格式:格式:段名段名 SEGMENTSEGMENT 定位类型定位类型,组合类型组合类型,字长选择字长选择,类别类别 段体段体 ;由指令、伪指令和宏指令语句组成;由指令、伪指令和宏指令语句组成段名段名 ENDSENDS 说明:说明:(1)(1)SEGMENT/END
21、SSEGMENT/ENDS是一对段定义语句是一对段定义语句,一个逻辑段从一个逻辑段从SEGMENTSEGMENT语句开语句开始,到始,到ENDSENDS语句结束。语句结束。(2)(2)段名段名是用户定义的段的标识符,用于指明段的基址。是用户定义的段的标识符,用于指明段的基址。(3)(3)4 4个可选参数个可选参数用于为源程序的汇编、连接提供必要的信息,特别用于为源程序的汇编、连接提供必要的信息,特别是模块化程序,各个模块如何定位是模块化程序,各个模块如何定位,彼此之间如何连接,将较多地涉彼此之间如何连接,将较多地涉及到及到定位类型定位类型和和组合类型组合类型的选择。的选择。指定段起点的边界类型
22、指定段起点的边界类型:BYTE BYTE(字节)(字节)WORDWORD(字)(字)DWORDDWORD(双字)(双字)PARAPARA(节)(节)PAGEPAGE(页)(页)定位类型定位类型告诉链接程序本段与其它模块中同名段的组合连接关系告诉链接程序本段与其它模块中同名段的组合连接关系:PUBLIC PUBLIC 连接到同一个物理段中连接到同一个物理段中 STACK STACK 连接到同一个物理堆栈段中连接到同一个物理堆栈段中,并给并给SS:ESPSS:ESP赋值赋值 COMMON COMMON 产生一个覆盖段。产生一个覆盖段。MEMORY MEMORY AT AT表达式表达式 组合类型组合
23、类型定义段中使用的偏移地址和寄存器的字长定义段中使用的偏移地址和寄存器的字长 USE16 USE16 表示该段字长为表示该段字长为1616位位 USE32 USE32 表示该段字长为表示该段字长为3232位位字长选择字长选择本讲稿第二十页,共八十一页 组合连接组合连接举例:举例:模块模块2 2(从模块):(从模块):DSEG SEGMENT COMMONDSEG SEGMENT COMMON ARRAY_B DW 200 DUP(?)ARRAY_B DW 200 DUP(?)DSEG ENDSDSEG ENDSSSEG SEGMENT STACKSSEG SEGMENT STACK DW 50
24、 DUP(?)DW 50 DUP(?)SSEG ENDSSSEG ENDSCSEG SEGMENT PUBLICCSEG SEGMENT PUBLIC CSEG ENDSCSEG ENDS ENDEND模块模块1 1(主模块):(主模块):DSEG SEGMENT COMMONDSEG SEGMENT COMMON ARRAY_A DW 100 DUP(?)ARRAY_A DW 100 DUP(?)DSEG ENDSDSEG ENDSSSEG SEGMENT STACKSSEG SEGMENT STACK DW 50 DUP(?)DW 50 DUP(?)SSEG ENDSSSEG ENDSCS
25、EG SEGMENT PUBLICCSEG SEGMENT PUBLIC ASSUME CS:CSEG,DS:DSEG,SS:SSEG ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART:MOV AXSTART:MOV AX,DSEGDSEG MOV DS MOV DS,AXAX CSEG ENDSCSEG ENDS END START END STARTCSEGCSEGDSEGDSEG(共共400400字节字节)模块模块2 2代码代码模块模块2 2数据数据SSEGSSEG(共共200200字节字节)模块模块1 1代码代码模块模块2 2堆栈堆栈模块模块1 1数据数据逻辑段组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 编程 精选 文档
限制150内