1、2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计2第四章第四章 汇编语言及汇编程序设计汇编语言及汇编程序设计一、一、概述概述二、二、伪指令伪指令三、三、表达式及运算符表达式及运算符四、四、宏指令宏指令五、五、汇编语言程序的上机过程汇编语言程序的上机过程六、六、汇编程序的设计过程汇编程序的设计过程七、七、汇编程序基本设计方法汇编程序基本设计方法八、八、系统功能调用系统功能调用 例题例题作业作业2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计3一、概述一、概述 汇编语言汇编语言是一种面向是一种面向CPU指令系统的程序设计指令系统的程序设计语言。指
2、令格式语言。指令格式:标号:指令助记符操作数;注释,1 1、标号标号是指该指令的符号地址,以是指该指令的符号地址,以冒号冒号结束;结束;2 2、用助记符表示、用助记符表示操作码操作码,是指令名称的代表符号,是指令名称的代表符号,是语句中的关键字,不可缺省;是语句中的关键字,不可缺省;表示操作类型表示操作类型 标号:标号:助记符助记符 操作数操作数 ;注释;注释2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计4一、概述一、概述(续上页续上页)3、用符号代表、用符号代表操作数或操作数地址操作数或操作数地址。操作数是本指操作数是本指令执行需要的数据。令执行需要的数据。有些指
3、令不需要指明操作数,有些指令不需要指明操作数,可以默认;有些指令需要两个操作数;还有些操作可以默认;有些指令需要两个操作数;还有些操作数可以用表达式。数可以用表达式。4、注释项是可选项,用分号开头。、注释项是可选项,用分号开头。标号:指令助记符操作数;注释,标号:标号:助记符助记符 操作数操作数 ;注释;注释2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计5一、概述一、概述(续上页续上页)程序设计语言分为程序设计语言分为3 3种:机器语言、汇编语言和高级语种:机器语言、汇编语言和高级语言。机器语言和汇编语言是低级语言。言。机器语言和汇编语言是低级语言。1 1、机器语言
4、(机器语言(Machine LanguageMachine Language)二进制代码二进制代码0 0和和1 1表示指令、数字和符号表示指令、数字和符号,又称又称目标目标程序程序。其他语言程序必须经过。其他语言程序必须经过翻译、编译翻译、编译变成机器语言变成机器语言程序。程序。2 2、汇编语言(、汇编语言(Assembly LanguageAssembly Language)汇编指令集、伪指令集和使用它们规则的统称。汇编指令集、伪指令集和使用它们规则的统称。用指令功能的英文(或缩写)符号即助记符表示用指令功能的英文(或缩写)符号即助记符表示指令操指令操作码作码,用符号表示,用符号表示指令操作
5、数指令操作数;用汇编语言编写的程序称汇编语言用汇编语言编写的程序称汇编语言源程序源程序;将汇编语言程序转换成为机器语言的程序叫将汇编语言程序转换成为机器语言的程序叫汇编程序汇编程序。3 3、高级语言、高级语言 使用许多数学公式和数学计算上的习惯用语,擅长科学计算。使用许多数学公式和数学计算上的习惯用语,擅长科学计算。2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计6一、概述一、概述(续上页续上页)用汇编语言编写的程序称为用汇编语言编写的程序称为源程序源程序,常用的汇编,常用的汇编程序有程序有ASM-86和宏汇编和宏汇编MASM-86。MASM 5.0编辑源程序(生成编
6、辑源程序(生成.ASM文件)文件)汇编源程序(汇编源程序(.ASM.OBJ)连接目标程序(连接目标程序(.OBJ.EXE)调试可执行程序(使用调试程序调试可执行程序(使用调试程序Debug调试生成的调试生成的.EXE文件)文件)运行程序输出结果运行程序输出结果宏汇编宏汇编汇编程序的编程环境,除支持全部汇编指令外,汇编程序的编程环境,除支持全部汇编指令外,还提供宏指令。还提供宏指令。宏指令宏指令用户自定义的指令。编程时,将多次使用的功能用户自定义的指令。编程时,将多次使用的功能用一条宏指令代替用一条宏指令代替 2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计7一、概述一
7、、概述(续上页续上页)汇编语言汇编语言源程序源程序的组成部分的组成部分:可以使用可以使用CPU指令系统指令系统所提供的指令所提供的指令(硬指硬指令令);可以使用各种可以使用各种符合汇编语法符合汇编语法的表达式,的表达式,运算运算符以及自行定义生成满足需要的目标代码的指令。符以及自行定义生成满足需要的目标代码的指令。2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计81、标号、标号 8086/8088汇编语言中使用的标号必须遵循下列汇编语言中使用的标号必须遵循下列规则:规则:(1)大小写字母;大小写字母;(2)数字数字09;(3)某些特殊字符(某些特殊字符(,_,?)(4
8、)第一个字符不能是数字,第一个字符不能是数字,“?”不能单独作为标不能单独作为标号。号。(5)标号的有效长度是标号的有效长度是31位;位;有效标号有效标号:START MY_PROGRAM 无效标号无效标号:MAIN%1BETA2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计9二、伪指令二、伪指令 伪指令是告诉汇编程序伪指令是告诉汇编程序如何生成目标代码如何生成目标代码的指令语句。的指令语句。1、符号定义伪指令符号定义伪指令 2、内存数据定义伪指令内存数据定义伪指令 3、段定义伪指令段定义伪指令 4、段寄存器说明伪指令、段寄存器说明伪指令 5、定位伪指令定位伪指令 6
9、、子程序伪指令子程序伪指令汇编语言语句包括:指令、伪指令和宏指令汇编语言语句包括:指令、伪指令和宏指令 指令指令语句语句可执行可执行,汇编中,汇编中产生对应目标代码产生对应目标代码,CPU根据代码产生相应操作根据代码产生相应操作 伪指令伪指令语句语句不可执行不可执行,用于,用于定义定义常量、变量属性及常量、变量属性及存储单元分配存储单元分配2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计101、符号定义伪指令、符号定义伪指令 (1)EQU伪指令伪指令 (2)等号等号(赋值赋值)伪指令伪指令 (3)解除符号定义伪指令解除符号定义伪指令 汇编语言中允许使用符号,表示任何汇
10、编语言中允许使用符号,表示任何助记符、助记符、操作数和表达式操作数和表达式,符号名称,符号名称不能以数字开头不能以数字开头,有,有效长度效长度31位位2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计11(1)EQU伪指令伪指令伪指令格式伪指令格式:EQU 指令功能指令功能:给符号名赋值。符号名可以由程序员取给符号名赋值。符号名可以由程序员取定,定,表达式应该是可以计算得出一个具体值。表达式应该是可以计算得出一个具体值。例例:PORT EQU 88H;定义符号定义符号PORT代表代表88H DATA EQU PORT+2;定义符号定义符号DATA代表代表;PORT+2注
11、意注意:用用EQU定义的符号,不能重新再定义,除非用定义的符号,不能重新再定义,除非用PURGE伪指令解除;伪指令解除;如果在表达式中用了其他符号,必须事先定义。如果在表达式中用了其他符号,必须事先定义。2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计12(2)等号等号(赋值赋值)伪指令伪指令伪指令格式伪指令格式:=指令功能指令功能:与与EQU类似,唯一的区别是类似,唯一的区别是“=”可以可以随时对符号名赋新值,随时对符号名赋新值,而不必使用而不必使用PURGE伪指令。伪指令。例例:PORT=88H;定义符号定义符号PORT代表代表88HDATA=PORT+2;定义符
12、号定义符号DATA代表代表PORT+2 程序中,任何需要这种程序中,任何需要这种表达式(常数、变量、标表达式(常数、变量、标号、指令语句、字符等)号、指令语句、字符等)的地方,都可使用被赋予的的地方,都可使用被赋予的符号名来代替。符号名来代替。2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计13(3)解除符号定义伪指令解除符号定义伪指令伪指令格式伪指令格式:PURGE 符号符号1,符号符号2,指令功能指令功能:撤消用撤消用EQU赋值的符号名,赋值的符号名,以便于赋予以便于赋予新值。新值。例例:PURGE PORT,DATA;撤消用撤消用EQU对对PORT、;DATA的
13、赋值的赋值2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计142、内存数据定义伪指令、内存数据定义伪指令格式格式:名称名称 DB 功能功能:为数据项分配一个或多个字节的为数据项分配一个或多个字节的存储空间存储空间,给它们给它们赋初值赋初值,并用一个,并用一个符号名符号名与之相联系。与之相联系。数据定义语句的数据定义语句的命令命令有有:DB 定义定义字节字节数据数据 12H(0001 0010B)DW定义定义字字数据数据 1234H DD定义定义双字双字数据数据 12345678H DQ定义定义8字节字节数据数据 DT定义定义10字节字节数据数据2023-2-16第第4
14、章章 汇编语言及汇编程序设计汇编语言及汇编程序设计152、内存数据定义伪指令、内存数据定义伪指令复制操作符复制操作符 格式格式:DUP 功能功能:汇编程序把所定义的数据按:汇编程序把所定义的数据按先后次序连续先后次序连续分分配存储空间配存储空间注意:注意:数据表有多个数据时,按数据表有多个数据时,按先后次序先后次序连续分配存储空连续分配存储空间,间,所起名称只代表第一个单元的地址所起名称只代表第一个单元的地址数据项的数据项的宽度宽度必须与所定义的存储单元相符必须与所定义的存储单元相符数据表中用数据表中用“?”为未确定的数据预留存储空间为未确定的数据预留存储空间字符串字符串数据用数据用引号引号括
15、起,括起,字节方式字节方式定义的字符串可定义的字符串可连续书写,按连续书写,按先后顺序先后顺序存放。存放。例题例题2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计162、内存数据定义伪指令、内存数据定义伪指令例例:VAR1 DB 32H,ABCVAR2 DW 1234H,40H,AB DD 12345678H DB?,11000011BARRY1 DB 2 DUP(0,1)ARRY2 DW 2 DUP(?,(?,1)-C3H00H01H00H-01H00H-01H00H第一组字方式的?,111000011BARRY1ARRY201H-预留的存储单元第一组字节方式的0,
16、1第二组字节方式的0,1第二组字方式的?,1.(上接左下)32H41H42H43H34H40H42H41H78H56H34H12H1234H0040HA12345678HABCVAR1VAR212H00HB.(下接右上)2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计173、段定义伪指令、段定义伪指令 8086/8088 系统的存储器是分段管理,每个逻辑段系统的存储器是分段管理,每个逻辑段的长度不超过的长度不超过64KB。格式:格式:SEGMENT .ENDS分段结构。分段结构。程序、数据、堆栈通常放在不同的逻辑程序、数据、堆栈通常放在不同的逻辑段中,存储器分段管理。
17、由段中,存储器分段管理。由CS、DS、ES、SS存放存放段基址并对段基址并对4个物理段进行管理。个物理段进行管理。每个逻辑段由多行语句组成每个逻辑段由多行语句组成,每行一条语句,不能,每行一条语句,不能超过超过128个字符。个字符。每个段必须有一个段名每个段必须有一个段名,且起始段名与结束段名必,且起始段名与结束段名必须相同。每个段的段名可以相同也可以不同。须相同。每个段的段名可以相同也可以不同。2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计183、段定义伪指令、段定义伪指令分段结构分段结构DATA SEGMENT ;数据段开始;数据段开始 ORG 0200HBUF
18、FER DW 0,1,2345 DW 3,12CONT EQU ($-BUFFER)/2 ;$MAX DW?DATA ENDS ;数据段结束;数据段结束STACK SEGMENT ;堆栈段开始;堆栈段开始 DB 100 DUP(S )STACK ENDS ;堆栈段结束;堆栈段结束 数数据据段段堆堆栈栈段段;定位伪指令定位伪指令2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计193、段定义伪指令、段定义伪指令分段结构分段结构 CODE SEGMENT ;代码段开始;代码段开始 ASSUME CS:CODE,SS:STACK,DS:DATA START:MOV AX,DA
19、TA MOV DS,AX MOV AX,STACK MOV SS,AX .CODE ENDS ;代码段结束;代码段结束 END START ;汇编结束;汇编结束 代代码码段段段寄存器说明伪指令段寄存器说明伪指令 数据段起始地址给数据段起始地址给DS堆栈段起始地址给堆栈段起始地址给SS2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计204、段寄存器说明伪指令、段寄存器说明伪指令(1)起址定位伪指令)起址定位伪指令 告诉汇编程序把以下的程序或数据从表达式指定的告诉汇编程序把以下的程序或数据从表达式指定的偏移地址开始存放偏移地址开始存放。5、定位伪指令、定位伪指令告知汇编程
20、序在汇编时,各个告知汇编程序在汇编时,各个段寄存器所对应段寄存器所对应的的逻逻辑段基址。辑段基址。只定义只定义段与段寄存器间的关系,段与段寄存器间的关系,并不能并不能将各段的段将各段的段基址送入相应的段寄存器中。基址送入相应的段寄存器中。除代码段除代码段CS外,所有段寄存器的实际值还必须用传外,所有段寄存器的实际值还必须用传送指令在执行程序时赋值。送指令在执行程序时赋值。2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计21符号符号$表示当前偏移地址值表示当前偏移地址值例:例:ORG 200DA1 DB 34,34H,$+2,0COUT EQU$-DA1结果:结果:在在
21、202单元存单元存204,CONT值为值为DA1的字节个数的字节个数4。JMP$;跳转到当前地址;跳转到当前地址HARE:JMP HARE ;跳转到当前地址;跳转到当前地址2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计226、子程序定义伪指令、子程序定义伪指令 子程序又叫过程子程序又叫过程 在一个程序的不同部分,往往要用到类似的程序段,在一个程序的不同部分,往往要用到类似的程序段,这些程序段的这些程序段的功能和结构形式相同功能和结构形式相同,只是,只是某些变量某些变量的赋值不同的赋值不同,此时可以把这些程序段写成子程序形,此时可以把这些程序段写成子程序形式,以便需要
22、时调用。式,以便需要时调用。格式格式:PROC NEAR/FAR .RET ENDP2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计236、子程序定义伪指令、子程序定义伪指令有一个子程序说明如下:有一个子程序说明如下:;名称:;名称:ABC;功能:将一个大写字母转换成小写字母;功能:将一个大写字母转换成小写字母;入口参数:;入口参数:AL存放存放两位两位BCD码码;出口参数:;出口参数:AL存放存放二进制数二进制数ABC PROC NEARPUSH CXMOV CH,ALAND CH,0FHMOV CL,4SHR AL,CLMOV CL,10MUL CLADD AL,
23、CHPOP CXRETABC ENDP2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计24三、表达式及运算符三、表达式及运算符 常量常量 数值型数值型 数值表达式数值表达式 标号标号 地址型地址型 变量名变量名 符号名符号名 段名段名 子程序名子程序名 宏名宏名汇编汇编语言语言数据数据2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计25三、表达式及运算符三、表达式及运算符 在汇编语言中,指令的操作数除了可以是常数、在汇编语言中,指令的操作数除了可以是常数、寄存器、变量和标号外,还可以是表达式。寄存器、变量和标号外,还可以是表达式。表达式表达式
24、是由常数、寄存器、变量、标号和专用是由常数、寄存器、变量、标号和专用运算符组合而成。运算符组合而成。在程序汇编时,汇编程序自动把这些表达式计在程序汇编时,汇编程序自动把这些表达式计算出来,形成具体的指令操作数。算出来,形成具体的指令操作数。1、常数、变量和标号常数、变量和标号 2、表达式及运算符表达式及运算符返回2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计261、常数、变量和标号、常数、变量和标号常数常数 包括数值型常数和字符型常数。包括数值型常数和字符型常数。如:如:12H,1234H,AB,ERROR!变量变量 变量代表存放在存储单元中的数据。变量代表存放在存
25、储单元中的数据。定义后的变量有三个属性:定义后的变量有三个属性:(1)段属性段属性表示变量所在的逻辑段;表示变量所在的逻辑段;(2)偏移量属性偏移量属性表示变量所在逻辑段中的偏移地表示变量所在逻辑段中的偏移地址;址;(3)类型属性类型属性表示变量占用的存储单元数,表示变量占用的存储单元数,DB、DW、DD、DQ、DT。2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计271、常数、变量和标号、常数、变量和标号标号标号 是指令是指令目标代码目标代码的符号地址。的符号地址。在汇编源程序中,只有在需要在汇编源程序中,只有在需要转向一条指令语句转向一条指令语句时,才为该指令语句
26、设置标号,以便在转移类指令时,才为该指令语句设置标号,以便在转移类指令(含子程序调用指令)中(含子程序调用指令)中直接引用该标号直接引用该标号(标号代替标号代替具体转移地址具体转移地址)。)。标号同样有三个属性:标号同样有三个属性:(1)段属性段属性表示指令代码所在的逻辑段;表示指令代码所在的逻辑段;(2)偏移量属性偏移量属性表示指令代码所在的逻辑段中的表示指令代码所在的逻辑段中的偏移地址;偏移地址;(3)距离属性距离属性表示标号是作段内转移还是段间转表示标号是作段内转移还是段间转移(移(NEAR、FAR)(若未作说明,默认为(若未作说明,默认为NEAR)。)。2023-2-16第第4章章 汇
27、编语言及汇编程序设计汇编语言及汇编程序设计28 2、表达式及运算符、表达式及运算符表达式表达式由操作数和运算符组成。由操作数和运算符组成。其中,其中,操作数操作数可以是常数、变量、寄存器和标可以是常数、变量、寄存器和标号。号。运算符运算符包括算术运算符、逻辑运算符、关系运包括算术运算符、逻辑运算符、关系运算符、分析运算符和属性运算符五类运算。算符、分析运算符和属性运算符五类运算。有有数字表达式数字表达式和和地址表达式地址表达式两种。两种。注意:运算符的先后次序注意:运算符的先后次序。2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计29 2、表达式及运算符、表达式及运算
28、符(1 1)算术运算符)算术运算符 +、-、/、MODMOD(求模)、(求模)、SHLSHL、SHRSHR【数字表达式数字表达式】MOV AX,4 MOV AX,410241024【地址表达式地址表达式】LEA SI,TAB+3 LEA SI,TAB+3(2 2)逻辑运算符)逻辑运算符 AND AND、OR OR、XOR XOR、NOT NOT 只能用于只能用于数字表达式数字表达式中中 【例例】AND AL,3F AND AL,3FH AND H AND FFFFH H 汇编后源操作数被翻译为:汇编后源操作数被翻译为:3F3FH H,指令与指令与AND AAND AL L,3FH,3FH等价等
29、价2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计30 2、表达式及运算符、表达式及运算符(3 3)关系运算符)关系运算符 EQ(EQ(相等相等)、NE(NE(不等不等)、LT(LT(小于小于)、GT(GT(大于大于)LE(LE(小于或等于小于或等于)、GE(GE(大于或等于大于或等于)*关系运算操作数是关系运算操作数是数据数据或或同段的两个单元地址同段的两个单元地址。*关系运算的关系运算的结果结果是一个是一个逻辑值逻辑值:真或假:真或假 关系为真关系为真,结果为全结果为全1 1,即,即FFFF或或FFFFHFFFFH;关系为假关系为假,结果为全结果为全0 0,00H
30、00H或或0000H0000H;例:例:MOV AX,0F0H GT 88H MOV AX,0F0H GT 88H ;_送送AXAX0FFFFH2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计31 2、表达式及运算符、表达式及运算符(4 4)分析运算符(数值返回运算符)分析运算符(数值返回运算符)SEGSEG(段基址)、(段基址)、OFFSETOFFSET(偏移地址)、(偏移地址)、TYPETYPE(类型值)(类型值)LENGTH LENGTH(变量单元数)、(变量单元数)、SIZESIZE(变量字节数)(变量字节数)(5 5)属性运算符)属性运算符 PTRPTR(定
31、义符号类型)(定义符号类型)【例例1 1】MOV AX,WORD PTR X1 MOV AX,WORD PTR X1 【例例2 2】MOVMOV BYTE BYTE PTRDI,0 PTRDI,0 ;字节字节类型类型 MOVMOV WORDWORD PTRDI,0 PTRDI,0 ;字字类型类型 MOV MOV DI,DI,0B5H 0B5H ;类型不定类型不定 【例例3 3】STR1 DW STR1 DW 1234H 1234H ;STR1STR1定义为定义为字字类型类型 MOV AX,STR1 MOV AX,STR1 ;合法合法 MOV AL,STR1 MOV AL,STR1 ;非法非法
32、MOV AL,MOV AL,BYTE PTR BYTE PTR STR1STR1;合法合法强制类型强制类型转换转换2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计32 2、表达式及运算符、表达式及运算符(5 5)属性运算符)属性运算符 THISTHIS(定义新类型):建立同一地址而类型不(定义新类型):建立同一地址而类型不同的变量,方便按不同类型存取变量同的变量,方便按不同类型存取变量 DATA1 EQU THIS BYTE DATA1 EQU THIS BYTE DATA2 DW 1234 DATA2 DW 1234 段前缀属性段前缀属性 MOV AX,ES:BX
33、MOV AX,ES:BX 短距离前缀短距离前缀 JMP SHORT L2 JMP SHORT L2 分离运算符分离运算符 HIGHHIGH高字节高字节 LOWLOW低字节低字节 MOV AH,HIGH X MOV AH,HIGH X (X=5678HX=5678H)2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计33四、宏指令四、宏指令 程序员自己定义的程序员自己定义的指令指令。通常把需要重复使用的。通常把需要重复使用的程程序段序段定义成一条宏指令,在源程序中用定义成一条宏指令,在源程序中用一宏指令一宏指令来代表来代表一段程序一段程序。例:例:将两个存储单元数据交换的
34、程序段定义成一个将两个存储单元数据交换的程序段定义成一个宏宏指令指令E_MEM E_MEM MACRO MEM_1,MEM_2,REG MOV REG,MEM_1 XCHG REG,MEM_2 MOV MEM_1,REG ENDM2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计34四、宏指令四、宏指令DATA SEGMENT DA1 DW AB,5678H DA2 DW CD,0AAH VAR1 DB 12H,34H VAR2 DB A,B DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:.E_ME
35、M DA1,DA2,AX ;宏调用;宏调用 .E_MEM DA3,DA4,BX ;宏调用;宏调用 .CODE ENDS END START例:调用例:调用宏指令宏指令E_MEME_MEM汇编后宏展开汇编后宏展开+MOV AX,DA1+XCHG AX,DA2+MOV DA1,AXE_MEN MACRO MEM_1,MEM_2,REG MOV REG,MEM_1 XCHG REG,MEM_2 MOV REG,MEM_1 ENDM2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计35四、宏指令四、宏指令宏指令与子程序的区别:宏指令与子程序的区别:宏指令由宏指令由宏汇编程序宏汇
36、编程序识别,并被识别,并被替换替换成所代表的程成所代表的程序段,子程序是一段由序段,子程序是一段由CALL指令控制指令控制CPU去执行去执行的程序;的程序;程序中的每条宏指令在汇编时,都分别被程序中的每条宏指令在汇编时,都分别被替换替换成所成所代表的程序段,而子程序的目标程序是一段可以被代表的程序段,而子程序的目标程序是一段可以被多次运行的代码段多次运行的代码段;子程序使用时需把主程序的子程序使用时需把主程序的断点及有关的中间数据断点及有关的中间数据放入堆栈放入堆栈,返回时要恢复,而宏指令和目标代码是,返回时要恢复,而宏指令和目标代码是整个程序的一部分整个程序的一部分一条宏指令可以使用不同参数
37、来使它代表不同的程一条宏指令可以使用不同参数来使它代表不同的程序段,而子程序一旦定义,目标代码不可改变。序段,而子程序一旦定义,目标代码不可改变。2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计36五、汇编语言程序的上机过程五、汇编语言程序的上机过程 建立汇编语言的环境,典型的汇编语言开发环境建立汇编语言的环境,典型的汇编语言开发环境都包含都包含4种工具:种工具:1、编辑程序编辑程序(建立(建立.ASM源文件)源文件)2、汇编程序汇编程序(用(用MASM把把.ASM汇编成汇编成.OBJ文件)文件)3、连接程序连接程序(用(用LINK程序把程序把.OBJ连接成连接成.E
38、XE)4、用、用DOS命令直接键入文件名,执行程序命令直接键入文件名,执行程序 5、用、用DEBUG调试该程序调试该程序汇编程序的上机过程汇编程序的上机过程2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计371、编辑程序、编辑程序 (1)编辑程序是用来输入汇编语言编辑程序是用来输入汇编语言源程序源程序的工具,的工具,包括包括EDIT.EXE,EDLIN.EXE等;等;(2)汇编语言是以汇编语言是以文本格式文本格式保存的;保存的;(3)汇编程序的源程序必须以汇编程序的源程序必须以ASM作为扩展名作为扩展名;(4)输入和编辑源程序时必须遵循汇编语言的语输入和编辑源程序时必
39、须遵循汇编语言的语法规定。法规定。汇编程序的基本结构汇编程序的基本结构 例题例题 实际操作实际操作:编辑源程序编辑源程序 TEST11.ASM2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计38汇编程序的基本结构汇编程序的基本结构DATA SEGMENT ;定义程序执行时需要的相关的数据定义程序执行时需要的相关的数据DATA ENDSSTACK SEGMENT ;根据具体程序的需要,定义堆栈段供程序根据具体程序的需要,定义堆栈段供程序 执行过程中保持临时数据执行过程中保持临时数据STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA
40、,SS:STACKSTART:MOV AX,DATA MOV DS,AX ;完成具体操作的指令序列完成具体操作的指令序列CODE ENDS END START2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计39实际操作实际操作(实现实现X+YZ,源程序文件名源程序文件名:TEST11.ASM)DATA1 SEGMENT;数据段数据段 X DB 05H Y DB 04H Z DB?DATA1 ENDSCODE1 SEGMENT;代码段代码段 ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA;数据段基址数据段基址AX MOV DS,AX;AX
41、 DS MOV AL,X;内存单元内存单元X的数据的数据AL ADD AL,Y;内存单元内存单元Y的数据的数据+ALAL,即即X+Y AL MOV Z,AL;AL内存单元内存单元Z,即求和结果送回即求和结果送回Z MOV AH,4CH;送功能号送功能号 INT 21H;系统功能调用,返回操作系统系统功能调用,返回操作系统 CODE1 ENDS END START2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计402、汇编程序、汇编程序 (1)汇编程序汇编程序用来把源程序翻译成机器码,用来把源程序翻译成机器码,包括包括ASM.EXE,MASM.EXE;(2)汇编程序翻译
42、源程序,汇编程序翻译源程序,产生一个产生一个目标代码文目标代码文件件,与源程序文件名相同,扩展名为,与源程序文件名相同,扩展名为OBJ。实际操作实际操作:产生目标文件产生目标文件TEST11.OBJ2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计413、连接程序、连接程序 通过汇编产生的是通过汇编产生的是OBJ文件是文件是二进制目标文件二进制目标文件,但用的是浮动地址,但用的是浮动地址,不能直接运行,不能直接运行,必须用连接程必须用连接程序序LINK.EXE连接和定位连接和定位。实际操作实际操作:产生产生可执行文件可执行文件TEST11.EXE2023-2-16第第4
43、章章 汇编语言及汇编程序设计汇编语言及汇编程序设计424、汇编程序的上机过程、汇编程序的上机过程实际操作演示实际操作演示编辑程序文件EXMP.ASM汇编程序文件EXMP.OBJ(EXMP.LST)(EXMP.CRF)连接程序文件EXMP.EXE(EXMP.MAP)(EXMP.LIB)出错出错出错DEBUG出错LINKASMMASMTASMEDLINEWPSWORDEDITDEBUG2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计434、汇编程序的上机过程、汇编程序的上机过程 常用的汇编程序有常用的汇编程序有Microsoft公司推出的宏汇编程公司推出的宏汇编程序序MA
44、SM(Macro Assembler)和和 Borland公司推出的公司推出的TASM(Turbo Assembler)两种两种.汇编程序的主要功能是:汇编程序的主要功能是:(1)检查检查源程序语法是否正确。源程序语法是否正确。(2)测出源程序语法错误,给出测出源程序语法错误,给出出错信息出错信息。(3)产生源程序的产生源程序的目标程序目标程序,给出列表文件,给出列表文件(同时列出同时列出汇编语言和机器语言的文件汇编语言和机器语言的文件.LST文件文件)。(4)展开展开宏指令宏指令。2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计44data1 segment;数据段
45、开始数据段开始x db 05hy db 04hz db?buff db 5+4=$;定义一个数据串,数据串规定以定义一个数据串,数据串规定以$结尾,结尾,为了显示为了显示5+4=data1 endscode1 segment;代码段开始代码段开始 assume cs:code1,ds:data1;段寄存器说明伪指令段寄存器说明伪指令start:mov ax,data1;将数据段基址将数据段基址ax mov ds,ax;axds mov al,x;内存数据内存数据xal add al,y;内存数据内存数据Y+alal,即即X+Y al mov z,al;alZ,即即X+Y Z lea dx,bu
46、ff;装载装载 buff的有效地址的有效地址 mov ah,09h;送功能号送功能号 int 21h;系统功能调用,显示屏显示字符串系统功能调用,显示屏显示字符串5+4=mov dl,z;将将z送送dl add dl,30h;将将z的值转换成对应的的值转换成对应的ASCII码值码值 mov ah,02h;送功能号送功能号 int 21H;系统功能调用,系统功能调用,将将x+y的和的和z以单字符形式在显示屏上显示出以单字符形式在显示屏上显示出来来 mov ah,4ch;送功能号送功能号 int 21h;系统功能调用,返回系统功能调用,返回DOS状态状态code1 ends end start 返
47、回2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计45DEBUG 提供提供18条子命令条子命令 可以对程序进行可以对程序进行汇编汇编和和反汇编反汇编,可以可以观察观察和和修改内存修改内存及及寄存器内容寄存器内容,可以可以执行执行和和跟踪程序跟踪程序,并观察,并观察每一步执行的结果每一步执行的结果等等 DEBUG程序只能把程序保存为程序只能把程序保存为命令文件命令文件(.COM),),文件中没有文件中没有重定位信息重定位信息,所有逻辑段及文件头在同,所有逻辑段及文件头在同一物理段一物理段 若要调试若要调试EXE文件,需要修改文件,需要修改源程序源程序,再进行汇编,再进行
48、汇编和连接,产生新的和连接,产生新的EXE文件。文件。重定位:把程序的逻辑地址空间变成内存中的实际重定位:把程序的逻辑地址空间变成内存中的实际物理地址空间的过程物理地址空间的过程2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计46六、汇编程序的设计过程六、汇编程序的设计过程 1、分析问题确定算法、分析问题确定算法 2、绘制程序流程图、绘制程序流程图(做作业一定要求做作业一定要求)3、编写代码、编写代码2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计47七、汇编程序基本设计方法七、汇编程序基本设计方法 1、简单程序简单程序 2、分支程序分支程序
49、 3、循环程序循环程序 4、子程序子程序2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计481、简单程序、简单程序 简单程序简单程序是指是指顺序结构顺序结构程序,程序,在程序中不包含在程序中不包含任何转移类指令。任何转移类指令。执行时按指令的执行时按指令的先后次序先后次序从第一从第一条开始逐条执行,直至程序结束。条开始逐条执行,直至程序结束。例题例题2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计49例题例题 1、有、有X,Y两个两个16位数位数3456H和和0ABCDH,求两求两数之和,并将结果送到数之和,并将结果送到Z单元。单元。解解:编
50、写流程图编写流程图开始开始结果送结果送Z结束结束 初始化初始化取段基址取段基址被加数指针被加数指针加数指针加数指针DSSIDI被加数被加数AX被加数+加数被加数+加数AX2023-2-16第第4章章 汇编语言及汇编程序设计汇编语言及汇编程序设计50例题例题 程序清单程序清单 DATA SEGMENT XDW3456H YDW0ABCDH ZDW0 DATA ENDS;设置数据段,取名设置数据段,取名DATA CODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA;取数码段取数码段DATA段址至段址至AX MOV DS,AX;段地址送段地址送DS