汇编第4章-常用数据处理技术.ppt
《汇编第4章-常用数据处理技术.ppt》由会员分享,可在线阅读,更多相关《汇编第4章-常用数据处理技术.ppt(185页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章 v所谓常用处理技术,是指常用指令、所谓常用处理技术,是指常用指令、常用伪指令、变量定义和使用以及编程常用伪指令、变量定义和使用以及编程应用的技术。应用的技术。v这种编程应用主要是针对一些数值型这种编程应用主要是针对一些数值型数据的运算和非数值型数据的处理,而数据的运算和非数值型数据的处理,而这种处理常常是大量的、广泛的和带有这种处理常常是大量的、广泛的和带有技巧性的。技巧性的。v汇编语言程序的语句除指令语句外,汇编语言程序的语句除指令语句外,还有伪指令语句。还有伪指令语句。v伪指令语句又称为说明语句或指示性伪指令语句又称为说明语句或指示性语句。它不同于指令语句,它不是直接语句。它
2、不同于指令语句,它不是直接命令命令CPUCPU去执行某一操作,而是命令汇去执行某一操作,而是命令汇编程序应当如何生成目标代码编程序应当如何生成目标代码。v例如控制汇编以实现数据定义、存储例如控制汇编以实现数据定义、存储器分配、源程序开始和指示程序结束等器分配、源程序开始和指示程序结束等功能。功能。v伪指令无相应的目标代码,因此也称伪指令无相应的目标代码,因此也称为伪操作。伪指令,特别是数据定义为伪操作。伪指令,特别是数据定义伪指令,在源程序设计中是必不可少伪指令,在源程序设计中是必不可少的。的。v本章主要介绍变量、伪指令和常用数本章主要介绍变量、伪指令和常用数据处理程序。最后通过大量案例说明据
3、处理程序。最后通过大量案例说明其应用。其应用。4.14.1 变量变量4.2 4.2 常用伪指令常用伪指令4.3 4.3 常用数据处理指令常用数据处理指令4.4 4.4 字符串输入输出方法字符串输入输出方法习习 题题 4 4v1 1变量名变量名v变量的名字是它的外包装,是用来区变量的名字是它的外包装,是用来区分不同的存储区域的标识符号,是一分不同的存储区域的标识符号,是一种标识符。种标识符。4.1 4.1 变量变量4.1.1 4.1.1 变量定义变量定义v不同的语言对标识符命名的规定有所不同的语言对标识符命名的规定有所不同,但大体上都把不同,但大体上都把“以字母开头的以字母开头的字符数字串字符数
4、字串”作为基本规定,当然也作为基本规定,当然也可以用可以用“_”“_”或或“”“”开头开头 。v80868086的汇编语言还允许用下面的特殊的汇编语言还允许用下面的特殊符号作为标识符的构成符号:符号作为标识符的构成符号:?、$、%和和_ _。v标识符是一个或多个符号构成的符标识符是一个或多个符号构成的符号串,汇编语言对标识符命名的完号串,汇编语言对标识符命名的完整规定是:整规定是:v(1 1)可用符号包括字母、数字和特)可用符号包括字母、数字和特殊符号殊符号“?”“?”、“”“”、“$”“$”、“%”“%”、“_”“_”。v(2 2)不允许用数字作为第一个符号。)不允许用数字作为第一个符号。v
5、(3 3)名字的长度由)名字的长度由1 13131个字符组成,个字符组成,但一般不超过但一般不超过1010个符号。个符号。v(4 4)最少由一个符号构成,可以是字)最少由一个符号构成,可以是字母、母、“_”“_”或或“”“”。v(5 5)汇编语言不区分字母的大小写。)汇编语言不区分字母的大小写。v2.2.变量定义的方法变量定义的方法v变量的实质是存放数据的内存区域,变量的实质是存放数据的内存区域,所谓变量定义就是告诉汇编程序,在所谓变量定义就是告诉汇编程序,在翻译时从某个地址起预留一定数量的翻译时从某个地址起预留一定数量的内存空间,并在其中填上初值,还要内存空间,并在其中填上初值,还要建立变量
6、与地址间的对应关系。建立变量与地址间的对应关系。v所以变量定义是伪指令而不是指令。所以变量定义是伪指令而不是指令。v【格式】变量定义的基本格式是:【格式】变量定义的基本格式是:变量名变量名 类型类型 初值表初值表 v【说明】【说明】v 类型部分只能出现类型部分只能出现DBDB、DWDW、DDDD、DQDQ、DTDT这几种内部保留字,用以说明这几种内部保留字,用以说明初值表中的每个数据占几个字节,对初值表中的每个数据占几个字节,对应关系如下:应关系如下:v DB DB 字节型字节型,每个数据项占,每个数据项占1 1字节;字节;DW DW 字型字型,每个数据项占,每个数据项占2 2字字节;节;DD
7、 DD 双字型双字型,每个数据项占,每个数据项占4 4字节;字节;DQ DQ与与DTDT很少用,不作说明。很少用,不作说明。v初值表是用逗号分隔的若干个数据初值表是用逗号分隔的若干个数据项,每个数据项的值是变量的一个初项,每个数据项的值是变量的一个初值项,占据值项,占据“类型类型”规定的字节数,规定的字节数,所以初值表一方面说明变量的初值是所以初值表一方面说明变量的初值是多少,另一方面也指明了变量占多少多少,另一方面也指明了变量占多少字节的存储空间。字节的存储空间。v 对于对于DWDW和和DDDD类型,每个数据项的存类型,每个数据项的存储遵照储遵照“高字节在高地址,低字节在高字节在高地址,低字
8、节在低地址低地址”的原则。的原则。v(4 4)每个数据项的书写方法可以是)每个数据项的书写方法可以是任何数制的整数或者由整数构成的计任何数制的整数或者由整数构成的计算式,也可以是字符,如果用整数书算式,也可以是字符,如果用整数书写,可以是无符号数,也可以是带符写,可以是无符号数,也可以是带符号数。号数。v(5 5)当类型是)当类型是DBDB时,初值表可以是时,初值表可以是任意长度的字符串,而任意长度的字符串,而DWDW类型只允许类型只允许长度不超过长度不超过 2 2的字符串。的字符串。v(6 6)如果初值表需要填写若干个相同)如果初值表需要填写若干个相同的值,可以用下面的形式表示把一个值的值,
9、可以用下面的形式表示把一个值重复若干次:重复若干次:重复次数重复次数 DUP(DUP(数据项数据项)v(7 7)初值表中可以用问号)初值表中可以用问号“?”作为作为初值项,含义是用户程序不设定初值,初值项,含义是用户程序不设定初值,而由汇编程序安排,对此汇编程序将在而由汇编程序安排,对此汇编程序将在翻译时把这类初值项都以数值翻译时把这类初值项都以数值0 0填充。填充。v(8 8)任何段中都可以写变量定义,也)任何段中都可以写变量定义,也允许把指令与变量定义写在一个段内,允许把指令与变量定义写在一个段内,但通常是把程序所用到的所有变量集但通常是把程序所用到的所有变量集中在一个段内进行定义,而把指
10、令写中在一个段内进行定义,而把指令写在另一个段中。在另一个段中。v习惯上把定义变量的段称为数据段,习惯上把定义变量的段称为数据段,写指令的段称为代码段或指令段。写指令的段称为代码段或指令段。v【例【例4-14-1】说明说明datadata段中定义的各变段中定义的各变量的类型及初值情况量的类型及初值情况,变量占据的内变量占据的内存字节数。存字节数。vdata SEGMENTdata SEGMENTv d1 DB 1 d1 DB 1v d2 DW 1234H d2 DW 1234Hv d3 DD 12345678H d3 DD 12345678Hv d4 DB 1,2,3 d4 DB 1,2,3
11、v d5 DB 123 d5 DB 123v d6 DB 30 DUP(35H)d6 DB 30 DUP(35H)v d7 DB 1,3 DUP(2),3,-3,1001B d7 DB 1,3 DUP(2),3,-3,1001Bv d8 DB 1,2,3,4,5,6 d8 DB 1,2,3,4,5,6v DB 7,8,9,10 DB 7,8,9,10v d9 DW 12,AB d9 DW 12,ABv d10 DW 3-5 d10 DW 3-5vdata ENDSdata ENDSv3.3.变量的三个基本属性变量的三个基本属性v任何变量表面上都以一个标识符的任何变量表面上都以一个标识符的形式出
12、现,也就是它的名字,每个形式出现,也就是它的名字,每个变量都有三个数据与之相对应,这变量都有三个数据与之相对应,这就是变量的三属性。就是变量的三属性。v变量的三属性变量的三属性:段属性、偏移量属性段属性、偏移量属性和类型属性和类型属性v1 1)段属性)段属性 v 变量的段属性也就是变量所在段的段变量的段属性也就是变量所在段的段地址。变量定义必须写在一个段的范地址。变量定义必须写在一个段的范围之内,每个段在程序进入内存时都围之内,每个段在程序进入内存时都被操作系统安排一个确定的段地址。被操作系统安排一个确定的段地址。v在编写程序时可以用段的名字指出某在编写程序时可以用段的名字指出某处要使用段地址
13、,而这个段中的所有处要使用段地址,而这个段中的所有变量都统一地以这个段地址作为逻辑变量都统一地以这个段地址作为逻辑地址中的段部分。地址中的段部分。v如果在编写程序时需要使用某个变如果在编写程序时需要使用某个变量的段地址,一种方法是用该变量量的段地址,一种方法是用该变量所在段的段名。比如,对例所在段的段名。比如,对例4-14-1中中定义的变量定义的变量d1d1,如果要把它的段地,如果要把它的段地址取到寄存器址取到寄存器AXAX中,可以写作:中,可以写作:v MOV AX,dataMOV AX,data v取段地址的另一种方法是在变量名的取段地址的另一种方法是在变量名的前面加上保留字前面加上保留字
14、SEGSEG。比如,下面的。比如,下面的写法与上面指令的功能完全相同:写法与上面指令的功能完全相同:v MOV AX,SEG d1MOV AX,SEG d1 v保留字保留字SEGSEG是伪指令,用于告诉汇编程是伪指令,用于告诉汇编程序,上述指令的源操作数是变量序,上述指令的源操作数是变量d1d1所在所在段的段地址,而不是变量段的段地址,而不是变量d1d1中存放的数中存放的数据。这两条指令中的源操作数都是立即据。这两条指令中的源操作数都是立即寻址方式,操作数在指令当中。寻址方式,操作数在指令当中。v这与指令这与指令“MOV AX,d1”“MOV AX,d1”有着本质差异,有着本质差异,后者的源操
15、作数是直接寻址方式,操作后者的源操作数是直接寻址方式,操作数在内存当中,是数在内存当中,是“MOV AX,d1”“MOV AX,d1”的的变形。变形。v2 2)偏移量属性)偏移量属性 v变量的偏移量属性也就是变量所变量的偏移量属性也就是变量所在段的段内偏移地址。在第在段的段内偏移地址。在第2 2章中章中已经说明,偏移地址表示段内某一已经说明,偏移地址表示段内某一位置到段起始地址的距离,偏移地位置到段起始地址的距离,偏移地址为址为0 0表示就在段的起始处。表示就在段的起始处。v一个段中可以定义多个变量,每个一个段中可以定义多个变量,每个变量占据一定的内存空间,到段起变量占据一定的内存空间,到段起
16、点的距离也就不一样,所以一个段点的距离也就不一样,所以一个段内的各个变量都具有不同的偏移地内的各个变量都具有不同的偏移地址。址。v在编写程序时,指令中使用某变量在编写程序时,指令中使用某变量就是按照它的偏移地址到所在段中就是按照它的偏移地址到所在段中取出数据,或把数据存到相应内存。取出数据,或把数据存到相应内存。v如果在编写程序时需要使用变量的偏如果在编写程序时需要使用变量的偏移地址,一种方法是在变量名的前面移地址,一种方法是在变量名的前面加上保留字加上保留字OFFSETOFFSET。比如,把例。比如,把例4-14-1中中的变量的变量d1d1的偏移地址取到寄存器的偏移地址取到寄存器BXBX中,
17、中,写作:写作:v MOV BX,OFFSET d1MOV BX,OFFSET d1v取偏移地址的另一种方法是用汇编语取偏移地址的另一种方法是用汇编语言中的一条专用指令。言中的一条专用指令。v【指令格式】【指令格式】LEA D,S LEA D,S v【功能】把源操作数【功能】把源操作数S S的偏移地址取到的偏移地址取到目的操作数目的操作数D D中。中。v【说明】【说明】v(1 1)这是一条数据传送类指令,不影)这是一条数据传送类指令,不影响标志位。响标志位。v(2 2)该指令专用于取源操作数的偏移)该指令专用于取源操作数的偏移地址,所以源操作数地址,所以源操作数S S一定是内存型寻一定是内存型
18、寻址方式,可以是内存型操作数址方式,可以是内存型操作数5 5种寻址种寻址方式中的任何一种。方式中的任何一种。v(3 3)当)当S S是变量名形式的直接寻址方是变量名形式的直接寻址方式时,变量名两边的方括号可以省略。式时,变量名两边的方括号可以省略。v(4 4)目的操作数)目的操作数D D一定是寄存器型,一定是寄存器型,且必须是且必须是1616位的字型通用寄存器,不能位的字型通用寄存器,不能是段寄存器。是段寄存器。vLEALEA指令专门用于取偏移地址,而指令专门用于取偏移地址,而MOVMOV指令中把变量名字的前面加上伪指令指令中把变量名字的前面加上伪指令OFFSETOFFSET作为源操作数,也可
19、以取出偏作为源操作数,也可以取出偏移地址。移地址。v这两种取偏移地址的方法在很多时候这两种取偏移地址的方法在很多时候可以相互替代,但它们也有一些不同可以相互替代,但它们也有一些不同的地方,有必要把两者进行对比:的地方,有必要把两者进行对比:v寻址方式不同。用寻址方式不同。用OFFSETOFFSET后接变量后接变量名的形式出现的操作数是立即寻址方名的形式出现的操作数是立即寻址方式,式,LEALEA指令中的源操作数是内存型寻指令中的源操作数是内存型寻址方式。址方式。v下面两条指令都可以把例下面两条指令都可以把例4-14-1中的变量中的变量d1d1的偏移地址取到寄存器的偏移地址取到寄存器BXBX中,
20、执行中,执行效果是一样的,可以相互代换。效果是一样的,可以相互代换。v MOV BX,OFFSET d1MOV BX,OFFSET d1v LEA BX,d1 LEA BX,d1 vLEALEA指令在功能上比指令在功能上比OFFSETOFFSET更强。更强。通过例通过例4-24-2中的几条语句的语法正误中的几条语句的语法正误对比,可以准确地掌握两者的差别。对比,可以准确地掌握两者的差别。v【例【例4-24-2】设】设bufbuf是一个变量,偏移地是一个变量,偏移地址是址是10H10H,BXBX1000H1000H,SISI200H200H,判,判断下列各语句的正确性,对正确的指断下列各语句的正
21、确性,对正确的指令说明其功能。令说明其功能。v(1 1)MOV AX,OFFSET bufMOV AX,OFFSET bufv(1 1)正确,常规用法,把)正确,常规用法,把bufbuf的偏移的偏移地址地址10H10H作为立即数送到作为立即数送到AXAX中。中。v(2 2)MOV AX,OFFSET buf+3MOV AX,OFFSET buf+3v(2 2)正确,把)正确,把“OFFSET buf”“OFFSET buf”作为作为立即数,是立即数,是10H10H,与另,与另 一个立即数一个立即数3 3相相加,结果加,结果13H13H送到送到 AX AX中。中。v(3 3)MOV AX,OFF
22、SET BXMOV AX,OFFSET BXv(3 3)错误,应该写作)错误,应该写作MOV AX,BXMOV AX,BX。v(4 4)MOV AX,OFFSET BX+3MOV AX,OFFSET BX+3v(4 4)错误,应该先用)错误,应该先用MOVMOV指令把指令把BXBX的的值送到值送到AXAX中,再用中,再用ADDADD指令把指令把AXAX的值加的值加3 3。v(5 5)MOV AX,OFFSET bufBXMOV AX,OFFSET bufBXv(5 5)正确,把)正确,把“OFFSET buf”“OFFSET buf”作为作为立即数看待,是立即数看待,是10H10H,源操作数是
23、把,源操作数是把BXBX的值加上立即数的值加上立即数10H10H,得到,得到1010H1010H,再,再以以1010H1010H为偏移地址,与为偏移地址,与BXBX对应的缺省对应的缺省段寄存器段寄存器DSDS一起构成逻辑地址,到内一起构成逻辑地址,到内存中寻找操作数。该指令汇编的结果存中寻找操作数。该指令汇编的结果相当于相当于MOV AX,BX+10HMOV AX,BX+10H。v(6 6)MOV AX,OFFSET MOV AX,OFFSET bufBXSIbufBXSIv(6 6)正确,把)正确,把“OFFSET buf”“OFFSET buf”作为立作为立即数看待,是即数看待,是10H1
24、0H,该指令相当于:,该指令相当于:MOV AX,BX+SI+10HMOV AX,BX+SI+10H。v(7 7)LEA AX,bufLEA AX,bufv(7 7)正确,常规用法,把)正确,常规用法,把bufbuf的偏移地的偏移地址址10H10H送到送到AXAX中。中。v(8 8)LEA AX,bufLEA AX,bufv(8 8)正确,与()正确,与(7 7)的功能完全相)的功能完全相同,是两种不同的写法。同,是两种不同的写法。v(9 9)LEA AX,buf+3LEA AX,buf+3v(9 9)正确,计算出源操作数的偏移)正确,计算出源操作数的偏移地址地址13H13H,送到,送到AXA
25、X中。中。v(1010)LEA AX,BX+bufLEA AX,BX+bufv(1010)正确,计算出源操作数的偏移)正确,计算出源操作数的偏移地址地址1013H1013H,送到,送到AXAX中。中。v(1111)LEA AX,BX+3LEA AX,BX+3v(1111)正确,计算出源操作数的偏移)正确,计算出源操作数的偏移地址地址1003H1003H,送到,送到AXAX中。中。v(1212)LEA AX,BX+SILEA AX,BX+SIv(1212)正确,计算出源操作数的偏移)正确,计算出源操作数的偏移地址地址1200H1200H,送到,送到AXAX中。中。v(1313)LEA AX,BX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 常用 数据处理 技术
限制150内