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

下载本文档

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

文档简介

1、第第4 4章章 80868086汇编语言程序设计汇编语言程序设计第第4 4章章 80868086汇编语言程序设计汇编语言程序设计本章主要内容本章主要内容 汇编语言基础知识汇编语言基础知识1 汇编语言的伪指令汇编语言的伪指令2 系统功能调用系统功能调用3 汇编语言程序设计汇编语言程序设计4 汇编语言程序的上机过程汇编语言程序的上机过程5第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4.1 4.1 汇编语言基础知识汇编语言基础知识4.1.14.1.1概述概述4.1.24.1.2汇编源程序的结构汇编源程序的结构4.1.34.1.3汇编语言的语句汇编语言的语句4.1.44.1.4汇编

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

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

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

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

6、例4-14-1】 编写汇编程序,计算编写汇编程序,计算2010h +2011h2010h +2011h,并把和存入并把和存入resultresult单元。单元。data segmentdata segment; ;定义数据段定义数据段 x dw 2010h x dw 2010h ; ;定义被加数定义被加数 y dw 2011hy dw 2011h; ;定义加数定义加数 result dw ? result dw ? ; ;分配和数存放单元分配和数存放单元data ends data ends ; ;数据段定义结束数据段定义结束第第4 4章章 80868086汇编语言程序设计汇编语言程序设计 c

7、ode 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第第4 4章章 80868086汇编语言程序设计汇编语言程序设计 mov ax,x mov ax,x add ax,y add ax,y mov result,ax mov result,ax

8、 ret ret main endp main endpcode endscode ends end start end start第第4 4章章 80868086汇编语言程序设计汇编语言程序设计汇编语言源程序的特点汇编语言源程序的特点采用段式结构采用段式结构汇编源程序通常包含若干个段,上例的程序有数汇编源程序通常包含若干个段,上例的程序有数据段和代码段这两个段,据段和代码段这两个段,datadata、codecode分别为两分别为两个段的名字。每一段有明显的起始语句个段的名字。每一段有明显的起始语句segmentsegment与结束语句与结束语句endsends,这些语句称为,这些语句称为“

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

10、的入口地址。启动标号可以按执行时目标代码的入口地址。启动标号可以按照汇编语言的标号命名规则由程序员自己定义照汇编语言的标号命名规则由程序员自己定义。常用的启动标号有。常用的启动标号有startstart、beginbegin等。等。加入适当注释,可以提高程序的可读性加入适当注释,可以提高程序的可读性为了提高程序的可读性,可以在汇编语句后以分为了提高程序的可读性,可以在汇编语句后以分号号“;”;”为起始标志,加入注释。为起始标志,加入注释。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计汇编语言和操作系统(汇编语言和操作系统(dosdos)的接口)的接口计算机一旦启动成功,由计算

11、机一旦启动成功,由dosdos掌握掌握cpucpu的控制权。的控制权。应用程序只是作为应用程序只是作为dosdos的子程序,应用程序执的子程序,应用程序执行完,必须返回行完,必须返回dosdos。上述程序的第。上述程序的第7 7行、第行、第9 9行第行第1111行、第行、第1717行和第行和第1818行就是为了完成此行就是为了完成此功能而设计的。功能而设计的。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计(1 1)返回)返回dosdos的标准方法的标准方法例例4-14-1采用了此方法。具体程序设计方法如下:采用了此方法。具体程序设计方法如下: 将应用程序的主程序定义成一个将应

12、用程序的主程序定义成一个farfar过程(见过程(见上述程序的第上述程序的第7 7行和第行和第1818行),该过程的最后一行),该过程的最后一条指令为条指令为retret(见上述程序的第(见上述程序的第1717行);行); 在代码段的主程序的开始部分用在代码段的主程序的开始部分用3 3条指令,把条指令,把int 20hint 20h指令的段地址指令的段地址(cs=ds=es)(cs=ds=es)及偏移地址及偏移地址(0)(0)压入堆栈(见上述程序的第压入堆栈(见上述程序的第9 9行第行第1111行)。行)。这样,程序执行到主程序的最后一条指令这样,程序执行到主程序的最后一条指令retret时,

13、时,由于过程具有由于过程具有farfar属性,故堆栈内的两个字分别属性,故堆栈内的两个字分别弹出到弹出到ipip及及cscs,便执行,便执行int 20hint 20h指令,返回到指令,返回到dosdos。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计(2 2)用)用dosdos功能调用功能调用4ch4ch返回返回在用户程序中不定义过程段,删除上述程序在用户程序中不定义过程段,删除上述程序的第的第7 7行、第行、第9 9行第行第1111行和第行和第1818行指令,行指令,把原第把原第1717行的行的retret指令换成下面两条指令:指令换成下面两条指令:mov ah,4chm

14、ov ah,4chint 21hint 21hint 21hint 21h指令是指令是dosdos向用户提供服务程序的窗向用户提供服务程序的窗口。口。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4.1.34.1.3汇编语言的语句汇编语言的语句汇编语言的语句可以分为:汇编语言的语句可以分为:指令语句指令语句伪指令语句伪指令语句宏指令语句宏指令语句第第4 4章章 80868086汇编语言程序设计汇编语言程序设计1.1.指令语句指令语句指令语句是可执行语句,汇编后将产生目标代码指令语句是可执行语句,汇编后将产生目标代码,cpucpu根据这些目标代码执行并完成特定操作。根据这些目标

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

16、程序。伪指令语句可以告诉汇编程序哪些语句是属于一伪指令语句可以告诉汇编程序哪些语句是属于一个段、是什么类型的段、各段存入内存应如何组个段、是什么类型的段、各段存入内存应如何组装、给变量分配多少存储单元、给数字或表达式装、给变量分配多少存储单元、给数字或表达式命名等。命名等。伪指令语句的功能是由汇编程序汇编源程序时完伪指令语句的功能是由汇编程序汇编源程序时完成的,不是由成的,不是由cpucpu执行目标代码时实现的。执行目标代码时实现的。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计伪指令语句的格式为:伪指令语句的格式为: 符号名符号名 伪指令助记符伪指令助记符 操作数操作数 ;

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

18、指令助记符 操作数操作数 ; ;注释注释 第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4.4.汇编语句格式说明汇编语句格式说明(1 1)关于格式的几个组成部分)关于格式的几个组成部分汇编语句的格式中带中括号的部分是可选项。汇编语句的格式中带中括号的部分是可选项。各部分之间必须用空格(各部分之间必须用空格(spacespace)或水平制表符()或水平制表符(tabtab)隔开。)隔开。操作数项由一个或多个表达式组成,它为执行语操作数项由一个或多个表达式组成,它为执行语句所要求的操作提供需要的信息。句所要求的操作提供需要的信息。第第4 4章章 80868086汇编语言程序设计汇

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

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

21、命名规则 合法符号:字母(不分大小写)、数字及特合法符号:字母(不分大小写)、数字及特殊符号(殊符号(“?”?”,“”,“_”_”,“$”$”,“ ”)。)。 名字可以用除数字外所有的合法符号开头。名字可以用除数字外所有的合法符号开头。但如果是用到符号但如果是用到符号“ ” ”,那么这个符号必,那么这个符号必须是第一个字符。须是第一个字符。 名字的有效长度不超过名字的有效长度不超过3131个英文字符。个英文字符。 不能把保留字(如不能把保留字(如cpucpu的寄存器名、指令助的寄存器名、指令助记符等)用作名字。记符等)用作名字。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4

22、.4.汇编语句格式说明(续)汇编语句格式说明(续)(4 4)注释项)注释项 注释项用来说明一段程序、一条或几条指令注释项用来说明一段程序、一条或几条指令的功能,此项是可有可无的。但是,对于的功能,此项是可有可无的。但是,对于汇编语言源程序来说,注释项可以使程序汇编语言源程序来说,注释项可以使程序易于被读懂;而对编写程序的人来讲,注易于被读懂;而对编写程序的人来讲,注释项可以是一种释项可以是一种“备忘录备忘录”。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计注释编写举例注释编写举例例如,一般在循环程序的开始都有初始化程序,例如,一般在循环程序的开始都有初始化程序,置有关工作单元

23、的初值:置有关工作单元的初值: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 ; ;源数据区指针源数据区指针sisi置初值置初值mov di,0200h mov di,0200h ; ;目标数据区指针目标数据区指针didi置初值

24、置初值第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4.1.4 4.1.4 汇编语言的数据汇编语言的数据数据是汇编语言语句的重要组成部分。数据是汇编语言语句的重要组成部分。汇编语言能识别的数据有:汇编语言能识别的数据有:常量常量变量变量标号标号第第4 4章章 80868086汇编语言程序设计汇编语言程序设计1.1.常量常量常量是没有任何属性的纯数值数据,它的值常量是没有任何属性的纯数值数据,它的值在汇编期间和程序运行过程中不能改变。在汇编期间和程序运行过程中不能改变。汇编语言程序中的常量有:汇编语言程序中的常量有:数值常量数值常量字符常量字符常量符号常量符号常量第第4 4章章

25、 80868086汇编语言程序设计汇编语言程序设计(1 1)数值常量)数值常量在汇编程序中,数值常量可以用不同进制形式在汇编程序中,数值常量可以用不同进制形式表示。表示。二进制常量表示为以字母二进制常量表示为以字母b b(或(或b b)结尾的由数)结尾的由数字字0 0和和1 1组成的序列,例如,组成的序列,例如,01100101b01100101b。八进制常量表示为以字母八进制常量表示为以字母q q(或(或q q)或)或o o(或(或o o)结尾的由数字结尾的由数字0 07 7组成的序列,例如,组成的序列,例如,145q145q。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计

26、(1 1)数值常量(续)数值常量(续)十六进制常量表示为以字母十六进制常量表示为以字母h h(或(或h h)结尾的)结尾的由数字由数字0 09 9、字母、字母a af f(或(或a af f)组成的)组成的序列,例如,序列,例如,653ah653ah。十进制常量表示为以字母十进制常量表示为以字母d d(或(或d d)结尾的由)结尾的由数字数字0 09 9组成的序列。汇编语句中的数据组成的序列。汇编语句中的数据默认采用十进制表示形式,所以,采用十默认采用十进制表示形式,所以,采用十进制数时,也可省略结尾的字母。例如,进制数时,也可省略结尾的字母。例如,101d101d或或100100。第第4 4

27、章章 80868086汇编语言程序设计汇编语言程序设计1.1.常量(续)常量(续)(2 2)字符常量)字符常量字符常量是用单引号括起来的单个字符,如字符常量是用单引号括起来的单个字符,如aa、11等。字符常量在操作中体现出的等。字符常量在操作中体现出的值是其值是其asciiascii码值。码值。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计1.1.常量(续)常量(续)(3 3)符号常量)符号常量符号常量是用名字来标识的常量。以符号常符号常量是用名字来标识的常量。以符号常量代替常量,可以增加程序的可读性及通量代替常量,可以增加程序的可读性及通用性。用性。第第4 4章章 8086

28、8086汇编语言程序设计汇编语言程序设计2.2.变量变量变量是存储单元的符号地址,这类存储单元变量是存储单元的符号地址,这类存储单元的内容可以在程序运行期间被修改。变量的内容可以在程序运行期间被修改。变量以变量名的形式出现在程序中。同一个汇以变量名的形式出现在程序中。同一个汇编程序中,变量只能定义一次。变量具有编程序中,变量只能定义一次。变量具有以下以下3 3种属性。种属性。段属性:变量所在段的段地址。段属性:变量所在段的段地址。偏移属性:变量所在段的段内偏移地址。偏移属性:变量所在段的段内偏移地址。类型属性:变量占用存储单元的字节数,如类型属性:变量占用存储单元的字节数,如表表5-15-1所

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

30、的字节数说 明byte11字节型word22字型dword44双字型qword88四字型tbyte1010五字型标号near-1近标号(段内调用)far-2远标号(段间调用)第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4.1.54.1.5汇编语言的操作符与表达式汇编语言的操作符与表达式操作项是汇编语句中的一个重要组成部分,它操作项是汇编语句中的一个重要组成部分,它可以由常量(常数)、寄存器、标号、变量可以由常量(常数)、寄存器、标号、变量或表达式组成。或表达式组成。表达式是常量、寄存器、标号、变量与一些操表达式是常量、寄存器、标号、变量与一些操作符相组合的序列,分为数值表达

31、式和地址作符相组合的序列,分为数值表达式和地址表达式两种。表达式两种。汇编程序在汇编时按照一定的规则对表达式进汇编程序在汇编时按照一定的规则对表达式进行计算后可以得到一个数值或地址值。行计算后可以得到一个数值或地址值。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计1.1.算术操作符算术操作符算术操作符有:加(算术操作符有:加(+ +)、减()、减(- -)、乘()、乘(* *)、除(、除(/ /)和取余()和取余(modmod)。)。参加运算的数和运算的结果都是整数。参加运算的数和运算的结果都是整数。除法运算的结果是商的整数部分。除法运算的结果是商的整数部分。取余操作的结果是

32、两个整数相除后得到的余取余操作的结果是两个整数相除后得到的余数。数。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计算术操作符可以用于数值表达式或地址表达式。算术操作符可以用于数值表达式或地址表达式。当它用于地址表达式时,仅当其结果有明确的物当它用于地址表达式时,仅当其结果有明确的物理意义时,才是有效的结果。理意义时,才是有效的结果。例如,将两个地址相乘或相除都是没有意义的。例如,将两个地址相乘或相除都是没有意义的。加、减操作可以用于地址表达式,但也要注意其加、减操作可以用于地址表达式,但也要注意其物理意义。物理意义。例如,将两个地址相加或相减也是没有意义的。例如,将两个地址相

33、加或相减也是没有意义的。有意义的用法是地址值与一个偏移量相加或相减有意义的用法是地址值与一个偏移量相加或相减,可以得到一个新的地址值。,可以得到一个新的地址值。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计例如:例如: mov ax,2+3mov ax,2+3* *5 5; ;汇编后汇编后, ,表达式表达式2+32+3* *5 5被数值被数值1717代替代替mov bl,num+1 mov bl,num+1 ; ;表达式表达式num+1num+1是汇编时由汇编程序计算的,是汇编时由汇编程序计算的,不是由不是由cpucpu在执行该指令时才计算的。汇编在执行该指令时才计算的。汇编

34、后得到的目标程序中,表达式被它的值代后得到的目标程序中,表达式被它的值代替。替。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计2.2.逻辑操作符逻辑操作符逻辑操作符有:与(逻辑操作符有:与(andand)、或()、或(oror)、非()、非(notnot)和异或()和异或(xorxor)。)。逻辑操作按位进行,只适用于数值表达式。逻辑操作按位进行,只适用于数值表达式。逻辑操作符指定汇编程序对操作符前后的逻辑操作符指定汇编程序对操作符前后的两个数值或数值表达式进行指定的逻辑操两个数值或数值表达式进行指定的逻辑操作。要注意区分逻辑操作符与逻辑指令。作。要注意区分逻辑操作符与逻辑指

35、令。例如:例如: and dx,port and 0fhand dx,port and 0fh第第4 4章章 80868086汇编语言程序设计汇编语言程序设计3.3.移位操作符移位操作符移位操作符有两个:移位操作符有两个:shlshl和和shrshr,按位操作,按位操作,只适用于数值表达式。只适用于数值表达式。移位操作符的用法如下:移位操作符的用法如下:数值表达式数值表达式 shl shl 移动位数移动位数n n数值表达式数值表达式 shr shr 移动位数移动位数n n汇编程序将把数字表达式的值左移(汇编程序将把数字表达式的值左移(shlshl)或)或右移(右移(shrshr)n n位。当位

36、。当n15n15时,结果为时,结果为0 0。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4.4.关系操作符关系操作符关系操作符用于数的比较,有相等(关系操作符用于数的比较,有相等(eqeq)、不相)、不相等(等(nene)、小于()、小于(ltlt)、大于()、大于(gtgt)、小于等于)、小于等于(lele)和大于等于()和大于等于(gege)6 6种。关系操作符两边种。关系操作符两边的操作数必须是两个数值或同一段中两个存储单的操作数必须是两个数值或同一段中两个存储单元地址。关系操作的运算结果是逻辑值,当结果元地址。关系操作的运算结果是逻辑值,当结果为真时,表示为为真时,

37、表示为0ffffh0ffffh;当结果为假时,则表示;当结果为假时,则表示为为0 0。例如:例如:mov ax,4 eq 3 mov ax,4 eq 3 该指令汇编后的结果为:该指令汇编后的结果为:mov axmov ax,0 0第第4 4章章 80868086汇编语言程序设计汇编语言程序设计5.5.数值回送操作符数值回送操作符数值回送操作符的运算对象必须是存储器操作数数值回送操作符的运算对象必须是存储器操作数,即变量或标号。操作符加在运算对象的前面,即变量或标号。操作符加在运算对象的前面,返回一个数值。返回一个数值。操 作 符功 能用 法seg返回变量或标号的段地址seg变量或标号offse

38、t返回变量或标号的偏移地址offset变量或标号type返回变量的或标号的类型值(见表5-1) type变量或标号length返回变量所定义的元素的个数length变量或标号size返回变量所占的字节数size变量或标号第第4 4章章 80868086汇编语言程序设计汇编语言程序设计6.6.属性操作符属性操作符属性操作符用来建立或改变已定义变量、内属性操作符用来建立或改变已定义变量、内存操作数或标号的类型属性。存操作数或标号的类型属性。属性操作符有:属性操作符有:ptrptr段操作符段操作符thisthisshortshorthighhighlowlow等。等。第第4 4章章 80868086

39、汇编语言程序设计汇编语言程序设计(1 1)ptrptr格式:类型格式:类型 ptr ptr 变量变量 / / 标号标号返回值:具有规定类型属性的变量或标号。返回值:具有规定类型属性的变量或标号。典型应用:典型应用: 重新指定变量类型重新指定变量类型例如,有如下数据定义:例如,有如下数据定义: bufw dw 1234h,5678hbufw dw 1234h,5678h则下列指令合法:则下列指令合法:mov ax,bufwmov ax,bufwmov al,byte ptr bufw mov al,byte ptr bufw ; ;临时改变临时改变bufwbufw的字属性为字节属性的字属性为字节

40、属性第第4 4章章 80868086汇编语言程序设计汇编语言程序设计ptrptr典型应用(续)典型应用(续) 指定内存操作数的类型指定内存操作数的类型在寄存器间接寻址、寄存器相对寻址、基址变在寄存器间接寻址、寄存器相对寻址、基址变址寻址或相对基址变址寻址等内存寻址方式址寻址或相对基址变址寻址等内存寻址方式中,往往很难判断出操作数的类型属性,例中,往往很难判断出操作数的类型属性,例如:如:inc bxinc bx。此时,汇编将指示出错,为。此时,汇编将指示出错,为了避免出错,应对操作数类型加以说明,如了避免出错,应对操作数类型加以说明,如下所示:下所示:inc byte ptr bx inc b

41、yte ptr bx ; ;字节属性字节属性inc word ptr bxsi inc word ptr bxsi ; ;字属性字属性第第4 4章章 80868086汇编语言程序设计汇编语言程序设计ptrptr典型应用(续)典型应用(续) 与与equequ一起定义一个新的变量一起定义一个新的变量格式:变量或标号格式:变量或标号 equ equ 类型类型 ptrptr说明:说明:新变量或新标号的段属性、偏移属性与前一新变量或新标号的段属性、偏移属性与前一个已定义的变量或标号段属性、偏移属性个已定义的变量或标号段属性、偏移属性相同。相同。第第4 4章章 80868086汇编语言程序设计汇编语言程序

42、设计例如:例如:bufw dw 1234h,5678h bufw dw 1234h,5678h bufb equ byte ptr bufw bufb equ byte ptr bufw ;bufb;bufb的类型属性为字节的类型属性为字节 ; ;其他属性与其他属性与bufwbufw一样一样进行字存取时,可用变量进行字存取时,可用变量bufwbufw,如:如:mov ax,bufwmov ax,bufw进行字节存取时,可用变量进行字节存取时,可用变量bufbbufb,如:如:mov al,bufbmov al,bufb第第4 4章章 80868086汇编语言程序设计汇编语言程序设计(2 2)段

43、操作符)段操作符用来指定一个标号、变量或地址表达式的段用来指定一个标号、变量或地址表达式的段属性。属性。例如:例如:mov ax,es:bxmov ax,es:bx; ;指定数据在指定数据在eses段段第第4 4章章 80868086汇编语言程序设计汇编语言程序设计(3 3)thisthis格式:格式:this this 类型类型可以像可以像ptrptr一样建立一个指定类型的地址操作一样建立一个指定类型的地址操作数,该操作数的段地址和偏移地址与下一数,该操作数的段地址和偏移地址与下一个存储单元地址相同。例如:个存储单元地址相同。例如:bufb equ this bytebufb equ thi

44、s bytebufw dw 1234h,5678hbufw dw 1234h,5678h此时此时bufbbufb的偏移地址和的偏移地址和bufwbufw完全相同,但它完全相同,但它是字节类型的;而是字节类型的;而bufwbufw则是字类型的。则是字类型的。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计(4 4)shortshort格式:格式:short short 标号标号返回值:偏移量在返回值:偏移量在-128-128+127+127范围内的标号范围内的标号。用于用于jmpjmp指令。指令。即:即:jmp short jmp short 标号,指明是短转移。标号,指明是短转

45、移。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计(5 5)字节分离操作符)字节分离操作符highhigh、lowlow格式:格式:high high 表达式表达式 low low 表达式表达式 返回值:表达式值的高字节或低字节。返回值:表达式值的高字节或低字节。例如:例如: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第第4 4章章 80868086汇编语

46、言程序设计汇编语言程序设计优 先 级操 作 符高低(),length,size,width,maskseg、offset、type、ptr、this、段操作符low、high*、/、mod、shr、shl +、eq、ne、lt、gt、lt、le、ge notandor、xorshort第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4.24.2汇编语言的伪指令汇编语言的伪指令伪指令从表示形式及其在语句中所处的位置伪指令从表示形式及其在语句中所处的位置,与,与cpucpu指令相似,但二者有着重要的区别指令相似,但二者有着重要的区别。首先,伪指令不像机器指令那样是在程序运首先,伪指

47、令不像机器指令那样是在程序运行期间由行期间由cpucpu来执行的,它是在汇编程序对来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作;源程序汇编期间由汇编程序处理的操作;其次,汇编以后,每条其次,汇编以后,每条cpucpu指令产生一一对应指令产生一一对应的目标代码,而伪指令则不产生与之相应的目标代码,而伪指令则不产生与之相应的目标代码。的目标代码。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4.2.14.2.1变量定义伪指令变量定义伪指令变量定义伪指令用来为数据分配存储单元,建立变量定义伪指令用来为数据分配存储单元,建立变量与存储单元之间的联系。变量与存储单元之间

48、的联系。语句格式为:语句格式为: 变量名变量名 数据定义伪指令数据定义伪指令 操作数操作数1,1,操作数操作数2 2 变量定义伪指令有:变量定义伪指令有:dbdb、dwdw、dddd、dqdq、dtdt,分别用来定义类型属性为,分别用来定义类型属性为字节字节(db)(db)、字、字(dw)(dw)、双字、双字(dd)(dd)、4 4字字(dq)(dq)、5 5字字(dt)(dt)的变量。的变量。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计变量定义伪指令的操作数可以是:变量定义伪指令的操作数可以是:数字常量,允许以十进制、八进制、十六进数字常量,允许以十进制、八进制、十六进制

49、、二进制等形式表示,默认形式是十进制、二进制等形式表示,默认形式是十进制;制;字符常量,用单引号括起来,被存储的是该字符常量,用单引号括起来,被存储的是该字符的字符的asciiascii码;码;符号常量,必须是预先已定义的符号;符号常量,必须是预先已定义的符号;符号符号“?”?”,表示预留空间,内容不定。,表示预留空间,内容不定。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计dupdup,表示内容重复的数据。,表示内容重复的数据。dupdup用法的具体形式为:用法的具体形式为:次数次数 dup ( dup ( 被重复内容被重复内容) )例如,数据定义如下,例如,数据定义如下,

50、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)第第4 4章章 80868086汇编语言程序设计汇编语言程序设计数据定义存储区示意数据定义存储区示意db定义的数据,每个数据元素占据定义的数据,每个数据元素占据1个个存储单元;存储单元; dw定义的数据,每个数据元素占据定义的数据,每个数据元素占据2个存储单元;个存储单元;字数据存储时,低字节存储在低地址单字数据存储时,低字节存储在低地址单元中,高字节存储在

51、高地址单元中;元中,高字节存储在高地址单元中;字符在内存中存放的是它的字符在内存中存放的是它的ascii码,码,“a”的的ascii码为码为41h;dup可以嵌套使用。可以嵌套使用。符号地址具有以下关系:符号地址具有以下关系:data_w=data_b+2data_s=data_w+2=data_b+4 第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4.2.24.2.2符号定义伪指令符号定义伪指令符号包括汇编语言的变量名、标号名、过程符号包括汇编语言的变量名、标号名、过程名、寄存器名及指令助记符等。名、寄存器名及指令助记符等。常用符号定义伪指令有:常用符号定义伪指令有:equ

52、equ“=”“=”labellabel第第4 4章章 80868086汇编语言程序设计汇编语言程序设计1.equ1.equ伪指令伪指令格式:名字格式:名字 equ equ 表达式表达式表达式可以是一个常数、已定义的符号、数值表达表达式可以是一个常数、已定义的符号、数值表达式或地址表达式。式或地址表达式。功能:给表达式赋予一个名字。定义后,可用功能:给表达式赋予一个名字。定义后,可用名字代替表达式。在同一源程序中,一个名名字代替表达式。在同一源程序中,一个名字只能用字只能用equequ定义一次。定义一次。例如:例如:pix equ 64pix equ 64* *1024 ;1024 ;名字名字p

53、ixpix代表数值表达式的值代表数值表达式的值a equ 7a equ 7b equ a-2 b equ a-2 第第4 4章章 80868086汇编语言程序设计汇编语言程序设计2.2.等号(等号(= =)伪指令)伪指令格式:名字格式:名字 = = 表达式表达式功能:与功能:与equequ基本相同,区别是它可以对同一个基本相同,区别是它可以对同一个名字重新定义。名字重新定义。例如:例如:count = 10count = 10mov al,countmov al,countcount = 5count = 5第第4 4章章 80868086汇编语言程序设计汇编语言程序设计3. label3.

54、label伪指令伪指令格式:变量格式:变量/ /标号标号 label label 类型类型变量的类型有:变量的类型有:bytebyte、wordword、dworddword、dqdq、dtdt标号的类型有:标号的类型有:nearnear、farfar。功能:定义变量或标号的类型,而变量或标号的段功能:定义变量或标号的类型,而变量或标号的段属性和偏移属性由该语句所处的位置确定。属性和偏移属性由该语句所处的位置确定。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计labellabel使用举例使用举例例如,利用例如,利用labellabel使同一个数据区有一个以上使同一个数据区有一

55、个以上的类型及相关属性。的类型及相关属性。areaw label word areaw label word ;areaw;areaw与与areabareab指向相同的数据区指向相同的数据区, , ;areaw ;areaw类型为字类型为字,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

56、第第4 4章章 80868086汇编语言程序设计汇编语言程序设计4.2.34.2.3段定义伪指令段定义伪指令汇编源程序由段组成,每段大小不超过汇编源程序由段组成,每段大小不超过64kb64kb,不同的段存放不同类型的数据。,不同的段存放不同类型的数据。段定义伪指令用于汇编源程序中段的定义。段定义伪指令用于汇编源程序中段的定义。相关指令有:相关指令有:segmentsegment、endsends、assumeassume。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计1.1.段定义伪指令段定义伪指令segmentsegment、endsends格式:格式:段名段名 segme

57、nt segment 定位类型定位类型 组合类型组合类型 类别名类别名 段名段名 endsends功能:定义一个逻辑段。功能:定义一个逻辑段。segmentsegment和和endsends必须成对使用,它们前面的段名必须成对使用,它们前面的段名必须是相同的。必须是相同的。segmentsegment后面中括号中的内容为可选项,告诉汇后面中括号中的内容为可选项,告诉汇编程序和连接程序如何确定段的边界、如何连编程序和连接程序如何确定段的边界、如何连接几个程序模块。接几个程序模块。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计(1 1)定位类型)定位类型定位类型说明段的起始地址应

58、有怎样的边界值,有定位类型说明段的起始地址应有怎样的边界值,有以下以下4 4种。种。 byte byte:表示本段可以从任何地址开始,这种类:表示本段可以从任何地址开始,这种类型段间不留空隙,存储器利用率高。型段间不留空隙,存储器利用率高。 word word:表示本段的起始地址必须为偶地址。:表示本段的起始地址必须为偶地址。 para para:表示本段从节边界开始。:表示本段从节边界开始。80868086规定每规定每1616字节为字节为1 1小节。所以,定位类型为小节。所以,定位类型为parapara的段,其起的段,其起始地址必为始地址必为1616的倍数。这种类型简单,但是段间的倍数。这种

59、类型简单,但是段间往往有空隙。定位类型的默认值为往往有空隙。定位类型的默认值为parapara。 page page:表示本段从页边界开始。:表示本段从页边界开始。80868086规定每规定每256256字节为字节为1 1页,所以,定位类型为页,所以,定位类型为pagepage的段,其起始的段,其起始地址必为地址必为256256的倍数。的倍数。第第4 4章章 80868086汇编语言程序设计汇编语言程序设计(2 2)组合类型)组合类型组合类型说明链接不同模块中的同名段时采用的方组合类型说明链接不同模块中的同名段时采用的方式,有以下式,有以下6 6种。种。 public public:本段与其他

60、模块中说明为:本段与其他模块中说明为publicpublic的同的同名同类别的段链接起来,公用一个段地址,形成名同类别的段链接起来,公用一个段地址,形成一个新的逻辑段,所以偏移量调整为相对于新逻一个新的逻辑段,所以偏移量调整为相对于新逻辑段起始地址的值。辑段起始地址的值。 stack stack:本段与其他模块中说明为:本段与其他模块中说明为stackstack的同名的同名的堆栈段链接起来,公用一个段地址,形成一个的堆栈段链接起来,公用一个段地址,形成一个新的逻辑段。同时,系统自动初始化新的逻辑段。同时,系统自动初始化ssss及及spsp。第第4 4章章 80868086汇编语言程序设计汇编语

温馨提示

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

评论

0/150

提交评论