汇编语言层[页]课件.ppt

上传人(卖家):三亚风情 文档编号:3533190 上传时间:2022-09-13 格式:PPT 页数:128 大小:1.59MB
下载 相关 举报
汇编语言层[页]课件.ppt_第1页
第1页 / 共128页
汇编语言层[页]课件.ppt_第2页
第2页 / 共128页
汇编语言层[页]课件.ppt_第3页
第3页 / 共128页
汇编语言层[页]课件.ppt_第4页
第4页 / 共128页
汇编语言层[页]课件.ppt_第5页
第5页 / 共128页
点击查看更多>>
资源描述

1、1第第5 5章章 汇编语言层汇编语言层第第3章微体系结构层为指令系统层提供了一个解释器,章微体系结构层为指令系统层提供了一个解释器,使指令系统的功能得以实现。使指令系统的功能得以实现。直接用机器指令代码编程非常困难直接用机器指令代码编程非常困难,而让微体系结,而让微体系结构层直接执行高级语言构层直接执行高级语言会导致硬件复杂、无通用性会导致硬件复杂、无通用性。人们为人们为所有的计算机都设计了一个汇编语言层所有的计算机都设计了一个汇编语言层,它,它位于指令系统层、操作系统层与面向问题语言层之位于指令系统层、操作系统层与面向问题语言层之间。从这一层看去,每一种计算机都有一套自己的间。从这一层看去,

2、每一种计算机都有一套自己的汇编语言和解释它的汇编器,以及相应的程序设计汇编语言和解释它的汇编器,以及相应的程序设计及开发方法。及开发方法。2本章主要内容:本章主要内容:5.2 80 x865.2 80 x86宏汇编语言的语句格式宏汇编语言的语句格式5.3 80 x865.3 80 x86宏汇编语言数据、表达式和运算符宏汇编语言数据、表达式和运算符5.6 5.6 汇编语言程序设计基本技术汇编语言程序设计基本技术5.1 5.1 概述概述5.4 80 x865.4 80 x86宏汇编语言伪指令宏汇编语言伪指令5.5 5.5 宏指令宏指令35.1 5.1 概述概述1.1.汇编语言汇编语言一种一种面向机

3、器面向机器的的低级低级程序设计语言程序设计语言;符号化符号化的机器语言;的机器语言;2.2.汇编语言源程序汇编语言源程序 用汇编语言编制的程序用汇编语言编制的程序;计算机不能直接执行。计算机不能直接执行。汇编指令与机器指令一一对应。汇编指令与机器指令一一对应。4 汇编语言与具体计算机硬件系统密切相关,通常是以某一汇编语言与具体计算机硬件系统密切相关,通常是以某一系列计算机为背景进行汇编语言程序设计。系列计算机为背景进行汇编语言程序设计。本章所讨论的汇编语言级程序设计是以本章所讨论的汇编语言级程序设计是以80 x86 CPU为硬件背为硬件背景,以景,以MASM 5.0MASM 6.0为为“汇编汇

4、编”环境。环境。例例:完成完成S (A+B)(C-D)运算的汇编语言程序如下:)运算的汇编语言程序如下:;设置数据段;设置数据段DATA SEGMENTADB 23H;数据数据 ABDB 14H;数据数据 BCDB 43H;数据数据 CDDB 3DH;数据数据 DSDW 0;存放结果单元存放结果单元DATAENDS5;设置堆栈段设置堆栈段STACK1SEGMENT PARA STACKDW 20H DUP(0)STACK1ENDS;设置代码段设置代码段CODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATA;预置段寄存器预置段寄存

5、器 DSMOV DS,AXMOV BL,A;取数据取数据 AADD BL,B;计算计算BL(A+B)MOV AL,C;取数据取数据 CSUB AL,D;计算计算AL(C-D)MUL BL;完成乘法运算完成乘法运算AX (A+B)*(C-D)MOV S,AX;存放运算结果存放运算结果HLTCODEENDSEND START63.3.汇编程序汇编程序(Assembler)汇编程序(汇编器)汇编程序(汇编器)将将汇编语言源汇编语言源程序程序翻译成翻译成目标代码目标代码(即机器语言(即机器语言程序)程序)后才能直接由计算机执行后才能直接由计算机执行。上上例例汇编语言源程序经过汇编后得到的目汇编语言源程

6、序经过汇编后得到的目标代码(即机器语言程序)如标代码(即机器语言程序)如右右图所示。图所示。7汇编语言源程序中除有大量汇编指令语汇编语言源程序中除有大量汇编指令语句外,还有许多用于句外,还有许多用于定义数据、分配内定义数据、分配内存空间、构造源程序框架存空间、构造源程序框架等功能的伪指等功能的伪指令语句。令语句。从右图可以看出:从右图可以看出:汇编语言源程序中汇编语言源程序中一条指令语句对应一一条指令语句对应一组目标代码组目标代码(即机器语言的一条指令)。(即机器语言的一条指令)。如:汇编指令语句如:汇编指令语句“MOV DS,AX”对对应目标代码是应目标代码是“8E D8”两个字节代码。两个

7、字节代码。84.4.汇编语言的特点汇编语言的特点高性能高性能有助于更好地使用高级语言编程有助于更好地使用高级语言编程有助于了解计算机的结构有助于了解计算机的结构95.2 80 x865.2 80 x86宏汇编语言的语句格式宏汇编语言的语句格式 汇编语言源程序的汇编语言源程序的基本组成单位基本组成单位是是语句。语句。(2)伪指令语句)伪指令语句 (1)指令语句(可执行语句)指令语句(可执行语句)1.语句的种类语句的种类表示计算机的某种具体操作,汇编时产生指令代表示计算机的某种具体操作,汇编时产生指令代码(即目标代码),其功能在程序码(即目标代码),其功能在程序运行运行时实现。时实现。指示汇编程序

8、如何对源程序进行汇编,其功能在指示汇编程序如何对源程序进行汇编,其功能在汇编汇编时完成。除了所定义的数据项之外,其它项时完成。除了所定义的数据项之外,其它项不产生目标代码不产生目标代码。(3)宏指令语句)宏指令语句在在5.5节中介绍节中介绍 102.语句格式语句格式标号标号指令助记符指令助记符操作数操作数注释注释:;,(1)指令语句格式指令语句格式例如,前例中二条指令语句例如,前例中二条指令语句START:MOV AX,DATA;预置段寄存器预置段寄存器 DSMOV DS,AX11(2)伪)伪指令语句格式指令语句格式符号名符号名伪指令符伪指令符操作数操作数注释注释;,例如,前例中一条伪指令语句

9、例如,前例中一条伪指令语句ADB 23H;数据数据 A123.标识符标识符 标号标号和和符号名符号名统称为统称为标识符标识符,由,由若干字符构成,规则如下:若干字符构成,规则如下:字符数字符数 1 31;第一个字符必须是第一个字符必须是字母或字母或5个特殊字符之一:个特殊字符之一:?下划线下划线 _ 点号点号$;从第二个字符开始,可以是字母从第二个字符开始,可以是字母、数字和、数字和 特殊字符;特殊字符;不能与系统专用保留字相同。不能与系统专用保留字相同。135.3 80 x865.3 80 x86宏汇编语言数据、宏汇编语言数据、表达式和运算符表达式和运算符5.3.1 常数常数纯数值数据、无属

10、性、值不能改变纯数值数据、无属性、值不能改变1.数值常数数值常数 可用二进制、八进制、十进制、十六进制数表示可用二进制、八进制、十进制、十六进制数表示如:如:11001010B11001010B、73Q73Q、345D345D、4aEH4aEH、0AH0AH2.字符常数字符常数 单引号或双引号扩起来的一个或多个字符,以单引号或双引号扩起来的一个或多个字符,以ASCII码码存储。存储。如:如:A A的的ASCIIASCII码为码为41H41H145.3.2 变量变量变量应先变量应先定义定义并并预置预置初值,才能被引用。初值,才能被引用。1、变量定义、变量定义数据定义伪指令数据定义伪指令实现变量的

11、定义,格式如下:实现变量的定义,格式如下:变量名变量名 数据定义伪指令数据定义伪指令 1,可选可选DB 定义字节定义字节DW 定义字定义字DD 定义双字定义双字DQ 定义定义8字节字节DT 定义定义10字节字节例:例:DATA1 DB 10H15变量的变量的3个属性个属性(1 1)段属性()段属性(SEGSEG)表示变量存放在哪个逻辑段中,用变量所在表示变量存放在哪个逻辑段中,用变量所在段的段基值表示。段的段基值表示。(2 2)偏移地址属性()偏移地址属性(OFFSETOFFSET)表示变量在逻辑段中离段起始单元的距离,表示变量在逻辑段中离段起始单元的距离,用字节数表示。用字节数表示。(3 3

12、)类型属性()类型属性(TYPETYPE)表示单个变量占存储单元的字节数。表示单个变量占存储单元的字节数。上述两个属性构成了变量的上述两个属性构成了变量的逻辑地址逻辑地址。数值表达式数值表达式16变量的初值变量的初值字字双双字字:10H 20H 30H 34H 12H 78H 56H 34H 12H :VA1VA2VA3存储器分配图存储器分配图00000HFFFFFH例:DATA SEGMENTVA1 DB 10H DB 20H,30HVA2 DW 1234HVA3 DD 12345678H DATA ENDS17 字符串表达式字符串表达式 STRING1 DB STRING STRING2

13、DW ST,RI,NG STRING3 DD ST,RI,NG 例:存放字符的存放字符的ASCII码码18“?”表达式表达式只分配存储单元,不指定初值。只分配存储单元,不指定初值。例:例:DB?,?,?带带DUP表达式表达式变量名变量名 DUP()VA1 DW 20H DUP(4)例:重复次数重复次数重复数据的内容重复数据的内容:04H 00H 04H :00H:存储器分配图存储器分配图VA1为连续存储单元重复预置一组数据,格式如下:为连续存储单元重复预置一组数据,格式如下:共共40H字节字节19:33338:33338:DA2内层内层DUP操作重操作重复复4次,共次,共4字节字节外层外层DU

14、P操作操作重复重复10H次,次,共共50H字节字节存储器分配图存储器分配图DUPDUP操作符的嵌套使用。例:操作符的嵌套使用。例:DA2 DB 10H DUP(4 DUP(3),8)20引用变量名引用变量名2、变量的使用、变量的使用(1)在)在指令语句指令语句中引用变量名中引用变量名变量名作为变量名作为地址表达式的组成部分地址表达式的组成部分之一之一。那么几种含有变量名的地址表达式如下:那么几种含有变量名的地址表达式如下:直接寻址:直接寻址:VAR、VAR+08H变址寻址:变址寻址:VAR SI、VAR+5 DI基址寻址:基址寻址:VAR BX、VAR+10H BP基址变址寻址:基址变址寻址:

15、VAR BXDI、VAR+06H BPSI例如,设在某数据段中有如下的变量定义:例如,设在某数据段中有如下的变量定义:VAR DB 40H DUP(?)21(2)在在数据定义语句数据定义语句中引用变量名中引用变量名DW:引用变量名的偏移地址:引用变量名的偏移地址在在DW或或DD数据定义语句的数据定义语句的操作数字段操作数字段上引用上引用了变量名,那么在为了变量名,那么在为DW或或DD伪指令分配的存伪指令分配的存储单元中,将预置被引用变量名的储单元中,将预置被引用变量名的地址部分地址部分(段基值和偏移地址)。(段基值和偏移地址)。DD:引用变量的段基值和偏移地址:引用变量的段基值和偏移地址例如:

16、例如:NUM1 DB 10H DUP(?)NUM2 DW 10H DUP(?)ARRAY DB 10H DUP(ABCD)ADR1 DW ARRAY ADR2 DD ARRAY225.3.3 标号标号指令的指令的符号地址符号地址,可作为转移类指令的可作为转移类指令的目标地址目标地址。LOP:INC SI JNZ LOP 例如,有程序段如下:例如,有程序段如下:231.标号的属性标号的属性(1 1)段属性()段属性(SEGSEG)表示指令在哪个逻辑段中表示指令在哪个逻辑段中(2 2)偏移地址属性()偏移地址属性(OFFSETOFFSET)表示这条指令目标代码的首字节离段起始表示这条指令目标代码的

17、首字节离段起始单元之间的字节数。单元之间的字节数。(3 3)类型属性()类型属性(TYPETYPE)表示指令的转移特性。表示指令的转移特性。上述两个属性构成了指令的上述两个属性构成了指令的逻辑地址。逻辑地址。NEARNEAR(近)段内转移(近)段内转移FARFAR(远)(远)段间转移段间转移242.2.标号类型的设置标号类型的设置(1 1)隐含方式)隐含方式直接指定指令的标号,直接指定指令的标号,该标号就隐含为该标号就隐含为NEAR属性属性例如:例如:NEXT:MOV AX,3000H标号标号NEXT的类型属性为的类型属性为NEAR。(2)用)用LABEL伪指令伪指令设置标号类型设置标号类型名

18、字名字 LABEL 类型类型格式如下:格式如下:标号标号 NEAR/FAR变量名变量名 BYTE/WORD/DWORD 25LABELLABEL语句与指令语句配合使用语句与指令语句配合使用例:例:SUB1_FAR LABEL FAR SUB1:MOV AX,1234HMOV语句有两个具有语句有两个具有相同段和偏移地址属性相同段和偏移地址属性的标号:的标号:SUB1_FAR和和SUB1,但,但类型属性类型属性不同。不同。26LABELLABEL语句与数据定义语句配合使用语句与数据定义语句配合使用例:例:DATA_BYTE LABEL BYTE DATA_WORD DW 20H DUP(567H)

19、DATA_WORD和和DATA_BYTE 具有具有相同的段和相同的段和偏移地址属性偏移地址属性,但,但类型属性不同类型属性不同。利用上例数据定义的语句如下:利用上例数据定义的语句如下:MOV AX,DATA_WORD+4;MOV AL,DATA_BYTE+4;传送第传送第3 3个字个字(5 5、6 6字节)字节)传送第传送第5 5个字节个字节27表达式表达式 常用作常用作指令语句指令语句或伪指令语句的或伪指令语句的操作数操作数;由常数、变量、标号通过由常数、变量、标号通过运算符连接运算符连接而成;而成;有有数值表达式数值表达式和和地址表达式地址表达式;汇编时汇编时,经计算得到一个,经计算得到一

20、个数值数值或或地址地址。5.3.4 表达式与运算符表达式与运算符运算符运算符算术运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符数值返回运算符数值返回运算符属性运算符属性运算符 表达式的数据计算或操作类型的确定是在表达式的数据计算或操作类型的确定是在汇编源程汇编源程序过程中完成的序过程中完成的,不是在程序运行时获得的不是在程序运行时获得的。28包括:包括:+(加)、(加)、(减)、(减)、(乘)、(乘)、/(除)、(除)、MOD(模除)、(模除)、SHL(左移)、(左移)、SHR(右移)(右移)1 1、算术运算符算术运算符+、-、*、/运算的操作数和运算结果都是整数;运算的操作数和运算

21、结果都是整数;除法除法运算取商的整数,运算取商的整数,MOD运算取除法的余数;运算取除法的余数;减法减法运算可用于同一段内的两个变量;运算可用于同一段内的两个变量;例:NUM=15*5NUM=NUM/8NUM=NUM MOD 5NUM=NUM+4NUM=NUM SHR 2在在汇编过程中汇编过程中完成运算。完成运算。29 AND、OR、XOR、NOT 2 2、只用于只用于数值表达式数值表达式;按位按位进行逻辑操作;进行逻辑操作;在在汇编过程中汇编过程中完成运算;完成运算;通常出现在源操作数中。通常出现在源操作数中。MOV AL,NOT 0F0HMOV BL,55H OR 0F0HAND BH,5

22、5H AND 0F0HXOR CX,55H XOR 50H例:例:3 3、关系、关系 EQ(相等)、(相等)、NE(不等)、(不等)、LT(小于)、(小于)、LE(小于等于)、(小于等于)、GT(大于)、(大于)、GE(大于等于)(大于等于)30DA1 DB 3 LT 8DA2 DB 10 NE 0AHMOV AL,10 EQ 0AHMOV BX,DA2 GE DA1格式:格式:比较两表达式的值,两表达式的比较两表达式的值,两表达式的性质相同性质相同;数值数值按无符号数比较,按无符号数比较,地址表达式地址表达式比较偏移量;比较偏移量;关系成立关系成立,结果为全,结果为全1;关系不成立关系不成立

23、,结果为,结果为0。例:例:31格式:格式:存储器操作数存储器操作数(1)SEG运算符运算符 返回段基值返回段基值变量名变量名标号标号(2)OFFSET运算符运算符返回偏移地址返回偏移地址(3)TYPE运算符运算符返回类型属性对应的数值,返回类型属性对应的数值,如右表。如右表。类型属性运算结果变量BYTE1WORD2DWORD4标号NEAR-1FAR-24 4、数值返回、数值返回SEG、OFFSET、TYPE、SIZE、LENGTH32(4)LENGTH运算符运算符若变量用若变量用DUPDUP定义,返回定义,返回外层外层DUPDUP的重复次数;的重复次数;若变量没用若变量没用DUPDUP定义,

24、则定义,则返回结果总是返回结果总是1 1。只用于变量只用于变量(5)SIZE运算符运算符只用于变量只用于变量是是TYPE和和LENGTH两个运算结果的两个运算结果的乘积乘积。ORG 20H VAR1 DB 10,15,20 VAR2 DW 0FFFFH,100H VAR3 DW 10H DUP(1,2,DUP(4)例:例:MOV AX,SEG VAR1MOV SI,OFFSET VAR2MOV BL,TYPE VAR2MOV CL,LENGTH VAR3MOV CH,SIZE VAR333为已分配的存储单元为已分配的存储单元临时设定类型属性临时设定类型属性5 5、属性修改、属性修改格式格式:类

25、型类型 PTR 例:例:DA_BYTE DB 20H DUP(0)DA_WORD DW 30H DUP(0)MOV WORD PTR DA_BYTE 10,AX MOV BYTE PTR DA_WORD DI,BL INC BYTE PTR SI SUB WORD PTR BX,30H JMP FAR PTR SUB1346 6、规则规则:*先高优先级,后低优先级先高优先级,后低优先级;*若有多个若有多个同优先级同优先级的运算符,则的运算符,则从左到右从左到右;*圆括号圆括号可改变运算顺序。可改变运算顺序。355.4 80 x865.4 80 x86宏汇编语言伪指令宏汇编语言伪指令5.4.1

26、符号定义语句符号定义语句格式:格式:符号符号 EQU 功能功能:将表达式的值赋给符号将表达式的值赋给符号1 1、等值语句、等值语句EQUEQU常数常数/数值表达式数值表达式地址表达式地址表达式变量变量/标号标号/指令助记符指令助记符例:COUNT EQU 5ADR1 EQU DS:BP+14L1 EQU SUBSTART EQU伪指令伪指令不分配存储单元;不分配存储单元;在同一源程序中,在同一源程序中,同一符号不能同一符号不能用用EQU伪指伪指令令重新定义;重新定义;362 2、等号语句、等号语句 =格式:格式:符号符号=表达式表达式功能功能与与EQU语句相同;语句相同;区别区别在于等号语句在

27、于等号语句可重新定义符号可重新定义符号。5.4.2 处理器选择伪指令处理器选择伪指令用于用于确定确定选择使用哪种选择使用哪种指令系统,缺省时为指令系统,缺省时为8086/8088指令系统和指令系统和8087协处理器指令集。协处理器指令集。.8086.286.286P.486.486P通常放在源程序的开头位置。通常放在源程序的开头位置。其中其中,“P P”表示保护模式表示保护模式.386 .386P.586.586P375.4.3 段结构伪指令段结构伪指令1 1、段定义伪指令、段定义伪指令SEGMENT/ENDSSEGMENT/ENDS段名段名 SEGMENT 定位类型定位类型 组合类型组合类型

28、 使用类型使用类型 类别名类别名段名段名 ENDS格式:格式:功能:功能:指定指定逻辑段的名字逻辑段的名字和和范围范围、段的起始边界段的起始边界、段与段之间的连接关系段与段之间的连接关系等。等。(1)段名)段名必选,开始与结尾的段名一致必选,开始与结尾的段名一致(2)定位类型)定位类型可选,指定装入时的起始边界要求可选,指定装入时的起始边界要求4种:种:PAGE(页)、(页)、PARA(节)、(节)、WORD(字)、(字)、BYTE(字节)(字节)默认默认38段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 使用类型使用类型 类别名类别名段名段名 ENDS(3)组合类型)组合类型可

29、选,指定段与段之间的连接方式可选,指定段与段之间的连接方式6种:种:NONE(隐含)、(隐含)、PUBLIC、COMMON、STACK、MEMORY、AT(4)使用类型)使用类型可选,指定可选,指定386386以上以上CPUCPU的段模式的段模式2种:种:USE16 段基值和偏移地址都是段基值和偏移地址都是16位位 USE32 段基值段基值16位,偏移地址位,偏移地址32位位(5)类别名)类别名可选,单引号扩起来可选,单引号扩起来392 2、段寻址伪指令、段寻址伪指令 ASSUMEASSUME格式:格式:ASSUME sr1:seg1,sr2:seg2,功能:功能:建立段名与段寄存器之间的联系

30、建立段名与段寄存器之间的联系段寄存器名段寄存器名段名段名40DS_DATA SEGMENTVAR1 DB 12HDS_DATA ENDSES_DATA SEGMENTVAR2 DB 34HES_DATA ENDSCODE SEGMENTVAR3 DB 56H ASSUME CS:CODE,DS:DS_DATA,ES:ES_DATASTART:INC VAR1INC VAR2INC VAR3CODEENDSEND START例:例:413 3、段寄存器的装载、段寄存器的装载(1)DS 和和 ES 的装载的装载用数据传送指令用数据传送指令例:例:MOV AX,DATA_DS ;设置设置DSMOV

31、DS,AXMOV AX,DATA_ES ;设置;设置ESMOV ES,AX(2)SS 的装载的装载自动装载自动装载:定义堆栈段时,定义堆栈段时,组合类型置为组合类型置为STACK。STACK1SEGMENT PARA STACKDW40H DUP(0)STACK1ENDS用执行指令的方法装载用执行指令的方法装载:与:与DS/ESDS/ES的装载方法类似的装载方法类似。(3)CS 的装载的装载使用使用结束伪指令结束伪指令ENDEND,格式如下,格式如下:END END 执行执行转移类指令转移类指令时,时,CPUCPU自动修改自动修改CSCS和和IPIP。功能:功能:END告诉汇编程序,源程序到此

32、结束;告诉汇编程序,源程序到此结束;当当程序目标代码装入程序目标代码装入主主存储器时,系统存储器时,系统用用END语句中的地址表达式语句中的地址表达式所示单元的所示单元的段基值和偏移段基值和偏移地址地址分别分别自动载入自动载入CS和和IP中。中。435.4.4 段组伪指令段组伪指令GROUP把程序中不同段名的段组成一个段组,格式如下:把程序中不同段名的段组成一个段组,格式如下:GROUP GROUP 段组名段组名由程序设计人员设定;由程序设计人员设定;可直接引用段名,也可用可直接引用段名,也可用SEG SEG/;段组内段组内各段间的程序转移各段间的程序转移可按可按段内转移段内转移处理;处理;段

33、组内段组内各段的数据存取操作各段的数据存取操作可用同一个段寄存器。可用同一个段寄存器。DATA1 SEGMENTDATA1 ENDSDATA2 SEGMENT BYTEDATA2 ENDSDAGRP GROUP DATA1,DATA2例:例:5.4.5 内存模式和简化段定义伪指令内存模式和简化段定义伪指令1 1、内存模式伪指令、内存模式伪指令格式:格式:.MODEL .MODEL 6种模式:种模式:Tiny、Small、Medium、Compact、Large、Huge确定用户程序中代码和数据在确定用户程序中代码和数据在内存中的存放方式内存中的存放方式。2 2、简化段定义伪指令、简化段定义伪指

34、令 使用简化段定义伪指令之前必须使用内存模使用简化段定义伪指令之前必须使用内存模式伪指令式伪指令MODEL。4545.DATA.DATA ;数据段,已初始化数据;数据段,已初始化数据 .DATA.DATA?;数据段,未初始化数据;数据段,未初始化数据 .CONST .CONST ;常数段;常数段.CODE .CODE 段名段名 ;代码段;代码段格式:格式:.FARDATA .FARDATA 段名段名 ;远数据段,已初始化数据;远数据段,已初始化数据 .FARDATA?.FARDATA?段名段名 ;远数据段,未初始化数据;远数据段,未初始化数据 .STACK.STACK长度长度 ;堆栈段;堆栈段

35、 46例:例:.MODEL SMALL.STACK 20H;定义堆栈段;定义堆栈段.DATA;定义数据段;定义数据段 .CODE;定义代码段;定义代码段BEGIN:MOV AH,4CHINT 21HEND BEGIN3 3、预定义符号、预定义符号类似于类似于EQUEQU伪指令定义的等价符号,例如:伪指令定义的等价符号,例如:Model、Code、Data、Fardata、Stack、Codesize、Datasize475.4.6 定位和对准伪指令定位和对准伪指令1 1、位置计数器(、位置计数器($)2 2、定位伪指令、定位伪指令(ORG)(ORG)记录正在汇编的数据或指令的目标代码记录正在汇

36、编的数据或指令的目标代码在当前段内的在当前段内的偏移地址。偏移地址。$:$:表示位置表示位置计数器的计数器的当前值当前值。设置位置计数器的值设置位置计数器的值格式:格式:ORG ORG ORG伪指令语句伪指令语句把表达式的值赋给位置计数器把表达式的值赋给位置计数器,即即ORG语句后面的目标代码由表达式给定的值作语句后面的目标代码由表达式给定的值作为起始偏移地址。为起始偏移地址。48DATASEGMENTORG 30HDB1DB 12H,34HORG$+20HSTRINGDB STRING DATAENDS在上述数据段内在上述数据段内:第第1个个ORG使变量使变量DB1在在DATA段内的偏移地址

37、为段内的偏移地址为30H;第第2个个ORG表示存放下面数据的偏移地址是位置计数器当前表示存放下面数据的偏移地址是位置计数器当前值加上值加上20H。即即,在变量,在变量STRING前面留空前面留空20H个字节单元个字节单元。例:例:3 3、对准伪指令、对准伪指令(EVEN)(EVEN)功能:功能:将位置计数器的值调整为偶数。将位置计数器的值调整为偶数。格式格式:EVENEVEN495.4.7 过程定义伪指令过程定义伪指令 PROC/ENDP过程名过程名 PROC NEAR/FAR RET 过程名过程名 ENDP指令序列指令序列过程定义在过程定义在逻辑段内;逻辑段内;过程名是必须的;过程名是必须的

38、;至少有一条至少有一条返回指令返回指令RET。格式:格式:3个属性:个属性:段段、偏移地址偏移地址、类型类型属性;属性;505.4.8 包含伪指令包含伪指令 INCLUDE格式:格式:INCLUDE INCLUDE 功能:功能:将指定文件插入到正在汇编的源程序中。将指定文件插入到正在汇编的源程序中。5.4.9 标题伪指令标题伪指令 TITLE格式:格式:TITLE TITLE 功能:功能:为程序指定标题。为程序指定标题。不超过不超过80个字符;个字符;指定的标题在指定的标题在列表文件中每一页的第一行列表文件中每一页的第一行显示。显示。在在源程序开始处源程序开始处使用;使用;5.5 5.5 宏指

39、令宏指令 在编写程序时,在编写程序时,常有某种功能的程序段在整个程常有某种功能的程序段在整个程序中多次重复出现序中多次重复出现。可将程序段定义为一个宏指令。可将程序段定义为一个宏指令。例例:某源程序多次需要对某源程序多次需要对AX中数据乘以中数据乘以10,这时,这时可以定义一可以定义一个宏指令个宏指令:MULTAX10 MACROPUSH BXSALAX,1MOV BX,AXSALAX,1SALAX,1ADDAX,BXPOPBXENDM在在以后以后的程序中,的程序中,如需对如需对AX乘以乘以10,只需书写,只需书写MULTAX10(即(即宏名)宏名)就可以了,而不必再去重复编写上述就可以了,而

40、不必再去重复编写上述7条指令。条指令。52使用具有使用具有处理宏指令处理宏指令功能的功能的汇编程序汇编程序称为称为宏汇编程序宏汇编程序。宏指令可以看作是指令系统的扩展指令宏指令可以看作是指令系统的扩展指令宏指令功能是由用户自己定义的,它的目宏指令功能是由用户自己定义的,它的目标代码是若干指令目标代码的有序组合标代码是若干指令目标代码的有序组合。宏指令不仅可以提高编程效率,而且提高宏指令不仅可以提高编程效率,而且提高了程序的可读性。了程序的可读性。531 1、宏指令的使用过程、宏指令的使用过程3步:宏定义、宏调用和宏展开步:宏定义、宏调用和宏展开(1)宏定义)宏定义宏名宏名 MACRO 形参形参

41、1,形参,形参2,ENDM宏体宏体例:定义宏,交换两个存储单元的数据例:定义宏,交换两个存储单元的数据XCHAGE MACRO MEM1,MEM2,REG MOV REG,MEM1 XCHG REG,MEM2 MOV MEM1,REG ENDM54(2)宏调用)宏调用宏名宏名 实参实参1,实参,实参2,(3)宏展开)宏展开 宏汇编程序扫描宏指令语句(宏调用)宏汇编程序扫描宏指令语句(宏调用)时,时,用宏体的目标代码插入宏调用处;用宏体的目标代码插入宏调用处;对带参数的宏,对带参数的宏,用实参代替形参,用实参代替形参,并对并对宏体中出现参数的地方作适当修改。宏体中出现参数的地方作适当修改。2 2

42、、宏操作符、宏操作符(1)连接操作符)连接操作符&功能:功能:在宏定义的宏体内连接形参。在宏定义的宏体内连接形参。例,可对前面定义的宏调用如下:例,可对前面定义的宏调用如下:XCHAGE SI,DI,AX 例:例:SHIFT_VAR MACRO R_M,DRECT,COUNT MOV CL,COUNT S&DRECT R_M,CL ENDMSHIFT_VAR AX,HL,2表示将要执行的指令序列为:表示将要执行的指令序列为:MOV CL,2 SHL AX,CL宏调用:宏调用:5656(2)表达式操作符)表达式操作符%格式:格式:%表达式表达式功能:功能:告诉宏汇编程序获取表达式的值,告诉宏汇编

43、程序获取表达式的值,而不是表达式本身。而不是表达式本身。(3)文本操作符)文本操作符功能:功能:将包含分隔符的实参扩起来,将包含分隔符的实参扩起来,作为一个单一的实参。作为一个单一的实参。例:例:XCHAGE ,DI,AL(4)字符操作符!)字符操作符!格式:格式:!字符!字符“!”后的字符后的字符不作操作符不作操作符使用使用,而是而是字符本身。字符本身。57只能用于宏定义中,只能用于宏定义中,宏体第一条宏体第一条语句;语句;汇编时,符号展开为汇编时,符号展开为?XXXX?XXXX 的形式。的形式。4 4、宏库、宏库多个宏定义以多个宏定义以文件形式文件形式组织成宏库。组织成宏库。使用时用使用时

44、用INCLUDE伪指令。伪指令。3 3、LOCALLOCAL伪指令伪指令格式:格式:LOCAL LOCAL 5.6 5.6 汇编语言程序设计基本技术汇编语言程序设计基本技术5.6.1 程序设计步骤程序设计步骤汇编语言程序设计通常按照用途汇编语言程序设计通常按照用途在程序中设置在程序中设置若干个段,若干个段,如存放数据的段、堆栈使用的段、如存放数据的段、堆栈使用的段、存放程序代码的段等。存放程序代码的段等。80 x86的汇编语言程序建立在段的基础上的汇编语言程序建立在段的基础上。一个段是若干指令和数据的集合,它是一个段是若干指令和数据的集合,它是一个可独立寻址的逻辑单位。一个可独立寻址的逻辑单位

45、。59对于初学者来说,构造一个汇编语言源程序的基本格式对于初学者来说,构造一个汇编语言源程序的基本格式如下(下面如下(下面4个段排列的顺序是任意的):个段排列的顺序是任意的):DATASEGMENT;数据段;数据段DATAENDSEXTRASEGMENT;附加附加数据段数据段EXTRA ENDSSTACK1SEGMENT PARA STACK;堆栈段;堆栈段DW 20H DUP(0)STACK1ENDSCODESEGMENT;代码段;代码段ASSUME CS:CODE,DS:DATA,ES:EXTRABEING:CODEENDSEND BEING指令序列指令序列数据数据数据数据 分析问题,建立

46、数学模型;分析问题,建立数学模型;确定算法;确定算法;编制程序流程图;编制程序流程图;编制程序;编制程序;调试程序。调试程序。5.6.2 顺序程序设计顺序程序设计程序运行程序运行从开始到结束一直是从开始到结束一直是按照编写指令的顺序执行按照编写指令的顺序执行,即即每条指令只执行一次。每条指令只执行一次。指令指令1指令指令2指令指令n-1指令指令n 顺序程序结构图顺序程序结构图用计算机通过程序设计解决某一问题时,用计算机通过程序设计解决某一问题时,通常通常按以下步骤进行:按以下步骤进行:61例:试编制程序,计算下列公式的值,并将结果存放例:试编制程序,计算下列公式的值,并将结果存放 在在FUN存

47、储单元中。存储单元中。F 其中其中X,Y,Z的值分别存放在的值分别存放在VARX、VARY、VARZ三个字三个字存储单元中,且计算过程的中间值和最后结果仍在存储单元中,且计算过程的中间值和最后结果仍在16位二进制位二进制数的范围内。编制源程序如下:数的范围内。编制源程序如下:2)1(3)(10ZYXTITLE EXAMPLE PROGRAM DATA SEGMENT;设置数据段;设置数据段 VARXDW 123H;变量;变量X VARYDW 456H;变量;变量Y VARZDW 789H;变量;变量Z FUNDW?;结果单元;结果单元 DATA ENDS STACK1 SEGMENT PARA

48、 STACK;设置堆栈段;设置堆栈段DW 20H DUP(0)STACK1 ENDS62CODESEGMENT;设置代码段;设置代码段ASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATA;置段基值于;置段基值于DSMOV DS,AXMOV AX,VARX;取变量;取变量XADD AX,VARY;AX(X+Y)MOV BX,AX;BX(X+Y)SAL AX,1;AX2*(X+Y)SAL AX,1;AX 4*(X+Y)ADD AX,BX;AX 5*(X+Y)SAL AX,1;AX 10*(X+Y)MOV BX,VARZ;取变量;取变量ZDEC BX;B

49、X(Z 1)MOV CX,BX;CX(Z 1)SAL BX,1;BX 2*(Z 1)ADD BX,CX;BX 3*(Z 1)SUB AX,BX;AX 10*(X+Y)3*(Z 1)SAR AX,1;AX 10*(X+Y)3*(Z 1)/2MOV FUN,AX;存放计算结果;存放计算结果MOV AH,4CH;终止用户程序,返回;终止用户程序,返回DOSINT 21HCODEENDSEND START63例:用查表方法将一位十六进制数(例:用查表方法将一位十六进制数(09,AF)转换成它对应的转换成它对应的ASCII码。码。首先在首先在数据段建立一个表数据段建立一个表TABLE,按十六进制数从小到

50、,按十六进制数从小到 大大(即从(即从09到到AF)的顺序,在表中存入它们对应的)的顺序,在表中存入它们对应的ASCII码值(十六进制数用大写英文字母码值(十六进制数用大写英文字母AF)。)。为查出某个数的为查出某个数的ASCII码,需码,需计算计算它它在内存中的地址在内存中的地址。用简化段定义伪指令,编制源序如下:用简化段定义伪指令,编制源序如下:.MODEL SMALL;设置内存模式设置内存模式.DATA;设置数据段设置数据段TABLE DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46HHEX DB 4

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(汇编语言层[页]课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|