版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3-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-23.1 3.1 汇编语言程序结构与汇编语句汇编语言程序结构与汇编语句3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构 3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-33.1.1 3.1.1 汇编
2、语言源程序结构汇编语言源程序结构 80 80X86/PentiumX86/Pentium系列系列MPUMPU汇编语言都是以逻汇编语言都是以逻辑段为基础,按段的概念来组织代码和数据的。辑段为基础,按段的概念来组织代码和数据的。因此,源程序结构与逻辑段的定义方法密切相因此,源程序结构与逻辑段的定义方法密切相关,而宏汇编语言关,而宏汇编语言MASM 5.0MASM 5.0以上的版本中,逻以上的版本中,逻辑段既可用辑段既可用完整段完整段定义,又可用定义,又可用简化段简化段定义。定义。3-41. 1. 标准的单模块源程序框架标准的单模块源程序框架 .586 .586DATA SEGMENT USE16/
3、USE32DATA SEGMENT USE16/USE32;定义数据段定义数据段 ;数据定义伪指令序列;数据定义伪指令序列DATA ENDSDATA ENDSSTACK SEGMENT USE16/USE32 STACKSTACK SEGMENT USE16/USE32 STACK;定义堆栈段定义堆栈段 ;数据定义伪指令序列;数据定义伪指令序列STACK ENDSSTACK ENDSCODE SEGMENT USE16/USE32CODE SEGMENT USE16/USE32;定义代码段定义代码段 ASSUME CSASSUME CS:CODECODE,SSSS:STACKSTACK,DSD
4、S:DATADATA,ESES:DATADATASTART: MOV AXSTART: MOV AX,DATADATA;取数据段基址取数据段基址 MOV DSMOV DS,AXAX;建立建立DSDS的可寻址性的可寻址性 MOV ESMOV ES,AXAX ;建立建立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 DSM
6、OV DS,AXAXMOV ESMOV ES,AXAX程序中要包含程序中要包含返返回回DOSDOS的语句。的语句。MOV AHMOV AH,4CH4CHINT 21HINT 21H源程序(模块)源程序(模块)以以ENDEND伪指令结束伪指令结束 END STARTEND START3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构3-53.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构(1) (1) 使用使用DOSDOS的的4 4CHCH号功能调用号功能调用这种方法是在代码段结束前加调用语句:这种方法是在代码段结束前加调用语句: MOV AH MOV AH,4CH 4CH
7、;功能号功能号4 4CHAHCHAH INT 21H INT 21H ;中断调用中断调用(2) (2) 使用使用2020H H号软功能调用号软功能调用调用方式是在代码段结束前加调用语句:调用方式是在代码段结束前加调用语句: INT 20H INT 20H(3) (3) 使用使用DOSDOS的的0 0号功能调用号功能调用调用方式是在代码段结束前加调用语句:调用方式是在代码段结束前加调用语句: MOV AHMOV AH,0 0 INT 21H INT 21H2.2.返回返回DOSDOS状态的方法状态的方法 3-6(4) (4) 将主程序定义为远过程将主程序定义为远过程 也称为也称为“标准序标准序”
8、方法。这种方法是在代码段开方法。这种方法是在代码段开始处按下述方式定义主程序:始处按下述方式定义主程序: CODE CODE SEGMENT SEGMENT ASSUME ASSUME 主过程名主过程名PROC FARPROC FARPUSH DS PUSH DS SUB AXSUB AX,AX AX ;标准序标准序 PUSH AXPUSH AX RET RET主过程名主过程名 ENDPENDP END END 主过程名主过程名3.1.1 3.1.1 汇编语言源程序结构汇编语言源程序结构3-7 指令语句指令语句 伪指令语句伪指令语句 宏指令语句宏指令语句3.1.2 3.1.2 汇编语言的语句汇
9、编语言的语句 语句是汇编语言程序的基本组成单位,用于规定汇编语句是汇编语言程序的基本组成单位,用于规定汇编语言的一个基本操作。汇编语言包含三种基本语句:语言的一个基本操作。汇编语言包含三种基本语句: 是可执行语句是可执行语句, ,由硬件由硬件( (CPUCPU) )完成其功能,完成其功能,汇汇编时产生目标代码编时产生目标代码 。不可执行语句,不可执行语句,其功能由相应软其功能由相应软件完成,件完成,不产生不产生目标代码目标代码。用户定义的新指令,汇编用户定义的新指令,汇编时产生相应的目标代码。时产生相应的目标代码。 3-8 标号和名字标号和名字分别是给指令单元和伪指令起的分别是给指令单元和伪指
10、令起的符号名称,统称为标识符。符号名称,统称为标识符。( (注意组成的语法规则注意组成的语法规则) ) 助记符和定义符助记符和定义符分别用于规定指令语句的操分别用于规定指令语句的操作性质和伪指令语句的伪操作功能,统称作性质和伪指令语句的伪操作功能,统称操作符操作符。 操作数操作数操作数允许有多个,这时各操作数之操作数允许有多个,这时各操作数之间要用逗号间要用逗号“,”隔开。隔开。3.1.2 3.1.2 汇编语言的语句汇编语言的语句指令语句:指令语句: 标号:标号: 助记符助记符 操作数操作数 ;注释;注释 伪指令语句:伪指令语句: 名字名字 定义符定义符 操作数操作数 ;注释;注释 1. 1.
11、 语句格式语句格式3-92. 2. 数数 据据 汇编语言中使用的数据有常数、变量和标号。汇编语言中使用的数据有常数、变量和标号。 (1) (1) 常数常数 常数是指那些在汇编过程中已常数是指那些在汇编过程中已有确定数值的有确定数值的量量,分为数值常数和字符串常数两类。主要用作,分为数值常数和字符串常数两类。主要用作: : 指令语句中的立即操作数指令语句中的立即操作数 基址、变址或基址加变址寻址中的位移量基址、变址或基址加变址寻址中的位移量 伪指令语句中用于给变量赋初值伪指令语句中用于给变量赋初值3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-10 标号标号是指令的符号化地址,一定在代码
12、段,而是指令的符号化地址,一定在代码段,而变变量量是数据的符号化地址,是数据的符号化地址,一般在数据段,有时也可在一般在数据段,有时也可在代码段定义代码段定义。q 变量与标号有三个共同属性:变量与标号有三个共同属性: 段基址:段基址:所在段的起始地址所在段的起始地址( (SEG)SEG) 偏移值:偏移值:相对于段基址的位移量相对于段基址的位移量( (OFFSET)OFFSET) 类型:类型:所占字节数所占字节数( (TYPE)TYPE)(2) (2) 变量与标号变量与标号3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-11q变量与标号区别变量与标号区别标号可以用作标号可以用作转移控制类
13、指令的操作数转移控制类指令的操作数,但变量不能。但变量不能。变量可以用作变量可以用作基址、变址或基址加变址寻基址、变址或基址加变址寻址的位移量址的位移量,但标号不能。但标号不能。3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-12 例例3.13.1 假设假设VAR1VAR1和和VAR2VAR2为字变量,为字变量,LABLAB为程序中为程序中的一个标号,判断下列指令是否正确,若错误请指出的一个标号,判断下列指令是否正确,若错误请指出错误之处:错误之处: ADD VAR1ADD VAR1,VAR2VAR2 SUB AL SUB AL,VAR1 VAR1 JNZ VAR1 JNZ VAR1
14、JMP LABSI JMP LABSI JMP NEAR LAB JMP NEAR LAB MOV AX MOV AX,VAR1BXVAR1BX JMP VAR2BX JMP VAR2BX错,不允许存储器变量间直接传数错,不允许存储器变量间直接传数错,源与目的操作数错,源与目的操作数类型不一致类型不一致错,变量不能用作条错,变量不能用作条件转移指令的操作数件转移指令的操作数错,标号不能用作变错,标号不能用作变址寻址的位移量址寻址的位移量错,缺错,缺PTRPTR运算符运算符正确正确正确正确3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-133. 3. 表达式表达式 表达式是汇编语句操作数
15、的基本形式,由运表达式是汇编语句操作数的基本形式,由运算符和运算对象组成。算符和运算对象组成。算术运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符汇编语言特定的运算符汇编语言特定的运算符运算符运算符常数、变量和标号常数、变量和标号操作数操作数构成程序的段和偏移量构成程序的段和偏移量 运算对象运算对象3.1.2 3.1.2 汇编语言的语句汇编语言的语句3-14 指在汇编过程中能够由汇编程序计算出数值的表指在汇编过程中能够由汇编程序计算出数值的表达式。可作为达式。可作为指令中的立即操作数和数据区中的初值指令中的立即操作数和数据区中的初值使用。使用。例如:例如: MOV BX MOV BX,
16、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表达式又分为数值表达式和地址表达式:表达式又分为数值表达式和地址表达式:3.1.2 3.1.2 汇编语言的语句汇编语言的语句q数值表达式数值表达式3-15 其值表示存储器地址,一般都是段内的偏移地其值表示存储器地址,一般都是段内的偏移地址。与变量一样,地址表达式也具有段值、偏移值址。与变量一样,地址表达式也具有段值、偏移值和类型属性。地址表
17、达式主要用来表示指令语句中和类型属性。地址表达式主要用来表示指令语句中的操作数,的操作数,例如:例如: MOV AX MOV AX,BASEEAXEBXBASEEAXEBX JMP JMP BASEEAXBASEEAX LEA BXLEA BX,BASE+12BASE+123.1.2 3.1.2 汇编语言的语句汇编语言的语句q地址表达式地址表达式3-163.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.
18、5 结构定义伪指令结构定义伪指令 3.2 3.2 伪指令语句伪指令语句3-173.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句方式选择伪指令方式选择伪指令完整段定义伪指令完整段定义伪指令指定地址伪指令指定地址伪指令模块定义伪指令模块定义伪指令 这类语句是与程序结构紧密相关的基本伪指令语这类语句是与程序结构紧密相关的基本伪指令语句,用于说明句,用于说明CPUCPU的类型、逻辑段结构、源程序的类型、逻辑段结构、源程序( (或模或模块块) )起止信息和段内存的安排等。主要包括起止信息和段内存的安排等。主要包括: : 3-181. 1. 方式选择伪指令方式选择伪指令 方式选择伪指令用于通知
19、汇编程序,当前的方式选择伪指令用于通知汇编程序,当前的源程序指令是哪一种源程序指令是哪一种CPUCPU指令,经过汇编链接之后指令,经过汇编链接之后生成的目标程序在哪一种生成的目标程序在哪一种CPUCPU机型上运行。不属于机型上运行。不属于选定选定CPUCPU的指令均为非法指令。所以,的指令均为非法指令。所以,方式选择伪方式选择伪指令本质上也就是指令集选择伪指令指令本质上也就是指令集选择伪指令。 通常通常, ,方式选择伪指令放在程序的头部方式选择伪指令放在程序的头部, ,作为作为源程序的第一条语句。缺省时默认源程序的第一条语句。缺省时默认80868086指令集。指令集。 3.2.1 3.2.1
20、程序结构伪指令语句程序结构伪指令语句3-192. 2. 完整段定义伪指令完整段定义伪指令 采用完整段定义伪指令可具体控制汇编程序采用完整段定义伪指令可具体控制汇编程序(MASMMASM)和链接程序(和链接程序(LINKLINK)在内存中组织代在内存中组织代码和数据的方式。码和数据的方式。 主要包括主要包括段定义语句段定义语句和和段寄存器说明语句段寄存器说明语句。 3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3-203.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句 段定义语句段定义语句 格式:格式:段名段名 SEGMENTSEGMENT 定位类型定位类型,组合类型组合
21、类型,字长选择字长选择,类别类别 段体段体 ;由指令、伪指令和宏指令语句组成;由指令、伪指令和宏指令语句组成段名段名 ENDSENDS 说明:说明: (1) (1) SEGMENT/ENDSSEGMENT/ENDS是一对段定义语句是一对段定义语句, ,一个逻辑段从一个逻辑段从SEGMENTSEGMENT语句开始,到语句开始,到ENDSENDS语句结束。语句结束。(2) (2) 段名段名是用户定义的段的标识符,用于指明段的基址。是用户定义的段的标识符,用于指明段的基址。 (3) (3) 4 4个可选参数个可选参数用于为源程序的汇编、连接提供必要的信用于为源程序的汇编、连接提供必要的信息,特别是模
22、块化程序,各个模块如何定位息,特别是模块化程序,各个模块如何定位, ,彼此之间如何连彼此之间如何连接,将较多地涉及到接,将较多地涉及到定位类型定位类型和和组合类型组合类型的选择。的选择。指定段起点的边界类型指定段起点的边界类型: : BYTE BYTE(字节)字节) WORD WORD(字)字) DWORD DWORD(双字)双字) PARA PARA(节)节) PAGE PAGE(页)页) 定位类型定位类型告诉链接程序本段与其它模块中同名段的组合连接关系告诉链接程序本段与其它模块中同名段的组合连接关系: : PUBLIC PUBLIC 连接到同一个物理段中连接到同一个物理段中 STACK S
23、TACK 连接到同一个物理堆栈段中连接到同一个物理堆栈段中, ,并给并给SS:ESPSS:ESP赋值赋值 COMMON COMMON 产生一个覆盖段。产生一个覆盖段。 MEMORY MEMORY AT AT表达式表达式 组合类型组合类型定义段中使用的偏移地址和寄存器的字长定义段中使用的偏移地址和寄存器的字长 USE16 USE16 表示该段字长为表示该段字长为1616位位 USE32 USE32 表示该段字长为表示该段字长为3232位位字长选择字长选择3-21 组合连接组合连接举例:举例:模块模块2 2(从模块):(从模块):DSEG SEGMENT COMMONDSEG SEGMENT CO
24、MMON 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(主模块):(主模块):DSEG SEGMENT COMMONDSEG SEGMENT COMMON ARRAY_A DW 100 DUP(?) ARRAY_A DW
25、 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 AXSTART: MOV AX,DSEGDSEG MOV DS MOV DS,AXAX CSEG ENDSCSEG ENDS END START END STA
26、RTCSEGCSEGDSEGDSEG( (共共400400字节字节) )模块模块2 2代码代码模块模块2 2数据数据SSEGSSEG( (共共200200字节字节) )模块模块1 1代码代码模块模块2 2堆栈堆栈模块模块1 1数据数据逻辑段组合示意图逻辑段组合示意图模块模块1 1堆栈堆栈3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3-22 段寄存器说明语句段寄存器说明语句 格式:格式: ASSUME ASSUME 段寄存器段寄存器: :段名段名 ,段寄存器,段寄存器: :段名,段名, 功能功能: : 说明源程序中定义的段由那个段寄存器去寻址。说明源程序中定义的段由那个段寄存器去
27、寻址。 说明:说明: CSCS只能用于包含有程序的段只能用于包含有程序的段, ,反之含有程序的段也反之含有程序的段也只能以只能以CSCS作为段寄存器。作为段寄存器。SSSS也一样,只能与堆栈段对应。也一样,只能与堆栈段对应。 CSCS所对应的段名必须在该语句之前有定义。所对应的段名必须在该语句之前有定义。 该语句是该语句是说明性语句。说明性语句。 3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3-233.3. 指定地址伪指令指定地址伪指令 格式格式: : ORG ORG 偏移地址偏移地址 ORG $ + ORG $ + 偏移地址偏移地址功能功能: : 该伪指令以其指定的偏移地址或
28、由该伪指令以其指定的偏移地址或由$ $ 给出的给出的当前地址加上指定的偏移地址作为当前开始分配和当前地址加上指定的偏移地址作为当前开始分配和使用的偏移地址。使用的偏移地址。3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3-244. 4. 模块定义伪指令模块定义伪指令 模块定义伪指令包括模块开始和模块结束语句。模块定义伪指令包括模块开始和模块结束语句。 (1) (1) 模块开始语句模块开始语句( (NAME)NAME) 格式:格式:NAME NAME 模块名模块名 功能:功能:指示源程序开始,并指出该源程序的模块名。指示源程序开始,并指出该源程序的模块名。 (2) (2) 模块结束
29、语句模块结束语句( (END)END) 格式:格式:END END 标号标号/ /过程名过程名 功能:功能:模块结束语句表示源程序到此结束。模块结束语句表示源程序到此结束。 3.2.1 3.2.1 程序结构伪指令语句程序结构伪指令语句3-253.2.2 3.2.2 符号定义伪指令符号定义伪指令格式格式: :赋值语句:赋值语句:符号名符号名 EQU EQU 表达式表达式 功能功能: : 都是用符号名代替表达式的值。但都是用符号名代替表达式的值。但赋值赋值语句定义的符号名不能重新定义语句定义的符号名不能重新定义,而,而等号等号语句语句允许。允许。1. 1. 符号常数定义伪指令符号常数定义伪指令等号
30、等号语句:语句:符号名符号名 = = 表达式表达式 3-26 例例3.23.2 赋值语句与等号赋值语句与等号语句举例语句举例。赋值语句:赋值语句:X EQU 50X EQU 50Y EQU X +10Y EQU X +10COUNT EQU $ - ARRYCOUNT EQU $ - ARRY等号等号语句语句:CON = 5CON = 5BASE = 200HBASE = 200H BASE = BASE + 10HBASE = BASE + 10H;重新定义重新定义BASEBASE3.2.2 3.2.2 符号定义伪指令符号定义伪指令3-272. 定义符号名伪指令定义符号名伪指令格式:格式:
31、符号名符号名 LABEL LABEL 类型类型 功能:功能:将紧跟在本伪指令后的标号、操作码、过程或变将紧跟在本伪指令后的标号、操作码、过程或变量建立新的符号名,并刷新其类型,但它并不为新指定量建立新的符号名,并刷新其类型,但它并不为新指定的变量或标号分配存储空间。的变量或标号分配存储空间。 例如:例如: SUB_FAR LABEL FAR ;远调用入口远调用入口 SUB_NEAR: MOV AL,SI ;近调用入口近调用入口 两个标号两个标号SUB_FAR和和SUB_NEAR均指向同一条均指向同一条指令,前者为远标号,后者为近标号。指令,前者为远标号,后者为近标号。 3.2.2 3.2.2
32、符号定义伪指令符号定义伪指令3-283.2.3 3.2.3 数据定义伪指令数据定义伪指令伪指令格式伪指令格式: :DBDBDWDWDDDDDFDFDQDQDTDT数据项数据项 ,数据项,数据项,数据项,数据项 变量名变量名 功能功能: : 是为数据项或项表分配存储空间,给是为数据项或项表分配存储空间,给它们赋初值,并用一个符号名(称为变量)与之它们赋初值,并用一个符号名(称为变量)与之相联系。相联系。8 8位(字节)位(字节)1616位(字)位(字)3232位(双字)位(双字)4848位(长字)位(长字)6464位(四字)位(四字)8080位(十字节)位(十字节) 3-29使用说明使用说明:
33、: 给变量赋初值可以是赋确定的值,也可以是赋不确给变量赋初值可以是赋确定的值,也可以是赋不确定的值定的值( (用用“?”“?”表示表示),),还可以是用还可以是用DUPDUP运算符建立的多次拷运算符建立的多次拷贝。贝。 例例3.33.3 使用使用8080X86X86汇编语言的伪操作命令定义:汇编语言的伪操作命令定义: VAL DB 93 DUP(5VAL DB 93 DUP(5,2 DUP(2 DUP(1,2 DUP(3),4)2 DUP(2 DUP(1,2 DUP(3),4) 则在则在VALVAL存储区内前存储区内前1010个字节单元的数据是个字节单元的数据是 ? 解:由内向外逐层展开,分别
34、相当于:解:由内向外逐层展开,分别相当于: 93 93 DUP(5DUP(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)即表示重复即表示重复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,443
35、.2.3 3.2.3 数据定义伪指令数据定义伪指令3-30 使用使用SEGSEG、OFFSETOFFSET、TYPETYPE、LENGTHLENGTH和和SIZESIZE运算符求变量的各种属性时,特别要注意:运算符求变量的各种属性时,特别要注意: 对对LENGTHLENGTH运算符,如果变量是用重复数据运算符,如果变量是用重复数据操作符操作符DUPDUP说明的,则返回外层说明的,则返回外层DUPDUP给定的给定的值;如果没有值;如果没有DUPDUP说明,则返回值总是说明,则返回值总是1 1。 对对SIZESIZE运算符有:运算符有:SIZE =TYPESIZE =TYPELENGTHLENGT
36、H使用说明使用说明: :3.2.3 3.2.3 数据定义伪指令数据定义伪指令3-31 解解: : 此题有两层此题有两层DUPDUP定义,但最外层定义,但最外层DUPDUP给定的值给定的值为为100100,所以:,所以: (BXBX)= = 数组数组ARRAYARRAY的偏移地址;的偏移地址; (CXCX)= = 数组数组ARRAYARRAY的长度的长度 = 100 = 100; (SISI)= = 数组数组ARRAYARRAY的类型的类型 = 2 = 2。 例例3.43.4 若数组若数组ARRAYARRAY在数据段中已作如下定义:在数据段中已作如下定义: ARRAY DW 100 DUP(12
37、3HARRAY 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 ARRAY3.2.3 3.2.3 数据定义伪指令数据定义伪指令3-32 操作符操作符“$”“$”是取地址计数器的当前值,常用于表是取地址计数器的当前值,常用于表达式定义数
38、组长度。达式定义数组长度。0100H03H0101H00H0102H06H0103H01H0104H05H0105H00H0106H06H0107H00H0108H07H0109H08H010AH08H010BH09H解:画出数组解:画出数组ARYARY的内存分配图。的内存分配图。(AXAX)=ARY+2=0102H =0106H=ARY+2=0102H =0106H(BXBX)=ARY+10=010AH=0908H=ARY+10=010AH=0908H使用说明使用说明: :3.2.3 3.2.3 数据定义伪指令数据定义伪指令3-33 使用使用DBDB、DWDW、DDDD定义串数据定义串数据(
39、 (用用 定定义的字符串义的字符串) )时时, ,允许定义的串长度不同,字符的允许定义的串长度不同,字符的存放顺序也不相同:存放顺序也不相同: DBDB是从左至右顺序为每个字符分配一个字节单是从左至右顺序为每个字符分配一个字节单元;元; DWDW是从左至右顺序为每是从左至右顺序为每2 2 个字符分配一个字单个字符分配一个字单元,且前面的字符在高字节元,且前面的字符在高字节, ,串长度不能超过串长度不能超过2 2; DDDD是从左至右顺序为每是从左至右顺序为每4 4 个字符分配一个双字个字符分配一个双字单元,也是按前面的字符在高字节顺序存放,单元,也是按前面的字符在高字节顺序存放,串长度不能超过
40、串长度不能超过4 4。3.2.3 3.2.3 数据定义伪指令数据定义伪指令3-34 例例3.63.6 今需在变量名为今需在变量名为STRINGSTRING的数据区中顺的数据区中顺次存放数据次存放数据AA、BB、CC、DD、EE、FF、GG、HH,请写出分别用汇请写出分别用汇编命令编命令DBDB、DWDW和和DDDD实现的语句。实现的语句。解:解:用用DBDB、DWDW和和DDDD实现的语句分别为:实现的语句分别为: STRING DB ABCDEFGHSTRING DB ABCDEFGH STRING DW BASTRING DW BA,DCDC,FEFE,HGHG STRING DD DCB
41、ASTRING DD DCBA,HGFEHGFE3.2.3 3.2.3 数据定义伪指令数据定义伪指令3-353.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令过程定义伪指令过程定义伪指令宏定义伪指令宏定义伪指令宏和过程的比较宏和过程的比较3-36格式:格式:过程名过程名 PROC PROC 属性属性 ;过程体;过程体 RETRET RET RET 过程名过程名 ENDPENDP 说明:说明: 过程允许嵌套调用,还可以递归调用。过程允许嵌套调用,还可以递归调用。 过程与逻辑段也可以相互嵌套,但决不允过程与逻辑段也可以相互嵌套,但决不允许过程与段交叉覆盖。许过程与段交叉覆盖。 过程又称为
42、子程序。它是一段必须通过过程又称为子程序。它是一段必须通过CALLCALL指令调指令调用才能执行的程序段,执行完后通过一条用才能执行的程序段,执行完后通过一条RETRET指令返回原指令返回原调用处。过程需先定义才能调用。调用处。过程需先定义才能调用。 过程体中必须至少包含一过程体中必须至少包含一条条RETRET指令,这是过程的出口。指令,这是过程的出口。但也允许过程有多条但也允许过程有多条RETRET指令,指令,即过程有多个出口。即过程有多个出口。1.1.过程定义伪指令过程定义伪指令 3.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令 3-37宏定义格式:宏定义格式: 宏名宏名 MA
43、CRO MACRO 形式参数表形式参数表 ;宏体;宏体 ENDM ENDM 说明:说明:宏定义的宏名必须唯一,称为宏定义的宏名必须唯一,称为宏指令宏指令。宏指令。宏指令一经定义就可以在源程序的任何地方调用。相当于由用户一经定义就可以在源程序的任何地方调用。相当于由用户给汇编程序提供了一个新的操作码。给汇编程序提供了一个新的操作码。 宏调用格式:宏调用格式: 宏名宏名 实际参数表实际参数表 3.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令 宏的概念与过程很相似,也是用一个宏的概念与过程很相似,也是用一个宏名字宏名字来代替源来代替源程序中经常要用到的一个程序模块。程序中经常要用到的一个
44、程序模块。 2. 2. 宏定义伪指令宏定义伪指令 3-383.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令 使用宏定义和宏调用时要注意使用宏定义和宏调用时要注意两个问题两个问题: 对带参数的宏指令,宏调用时实际参数与形对带参数的宏指令,宏调用时实际参数与形式参数的类型要一致式参数的类型要一致,以免产生无效调用,以免产生无效调用 。 宏调用是用宏体中定义的指令序列替换宏指宏调用是用宏体中定义的指令序列替换宏指令,所以令,所以宏体内的标号要用宏体内的标号要用LOCALLOCAL伪指令说明为伪指令说明为局部标号局部标号,以免多次调用宏时,发生标号重复,以免多次调用宏时,发生标号重复定义错
45、误。定义错误。LOCALLOCAL伪指令格式:伪指令格式: LOCAL LOCAL 标号标号11,标号,标号2 2, 3-39 解:解:宏定义如下:宏定义如下: MOVE MACRO MOVE MACRO SARYSARY,DARYDARY LOCAL LPLOCAL 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 SI INC SI LOOP LP LOOP LP ENDM ENDM 例例3.73.7 定义宏定义宏MOVEMOV
46、E,其功能是将一个有其功能是将一个有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 SI LOOP ?0000 LOOP ?00003.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令 3-403
47、. 3. 宏和过程的比较宏和过程的比较 宏和过程都可简化源程序的书写,因而也减少了程序宏和过程都可简化源程序的书写,因而也减少了程序出错的可能性。但两者使用上也有区别出错的可能性。但两者使用上也有区别: :3.2.4 3.2.4 过程与宏定义伪指令过程与宏定义伪指令 (1) (1) 宏操作可以直接传递和接收参数,而过程不能直宏操作可以直接传递和接收参数,而过程不能直接带参数接带参数。当过程之间需要传递参数时,必须通过堆栈、。当过程之间需要传递参数时,必须通过堆栈、寄存器或存储器来进行,编程比宏要复杂。寄存器或存储器来进行,编程比宏要复杂。 所以所以, ,宏汇编适合于代码较短宏汇编适合于代码较短
48、, ,传送参数较多的子功能段使传送参数较多的子功能段使用用, ,子程序适合于代码较长子程序适合于代码较长, ,调用比较频繁的子功能段使用。调用比较频繁的子功能段使用。 (3) (3) 引入宏操作并不会在执行目标代码时增加额外的引入宏操作并不会在执行目标代码时增加额外的时间开销时间开销,但过程调用由于要保护和恢复现场及断点,因,但过程调用由于要保护和恢复现场及断点,因此会延长目标程序的执行时间。此会延长目标程序的执行时间。 (2) (2) 子程序不管被调用多少次它都只被汇编一次,即子程序不管被调用多少次它都只被汇编一次,即有唯一的一段目标代码有唯一的一段目标代码; ;而宏指令则调用多少次就汇编多
49、少而宏指令则调用多少次就汇编多少次,每次调用都要在程序中展开并保留宏体中的每一行。次,每次调用都要在程序中展开并保留宏体中的每一行。3-413.2.5 3.2.5 结构定义伪指令结构定义伪指令 在一些应用中,常需要将一些不同类型的数据组在一些应用中,常需要将一些不同类型的数据组合成一个有机整体。这时就要用到汇编语言的结构化合成一个有机整体。这时就要用到汇编语言的结构化数据数据结构结构。 与前述的字节、字类型数据不同,一个结构必与前述的字节、字类型数据不同,一个结构必须先经定义后才可以说明属于这种结构类型的变量须先经定义后才可以说明属于这种结构类型的变量,这是因为结构的组成是千变万化的。所以围绕
50、结构这是因为结构的组成是千变万化的。所以围绕结构定义,有两种伪指令语句定义,有两种伪指令语句: :2. 2. 结构变量说明与赋初值语句结构变量说明与赋初值语句 1. 1. 结构类型说明语句结构类型说明语句( (STRUC/ENDS)STRUC/ENDS)3-423.2.5 3.2.5 结构定义伪指令结构定义伪指令 语句格式:语句格式: 结构名结构名 STRUCSTRUC ;结构体结构体,由数据定义语句构成,由数据定义语句构成 结构名结构名 ENDSENDSDATE STRUCDATE STRUC MONTH DB MONTH DB ? DAY DB DAY DB ? YEAR DW YEAR
51、DW ?DATE ENDSDATE ENDS 结构结构DATEDATE的存储形式的存储形式MONTHMONTH(1 1字节)字节)DAYDAY(1 1字节)字节)YEARYEAR(2 2字节)字节) 结构的定义明确地描述了该结构的组织形式,它告诉结构的定义明确地描述了该结构的组织形式,它告诉汇编程序属于这种组织形式的变量使用内存的模式。例如汇编程序属于这种组织形式的变量使用内存的模式。例如: : 1. 1. 结构类型说明语句结构类型说明语句( (STRUC/ENDS)STRUC/ENDS)3-43语句格式:语句格式: 变量名变量名 结构名结构名 域值表域值表 例如:例如: VAR DATE 4
52、 VAR DATE 2004H结构变量结构变量VARVAR的存储形式的存储形式MONTHMONTH(1 1字节)字节)DAYDAY(1 1字节)字节)YEARYEAR(2 2字节)字节)0404H H0303H H 0 04H4H2020H HVARVAR3. 3. 结构的引用结构的引用有两种方法:有两种方法:结构变量名结构变量名. .域名域名 基址或变址寄存器基址或变址寄存器.域名域名MOV AXMOV AX, VAR.YEARVAR.YEARMOV CLMOV CL, VAR.DAYVAR.DAY上述引用也可用如下方法上述引用也可用如下方法: :MOV BXMOV BX,OFFSET VA
53、ROFFSET VAR MOV AXMOV AX,BX.YEARBX.YEARMOV CLMOV CL,BX.DAYBX.DAY3.2.5 3.2.5 结构定义伪指令结构定义伪指令2. 2. 结构变量说明与赋初值语句结构变量说明与赋初值语句 3-443.3 3.3 汇编语言编程环境汇编语言编程环境 与其它程序设计语言一样,汇编语言程序的开与其它程序设计语言一样,汇编语言程序的开发过程可归结为:发过程可归结为: 就需求分析、模块划分和算法确定等工作而言,就需求分析、模块划分和算法确定等工作而言,各种程序设计语言是类似的,均可按软件工程的方各种程序设计语言是类似的,均可按软件工程的方法进行,法进行
54、,但编程和调试则因程序设计语言而异但编程和调试则因程序设计语言而异。 需求分析需求分析 根据需求和规模等因素划分模块根据需求和规模等因素划分模块 确定各功能模块的求解算法、并定义所需的确定各功能模块的求解算法、并定义所需的数据结构数据结构 进行编程和调试进行编程和调试3-45 对汇编语言而言,根据数据结构和算法进行编码到对汇编语言而言,根据数据结构和算法进行编码到形成可用程序的形成可用程序的过程如下:过程如下: 需求分析、需求分析、数据结构和算法数据结构和算法汇编语言源程序汇编语言源程序文件文件 * *. .ASMASM目标代码程序目标代码程序文件文件 * *. .OBJOBJ可执行程序可执行
55、程序文件文件 * *. .EXEEXE可用程序可用程序连接连接编辑编辑汇编汇编调试调试3.3 3.3 汇编语言编程环境汇编语言编程环境3-46应用程序应用程序外设硬件接口外设硬件接口BIOSBIOSDOSDOS DOSDOS操作系统操作系统和和ROM BIOSROM BIOS系统系统各为各为用户提供了一组例行用户提供了一组例行子程序,用于完成基子程序,用于完成基本本I/OI/O设备、内存、设备、内存、文件和作业的管理,文件和作业的管理,以及时钟、日历的读以及时钟、日历的读出和设置等功能。出和设置等功能。 3.4 3.4 DOS/BIOSDOS/BIOS功能调用功能调用 3-47顺序结构顺序结构
56、分支结构分支结构循环结构循环结构3.5 3.5 三种三种基本结构程序的设计基本结构程序的设计程序的基本结构形式有三种程序的基本结构形式有三种: : 理论上,三种理论上,三种基本基本结构是完备的,即任何功结构是完备的,即任何功能的程序都可由顺序、分支和循环三种结构实现。能的程序都可由顺序、分支和循环三种结构实现。 3-483.5.1 3.5.1 顺序结构程序设计顺序结构程序设计 顺序程序又称直线程序。顺序程序又称直线程序。其特点是顺序执行的,其特点是顺序执行的,无分支,无循环,也无转移,只作直线运行。无分支,无循环,也无转移,只作直线运行。 在实际应用中,纯粹用顺序结构编写的完整程在实际应用中,
57、纯粹用顺序结构编写的完整程序很少见,但是在程序段中它却是大量的存在。所序很少见,但是在程序段中它却是大量的存在。所以掌握它是编写复杂应用程序的基础。以掌握它是编写复杂应用程序的基础。3-493.5.2 3.5.2 分支结构程序设计分支结构程序设计 在许多实际问题中,往往需要根据不同的情在许多实际问题中,往往需要根据不同的情况和给定的条件做出不同的处理。要设计这样的况和给定的条件做出不同的处理。要设计这样的程序,必须事先把各种可能出现的情况及处理方程序,必须事先把各种可能出现的情况及处理方法都编写在程序中,以后计算机运行程序时,可法都编写在程序中,以后计算机运行程序时,可自动根据运行的结果做出判
58、断,有条件地选择执自动根据运行的结果做出判断,有条件地选择执行不同的程序段,按这种要求编写的程序称为分行不同的程序段,按这种要求编写的程序称为分支程序。支程序。 3-50分支分支1 1条件条件结束结束开始开始Y YN N分支分支2 2( (b) b) 完全分支结构完全分支结构分支程序分支程序条件条件结束结束开始开始Y YN N( (a) a) 不完全分支结构不完全分支结构分支分支1 1结束结束开始开始条件条件i ii=1i=1i=ni=n分支分支2 2分支分支n ni=2i=2( (c)c) 多分支结构多分支结构IF 条件条件 THEN 分支程序分支程序IF 条件条件 THEN 分支分支1 1
59、 ELSE 分支分支2 2分支程序的结构有三种形式分支程序的结构有三种形式: : 3.5.2 3.5.2 分支结构程序设计分支结构程序设计 3-51根据根据X(-128 X 127)X(-128 X 127)的值求出的值求出Y Y。例例3.93.9 变量变量X X的符号函数定义如下的符号函数定义如下: :Y=1 X00 X=0-1 X01. 1. 利用比较与条件转移指令实现分支利用比较与条件转移指令实现分支 这种方法适合于不完全分支和完全分支这两种结构,这种方法适合于不完全分支和完全分支这两种结构,对分支较少的多分支结构也可用。对分支较少的多分支结构也可用。 3.5.2 3.5.2 分支结构程
60、序设计分支结构程序设计 3-52例例3.93.9程序程序: :DATASEGMENTX DB 0F8HY DB ?DATAENDS CODESEGMENTASSUME CS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXMOVAL,X;取变量取变量X X的值的值CMPAL,0;X X与与0 0比较比较JGBIGRJEFINISH;X=0,Y=0MOVAL,0FFH;X 0,Y=1FINISH: MOVY,AL;保存函数值保存函数值Y YMOVAH,4CHINT21HCODEENDSENDSTART3.5.2 3.5.2 分支结构程序设计分支结构程序设计 3-53这种
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 右脚踝扭伤宣教
- 门诊部科普小知识
- 住院病人探视宣教
- 骨质疏松宣教手册
- 八旗制度管理员工培训
- 苏课新版八年级生物上册月考考试试题及答案
- 劳务外包协议书范本
- 债务转让协议书怎么写
- 暑假消防教育课件
- 心身疾病护理科普
- 2025陕西延安市安塞区总工会招聘工会社会工作者8人考试参考试题及答案解析
- 湖南省部分校2025-2026学年高二上学期10月联考语文试题(含答案)(解析版)
- 2025贵州惠水县选聘城市社区工作者3人考试模拟试题及答案解析
- 大学高等数学上习题附答案
- 生产车间现场管理规定
- DB54∕T 0298-2023 电梯使用安全标志与标识
- 机场停机坪地坪施工方案
- 5.15中国工农红军长征与遵义会议教学设计-统编版八年级历史上册
- 2025年成人高考高升专试题(含答案)
- 委托物流运输代理服务合同
- 国际工程总承包合同范本比较:条款、应用与优化策略
评论
0/150
提交评论