版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章第三章 汇编言语及编程汇编言语及编程3.1 3.1 汇编言语程序构造与汇编语句汇编言语程序构造与汇编语句3.2 3.2 伪指令语句伪指令语句3.3 3.3 汇编言语编程环境汇编言语编程环境3.4 DOS/BIOS3.4 DOS/BIOS功能调用功能调用3.5 3.5 三种根本构造程序的设计三种根本构造程序的设计3.6 3.6 子程序设计与调用子程序设计与调用3.1 3.1 汇编言语程序构造与汇编语句汇编言语程序构造与汇编语句3.1.1 3.1.1 汇编言语源程序构造汇编言语源程序构造 3.1.2 3.1.2 汇编言语的语句汇编言语的语句3.1.1 3.1.1 汇编言语源程序构造汇编言语源
2、程序构造 80X86/Pentium 80X86/Pentium系列系列MPUMPU汇编言语都是以逻汇编言语都是以逻辑段为根底,按段的概念来组织代码和数据的。辑段为根底,按段的概念来组织代码和数据的。因此,源程序构造与逻辑段的定义方法亲密相因此,源程序构造与逻辑段的定义方法亲密相关,而宏汇编言语关,而宏汇编言语MASM 5.0MASM 5.0以上的版本中,逻以上的版本中,逻辑段既可用完好段定义,又可用简化段定义。辑段既可用完好段定义,又可用简化段定义。1. 1. 规范的单模块源程序框架规范的单模块源程序框架 .586 .586DATA SEGMENT USE16/USE32DATA SEGME
3、NT USE16/USE32;定义数据段;定义数据段 ;数据定义伪指令序列;数据定义伪指令序列DATA ENDSDATA ENDSSTACK SEGMENT USE16/USE32 STACKSTACK SEGMENT USE16/USE32 STACK;定义堆栈段;定义堆栈段 ;数据定义伪指令序列;数据定义伪指令序列STACK ENDSSTACK ENDSCODE SEGMENT USE16/USE32CODE SEGMENT USE16/USE32;定义代码段;定义代码段 ASSUME CS ASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,
4、ESES:DATADATASTART: MOV AXSTART: MOV AX,DATADATA;取数据段基址;取数据段基址 MOV DS MOV DS,AXAX;建立;建立DSDS的可寻址性的可寻址性 MOV ES MOV ES,AX AX ;建立;建立ESES段的可寻址性段的可寻址性 ;中心程序段;中心程序段 MOV AH MOV AH,4CH4CH;前往;前往DOSDOS操作系统操作系统 INT 21H INT 21HCODE ENDSCODE ENDS END START END START 一个源程序由假设干逻辑段组成。普通一个源程序具有数据段、附加数据段、堆栈段和代码段;但只需代码
5、段是必不可少的。 采用完好段定义时,对程序采用完好段定义时,对程序中定义的逻辑段,要阐明逻辑中定义的逻辑段,要阐明逻辑段与段存放器的寻址关系。段与段存放器的寻址关系。ASSUME CSASSUME CS:CODECODE,SSSS:STACKSTACK,DSDS:DATADATA,ESES:DATADATA对数据段对数据段(有时还有堆栈段有时还有堆栈段),程序中要,程序中要包含初始化段存放器的语句。包含初始化段存放器的语句。MOV AXMOV AX,DATADATAMOV DSMOV DS,AXAXMOV ESMOV ES,AXAX程序中要包含前程序中要包含前往往DOSDOS的语句。的语句。M
6、OV AHMOV AH,4CH4CHINT 21HINT 21H源程序模块源程序模块以以END伪指令终了伪指令终了 END STARTEND START3.1.1 3.1.1 汇编言语源程序构造汇编言语源程序构造3.1.1 3.1.1 汇编言语源程序构造汇编言语源程序构造(1) (1) 运用运用DOSDOS的的4CH4CH号功能调用号功能调用这种方法是在代码段终了前加调用语句:这种方法是在代码段终了前加调用语句: MOV AH MOV AH,4CH 4CH ;功能号;功能号4CHAH4CHAH INT 21H INT 21H ;中断调用;中断调用(2) (2) 运用运用20H20H号软功能调用
7、号软功能调用调用方式是在代码段终了前加调用语句:调用方式是在代码段终了前加调用语句: INT 20H INT 20H(3) (3) 运用运用DOSDOS的的0 0号功能调用号功能调用调用方式是在代码段终了前加调用语句:调用方式是在代码段终了前加调用语句: MOV AH MOV AH,0 0 INT 21H INT 21H2.2.前往前往DOSDOS形状的方法形状的方法 (4) (4) 将主程序定义为远过程将主程序定义为远过程 也称为也称为“规范序方法。这种方法是在代码段开场处规范序方法。这种方法是在代码段开场处按下述方式定义主程序:按下述方式定义主程序:CODE CODE SEGMENT SE
8、GMENT ASSUME ASSUME 主过程名主过程名PROC FARPROC FARPUSH DS PUSH DS SUB AXSUB AX,AX AX ;规范序;规范序 PUSH AXPUSH AX RET RET主过程名主过程名 ENDP ENDPEND END 主过程名主过程名3.1.1 3.1.1 汇编言语源程序构造汇编言语源程序构造 指令语句指令语句 伪指令语句伪指令语句 宏指令语句宏指令语句3.1.2 3.1.2 汇编言语的语句汇编言语的语句 语句是汇编言语程序的根本组成单位,用于规定汇编语句是汇编言语程序的根本组成单位,用于规定汇编言语的一个根本操作。汇编言语包含三种根本语句
9、:言语的一个根本操作。汇编言语包含三种根本语句: 是可执行语句是可执行语句, ,由硬件由硬件(CPU)(CPU)完成其功能,汇完成其功能,汇编时产生目的代码编时产生目的代码 。不可执行语句,不可执行语句,其功能由相应软其功能由相应软件完成,不产生件完成,不产生目的代码。目的代码。用户定义的新指令,汇编用户定义的新指令,汇编时产生相应的目的代码。时产生相应的目的代码。 标号和名字标号和名字分别是给指令单元和伪指令起的符分别是给指令单元和伪指令起的符号称号,统称为标识符。号称号,统称为标识符。( (留意组成的语法规那么留意组成的语法规那么) ) 助记符和定义符助记符和定义符分别用于规定指令语句的操
10、作分别用于规定指令语句的操作性质和伪指令语句的伪操作功能,统称操作符。性质和伪指令语句的伪操作功能,统称操作符。 操作数操作数操作数允许有多个,这时各操作数之间操作数允许有多个,这时各操作数之间要用逗号要用逗号“,隔开。,隔开。3.1.2 3.1.2 汇编言语的语句汇编言语的语句指令语句:指令语句: 标号:标号: 助记符助记符 操作数操作数 ;注释;注释 伪指令语句:伪指令语句: 名字名字 定义符定义符 操作数操作数 ;注释;注释 1. 1. 语句格式语句格式2. 2. 数数 据据 汇编言语中运用的数据有常数、变量和标号。汇编言语中运用的数据有常数、变量和标号。 (1) (1) 常数常数 常数
11、是指那些在汇编过程中已有确定数值的常数是指那些在汇编过程中已有确定数值的量,分为数值常数和字符串常数两类。主要用作量,分为数值常数和字符串常数两类。主要用作: : 指令语句中的立刻操作数指令语句中的立刻操作数 基址、变址或基址加变址寻址中的位移量基址、变址或基址加变址寻址中的位移量 伪指令语句中用于给变量赋初值伪指令语句中用于给变量赋初值3.1.2 3.1.2 汇编言语的语句汇编言语的语句 标号是指令的符号化地址,一定在代码段,而变标号是指令的符号化地址,一定在代码段,而变量是数据的符号化地址,普通在数据段,有时也可在量是数据的符号化地址,普通在数据段,有时也可在代码段定义。代码段定义。q 变
12、量与标号有三个共同属性:变量与标号有三个共同属性: 段基址:所在段的起始地址段基址:所在段的起始地址(SEG)(SEG) 偏移值:相对于段基址的位移量偏移值:相对于段基址的位移量(OFFSET)(OFFSET) 类型:所占存储单元的字节数类型:所占存储单元的字节数(TYPE)/NEAR(TYPE)/NEAR和和FARFAR(2) (2) 变量与标号变量与标号3.1.2 3.1.2 汇编言语的语句汇编言语的语句q变量与标号区别变量与标号区别标号可以用作转移控制类指令的操作数,标号可以用作转移控制类指令的操作数,但变量不能。但变量不能。变量可以用作基址、变址或基址加变址寻变量可以用作基址、变址或基
13、址加变址寻址的位移量,但标号不能。址的位移量,但标号不能。3.1.2 3.1.2 汇编言语的语句汇编言语的语句 例例3.1 3.1 假设假设VAR1VAR1和和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,
14、VAR1BXVAR1BX JMP VAR2BX JMP VAR2BX错,不允许存储器变量间直接传数错,不允许存储器变量间直接传数错,源与目的操作数错,源与目的操作数类型不一致类型不一致错,变量不能用作条错,变量不能用作条件转移指令的操作数件转移指令的操作数错,标号不能用作变错,标号不能用作变址寻址的位移量址寻址的位移量错,缺错,缺PTRPTR运算符运算符正确正确正确正确3.1.2 3.1.2 汇编言语的语句汇编言语的语句3. 3. 表达式表达式 表达式是汇编语句操作数的根本方式,由运表达式是汇编语句操作数的根本方式,由运算符和运算对象组成。算符和运算对象组成。算术运算符逻辑运算符关系运算符汇编
15、言语特定的运算符运算符运算符常数、变量和标号操作数构成程序的段和偏移量 运算对象运算对象3.1.2 3.1.2 汇编言语的语句汇编言语的语句 指在汇编过程中可以由汇编程序计算出数值的表指在汇编过程中可以由汇编程序计算出数值的表达式。可作为指令中的立刻操作数和数据区中的初值达式。可作为指令中的立刻操作数和数据区中的初值运用。例如:运用。例如: 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
16、 LABLESEG LABLE表达式又分为数值表达式和地址表达式:表达式又分为数值表达式和地址表达式:3.1.2 3.1.2 汇编言语的语句汇编言语的语句q数值表达式数值表达式 其值表示存储器地址,普通都是段内的偏移地其值表示存储器地址,普通都是段内的偏移地址。与变量一样,地址表达式也具有段值、偏移值址。与变量一样,地址表达式也具有段值、偏移值和类型属性。地址表达式主要用来表示指令语句中和类型属性。地址表达式主要用来表示指令语句中的操作数,例如:的操作数,例如: MOV AX MOV AX,BASEEAXEBXBASEEAXEBX JMP BASEEAX JMP BASEEAX LEA BX
17、LEA 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指令,经过汇编链接之后指令,经过汇编链接之后生成的目的程序在哪一种生成的目的程序在哪一种CPUCPU机型上运转。不属于机型上运转。不属于选定选定CPUCP
19、U的指令均为非法指令。所以,方式选择伪的指令均为非法指令。所以,方式选择伪指令本质上也就是指令集选择伪指令。指令本质上也就是指令集选择伪指令。 通常通常, ,方式选择伪指令放在程序的头部方式选择伪指令放在程序的头部, ,作为作为源程序的第一条语句。缺省时默许源程序的第一条语句。缺省时默许80868086指令集。指令集。 3.2.1 3.2.1 程序构造伪指令语句程序构造伪指令语句2. 2. 完好段定义伪指令完好段定义伪指令 采用完好段定义伪指令可详细控制汇编程序采用完好段定义伪指令可详细控制汇编程序MASMMASM和链接程序和链接程序LINKLINK在内存中组织代在内存中组织代码和数据的方式。
20、码和数据的方式。 主要包括段定义语句和段存放器阐明语句。主要包括段定义语句和段存放器阐明语句。 3.2.1 3.2.1 程序构造伪指令语句程序构造伪指令语句3.2.1 3.2.1 程序构造伪指令语句程序构造伪指令语句 段定义语句段定义语句 格式:格式:段名段名 SEGMENT SEGMENT 定位类型定位类型,组合类型组合类型,字长选择字长选择,类别类别 段体段体 ;由指令、伪指令和宏指令语句组成;由指令、伪指令和宏指令语句组成段名段名 ENDS ENDS 阐明:阐明: (1) SEGMENT/ENDS (1) SEGMENT/ENDS是一对段定义语句是一对段定义语句, ,一个逻辑段从一个逻辑
21、段从SEGMENTSEGMENT语句开场,到语句开场,到ENDSENDS语句终了。语句终了。(2) (2) 段名是用户定义的段的标识符,用于指明段的基址。段名是用户定义的段的标识符,用于指明段的基址。 (3) 4 (3) 4个可选参数用于为源程序的汇编、衔接提供必要的信个可选参数用于为源程序的汇编、衔接提供必要的信息,特别是模块化程序,各个模块如何定位息,特别是模块化程序,各个模块如何定位, ,彼此之间如何衔彼此之间如何衔接,将较多地涉及到定位类型和组合类型的选择。接,将较多地涉及到定位类型和组合类型的选择。指定段起点的边境类型指定段起点的边境类型: : BYTE BYTE字节字节 WORD
22、WORD字字 DWORD DWORD双字双字 PARA PARA节节 PAGE PAGE页页 定位类型定位类型通知链接程序本段与其它模块中同名段的组合衔接关系通知链接程序本段与其它模块中同名段的组合衔接关系: : 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 DUP(?) DW 50 DUP(?)SSEG ENDSSSEG ENDSCSEG SEGMENT
24、PUBLICCSEG SEGMENT PUBLIC CSEG ENDSCSEG ENDS END END模块模块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 ENDSCSEG SEGMENT PUBLICCSEG SEGMENT PUBLIC ASSUME CS:CSEG
25、,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数据数据逻辑段组合表示图逻辑段组合表示图模块模块1 1堆栈堆栈3.2.1 3.2.1 程序构造伪指
26、令语句程序构造伪指令语句 段存放器阐明语句段存放器阐明语句 格式:格式: ASSUME ASSUME 段存放器段存放器: :段名段名 ,段存放器,段存放器: :段名,段名, 功能功能: : 阐明源程序中定义的段由那个段存放器去寻阐明源程序中定义的段由那个段存放器去寻址。址。 阐明:阐明: CS CS只能用于包含有程序的段只能用于包含有程序的段, ,反之含有程反之含有程序的段也只能以序的段也只能以CSCS作为段存放器。作为段存放器。SSSS也一样,只也一样,只能与堆栈段对应。能与堆栈段对应。 CS CS所对应的段名必需在该语句之前有定义。所对应的段名必需在该语句之前有定义。 该语句是阐明性语句。
27、该语句是阐明性语句。 3.2.1 3.2.1 程序构造伪指令语句程序构造伪指令语句3. 3. 指定地址伪指令指定地址伪指令 格式格式: ORG : ORG 偏移地址偏移地址 ORG $ + ORG $ + 偏移地址偏移地址功能功能: : 该伪指令以其指定的偏移地址或由该伪指令以其指定的偏移地址或由$ $ 给出的给出的当前地址加上指定的偏移地址作为当前开场分配和当前地址加上指定的偏移地址作为当前开场分配和运用的偏移地址。运用的偏移地址。3.2.1 3.2.1 程序构造伪指令语句程序构造伪指令语句4. 4. 模块定义伪指令模块定义伪指令 模块定义伪指令包括模块开场和模块终了语句。模块定义伪指令包括
28、模块开场和模块终了语句。 (1) (1) 模块开场语句模块开场语句(NAME)(NAME) 格式:格式:NAME NAME 模块名模块名 功能:指示源程序开场,并指出该源程序的模块名。功能:指示源程序开场,并指出该源程序的模块名。 (2) (2) 模块终了语句模块终了语句(END)(END) 格式:格式:END END 标号标号/ /过程名过程名 功能:模块终了语句表示源程序到此终了。功能:模块终了语句表示源程序到此终了。 3.2.1 3.2.1 程序构造伪指令语句程序构造伪指令语句3.2.2 3.2.2 符号定义伪指令符号定义伪指令格式格式: :赋值语句:符号名赋值语句:符号名 EQU EQ
29、U 表达式表达式 功能功能: : 都是用符号名替代表达式的值。但赋值都是用符号名替代表达式的值。但赋值语句定义的符号名不能重新定义,而等号语句语句定义的符号名不能重新定义,而等号语句允许。允许。1. 1. 符号常数定义伪指令符号常数定义伪指令等号语句:符号名等号语句:符号名 = = 表达式表达式 例例3.2 3.2 赋值语句与等号语句举例。赋值语句与等号语句举例。赋值语句:赋值语句:X EQU 50X EQU 50Y EQU X +10Y EQU X +10COUNT EQU $ - ARRYCOUNT EQU $ - ARRY等号语句:等号语句:CON = 5CON = 5BASE = 20
30、0HBASE = 200H BASE = BASE + 10HBASE = BASE + 10H;重新定义;重新定义BASEBASE3.2.2 3.2.2 符号定义伪指令符号定义伪指令2. 定义符号名伪指令定义符号名伪指令格式:格式: 符号名符号名 LABEL LABEL 类型类型 功能:将紧跟在本伪指令后的标号、操作码、过程或变功能:将紧跟在本伪指令后的标号、操作码、过程或变量建立新的符号名,并刷新其类型,但它并不为新指定量建立新的符号名,并刷新其类型,但它并不为新指定的变量或标号分配存储空间。的变量或标号分配存储空间。 例如:例如: SUB_FAR LABEL FAR ;远调用入口;远调用
31、入口 SUB_NEAR: MOV AL,SI ;近调用入口;近调用入口 两个标号两个标号SUB_FAR和和SUB_NEAR均指向同一条均指向同一条指令,前者为远标号,后者为近标号。指令,前者为远标号,后者为近标号。 3.2.2 3.2.2 符号定义伪指令符号定义伪指令3.2.3 3.2.3 数据定义伪指令数据定义伪指令伪指令格式伪指令格式: :DBDBDWDWDDDDDFDFDQDQDTDT数据项数据项 ,数据项,数据项,数据项,数据项 变量名变量名 功能功能: : 是为数据项或项表分配存储空间,给是为数据项或项表分配存储空间,给它们赋初值,并用一个符号名称为变量与之它们赋初值,并用一个符号名
32、称为变量与之相联络。相联络。8 8位字节位字节1616位字位字3232位双字位双字4848位长字位长字6464位四字位四字8080位十字节位十字节 运用阐明运用阐明: : 给变量赋初值可以是赋确定的值,也可以是赋不确给变量赋初值可以是赋确定的值,也可以是赋不确定的值定的值( (用用“? ?表示表示),),还可以是用还可以是用DUPDUP运算符建立的多次拷贝。运算符建立的多次拷贝。 例例3.3 3.3 运用运用80X8680X86汇编言语的伪操作命令定义:汇编言语的伪操作命令定义: VAL DB 93 DUP(5 VAL DB 93 DUP(5,2 DUP(2 DUP(1,2 DUP(3),4)
33、 2 DUP(2 DUP(1,2 DUP(3),4) 那么在那么在VALVAL存储区内前存储区内前1010个字节单元的数据是个字节单元的数据是 ? 解:由内向外逐层展开,分别相当于:解:由内向外逐层展开,分别相当于: 93 DUP(5 93 DUP(5,2 DUP(2 DUP(12 DUP(2 DUP(1,3 3,3)3),4)4) 93 DUP(5 93 DUP(5,2 DUP(12 DUP(1,3 3,3 3,1 1,3 3,3 3,4)4) 93 DUP(5,1,3,3,1,3,3,4,1,3,3,1,3,3,4) 93 DUP(5,1,3,3,1,3,3,4,1,3,3,1,3,3,4
34、)即表示反复即表示反复9393个数据序列个数据序列: : 5 5,1 1,3 3,3 3,1 1,3 3,3 3,4 4,1 1,3 3,3 3,1 1,3 3,3 3,4 43.2.3 3.2.3 数据定义伪指令数据定义伪指令 运用运用SEGSEG、OFFSETOFFSET、TYPETYPE、LENGTHLENGTH和和SIZESIZE运算符求变量的各种属性时,特别要留意:运算符求变量的各种属性时,特别要留意: 对对LENGTHLENGTH运算符,假设变量是用反复数据操运算符,假设变量是用反复数据操作符作符DUPDUP阐明的,那么前往外层阐明的,那么前往外层DUPDUP给定的值;给定的值;假
35、设没有假设没有DUPDUP阐明,那么前往值总是阐明,那么前往值总是1 1。 对对SIZESIZE运算符有:运算符有:SIZE =TYPESIZE =TYPELENGTHLENGTH运用阐明运用阐明: :3.2.3 3.2.3 数据定义伪指令数据定义伪指令 解解: : 此题有两层此题有两层DUPDUP定义,但最外层定义,但最外层DUPDUP给定的值给定的值为为100100,所以:,所以: BXBX= = 数组数组ARRAYARRAY的偏移地址;的偏移地址; CXCX= = 数组数组ARRAYARRAY的长度的长度 = 100 = 100; SISI= = 数组数组ARRAYARRAY的类型的类型
36、 = 2 = 2。 例例3.4 3.4 假设数组假设数组ARRAYARRAY在数据段中已作如下定义:在数据段中已作如下定义: ARRAY DW 100 DUP(123H ARRAY DW 100 DUP(123H,3 DUP(?)3 DUP(?),1234H1234H试指出以下指令执行后,有关存放器的内容是多少?试指出以下指令执行后,有关存放器的内容是多少?MOVMOV BX BX,OFFSET ARRAYOFFSET ARRAYMOVMOV CX CX,LENGTH ARRAYLENGTH ARRAYMOVMOV SI SI,0 0ADDADD SI SI,TYPE ARRAYTYPE AR
37、RAY3.2.3 3.2.3 数据定义伪指令数据定义伪指令 操作符操作符“$ $是取地址计数器的当前值,常用于表是取地址计数器的当前值,常用于表达式定义数组长度。达式定义数组长度。0100H03H0101H00H0102H06H0103H01H0104H05H0105H00H0106H06H0107H00H0108H07H0109H08H010AH08H010BH09H解:画出数组解:画出数组ARYARY的内存分配图。的内存分配图。AXAX=ARY+2=0102H =0106H=ARY+2=0102H =0106HBXBX=ARY+10=010AH=0908H=ARY+10=010AH=090
38、8H运用阐明运用阐明: :3.2.3 3.2.3 数据定义伪指令数据定义伪指令 运用运用DBDB、DWDW、DDDD定义串数据定义串数据( (用用 定义的定义的字符串字符串) )时时, ,允许定义的串长度不同,字符的存放允许定义的串长度不同,字符的存放顺序也不一样:顺序也不一样: DBDB是从左至右顺序为每个字符分配一个字节单元;是从左至右顺序为每个字符分配一个字节单元; DWDW是从左至右顺序为每是从左至右顺序为每2 2 个字符分配一个字单元,个字符分配一个字单元,且前面的字符在高字节且前面的字符在高字节, ,串长度不能超越串长度不能超越2 2; DDDD是从左至右顺序为每是从左至右顺序为每
39、4 4 个字符分配一个双字单元,个字符分配一个双字单元,也是按前面的字符在高字节顺序存放,串长度不能也是按前面的字符在高字节顺序存放,串长度不能超越超越4 4。3.2.3 3.2.3 数据定义伪指令数据定义伪指令 例例3.6 3.6 今需在变量名为今需在变量名为STRINGSTRING的数据区中依的数据区中依次存放数据次存放数据A A、B B、C C、D D、E E、F F、G G、H H,请写出分别用汇编命令请写出分别用汇编命令DBDB、DWDW和和DDDD实现的语句。实现的语句。解:用解:用DBDB、DWDW和和DDDD实现的语句分别为:实现的语句分别为: STRING DB STRING
40、 DB ABCDEFGHABCDEFGH STRING DW STRING DW BABA,DCDC,FEFE,HGHG STRING DD STRING DD DCBADCBA,HGFEHGFE3.2.3 3.2.3 数据定义伪指令数据定义伪指令3.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令过程定义伪指令过程定义伪指令宏定义伪指令宏定义伪指令宏和过程的比较宏和过程的比较格式:过程名格式:过程名 PROC PROC 属性属性 ;过程体;过程体 RET RET RET RET 过程名过程名 ENDP ENDP 阐明:阐明: 过程允许嵌套调用,还可以递归调用。过程允许嵌套调用,还可以
41、递归调用。 过程与逻辑段也可以相互嵌套,但决不允过程与逻辑段也可以相互嵌套,但决不允许过程与段交叉覆盖。许过程与段交叉覆盖。 过程又称为子程序。它是一段必需经过过程又称为子程序。它是一段必需经过CALLCALL指令调指令调用才干执行的程序段,执行完后经过一条用才干执行的程序段,执行完后经过一条RETRET指令前往原指令前往原调用途。过程需先定义才干调用。调用途。过程需先定义才干调用。 过程体中必需至少包含一过程体中必需至少包含一条条RETRET指令,这是过程的出口。指令,这是过程的出口。但也允许过程有多条但也允许过程有多条RETRET指令,指令,即过程有多个出口。即过程有多个出口。1.1.过程
42、定义伪指令过程定义伪指令 3.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令 宏定义格式:宏定义格式: 宏名宏名 MACRO MACRO 方式参数表方式参数表 ;宏体;宏体 ENDM ENDM 阐明:宏定义的宏名必需独一,称为宏指令。宏指令阐明:宏定义的宏名必需独一,称为宏指令。宏指令一经定义就可以在源程序的任何地方调用。相当于由用户一经定义就可以在源程序的任何地方调用。相当于由用户给汇编程序提供了一个新的操作码。给汇编程序提供了一个新的操作码。 宏调用格式:宏调用格式: 宏名宏名 实践参数表实践参数表 3.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令 宏的概念与过程很类
43、似,也是用一个宏名字来替代源宏的概念与过程很类似,也是用一个宏名字来替代源程序中经常要用到的一个程序模块。程序中经常要用到的一个程序模块。 2. 2. 宏定义伪指令宏定义伪指令 3.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令 运用宏定义和宏调用时要留意两个问题:运用宏定义和宏调用时要留意两个问题: 对带参数的宏指令,宏调用时实践参数与方对带参数的宏指令,宏调用时实践参数与方式参数的类型要一致,以免产生无效调用式参数的类型要一致,以免产生无效调用 。 宏调用是用宏体中定义的指令序列交换宏指宏调用是用宏体中定义的指令序列交换宏指令,所以宏体内的标号要用令,所以宏体内的标号要用LOCA
44、LLOCAL伪指令阐明为伪指令阐明为部分标号,以免多次调用宏时,发生标号反复部分标号,以免多次调用宏时,发生标号反复定义错误。定义错误。LOCALLOCAL伪指令格式:伪指令格式: LOCAL LOCAL 标号标号11,标号,标号2 2, 解:宏定义如下:解:宏定义如下: MOVE MACRO SARY MOVE MACRO SARY,DARYDARY LOCAL LP LOCAL LP MOV SI MOV SI,0 0 MOV CX MOV CX,100100 LP LP: MOV AL MOV AL,SARYSISARYSI MOV DARYSI MOV DARYSI,ALAL INC
45、SI INC SI LOOP LP LOOP LP ENDM ENDM 例例3.7 3.7 定义宏定义宏MOVEMOVE,其功能是将一个有,其功能是将一个有100100个字个字节元素的数组搬移到另一个数据区。节元素的数组搬移到另一个数据区。进展宏调用:进展宏调用: MOVE FIRST MOVE FIRST,SECONDSECOND宏展开如下:宏展开如下: MOV SI MOV SI,0 0 MOV CX MOV CX,100100?0000:MOV AL?0000:MOV AL,FIRSTSIFIRSTSI MOV SECONDSI MOV SECONDSI,ALAL INC SI INC
46、SI LOOP ?0000 LOOP ?00003.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令 3. 3. 宏和过程的比较宏和过程的比较 宏和过程都可简化源程序的书写,因此也减少了程序宏和过程都可简化源程序的书写,因此也减少了程序出错的能够性。但两者运用上也有区别出错的能够性。但两者运用上也有区别: :3.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令 (1) (1) 宏操作可以直接传送和接纳参数,而过程不能直宏操作可以直接传送和接纳参数,而过程不能直接带参数。当过程之间需求传送参数时,必需经过堆栈、接带参数。当过程之间需求传送参数时,必需经过堆栈、存放器或存储器来进展
47、,编程比宏要复杂。存放器或存储器来进展,编程比宏要复杂。 所以所以, ,宏汇编适宜于代码较短宏汇编适宜于代码较短, ,传送参数较多的子功能段运传送参数较多的子功能段运用用, ,子程序适宜于代码较长子程序适宜于代码较长, ,调用比较频繁的子功能段运用。调用比较频繁的子功能段运用。 (3) (3) 引入宏操作并不会在执行目的代码时添加额外的引入宏操作并不会在执行目的代码时添加额外的时间开销,但过程调用由于要维护和恢复现场及断点,因时间开销,但过程调用由于要维护和恢复现场及断点,因此会延伸目的程序的执行时间。此会延伸目的程序的执行时间。 (2) (2) 子程序不论被调用多少次它都只被汇编一次,即子程
48、序不论被调用多少次它都只被汇编一次,即有独一的一段目的代码有独一的一段目的代码; ;而宏指令那么调用多少次就汇编多而宏指令那么调用多少次就汇编多少次,每次调用都要在程序中展开并保管宏体中的每一行少次,每次调用都要在程序中展开并保管宏体中的每一行。3.2.5 3.2.5 构造定义伪指令构造定义伪指令 在一些运用中,常需求将一些不同类型的数据组在一些运用中,常需求将一些不同类型的数据组合成一个有机整体。这时就要用到汇编言语的构造化合成一个有机整体。这时就要用到汇编言语的构造化数据数据构造。构造。 与前述的字节、字类型数据不同,一个构造必与前述的字节、字类型数据不同,一个构造必需先经定义后才可以阐明
49、属于这种构造类型的变量,需先经定义后才可以阐明属于这种构造类型的变量,这是由于构造的组成是千变万化的。所以围绕构造这是由于构造的组成是千变万化的。所以围绕构造定义,有两种伪指令语句定义,有两种伪指令语句: :2. 2. 构造变量阐明与赋初值语句构造变量阐明与赋初值语句 1. 1. 构造类型阐明语句构造类型阐明语句(STRUC/ENDS)(STRUC/ENDS)3.2.5 3.2.5 构造定义伪指令构造定义伪指令 语句格式:语句格式: 构造名构造名 STRUC STRUC ;构造体,由数据定义语句构成;构造体,由数据定义语句构成 构造名构造名 ENDS ENDSDATE STRUCDATE ST
50、RUC MONTH DB MONTH DB ? DAY DB DAY DB ? YEAR DW YEAR DW ?DATE ENDSDATE ENDS 构造构造DATEDATE的存储方式的存储方式MONTHMONTH1 1字节字节DAYDAY1 1字节字节YEARYEAR2 2字节字节 构造的定义明确地描画了该构造的组织方式,它通知构造的定义明确地描画了该构造的组织方式,它通知汇编程序属于这种组织方式的变量运用内存的方式。例如汇编程序属于这种组织方式的变量运用内存的方式。例如: : 1. 1. 构造类型阐明语句构造类型阐明语句(STRUC/ENDS)(STRUC/ENDS)语句格式:语句格式:
51、 变量名变量名 构造名构造名 域值表域值表 例如:例如: VAR DATE 4 VAR DATE 2019H构造变量构造变量VARVAR的存储方式的存储方式MONTHMONTH1 1字节字节DAYDAY1 1字节字节YEARYEAR2 2字节字节04H04H03H03H 04H 04H20H20HVARVAR3. 3. 构造的援用构造的援用有两种方法:有两种方法:构造变量名构造变量名. .域名域名 基址或变址存放器基址或变址存放器.域域名名MOV AXMOV AX, VAR.YEAR VAR.YEARMOV CLMOV CL, VAR.DAY VAR.DAY上述援用也可用如下方法上述援用也可用
52、如下方法: :MOV BXMOV BX,OFFSET VAR OFFSET VAR MOV AXMOV AX,BX.YEARBX.YEARMOV CLMOV CL,BX.DAYBX.DAY3.2.5 3.2.5 构造定义伪指令构造定义伪指令2. 2. 构造变量阐明与赋初值语句构造变量阐明与赋初值语句 3.3 3.3 汇编言语编程环境汇编言语编程环境 与其它程序设计言语一样,汇编言语程序的开发与其它程序设计言语一样,汇编言语程序的开发过程可归结为:过程可归结为: 就需求分析、模块划分和算法确定等任务而言,就需求分析、模块划分和算法确定等任务而言,各种程序设计言语是类似的,均可按软件工程的方法各种
53、程序设计言语是类似的,均可按软件工程的方法进展,但编程和调试那么因程序设计言语而异。进展,但编程和调试那么因程序设计言语而异。 需求分析需求分析 根据需求和规模等要素划分模块根据需求和规模等要素划分模块 确定各功能模块的求解算法、并定义所需的确定各功能模块的求解算法、并定义所需的数据构造数据构造 进展编程和调试进展编程和调试 对汇编言语而言,根据数据构造和算法进展编码到对汇编言语而言,根据数据构造和算法进展编码到构成可用程序的过程如下:构成可用程序的过程如下: 需求分析、需求分析、数据构造和算法数据构造和算法汇编言语源程序汇编言语源程序文件文件 * *.ASM.ASM目的代码程序目的代码程序文
54、件文件 * *.OBJ.OBJ可执行程序可执行程序文件文件 * *.EXE.EXE可用程序可用程序衔接衔接编辑编辑汇编汇编调试调试3.3 3.3 汇编言语编程环境汇编言语编程环境一、汇编程序的操作步骤:一、汇编程序的操作步骤:1 1、建立源程序文件、建立源程序文件(EDIT)(EDIT),扩展名为,扩展名为.ASM.ASM2 2、汇编、汇编MASMMASM或或ASMASM源程序,生成目的文件源程序,生成目的文件“.OBJ.OBJ(.LST .CRF)(.LST .CRF)3 3、程序衔接、程序衔接LINKLINK,生成,生成“.EXE.EXE文件文件4 4、执行程序、执行程序C:MASM50C
55、:MASM50文件名文件名5 5、调试程序、调试程序 C:MASM50 DEBUG C:MASM50 DEBUG 文件名文件名.EXE.EXE二、执行宏汇编程序二、执行宏汇编程序1、汇编过程、汇编过程MASM 文件名;文件名; ;生成;生成OBJ文件文件MASM 文件名,;文件名,; ;生成;生成OBJ、LSTMASM 文件名,;文件名,; ;生成;生成OBJ、LST、CRF三个文件三个文件2、列表文件、列表文件.LST可用可用TYPE显示,包括三个部分显示,包括三个部分源程序和目的程序清单源程序和目的程序清单段信息汇总表:各段所占存储空间的长度,各段段信息汇总表:各段所占存储空间的长度,各段
56、的定位类型,段的组合类型的定位类型,段的组合类型符号汇总表符号汇总表3、交叉索引文件、交叉索引文件.CRF 列出了源程序中定义的符号标号、变量和列出了源程序中定义的符号标号、变量和程序中援用这些符号的情况。程序中援用这些符号的情况。三、执行衔接文件三、执行衔接文件 衔接程序是把衔接程序是把 一个或多个独立的目的程序模一个或多个独立的目的程序模块装配成一个可重定位的可执行文件块装配成一个可重定位的可执行文件.EXE。1、衔接程序执行过程、衔接程序执行过程LINK 文件名;文件名; (文件名文件名.OBJ)2、内存映射文件、内存映射文件 ( .MAP)LINK 文件名,;文件名,; 除了产生执行文
57、件外,还衔接产生内存映射文除了产生执行文件外,还衔接产生内存映射文件件.MAP,它给出每个段的地址分配情况及长,它给出每个段的地址分配情况及长度。度。运用程序运用程序外设硬件接口外设硬件接口BIOSBIOSDOSDOS DOS DOS操作系统和操作系统和ROM BIOSROM BIOS系统各为系统各为用户提供了一组例行用户提供了一组例行子程序,用于完成根子程序,用于完成根本本I/OI/O设备、内存、设备、内存、文件和作业的管理,文件和作业的管理,以及时钟、日历的读以及时钟、日历的读出和设置等功能。出和设置等功能。 3.4 DOS/BIOS3.4 DOS/BIOS功能调用功能调用 INT 21H
58、 INT 21H的调用方法的调用方法传送入口参数到指定存放器中传送入口参数到指定存放器中功能号送入功能号送入AHAH存放器中存放器中INT 21HINT 21H1 1、键盘键入字符并加回显、键盘键入字符并加回显1 1号调用号调用MOV AHMOV AH,1 1INT 21HINT 21H;ALAL键盘键入字符键盘键入字符 BUF DB 20 DB ? DB 20 DUP? MOV DX,OFFSET BUFMOV AH,0AHINT 21H3 3、输出单字符、输出单字符2 2号调用号调用入口参数:入口参数:DLDL= =显示字符显示字符MOV DLMOV DL,AAMOV AHMOV AH,2
59、 2INT 21HINT 21H4、输出字符串、输出字符串9号调用号调用入口参数:入口参数:DS:DX=字符串首地址字符串首地址功能:在屏幕上显示字符串不含功能:在屏幕上显示字符串不含$BUF DB GOOD BY $MOV DX,OFFSET BUFMOV AH,9INT 21H5、前往操作系统、前往操作系统4CH调用调用MOV AH,4CHINT 21H顺序构造顺序构造分支构造分支构造循环构造循环构造3.5 3.5 三种根本构造程序的设计三种根本构造程序的设计程序的根本构造方式有三种程序的根本构造方式有三种: : 实际上,三种根本构造是完备的,即任何功能实际上,三种根本构造是完备的,即任何
60、功能的程序都可由顺序、分支和循环三种构造实现。的程序都可由顺序、分支和循环三种构造实现。 3.5.1 3.5.1 顺序构造程序设计顺序构造程序设计 顺序程序又称直线程序。其特点是顺序执行顺序程序又称直线程序。其特点是顺序执行的,无分支,无循环,也无转移,只作直线运转。的,无分支,无循环,也无转移,只作直线运转。 在实践运用中,纯粹用顺序构造编写的完好在实践运用中,纯粹用顺序构造编写的完好程序很少见,但是在程序段中它却是大量的存在。程序很少见,但是在程序段中它却是大量的存在。所以掌握它是编写复杂运用程序的根底。所以掌握它是编写复杂运用程序的根底。3.5.2 3.5.2 分支构造程序设计分支构造程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车营销策划方案模版(3篇)
- 暑期夏令营活动方案例文(5篇)
- 2024年中秋节主题庆祝活动总结(2篇)
- 人事档案管理制度范例(2篇)
- 2024年财务下半年工作计划模版(4篇)
- 危险废物突发泄漏事件应急演练方案范例(3篇)
- 教师节文体活动策划方案(2篇)
- 创建二甲医院工作实施的方案(二篇)
- 制氢站爆炸应急预案模版(2篇)
- 乡村少年宫建设实施方案范文(2篇)
- 餐饮行业智能点餐与外卖系统开发方案
- 《中式家具设计》课件
- 24秋国家开放大学《企业信息管理》形考任务1-4参考答案
- 偏微分方程知到智慧树章节测试课后答案2024年秋浙江师范大学
- 2024年共青团入团考试测试题库及答案
- 2022年全国应急普法知识竞赛试题库大全-下(判断题库-共4部分-2)
- 花键计算公式DIN5480
- 《建筑与市政工程施工现场临时用电安全技术标准》JGJT46-2024知识培训
- 2024年事业单位招聘考试公共基础知识模拟试卷及答案(共七套)
- 《燃气安全知识培训》课件
- 高考及人生规划讲座模板
评论
0/150
提交评论