微机原理第3章汇编语言及编程.ppt
《微机原理第3章汇编语言及编程.ppt》由会员分享,可在线阅读,更多相关《微机原理第3章汇编语言及编程.ppt(89页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微机原理第3章汇编语言及编程 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望3.1 3.1 汇编语言程序结构与汇编语句汇编语言程序结构与汇编语句3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构 3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构 80 80X86/PentiumX86/Pentium系列系列MPUMPU汇编语言都是以逻汇编语言都是以逻辑段为基础,按段的概念来组织代码和数据
2、的。辑段为基础,按段的概念来组织代码和数据的。因此,源程序结构与逻辑段的定义方法密切相因此,源程序结构与逻辑段的定义方法密切相关,而宏汇编语言关,而宏汇编语言MASM 5.0MASM 5.0以上的版本中,逻以上的版本中,逻辑段既可用辑段既可用完整段完整段定义,又可用定义,又可用简化段简化段定义。定义。3-1.1.标准的单模块源程序框架标准的单模块源程序框架 .586 .586DATA SEGMENT USE16/USE32DATA SEGMENT USE16/USE32;定义数据段定义数据段 ;数据定义伪指令序列;数据定义伪指令序列DATA ENDSDATA ENDSSTACK SEGMENT
3、 USE16/USE32 STACKSTACK SEGMENT USE16/USE32 STACK;定义堆栈段定义堆栈段 ;数据定义伪指令序列;数据定义伪指令序列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;建立建
4、立DSDS的可寻址性的可寻址性 MOV ESMOV ES,AX AX;建立建立ESES段的可寻址性段的可寻址性 ;核心程序段;核心程序段 MOV AHMOV AH,4CH4CH;返回返回DOSDOS操作系统操作系统 INT 21HINT 21HCODE ENDSCODE ENDS END STARTEND START 一个源程序由若干逻辑段一个源程序由若干逻辑段组成。一般一个源程序具有数组成。一般一个源程序具有数据段、附加数据段、堆栈段和据段、附加数据段、堆栈段和代码段;代码段;但只有代码段是必不但只有代码段是必不可少的。可少的。采用完整段定义时,对程序采用完整段定义时,对程序中定义的逻辑段,
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,4CH4CHINT 21HINT 21H源程序(模块)源程
6、序(模块)以以ENDEND伪指令结束伪指令结束 END STARTEND START3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构3-3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构(1)(1)使用使用DOSDOS的的4 4CHCH号功能调用号功能调用这种方法是在代码段结束前加调用语句:这种方法是在代码段结束前加调用语句:MOV AH MOV AH,4CH 4CH ;功能号功能号4 4CHAHCHAH INT 21H INT 21H ;中断调用中断调用(2)(2)使用使用2020H H号软功能调用号软功能调用调用方式是在代码段结束前加调用语句:调用方式是在代码段结束前
7、加调用语句:INT 20H INT 20H(3)(3)使用使用DOSDOS的的0 0号功能调用号功能调用调用方式是在代码段结束前加调用语句:调用方式是在代码段结束前加调用语句:MOV AHMOV AH,0 0 INT 21H INT 21H2.2.返回返回DOSDOS状态的方法状态的方法 3-(4)(4)将主程序定义为远过程将主程序定义为远过程 也称为也称为“标准序标准序”方法。这种方法是在代码段开始方法。这种方法是在代码段开始处按下述方式定义主程序:处按下述方式定义主程序:CODE CODE SEGMENT SEGMENT ASSUME ASSUME 主过程名主过程名PROC FARPROC
8、 FARPUSH DS PUSH DS SUB AXSUB AX,AX AX ;标准序标准序 PUSH AXPUSH AX RET RET主过程名主过程名 ENDPENDPEND END 主过程名主过程名3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构3-指令语句指令语句伪指令语句伪指令语句宏指令语句宏指令语句3.1.2 3.1.2 汇编语言的语句汇编语言的语句 语句是汇编语言程序的基本组成单位,用于规定汇编语句是汇编语言程序的基本组成单位,用于规定汇编语言的一个基本操作。汇编语言包含三种基本语句:语言的一个基本操作。汇编语言包含三种基本语句:是是可可执执行行语语句句,由由硬硬件件
9、(CPU)CPU)完完成成其其功功能能,汇汇编时产生目标代码编时产生目标代码 。不可执行语句,不可执行语句,其功能由相应软其功能由相应软件完成,件完成,不产生不产生目标代码目标代码。用户定义的新指令,汇编用户定义的新指令,汇编时产生相应的目标代码。时产生相应的目标代码。3-标号和名字标号和名字分别是给指令单元和伪指令起的符分别是给指令单元和伪指令起的符号名称,统称为标识符。号名称,统称为标识符。(注意组成的语法规则注意组成的语法规则)助记符和定义符助记符和定义符分别用于规定指令语句的操作分别用于规定指令语句的操作性质和伪指令语句的伪操作功能,统称操作符。性质和伪指令语句的伪操作功能,统称操作符
10、。操作数操作数操作数允许有多个,这时各操作数之间操作数允许有多个,这时各操作数之间要用逗号要用逗号“,”隔开。隔开。3.1.2 3.1.2 汇编语言的语句汇编语言的语句指令语句:指令语句:标号:标号:助记符助记符 操作数操作数 ;注释;注释 伪指令语句:伪指令语句:名字名字 定义符定义符 操作数操作数 ;注释;注释 1.1.语句格式语句格式3-2.2.数数 据据 汇编语言中使用的数据有常数、变量和标号。汇编语言中使用的数据有常数、变量和标号。(1)(1)常数常数 常数是指那些在汇编过程中已常数是指那些在汇编过程中已有确定数值的有确定数值的量量,分为数值常数和字符串常数两类。主要用作,分为数值常
11、数和字符串常数两类。主要用作:指令语句中的立即操作数指令语句中的立即操作数基址、变址或基址加变址寻址中的位移量基址、变址或基址加变址寻址中的位移量伪指令语句中用于给变量赋初值伪指令语句中用于给变量赋初值3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-标号标号是指令的符号化地址,一定在代码段,而是指令的符号化地址,一定在代码段,而变变量量是数据的符号化地址,是数据的符号化地址,一般在数据段,有时也可在一般在数据段,有时也可在代码段定义代码段定义。q变量与标号有三个共同属性:变量与标号有三个共同属性:段基址:段基址:所在段的起始地址所在段的起始地址(SEG)SEG)偏移值:偏移值:相对于段
12、基址的位移量相对于段基址的位移量(OFFSET)OFFSET)类型:类型:所占存储单元的字节数所占存储单元的字节数(TYPE)/TYPE)/NEARNEAR和和FARFAR(2)(2)变量与标号变量与标号3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-q变量与标号区别变量与标号区别标号可以用作标号可以用作转移控制类指令的操作数转移控制类指令的操作数,但但变量不能。变量不能。变量可以用作变量可以用作基址、变址或基址加变址寻址基址、变址或基址加变址寻址的位移量的位移量,但标号不能。但标号不能。3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-例例3.13.1 假设假设VAR1VAR1
13、和和VAR2VAR2为字变量,为字变量,LABLAB为程序中为程序中的一个标号,判断下列指令是否正确,若错误请指出的一个标号,判断下列指令是否正确,若错误请指出错误之处:错误之处:ADD VAR1ADD 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.3.表达式表达式 表达式是汇编语句操作数的基本形式,由运表达式是汇编语句操作数的基本形式,由运算符和运算对象组成。算符和运算对象组成。算术运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符汇编语言特定的运算符汇编语言特定的运算符运算符运算符常数、变量和标号常数、变量和标号操作数操作数构成程序的段和偏移量构成程序的段和偏移量
15、运算对象运算对象3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-指在汇编过程中能够由汇编程序计算出数值的表指在汇编过程中能够由汇编程序计算出数值的表达式。可作为达式。可作为指令中的立即操作数和数据区中的初值指令中的立即操作数和数据区中的初值使用。使用。例如:例如:MOV BX MOV 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 LABLESEG LABLE表达式又分为数值表达式和地址表达式:表达式
16、又分为数值表达式和地址表达式:3.1.2 3.1.2 汇编语言的语句汇编语言的语句q数值表达式数值表达式3-其值表示存储器地址,一般都是段内的偏移地其值表示存储器地址,一般都是段内的偏移地址。与变量一样,地址表达式也具有段值、偏移值址。与变量一样,地址表达式也具有段值、偏移值和类型属性。地址表达式主要用来表示指令语句中和类型属性。地址表达式主要用来表示指令语句中的操作数,的操作数,例如:例如:MOV AX MOV AX,BASEEAXEBXBASEEAXEBX JMP JMP BASEEAXBASEEAX LEA BXLEA BX,BASE+12BASE+123.1.2 3.1.2 汇编语言的
17、语句汇编语言的语句q地址表达式地址表达式3-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-3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句方式选择伪指令方式选择伪指令完整段定义伪指令完整段定义伪指令指定地址伪指令指定地址伪指令模块定义伪指令模块定义伪指令 这类语句是与程序结构紧密相关的基本伪指令语这类语句是与程序结
18、构紧密相关的基本伪指令语句,用于说明句,用于说明CPUCPU的类型、逻辑段结构、源程序的类型、逻辑段结构、源程序(或模或模块块)起止信息和段内存的安排等。主要包括起止信息和段内存的安排等。主要包括:3-1.1.方式选择伪指令方式选择伪指令 方方式式选选择择伪伪指指令令用用于于通通知知汇汇编编程程序序,当当前前的的源源程程序序指指令令是是哪哪一一种种CPUCPU指指令令,经经过过汇汇编编链链接接之之后后生生成成的的目目标标程程序序在在哪哪一一种种CPUCPU机机型型上上运运行行。不不属属于于选选定定CPUCPU的的指指令令均均为为非非法法指指令令。所所以以,方方式式选选择择伪伪指令本质上也就是指
19、令集选择伪指令指令本质上也就是指令集选择伪指令。通常通常,方式选择伪指令放在程序的头部方式选择伪指令放在程序的头部,作为作为源程序的第一条语句。缺省时默认源程序的第一条语句。缺省时默认80868086指令集。指令集。3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3-2.2.完整段定义伪指令完整段定义伪指令 采用完整段定义伪指令可具体控制汇编程序采用完整段定义伪指令可具体控制汇编程序(MASMMASM)和链接程序(和链接程序(LINKLINK)在内存中组织代码在内存中组织代码和数据的方式。和数据的方式。主要包括主要包括段定义语句段定义语句和和段寄存器说明语句段寄存器说明语句。3.2
20、.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3-3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句 段定义语句段定义语句 格式:格式:段名段名 SEGMENTSEGMENT 定位类型定位类型,组合类型组合类型,字长选择字长选择,类别类别 段体段体 ;由指令、伪指令和宏指令语句组成;由指令、伪指令和宏指令语句组成段名段名 ENDSENDS 说明:说明:(1)(1)SEGMENT/ENDSSEGMENT/ENDS是一对段定义语句是一对段定义语句,一个逻辑段从一个逻辑段从SEGMENTSEGMENT语句开始,到语句开始,到ENDSENDS语句结束。语句结束。(2)(2)段名段名是
21、用户定义的段的标识符,用于指明段的基址。是用户定义的段的标识符,用于指明段的基址。(3)(3)4 4个可选参数个可选参数用于为源程序的汇编、连接提供必要的信用于为源程序的汇编、连接提供必要的信息,特别是模块化程序,各个模块如何定位息,特别是模块化程序,各个模块如何定位,彼此之间如何连彼此之间如何连接,将较多地涉及到接,将较多地涉及到定位类型定位类型和和组合类型组合类型的选择。的选择。指定段起点的边界类型指定段起点的边界类型:BYTE BYTE(字节)字节)WORD WORD(字)字)DWORD DWORD(双字)双字)PARA PARA(节)节)PAGE PAGE(页)页)定位类型定位类型告诉
22、链接程序本段与其它模块中同名段的组合连接关系告诉链接程序本段与其它模块中同名段的组合连接关系:PUBLIC PUBLIC 连接到同一个物理段中连接到同一个物理段中 STACK STACK 连接到同一个物理堆栈段中连接到同一个物理堆栈段中,并给并给SS:ESPSS:ESP赋值赋值 COMMON COMMON 产生一个覆盖段。产生一个覆盖段。MEMORY MEMORY AT AT表达式表达式 组合类型组合类型定义段中使用的偏移地址和寄存器的字长定义段中使用的偏移地址和寄存器的字长 USE16 USE16 表示该段字长为表示该段字长为1616位位 USE32 USE32 表示该段字长为表示该段字长为
23、3232位位字长选择字长选择3-组合连接组合连接举例:举例:模块模块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 DUP(?)DW 50 DUP(?)SSEG ENDSSSEG ENDSCSEG SEGMENT PUBLICCSEG SEGMENT PUBLIC CSEG ENDSCSEG ENDS ENDEND模块模块1 1(主
24、模块):(主模块):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 ENDSCSEG SEGMENT PUBLICCSEG SEGMENT PUBLIC ASSUME CS:CSEG,DS:DSEG,SS:SSEG ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART:MOV AX
25、START: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数据数据逻辑段组合示意图逻辑段组合示意图模块模块1 1堆栈堆栈3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3-段寄存器说明语句段寄存器说明语句 格式:格式:ASSUME ASSUME 段寄存器段寄存器:段名段名,段寄存器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 汇编语言 编程
限制150内