汇编语言程序设计(31)课件_第1页
汇编语言程序设计(31)课件_第2页
汇编语言程序设计(31)课件_第3页
汇编语言程序设计(31)课件_第4页
汇编语言程序设计(31)课件_第5页
已阅读5页,还剩189页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第5 5章章 80868086汇编语言程序设计汇编语言程序设计第第5 5章章 80868086汇编语言程序设计汇编语言程序设计本章主要内容本章主要内容 汇编语言基础知识汇编语言基础知识1 汇编语言的伪指令汇编语言的伪指令2 系统功能调用系统功能调用3 汇编语言程序设计汇编语言程序设计4 汇编语言程序的上机过程汇编语言程序的上机过程5第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.1 5.1 汇编语言基础知识汇编语言基础知识v5.1.15.1.1概述概述v5.1.25.1.2汇编源程序的结构汇编源程序的结构v5.1.35.1.3汇编语言的语句汇编语言的语句v5.1.45.1

2、.4汇编语言的数据汇编语言的数据v5.1.55.1.5汇编语言的操作符与表达式汇编语言的操作符与表达式第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.1.15.1.1概述概述v汇编语言(汇编语言(Assembly LanguageAssembly Language)是介于机器语)是介于机器语言和高级语言之间的计算机语言,是一种用符号言和高级语言之间的计算机语言,是一种用符号表示的面向机器的程序设计语言。表示的面向机器的程序设计语言。v它比机器语言易于阅读、编写和修改,又比高级它比机器语言易于阅读、编写和修改,又比高级语言运行速度快,能充分利用计算机的硬件资源语言运行速度快,

3、能充分利用计算机的硬件资源,占用内存空间少。,占用内存空间少。v汇编语言常用于计算机控制系统的开发和高级语汇编语言常用于计算机控制系统的开发和高级语言编译程序的编制等应用场合。采用不同言编译程序的编制等应用场合。采用不同CPUCPU的的计算机有不同的汇编语言。计算机有不同的汇编语言。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v用汇编语言编写的程序称为汇编语言程序用汇编语言编写的程序称为汇编语言程序或源程序(或源程序(Source ProgramSource Program)。)。v汇编语言源程序不能直接在计算机上运行汇编语言源程序不能直接在计算机上运行,需要将它翻译成机器

4、语言程序(也称目,需要将它翻译成机器语言程序(也称目标代码程序,标代码程序,Object ProgramObject Program)。这个翻)。这个翻译过程为汇编。译过程为汇编。v完成汇编任务的程序(软件)称为汇编程完成汇编任务的程序(软件)称为汇编程序。序。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v汇编程序完成以下几个任务:汇编程序完成以下几个任务:v将汇编语言源程序翻译成目标代码程序;将汇编语言源程序翻译成目标代码程序;v按指令要求自动分配存储区(包括程序区按指令要求自动分配存储区(包括程序区、数据区等);、数据区等);v自动把源程序中以各种进制表示的数据都自动把

5、源程序中以各种进制表示的数据都转换成二进制形式的数据;转换成二进制形式的数据;v计算表达式的值;计算表达式的值;v对汇编语言源程序进行语法检查,并给出对汇编语言源程序进行语法检查,并给出语法出错的提示信息。语法出错的提示信息。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.1.25.1.2汇编源程序的结构汇编源程序的结构v汇编语言程序由若干个段组成。汇编语言程序由若干个段组成。v按照各段功能的不同,分别有代码段、数按照各段功能的不同,分别有代码段、数据段、堆栈段和附加段。据段、堆栈段和附加段。v其中代码段是必须要定义的。其中代码段是必须要定义的。第第5 5章章 808680

6、86汇编语言程序设计汇编语言程序设计v【例【例5-15-1】 编写汇编程序,计算编写汇编程序,计算2010H +2011H2010H +2011H,并把和存入,并把和存入RESULTRESULT单元。单元。DATA SEGMENTDATA SEGMENT; ;定义数据段定义数据段 X DW 2010H X DW 2010H ; ;定义被加数定义被加数 Y DW 2011H Y DW 2011H; ;定义加数定义加数 RESULT DW ? RESULT DW ? ; ;分配和数存放单元分配和数存放单元DATA ENDS DATA ENDS ; ;数据段定义结束数据段定义结束第第5 5章章 80

7、868086汇编语言程序设计汇编语言程序设计 CODE SEGMENT CODE SEGMENT MAIN PROC FAR MAIN PROC FAR ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATA START:PUSH DS START:PUSH DS MOV AX,0 MOV AX,0 PUSH AX PUSH AX MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX第第5 5章章 80868086汇编语言程序设计汇编语言程序设计 MOV AX,X MOV AX,X ADD AX,Y ADD AX,Y MOV

8、 RESULT,AX MOV RESULT,AX RET RET MAIN ENDP MAIN ENDPCODE ENDSCODE ENDS END START END START第第5 5章章 80868086汇编语言程序设计汇编语言程序设计汇编语言源程序汇编语言源程序的特点的特点v采用段式结构采用段式结构 汇编源程序通常包含若干个段,上例的程序有汇编源程序通常包含若干个段,上例的程序有数据段和代码段这两个段,数据段和代码段这两个段,DATADATA、CODECODE分别为分别为两个段的名字。每一段有明显的起始语句两个段的名字。每一段有明显的起始语句SEGMENTSEGMENT与结束语句与结

9、束语句ENDSENDS,这些语句称为,这些语句称为“段段定义定义”语句。语句。v每一段由若干汇编语句构成每一段由若干汇编语句构成 汇编源程序每一段包含若干汇编语句。汇编语汇编源程序每一段包含若干汇编语句。汇编语句的主体是汇编指令。一条语句写一行,为了句的主体是汇编指令。一条语句写一行,为了清晰,书写语句时,注意语句的各部分要尽量清晰,书写语句时,注意语句的各部分要尽量对齐。对齐。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计汇编语言源程序汇编语言源程序的特点(续)的特点(续)v每个汇编源程序需要一个启动标号每个汇编源程序需要一个启动标号 汇编语言源程序需要一个启动标号作为程序

10、开汇编语言源程序需要一个启动标号作为程序开始执行时目标代码的入口地址。启动标号可以始执行时目标代码的入口地址。启动标号可以按照汇编语言的标号命名规则由程序员自己定按照汇编语言的标号命名规则由程序员自己定义。常用的启动标号有义。常用的启动标号有STARTSTART、BEGINBEGIN等。等。v加入适当注释,可以提高程序的可读性加入适当注释,可以提高程序的可读性 为了提高程序的可读性,可以在汇编语句后以为了提高程序的可读性,可以在汇编语句后以分号分号“; ;”为起始标志,加入注释。为起始标志,加入注释。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v汇编语言和操作系统(汇编语言

11、和操作系统(DOSDOS)的接口)的接口 计算机一旦启动成功,由计算机一旦启动成功,由DOSDOS掌握掌握CPUCPU的控制权的控制权。应用程序只是作为。应用程序只是作为DOSDOS的子程序,应用程序的子程序,应用程序执行完,必须返回执行完,必须返回DOSDOS。上述程序的第。上述程序的第7 7行、第行、第9 9行第行第1111行、第行、第1717行和第行和第1818行就是为了完成行就是为了完成此功能而设计的。此功能而设计的。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计(1 1)返回返回DOSDOS的的标准方法标准方法v例例5-15-1采用了此方法。具体程序设计方法如下:采

12、用了此方法。具体程序设计方法如下:v 将应用程序的主程序定义成一个将应用程序的主程序定义成一个FARFAR过程(见过程(见上述程序的第上述程序的第7 7行和第行和第1818行),该过程的最后一行),该过程的最后一条指令为条指令为RETRET(见上述程序的第(见上述程序的第1717行);行);v 在代码段的主程序的开始部分用在代码段的主程序的开始部分用3 3条指令,把条指令,把INT 20HINT 20H指令的段地址指令的段地址(CS=DS=ES)(CS=DS=ES)及偏移地址及偏移地址(0)(0)压入堆栈(见上述程序的第压入堆栈(见上述程序的第9 9行第行第1111行)。行)。v这样,程序执行

13、到主程序的最后一条指令这样,程序执行到主程序的最后一条指令RETRET时时,由于过程具有,由于过程具有FARFAR属性,故堆栈内的两个字分属性,故堆栈内的两个字分别弹出到别弹出到IPIP及及CSCS,便执行,便执行INT 20HINT 20H指令,返回到指令,返回到DOSDOS。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计(2 2)用)用DOSDOS功能调用功能调用4CH4CH返回返回v在用户程序中不定义过程段,删除上述程在用户程序中不定义过程段,删除上述程序的第序的第7 7行、第行、第9 9行第行第1111行和第行和第1818行指令行指令,把原第,把原第1717行的行的R

14、ETRET指令换成下面两条指令指令换成下面两条指令:MOV AH,4CHMOV AH,4CHINT 21HINT 21HvINT 21HINT 21H指令是指令是DOSDOS向用户提供服务程序的向用户提供服务程序的窗口。窗口。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.1.35.1.3汇编语言的语句汇编语言的语句v汇编语言的语句可以分为:汇编语言的语句可以分为:v指令语句指令语句v伪指令语句伪指令语句v宏指令语句宏指令语句第第5 5章章 80868086汇编语言程序设计汇编语言程序设计1.1.指令语句指令语句v指令语句是可执行语句,汇编后将产生目标代码指令语句是可执行语

15、句,汇编后将产生目标代码,CPUCPU根据这些目标代码执行并完成特定操作。根据这些目标代码执行并完成特定操作。v每一条指令语句表达了计算机具有的一个基本能每一条指令语句表达了计算机具有的一个基本能力,这种能力在目标程序执行时反映出来。力,这种能力在目标程序执行时反映出来。v指令语句的格式为:指令语句的格式为: 标号标号: : 指令助记符指令助记符 操作数操作数 ; ;注释注释 第第5 5章章 80868086汇编语言程序设计汇编语言程序设计2.2.伪指令语句伪指令语句v伪指令语句,也称指示性语句,是不可执行语句伪指令语句,也称指示性语句,是不可执行语句,汇编后不产生目标代码,它仅仅在汇编过程中

16、,汇编后不产生目标代码,它仅仅在汇编过程中告诉汇编程序如何汇编源程序。告诉汇编程序如何汇编源程序。v伪指令语句可以告诉汇编程序哪些语句是属于一伪指令语句可以告诉汇编程序哪些语句是属于一个段、是什么类型的段、各段存入内存应如何组个段、是什么类型的段、各段存入内存应如何组装、给变量分配多少存储单元、给数字或表达式装、给变量分配多少存储单元、给数字或表达式命名等。命名等。v伪指令语句的功能是由汇编程序汇编源程序时完伪指令语句的功能是由汇编程序汇编源程序时完成的,不是由成的,不是由CPUCPU执行目标代码时实现的。执行目标代码时实现的。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v

17、伪指令语句的格式为:伪指令语句的格式为: 符号名符号名 伪指令助记符伪指令助记符 操作数操作数 ; ;注释注释 第第5 5章章 80868086汇编语言程序设计汇编语言程序设计3.3.宏指令语句宏指令语句v宏是一个以宏名定义的指令序列。一旦把某程序宏是一个以宏名定义的指令序列。一旦把某程序段定义成宏,则可以用宏名代替那段程序。在汇段定义成宏,则可以用宏名代替那段程序。在汇编时,要对宏进行宏展开,即把以宏名表示的地编时,要对宏进行宏展开,即把以宏名表示的地方替换为该宏对应的指令序列的目标代码。宏指方替换为该宏对应的指令序列的目标代码。宏指令可以看成指令语句的扩展,相当于多条指令语令可以看成指令语

18、句的扩展,相当于多条指令语句的集合。句的集合。v宏指令格式为:宏指令格式为: 宏名宏名 宏指令助记符宏指令助记符 操作数操作数 ; ;注释注释 第第5 5章章 80868086汇编语言程序设计汇编语言程序设计4.4.汇编语句格式说明汇编语句格式说明v(1 1)关于格式的几个组成部分)关于格式的几个组成部分v汇编语句的格式中带中括号的部分是可选项。汇编语句的格式中带中括号的部分是可选项。v各部分之间必须用空格(各部分之间必须用空格(SPACESPACE)或水平制表符)或水平制表符(TABTAB)隔开。)隔开。v操作数项由一个或多个表达式组成,它为执行语操作数项由一个或多个表达式组成,它为执行语句

19、所要求的操作提供需要的信息。句所要求的操作提供需要的信息。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计4.4.汇编语句格式说明汇编语句格式说明(续)(续)v注释项用来说明程序或语句的功能,注释注释项用来说明程序或语句的功能,注释项在汇编时不会产生目标代码。注释项可项在汇编时不会产生目标代码。注释项可以跟在语句的后面。分号以跟在语句的后面。分号“; ;”是注释项的是注释项的开始。开始。v当分号当分号“; ;”作为一行的第一个字符时,表作为一行的第一个字符时,表示注释占据一整行,常用来说明下面一段示注释占据一整行,常用来说明下面一段程序的功能。程序的功能。第第5 5章章 808

20、68086汇编语言程序设计汇编语言程序设计4.4.汇编语句格式说明汇编语句格式说明(续)(续)v(2 2)关于标号与符号名)关于标号与符号名v标号与符号名都称为名字。标号与符号名都称为名字。v标号是可选项,一般设置在程序的入口处标号是可选项,一般设置在程序的入口处或程序跳转点处,表示一条指令的符号地或程序跳转点处,表示一条指令的符号地址,在代码段中定义,后面必须跟上冒号址,在代码段中定义,后面必须跟上冒号“: :”。v符号名也是一个可选项,可以是常量、变符号名也是一个可选项,可以是常量、变量、段名、过程名、宏名,后面不能跟冒量、段名、过程名、宏名,后面不能跟冒号。号。第第5 5章章 80868

21、086汇编语言程序设计汇编语言程序设计4.4.汇编语句格式说明汇编语句格式说明(续)(续)v(3 3)名字的命名规则)名字的命名规则v 合法符号:字母(不分大小写)、数字及合法符号:字母(不分大小写)、数字及特殊符号(特殊符号(“? ?”,“ ”,“_ _”,“$ $”,“”)。)。v 名字可以用除数字外所有的合法符号开头名字可以用除数字外所有的合法符号开头。但如果是用到符号。但如果是用到符号“ ”,那么这个符号,那么这个符号必须是第一个字符。必须是第一个字符。v 名字的有效长度不超过名字的有效长度不超过3131个英文字符。个英文字符。v 不能把保留字(如不能把保留字(如CPUCPU的寄存器名

22、、指令的寄存器名、指令助记符等)用作名字。助记符等)用作名字。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计4.4.汇编语句格式说明汇编语句格式说明(续)(续)v(4 4)注释项)注释项 v注释项用来说明一段程序、一条或几条指注释项用来说明一段程序、一条或几条指令的功能,此项是可有可无的。但是,对令的功能,此项是可有可无的。但是,对于汇编语言源程序来说,注释项可以使程于汇编语言源程序来说,注释项可以使程序易于被读懂;而对编写程序的人来讲,序易于被读懂;而对编写程序的人来讲,注释项可以是一种注释项可以是一种“备忘录备忘录”。第第5 5章章 80868086汇编语言程序设计汇编语

23、言程序设计注释编写举例注释编写举例v例如,一般在循环程序的开始都有初始化程序,例如,一般在循环程序的开始都有初始化程序,置有关工作单元的初值:置有关工作单元的初值:MOV CX,100 MOV CX,100 ; ;将将100100送入送入CXCXMOV SI,0100H MOV SI,0100H ; ;将将0100H0100H送入送入SISIMOV DI,0200H MOV DI,0200H ; ;将将0200H0200H送入送入DIDIMOV CX,100 MOV CX,100 ; ;循环计数器循环计数器CXCX置初值置初值MOV SI,0100H MOV SI,0100H ; ;源数据区指

24、针源数据区指针SISI置初值置初值MOV DI,0200H MOV DI,0200H ; ;目标数据区指针目标数据区指针DIDI置初值置初值第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.1.4 5.1.4 汇编语言的数据汇编语言的数据v数据是汇编语言语句的重要组成部分。数据是汇编语言语句的重要组成部分。v汇编语言能识别的数据有:汇编语言能识别的数据有: 常量常量 变量变量 标号标号第第5 5章章 80868086汇编语言程序设计汇编语言程序设计1.1.常量常量v常量是没有任何属性的纯数值数据,它的常量是没有任何属性的纯数值数据,它的值在汇编期间和程序运行过程中不能改变值在

25、汇编期间和程序运行过程中不能改变。v汇编语言程序中的常量有:汇编语言程序中的常量有: 数值常量数值常量 字符常量字符常量 符号常量符号常量第第5 5章章 80868086汇编语言程序设计汇编语言程序设计(1 1)数值常量)数值常量v在汇编程序中,数值常量可以用不同进制形在汇编程序中,数值常量可以用不同进制形式表示。式表示。v二进制常量表示为以字母二进制常量表示为以字母B B(或(或b b)结尾的由)结尾的由数字数字0 0和和1 1组成的序列,例如,组成的序列,例如,01100101B01100101B。v八进制常量表示为以字母八进制常量表示为以字母Q Q(或(或q q)或)或O O(或(或o

26、o)结尾的由数字)结尾的由数字0 07 7组成的序列,例如,组成的序列,例如,145Q145Q。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计(1 1)数值常量)数值常量(续)(续)v十六进制常量表示为以字母十六进制常量表示为以字母H H(或(或h h)结尾)结尾的由数字的由数字0 09 9、字母、字母A AF F(或(或a af f)组成)组成的序列,例如,的序列,例如,653AH653AH。v十进制常量表示为以字母十进制常量表示为以字母D D(或(或d d)结尾的)结尾的由数字由数字0 09 9组成的序列。汇编语句中的数组成的序列。汇编语句中的数据默认采用十进制表示形式,

27、所以,采用据默认采用十进制表示形式,所以,采用十进制数时,也可省略结尾的字母。例如十进制数时,也可省略结尾的字母。例如,101D101D或或100100。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计1.1.常量(续)常量(续)v(2 2)字符常量)字符常量v字符常量是用单引号括起来的单个字符,字符常量是用单引号括起来的单个字符,如如aa、11等。字符常量在操作中体现出等。字符常量在操作中体现出的值是其的值是其ASCIIASCII码值。码值。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计1.1.常量(续)常量(续)v(3 3)符号常量)符号常量v符号常量是用

28、名字来标识的常量。以符号符号常量是用名字来标识的常量。以符号常量代替常量,可以增加程序的可读性及常量代替常量,可以增加程序的可读性及通用性。通用性。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计2.2.变量变量v变量是存储单元的符号地址,这类存储单变量是存储单元的符号地址,这类存储单元的内容可以在程序运行期间被修改。变元的内容可以在程序运行期间被修改。变量以变量名的形式出现在程序中。同一个量以变量名的形式出现在程序中。同一个汇编程序中,变量只能定义一次。变量具汇编程序中,变量只能定义一次。变量具有以下有以下3 3种属性。种属性。v段属性:变量所在段的段地址。段属性:变量所在段

29、的段地址。v偏移属性:变量所在段的段内偏移地址。偏移属性:变量所在段的段内偏移地址。v类型属性:变量占用存储单元的字节数,类型属性:变量占用存储单元的字节数,如表如表5-15-1所示。所示。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计3.3.标号标号v标号是指令的符号地址,可用作控制转移标号是指令的符号地址,可用作控制转移指令的操作数。标号具有以下指令的操作数。标号具有以下3 3种属性。种属性。v段属性:标号所在段的段地址。段属性:标号所在段的段地址。v偏移属性:标号所在段的段内偏移地址。偏移属性:标号所在段的段内偏移地址。v类型属性:也叫距离属性,表示标号可作类型属性:也

30、叫距离属性,表示标号可作为段内或段间的转移特性为段内或段间的转移特性第第5 5章章 80868086汇编语言程序设计汇编语言程序设计变量的类型值变量的类型值变量类 型类 型 值占用存储单元的字节数说 明BYTE11字节型WORD22字型DWORD44双字型QWORD88四字型TBYTE1010五字型标号NEAR-1近标号(段内调用)FAR-2远标号(段间调用)第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.1.55.1.5汇编语言的操作符与表达式汇编语言的操作符与表达式v操作项是汇编语句中的一个重要组成部分,操作项是汇编语句中的一个重要组成部分,它可以由常量(常数)、寄存器

31、、标号、变它可以由常量(常数)、寄存器、标号、变量或表达式组成。量或表达式组成。v表达式是常量、寄存器、标号、变量与一些表达式是常量、寄存器、标号、变量与一些操作符相组合的序列,分为数值表达式和地操作符相组合的序列,分为数值表达式和地址表达式两种。址表达式两种。v汇编程序在汇编时按照一定的规则对表达式汇编程序在汇编时按照一定的规则对表达式进行计算后可以得到一个数值或地址值。进行计算后可以得到一个数值或地址值。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计1.1.算术操作符算术操作符v算术操作符有:加(算术操作符有:加(+ +)、减()、减(- -)、乘()、乘(* *)、除(

32、)、除(/ /)和取余()和取余(MODMOD)。)。v参加运算的数和运算的结果都是整数。参加运算的数和运算的结果都是整数。v除法运算的结果是商的整数部分除法运算的结果是商的整数部分。v取余操作的结果是两个整数相除后得到的取余操作的结果是两个整数相除后得到的余数。余数。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v算术操作符可以用于数值表达式或地址表达式。算术操作符可以用于数值表达式或地址表达式。v当它用于地址表达式时,仅当其结果有明确的物当它用于地址表达式时,仅当其结果有明确的物理意义时,才是有效的结果。理意义时,才是有效的结果。v例如,将两个地址相乘或相除都是没有意义的

33、。例如,将两个地址相乘或相除都是没有意义的。加、减操作可以用于地址表达式,但也要注意其加、减操作可以用于地址表达式,但也要注意其物理意义。物理意义。v例如,将两个地址相加或相减也是没有意义的。例如,将两个地址相加或相减也是没有意义的。有意义的用法是地址值与一个偏移量相加或相减有意义的用法是地址值与一个偏移量相加或相减,可以得到一个新的地址值。,可以得到一个新的地址值。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v例如:例如: MOV AX,2+3MOV AX,2+3* *5 5; ;汇编后汇编后, ,表达式表达式2+32+3* *5 5被数值被数值1717代替代替MOV B

34、L,NUM+1 MOV BL,NUM+1 v; ;表达式表达式NUM+1NUM+1是汇编时由汇编程序计算的是汇编时由汇编程序计算的,不是由,不是由CPUCPU在执行该指令时才计算的。汇在执行该指令时才计算的。汇编后得到的目标程序中,表达式被它的值编后得到的目标程序中,表达式被它的值代替。代替。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计2.2.逻辑操作符逻辑操作符v逻辑操作符有:与(逻辑操作符有:与(ANDAND)、或()、或(OROR)、非)、非(NOTNOT)和异或()和异或(XORXOR)。)。v逻辑操作按位进行,只适用于数值表达式逻辑操作按位进行,只适用于数值表达式

35、。逻辑操作符指定汇编程序对操作符前后。逻辑操作符指定汇编程序对操作符前后的两个数值或数值表达式进行指定的逻辑的两个数值或数值表达式进行指定的逻辑操作。要注意区分逻辑操作符与逻辑指令操作。要注意区分逻辑操作符与逻辑指令。v例如:例如: AND DX,PORT AND 0FH AND DX,PORT AND 0FH第第5 5章章 80868086汇编语言程序设计汇编语言程序设计3.3.移位操作符移位操作符v移位操作符有两个:移位操作符有两个:SHLSHL和和SHRSHR,按位操作,按位操作,只适用于数值表达式。,只适用于数值表达式。v移位操作符的用法如下:移位操作符的用法如下:数值表达式数值表达式

36、 SHL SHL 移动位数移动位数n n数值表达式数值表达式 SHR SHR 移动位数移动位数n nv汇编程序将把数字表达式的值左移(汇编程序将把数字表达式的值左移(SHLSHL)或右移(或右移(SHRSHR)n n位。当位。当n15n15时,结果为时,结果为0 0。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计4.4.关系操作符关系操作符v关系操作符用于数的比较,有相等(关系操作符用于数的比较,有相等(EQEQ)、不相)、不相等(等(NENE)、小于()、小于(LTLT)、大于()、大于(GTGT)、小于等于)、小于等于(LELE)和大于等于()和大于等于(GEGE)6 6

37、种。关系操作符两边种。关系操作符两边的操作数必须是两个数值或同一段中两个存储单的操作数必须是两个数值或同一段中两个存储单元地址。关系操作的运算结果是逻辑值,当结果元地址。关系操作的运算结果是逻辑值,当结果为真时,表示为为真时,表示为0FFFFH0FFFFH;当结果为假时,则表示;当结果为假时,则表示为为0 0。v例如:例如:MOV AX,4 EQ 3 MOV AX,4 EQ 3 v该指令汇编后的结果为:该指令汇编后的结果为:MOV AXMOV AX,0 0第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.5.数值回送操作符数值回送操作符v数值回送操作符的运算对象必须是存储器操

38、作数数值回送操作符的运算对象必须是存储器操作数,即变量或标号。操作符加在运算对象的前面,即变量或标号。操作符加在运算对象的前面,返回一个数值。返回一个数值。操 作 符功 能用 法SEG返回变量或标号的段地址SEG变量或标号OFFSET返回变量或标号的偏移地址OFFSET变量或标号TYPE返回变量的或标号的类型值(见表5-1) TYPE变量或标号LENGTH返回变量所定义的元素的个数LENGTH变量或标号SIZE返回变量所占的字节数SIZE变量或标号第第5 5章章 80868086汇编语言程序设计汇编语言程序设计6.6.属性操作符属性操作符v属性操作符用来建立或改变已定义变量、属性操作符用来建立

39、或改变已定义变量、内存操作数或标号的类型属性。内存操作数或标号的类型属性。v属性操作符有:属性操作符有:vPTRPTRv段操作符段操作符vTHISTHISvSHORTSHORTvHIGHHIGHvLOWLOW等。等。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计(1 1)PTRPTRv格式:类型格式:类型 PTR PTR 变量变量 / / 标号标号v返回值:具有规定类型属性的变量或标号。返回值:具有规定类型属性的变量或标号。v典型应用:典型应用:v 重新指定变量类型重新指定变量类型v例如,有如下数据定义:例如,有如下数据定义: BUFW DW 1234H,5678H BUFW

40、 DW 1234H,5678Hv则下列指令合法:则下列指令合法:MOV AX,BUFWMOV AX,BUFWMOV AL,BYTE PTR BUFW MOV AL,BYTE PTR BUFW ; ;临时改变临时改变BUFWBUFW的字属性为字节属性的字属性为字节属性第第5 5章章 80868086汇编语言程序设计汇编语言程序设计PTRPTR典型应用(续)典型应用(续)v 指定内存操作数的类型指定内存操作数的类型v在寄存器间接寻址、寄存器相对寻址、基址在寄存器间接寻址、寄存器相对寻址、基址变址寻址或相对基址变址寻址等内存寻址方变址寻址或相对基址变址寻址等内存寻址方式中,往往很难判断出操作数的类型

41、属性,式中,往往很难判断出操作数的类型属性,例如:例如:INC BXINC BX。此时,汇编将指示出错,。此时,汇编将指示出错,为了避免出错,应对操作数类型加以说明,为了避免出错,应对操作数类型加以说明,如下所示:如下所示:INC BYTE PTR BX INC BYTE PTR BX ; ;字节属性字节属性INC WORD PTR BXSI INC WORD PTR BXSI ; ;字属性字属性第第5 5章章 80868086汇编语言程序设计汇编语言程序设计PTRPTR典型应用(续)典型应用(续)v 与与EQUEQU一起定义一个新的变量一起定义一个新的变量v格式:变量或标号格式:变量或标号

42、EQU EQU 类型类型 PTR PTRv说明:说明:v新变量或新标号的段属性、偏移属性与前新变量或新标号的段属性、偏移属性与前一个已定义的变量或标号段属性、偏移属一个已定义的变量或标号段属性、偏移属性相同。性相同。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v例如:例如:BUFW DW 1234H,5678H BUFW DW 1234H,5678H BUFB EQU BYTE PTR BUFW BUFB EQU BYTE PTR BUFW ;BUFB;BUFB的类型属性为字节的类型属性为字节 ; ;其他属性与其他属性与BUFWBUFW一样一样v进行字存取时,可用变量进行字

43、存取时,可用变量BUFWBUFW,v如:如:MOV AX,BUFWMOV AX,BUFWv进行字节存取时,可用变量进行字节存取时,可用变量BUFBBUFB,v如:如:MOV AL,BUFBMOV AL,BUFB第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v(2 2)段操作符)段操作符v用来指定一个标号、变量或地址表达式的用来指定一个标号、变量或地址表达式的段属性。段属性。v例如:例如:MOV AX,ES:BXMOV AX,ES:BX; ;指定数据在指定数据在ESES段段第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v(3 3)THISTHISv格式:格式:

44、THIS THIS 类型类型v可以像可以像PTRPTR一样建立一个指定类型的地址操一样建立一个指定类型的地址操作数,该操作数的段地址和偏移地址与下作数,该操作数的段地址和偏移地址与下一个存储单元地址相同。例如:一个存储单元地址相同。例如:BUFB EQU THIS BYTEBUFB EQU THIS BYTEBUFW DW 1234H,5678HBUFW DW 1234H,5678Hv此时此时BUFBBUFB的偏移地址和的偏移地址和BUFWBUFW完全相同,但完全相同,但它是字节类型的;而它是字节类型的;而BUFWBUFW则是字类型的。则是字类型的。第第5 5章章 80868086汇编语言程序

45、设计汇编语言程序设计v(4 4)SHORTSHORTv格式:格式:SHORT SHORT 标号标号v返回值:偏移量在返回值:偏移量在-128-128+127+127范围内的标范围内的标号。号。v用于用于JMPJMP指令。指令。v即:即:JMP SHORT JMP SHORT 标号,指明是短转移。标号,指明是短转移。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v(5 5)字节分离操作符)字节分离操作符HIGHHIGH、LOWLOWv格式:格式:HIGH HIGH 表达式表达式v LOW LOW 表达式表达式 v返回值:表达式值的高字节或低字节。返回值:表达式值的高字节或低字节

46、。v例如:例如:CONST EQU 0ABCDHCONST EQU 0ABCDHMOV AH,HIGH CONST MOV AH,HIGH CONST ;AH=0ABH;AH=0ABHMOV CL,LOW CONST MOV CL,LOW CONST ;CL=0CDH;CL=0CDH第第5 5章章 80868086汇编语言程序设计汇编语言程序设计优 先 级操 作 符高低(),LENGTH,SIZE,WIDTH,MASKSEG、OFFSET、TYPE、PTR、THIS、段操作符LOW、HIGH*、/、MOD、SHR、SHL +、EQ、NE、LT、GT、LT、LE、GE NOTANDOR、XORS

47、HORT第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.25.2汇编语言的伪指令汇编语言的伪指令v伪指令从表示形式及其在语句中所处的位伪指令从表示形式及其在语句中所处的位置,与置,与CPUCPU指令相似,但二者有着重要的区指令相似,但二者有着重要的区别。别。v首先,伪指令不像机器指令那样是在程序首先,伪指令不像机器指令那样是在程序运行期间由运行期间由CPUCPU来执行的,它是在汇编程序来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作对源程序汇编期间由汇编程序处理的操作;v其次,汇编以后,每条其次,汇编以后,每条CPUCPU指令产生一一对指令产生一一对应的目标代码

48、,而伪指令则不产生与之相应的目标代码,而伪指令则不产生与之相应的目标代码。应的目标代码。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.2.15.2.1变量定义伪指令变量定义伪指令v变量定义伪指令用来为数据分配存储单元,建立变量定义伪指令用来为数据分配存储单元,建立变量与存储单元之间的联系。变量与存储单元之间的联系。v语句格式为:语句格式为: 变量名变量名 数据定义伪指令数据定义伪指令 操作数操作数1,1,操作数操作数2 2 v 变量定义伪指令有:变量定义伪指令有:vDBDB、DWDW、DDDD、DQDQ、DTDT,分别用来定义类型属性为,分别用来定义类型属性为字节字节(D

49、B)(DB)、字、字(DW)(DW)、双字、双字(DD)(DD)、4 4字字(DQ)(DQ)、5 5字字(DT)(DT)的变量。的变量。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计v变量定义伪指令的变量定义伪指令的操作数可以是:操作数可以是:v数字常量,允许以十进制、八进制、十六数字常量,允许以十进制、八进制、十六进制、二进制等形式表示,默认形式是十进制、二进制等形式表示,默认形式是十进制;进制;v字符常量,用单引号括起来,被存储的是字符常量,用单引号括起来,被存储的是该字符的该字符的ASCIIASCII码;码;v符号常量,必须是预先已定义的符号;符号常量,必须是预先已定义

50、的符号;v符号符号“? ?”,表示预留空间,内容不定。,表示预留空间,内容不定。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计vDUPDUP,表示内容重复的数据。,表示内容重复的数据。vDUPDUP用法的用法的具体形式为:具体形式为:次数次数 DUP ( DUP ( 被重复内容被重复内容) )v例如,数据定义如下,例如,数据定义如下,DATA_B DB 10,ADATA_B DB 10,ADATA_W DW 1234HDATA_W DW 1234HDATA_S DB 1234,2 DUP(1,2 DUP(0)DATA_S DB 1234,2 DUP(1,2 DUP(0)第第5

51、 5章章 80868086汇编语言程序设计汇编语言程序设计数据定义存储区示意数据定义存储区示意DB定义的数据,每个数据元素占据定义的数据,每个数据元素占据1个个存储单元;存储单元; DW定义的数据,每个数据元素占据定义的数据,每个数据元素占据2个存储单元;个存储单元;字数据存储时,低字节存储在低地址单字数据存储时,低字节存储在低地址单元中,高字节存储在高地址单元中;元中,高字节存储在高地址单元中;字符在内存中存放的是它的字符在内存中存放的是它的ASCII码,码,“A”的的ASCII码为码为41H;DUP可以嵌套使用。可以嵌套使用。符号地址具有以下关系:符号地址具有以下关系:DATA_W=DAT

52、A_B+2DATA_S=DATA_W+2=DATA_B+4 第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.2.25.2.2符号定义伪指令符号定义伪指令v符号包括汇编语言的变量名、标号名、过符号包括汇编语言的变量名、标号名、过程名、寄存器名及指令助记符等。程名、寄存器名及指令助记符等。v常用符号定义伪指令有:常用符号定义伪指令有:EQUEQU“= =”LABELLABEL第第5 5章章 80868086汇编语言程序设计汇编语言程序设计1.EQU1.EQU伪指令伪指令v格式:名字格式:名字 EQU EQU 表达式表达式 表达式可以是一个常数、已定义的符号、数值表表达式可以是一

53、个常数、已定义的符号、数值表达式或地址表达式。达式或地址表达式。v功能:给表达式赋予一个名字。定义后,可功能:给表达式赋予一个名字。定义后,可用名字代替表达式。在同一源程序中,一个用名字代替表达式。在同一源程序中,一个名字只能用名字只能用EQUEQU定义一次。定义一次。v例如:例如:PIX EQU 64PIX EQU 64* *1024 ;1024 ;名字名字PIXPIX代表数值表达式的值代表数值表达式的值A EQU 7A EQU 7B EQU A-2 B EQU A-2 第第5 5章章 80868086汇编语言程序设计汇编语言程序设计2.2.等号(等号(= =)伪指令)伪指令v格式:名字格式

54、:名字 = = 表达式表达式 功能:与功能:与EQUEQU基本相同,区别是它可以对同一基本相同,区别是它可以对同一个名字重新定义。个名字重新定义。v例如:例如:COUNT = 10COUNT = 10MOV AL,COUNTMOV AL,COUNTCOUNT = 5COUNT = 5第第5 5章章 80868086汇编语言程序设计汇编语言程序设计3. LABEL3. LABEL伪指令伪指令v格式:变量格式:变量/ /标号标号 LABEL LABEL 类型类型 变量的类型有:变量的类型有:BYTEBYTE、WORDWORD、DWORDDWORD、DQDQ、DTDT 标号的类型有:标号的类型有:N

55、EARNEAR、FARFAR。 功能:定义变量或标号的类型,而变量或标号的功能:定义变量或标号的类型,而变量或标号的段属性和偏移属性由该语句所处的位置确定。段属性和偏移属性由该语句所处的位置确定。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计LABELLABEL使用举例使用举例v例如,利用例如,利用LABELLABEL使同一个数据区有一个以使同一个数据区有一个以上的类型及相关属性。上的类型及相关属性。AREAW LABEL WORD AREAW LABEL WORD ;AREAW;AREAW与与AREABAREAB指向相同的数据区指向相同的数据区, , ;AREAW ;ARE

56、AW类型为字类型为字,AREAB,AREAB类型为字节类型为字节AREAB DB 100 DUP(AREAB DB 100 DUP(?) ) MOV AX,2011HMOV AX,2011HMOV AREAW,AX MOV AREAW,AX ;(AREAW)=2011H;(AREAW)=2011H MOV BL,AREAB MOV BL,AREAB ;BL=11H;BL=11H第第5 5章章 80868086汇编语言程序设计汇编语言程序设计5.2.35.2.3段定义伪指令段定义伪指令v汇编源程序由段组成,每段大小不超过汇编源程序由段组成,每段大小不超过64KB64KB,不同的段存放不同类型的数

57、据。,不同的段存放不同类型的数据。v段定义伪指令用于汇编源程序中段的定义段定义伪指令用于汇编源程序中段的定义。v相关指令有:相关指令有:SEGMENTSEGMENT、ENDSENDS、ASSUMEASSUME。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计1.1.段定义伪指令段定义伪指令SEGMENTSEGMENT、ENDSENDSv格式:格式:段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型 类别名类别名 段名段名 ENDS ENDSv功能:定义一个逻辑段。功能:定义一个逻辑段。vSEGMENTSEGMENT和和ENDSENDS必须成对使用,它们

58、前面的段名必须成对使用,它们前面的段名必须是相同的。必须是相同的。vSEGMENTSEGMENT后面中括号中的内容为可选项,告诉汇后面中括号中的内容为可选项,告诉汇编程序和连接程序如何确定段的边界、如何连编程序和连接程序如何确定段的边界、如何连接几个程序模块。接几个程序模块。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计(1 1)定位类型)定位类型v定位类型说明段的起始地址应有怎样的边界值,定位类型说明段的起始地址应有怎样的边界值,有以下有以下4 4种。种。v BYTEBYTE:表示本段可以从任何地址开始,这种类:表示本段可以从任何地址开始,这种类型段间不留空隙,存储器利用率

59、高。型段间不留空隙,存储器利用率高。v WORDWORD:表示本段的起始地址必须为偶地址。:表示本段的起始地址必须为偶地址。v PARAPARA:表示本段从节边界开始。:表示本段从节边界开始。80868086规定每规定每1616字节为字节为1 1小节。所以,定位类型为小节。所以,定位类型为PARAPARA的段,其起的段,其起始地址必为始地址必为1616的倍数。这种类型简单,但是段间的倍数。这种类型简单,但是段间往往有空隙。定位类型的默认值为往往有空隙。定位类型的默认值为PARAPARA。v PAGEPAGE:表示本段从页边界开始。:表示本段从页边界开始。80868086规定每规定每256256

60、字节为字节为1 1页,所以,定位类型为页,所以,定位类型为PAGEPAGE的段,其的段,其起始地址必为起始地址必为256256的倍数。的倍数。第第5 5章章 80868086汇编语言程序设计汇编语言程序设计(2 2)组合类型)组合类型v组合类型说明链接不同模块中的同名段时采用的组合类型说明链接不同模块中的同名段时采用的方式,有以下方式,有以下6 6种。种。v PUBLICPUBLIC:本段与其他模块中说明为:本段与其他模块中说明为PUBLICPUBLIC的同的同名同类别的段链接起来,公用一个段地址,形成名同类别的段链接起来,公用一个段地址,形成一个新的逻辑段,所以偏移量调整为相对于新逻一个新的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论