资源描述
微机原理微机原理与与接口技接口技术第第第第4 4 4 4章章章章 汇编语汇编语言程序言程序言程序言程序设计设计广州医学院信息技术教研室本章本章内内容容汇编语言格式言格式1 1汇编语言基本言基本语法法2 2伪指令指令3 3系系统功能功能调用用5 5汇编语言程序言程序设计举例例6 6宏指令宏指令4 4广州医学院信息技术教研室MyProg.ASM 汇编程序汇编程序编辑程序编辑程序MyProg.OBJ连接程序连接程序MyProg.EXE汇编语言源程序汇编语言源程序汇编语言源程序汇编语言源程序:用汇编语言编写的程序用汇编语言编写的程序用汇编语言编写的程序用汇编语言编写的程序,或简称为或简称为或简称为或简称为源程序源程序源程序源程序。汇编程序汇编程序汇编程序汇编程序:将源程序翻译成机器语言的程序将源程序翻译成机器语言的程序将源程序翻译成机器语言的程序将源程序翻译成机器语言的程序目标程序:机器语言代码程序目标程序:机器语言代码程序目标程序:机器语言代码程序目标程序:机器语言代码程序连连连连接接接接程程程程序序序序:将将将将库库库库文文文文件件件件和和和和目目目目标标标标文文文文件件件件连连连连接接接接在在在在一一一一起起起起形形形形成成成成可可可可执执执执行行行行文文文文件的程序件的程序件的程序件的程序目前常用的汇编程序有宏汇编目前常用的汇编程序有宏汇编目前常用的汇编程序有宏汇编目前常用的汇编程序有宏汇编MASMMASMMASMMASM汇汇编编语语言言程程序序从从建建立立到到汇汇编编、连连接接形形成成可可执执行行程程序序的的整整个个过程如图所示过程如图所示:4.1 汇编语言程序格式言程序格式广州医学院信息技术教研室4.1 汇编语言程序格式言程序格式汇编源程序:汇编源程序:汇编源程序:汇编源程序:广州医学院信息技术教研室4.1 汇编语言程序格式言程序格式三、一般汇编语言程序的结构形式三、一般汇编语言程序的结构形式三、一般汇编语言程序的结构形式三、一般汇编语言程序的结构形式NAME1NAME1NAME1NAME1 SEGMENTSEGMENTSEGMENTSEGMENT;段的起始;段的起始;段的起始;段的起始 语句语句语句语句1 1 1 1 ;语句语句语句语句2 2 2 2 ;语句语句语句语句n n n n ;NAME1NAME1NAME1NAME1 ENDS ENDS ENDS ENDS ;段的结束;段的结束;段的结束;段的结束NAME2 NAME2 NAME2 NAME2 SEGMENT SEGMENT SEGMENT SEGMENT;段的起始;段的起始;段的起始;段的起始 语句语句语句语句1 1 1 1 ;语句语句语句语句2 2 2 2 ;语句语句语句语句mmmm ;NAME2NAME2NAME2NAME2 ENDS ENDS ENDS ENDS ;段的结束;段的结束;段的结束;段的结束ENDENDENDEND ;源程序结束;源程序结束;源程序结束;源程序结束mm条语句序列构成的语句体条语句序列构成的语句体条语句序列构成的语句体条语句序列构成的语句体n n条语句序列构成的语句体条语句序列构成的语句体条语句序列构成的语句体条语句序列构成的语句体广州医学院信息技术教研室4.1 汇编语言程序格式言程序格式8086 8086 8086 8086 汇编语言语句的分类汇编语言语句的分类汇编语言语句的分类汇编语言语句的分类 指令语句指令语句指令语句指令语句 伪指令语句伪指令语句伪指令语句伪指令语句 宏指令语句宏指令语句宏指令语句宏指令语句广州医学院信息技术教研室4.2 汇编语言基本言基本语法法4.2.0 4.2.0 4.2.0 4.2.0 汇编语言的格式汇编语言的格式汇编语言的格式汇编语言的格式4.2.1 4.2.1 4.2.1 4.2.1 常量、变量与标号常量、变量与标号常量、变量与标号常量、变量与标号4.2.2 4.2.2 4.2.2 4.2.2 运算符与表达式运算符与表达式运算符与表达式运算符与表达式广州医学院信息技术教研室4.2.0 汇编语言的格式言的格式由汇编语言编写的源程序是由许多语句由汇编语言编写的源程序是由许多语句由汇编语言编写的源程序是由许多语句由汇编语言编写的源程序是由许多语句(也可称为汇编指令也可称为汇编指令也可称为汇编指令也可称为汇编指令)组成的。每组成的。每组成的。每组成的。每个语句由个语句由个语句由个语句由14141414个部分组成,其格式是:个部分组成,其格式是:个部分组成,其格式是:个部分组成,其格式是:标号标号标号标号 指令助记符指令助记符指令助记符指令助记符 操作数操作数操作数操作数 ;注解;注解;注解;注解 标识符:给指令或某一存储单元地址所起的名字。可由下列字符组成:标识符:给指令或某一存储单元地址所起的名字。可由下列字符组成:标识符:给指令或某一存储单元地址所起的名字。可由下列字符组成:标识符:给指令或某一存储单元地址所起的名字。可由下列字符组成:字母:字母:字母:字母:A z A z A z A z;数字:数字:数字:数字:0 9 0 9 0 9 0 9;特殊字符:特殊字符:特殊字符:特殊字符:?、一、一、一、一、$。数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符最长为最长为最长为最长为31313131个字符。个字符。个字符。个字符。当标识符后跟冒号时,表示是当标识符后跟冒号时,表示是当标识符后跟冒号时,表示是当标识符后跟冒号时,表示是标号标号标号标号。它代表该行指令。它代表该行指令。它代表该行指令。它代表该行指令的起始地址;的起始地址;的起始地址;的起始地址;当标识符后不带冒号时,表示当标识符后不带冒号时,表示当标识符后不带冒号时,表示当标识符后不带冒号时,表示变量变量变量变量;伪指令前的标识符不;伪指令前的标识符不;伪指令前的标识符不;伪指令前的标识符不加冒号。加冒号。加冒号。加冒号。指令助记符:表示不同操作的指令,可以是指令助记符:表示不同操作的指令,可以是指令助记符:表示不同操作的指令,可以是指令助记符:表示不同操作的指令,可以是8086808680868086的指令助记符,也可的指令助记符,也可的指令助记符,也可的指令助记符,也可以是伪指令。以是伪指令。以是伪指令。以是伪指令。操作数:操作数:操作数:操作数:指令执行的对象。依指令的要求,可能有一个、两个或者没指令执行的对象。依指令的要求,可能有一个、两个或者没指令执行的对象。依指令的要求,可能有一个、两个或者没指令执行的对象。依指令的要求,可能有一个、两个或者没有。有。有。有。注解:该项可有可无,是为源程序所加的注解,用于提高程序的可读性。注解:该项可有可无,是为源程序所加的注解,用于提高程序的可读性。注解:该项可有可无,是为源程序所加的注解,用于提高程序的可读性。注解:该项可有可无,是为源程序所加的注解,用于提高程序的可读性。广州医学院信息技术教研室4.2.1 常量、常量、变量量与与标号号1.1.1.1.常量常量常量常量 数值常量数值常量数值常量数值常量:如:如:如:如:010111001010111001010111001010111001,56,94H,0ADH56,94H,0ADH56,94H,0ADH56,94H,0ADH等。等。等。等。字符串常量字符串常量字符串常量字符串常量 :用单引号括起来的字符串,如:用单引号括起来的字符串,如:用单引号括起来的字符串,如:用单引号括起来的字符串,如 A A A A,abcdabcdabcdabcd 等。等。等。等。字符串在计算机中存储的是其字符串在计算机中存储的是其字符串在计算机中存储的是其字符串在计算机中存储的是其ASCLLASCLLASCLLASCLL码。例如:码。例如:码。例如:码。例如:A A A A 的值是的值是的值是的值是41H41H41H41H,ABABABAB 的值是的值是的值是的值是4142H4142H4142H4142H等。等。等。等。符号常量符号常量符号常量符号常量:常量用符号名来代替就是符号常量。常量用符号名来代替就是符号常量。常量用符号名来代替就是符号常量。常量用符号名来代替就是符号常量。例如:例如:例如:例如:COUNT EQU 3 COUNT EQU 3 COUNT EQU 3 COUNT EQU 3 或或或或COUNT=3COUNT=3COUNT=3COUNT=3,COUNTCOUNTCOUNTCOUNT就是一个符号常量,与数就是一个符号常量,与数就是一个符号常量,与数就是一个符号常量,与数值常量值常量值常量值常量3 3 3 3等价。等价。等价。等价。广州医学院信息技术教研室4.2.1 常量、常量、变量量与与标号号2.2.2.2.变量变量变量变量 变变变变量量量量在在在在数数数数据据据据段段段段、附附附附加加加加数数数数据据据据段段段段或或或或堆堆堆堆栈栈栈栈段段段段中中中中定定定定义义义义,后后后后面面面面不不不不跟跟跟跟冒冒冒冒号号号号。它它它它也也也也可可可可以以以以用用用用LABELLABELLABELLABEL或或或或EQUEQUEQUEQU伪伪伪伪操操操操作作作作来来来来定定定定义义义义。变变变变量量量量经经经经常常常常在在在在操操操操作数字段出现,有三种属性,见下:作数字段出现,有三种属性,见下:作数字段出现,有三种属性,见下:作数字段出现,有三种属性,见下:段属性段属性段属性段属性:指变量所在段的段首址。:指变量所在段的段首址。:指变量所在段的段首址。:指变量所在段的段首址。偏移属性偏移属性偏移属性偏移属性:变量的偏移地址,指从段的起始地址到定义变量:变量的偏移地址,指从段的起始地址到定义变量:变量的偏移地址,指从段的起始地址到定义变量:变量的偏移地址,指从段的起始地址到定义变量的位置之间的字节数。的位置之间的字节数。的位置之间的字节数。的位置之间的字节数。类型属性类型属性类型属性类型属性:变量的类型属性,指该变量定义的字节数。变量的类型属性,指该变量定义的字节数。变量的类型属性,指该变量定义的字节数。变量的类型属性,指该变量定义的字节数。BYTE(1)BYTE(1)BYTE(1)BYTE(1)、WORD(2)WORD(2)WORD(2)WORD(2)、DWORD(4)DWORD(4)DWORD(4)DWORD(4)、FWORD(6)FWORD(6)FWORD(6)FWORD(6)、QWORD(8)QWORD(8)QWORD(8)QWORD(8)、TBYTE(10)TBYTE(10)TBYTE(10)TBYTE(10)广州医学院信息技术教研室4.2.1 常量、常量、变量量与与标号号在同一个程序中,同样的标号或变量的定义只允许出现一次,在同一个程序中,同样的标号或变量的定义只允许出现一次,在同一个程序中,同样的标号或变量的定义只允许出现一次,在同一个程序中,同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。否则汇编程序会指示出错。否则汇编程序会指示出错。否则汇编程序会指示出错。例例例例DATA Segment DATA Segment DATA Segment DATA Segment ;数据段;数据段;数据段;数据段A DB 55A DB 55A DB 55A DB 55B DW 36HB DW 36HB DW 36HB DW 36HDATA EndsDATA EndsDATA EndsDATA Ends 说明:说明:说明:说明:A A A A 和和和和B B B B是变量。是变量。是变量。是变量。广州医学院信息技术教研室4.2.1 常量、常量、变量量与与标号号3.3.3.3.标号标号标号标号标号在标号在标号在标号在代码段代码段代码段代码段中定义,后面跟着冒号中定义,后面跟着冒号中定义,后面跟着冒号中定义,后面跟着冒号“:”,它可用,它可用,它可用,它可用LABELLABELLABELLABEL或或或或EQUEQUEQUEQU伪操作来定义;还可以作为过程名定义。标号经伪操作来定义;还可以作为过程名定义。标号经伪操作来定义;还可以作为过程名定义。标号经伪操作来定义;还可以作为过程名定义。标号经常在转移指令或常在转移指令或常在转移指令或常在转移指令或CALLCALLCALLCALL指令的操作数字段出现,用以表示转向指令的操作数字段出现,用以表示转向指令的操作数字段出现,用以表示转向指令的操作数字段出现,用以表示转向地址。标号有地址。标号有地址。标号有地址。标号有3 3 3 3种属性:种属性:种属性:种属性:段属性段属性段属性段属性:定义标号的段起始地址:定义标号的段起始地址:定义标号的段起始地址:定义标号的段起始地址偏移属性偏移属性偏移属性偏移属性:标号的偏移地址:标号的偏移地址:标号的偏移地址:标号的偏移地址,是从段起始地址到定义标号的是从段起始地址到定义标号的是从段起始地址到定义标号的是从段起始地址到定义标号的位置之间的字节数。位置之间的字节数。位置之间的字节数。位置之间的字节数。类型属性:用来指出该标号是在本类型属性:用来指出该标号是在本类型属性:用来指出该标号是在本类型属性:用来指出该标号是在本段内引用段内引用段内引用段内引用还是在还是在还是在还是在其他段中其他段中其他段中其他段中引用引用引用引用的。段内引用的类型属性是的。段内引用的类型属性是的。段内引用的类型属性是的。段内引用的类型属性是NearNearNearNear,段间引用的类型属性,段间引用的类型属性,段间引用的类型属性,段间引用的类型属性是是是是FarFarFarFar。广州医学院信息技术教研室4.2.2 运运算符算符与与表表达达式式1.1.1.1.算术运算符算术运算符算术运算符算术运算符 (加)、(减)、(加)、(减)、(加)、(减)、(加)、(减)、*(乘)、(乘)、(乘)、(乘)、/(除)、(除)、(除)、(除)、MODMODMODMOD(取余除)(取余除)(取余除)(取余除)例如:例如:例如:例如:MOV ALMOV ALMOV ALMOV AL,4*84*84*84*85 5 5 5 ;数值表达式;数值表达式;数值表达式;数值表达式MOV SIMOV SIMOV SIMOV SI,OFFSET BUFOFFSET BUFOFFSET BUFOFFSET BUF12 12 12 12 ;地址表达式;地址表达式;地址表达式;地址表达式广州医学院信息技术教研室4.2.2 运运算符算符与与表表达达式式2.2.2.2.逻辑运算符逻辑运算符逻辑运算符逻辑运算符 ANDANDANDAND(与)、(与)、(与)、(与)、OROROROR(或)、(或)、(或)、(或)、XORXORXORXOR(异或)、(异或)、(异或)、(异或)、NOTNOTNOTNOT(非)(非)(非)(非)说明:说明:说明:说明:逻辑运算符只能用于数值表达式中,不能用于地址表达式中。逻辑运算符只能用于数值表达式中,不能用于地址表达式中。逻辑运算符只能用于数值表达式中,不能用于地址表达式中。逻辑运算符只能用于数值表达式中,不能用于地址表达式中。逻辑运算符和逻辑运算指令是有区别的。逻辑运算符的功能逻辑运算符和逻辑运算指令是有区别的。逻辑运算符的功能逻辑运算符和逻辑运算指令是有区别的。逻辑运算符的功能逻辑运算符和逻辑运算指令是有区别的。逻辑运算符的功能在汇编阶段完成,逻辑运算指令的功能在程序执行阶段完成。在汇编阶段完成,逻辑运算指令的功能在程序执行阶段完成。在汇编阶段完成,逻辑运算指令的功能在程序执行阶段完成。在汇编阶段完成,逻辑运算指令的功能在程序执行阶段完成。例如,在汇编阶段,例如,在汇编阶段,例如,在汇编阶段,例如,在汇编阶段,指令指令指令指令 AND AND AND AND ALALALAL,78H AND 0FH78H AND 0FH78H AND 0FH78H AND 0FH 等价于等价于等价于等价于指令指令指令指令 AND ALAND ALAND ALAND AL,08H08H08H08H广州医学院信息技术教研室4.2.2 运运算符算符与与表表达达式式3.3.3.3.关系运算符关系运算符关系运算符关系运算符EQEQEQEQ(相等)(相等)(相等)(相等)LTLTLTLT(小于)(小于)(小于)(小于)LELELELE(小于等于)(小于等于)(小于等于)(小于等于)GTGTGTGT(大于)(大于)(大于)(大于)GEGEGEGE(大于等于)(大于等于)(大于等于)(大于等于)NENENENE(不等于)(不等于)(不等于)(不等于)说明:说明:说明:说明:关系运算符要有关系运算符要有关系运算符要有关系运算符要有两个运算对象两个运算对象两个运算对象两个运算对象。两个运算对象要么都是数值、。两个运算对象要么都是数值、。两个运算对象要么都是数值、。两个运算对象要么都是数值、要么都是同一个段内的地址。运算结果为真时,表示为要么都是同一个段内的地址。运算结果为真时,表示为要么都是同一个段内的地址。运算结果为真时,表示为要么都是同一个段内的地址。运算结果为真时,表示为0FFFFH 0FFFFH 0FFFFH 0FFFFH(-1-1-1-1),运算结果为假时,表示为),运算结果为假时,表示为),运算结果为假时,表示为),运算结果为假时,表示为0000H 0000H 0000H 0000H(0 0 0 0)。)。)。)。例如:例如:例如:例如:指令指令指令指令MOV BXMOV BXMOV BXMOV BX,32 EQ 45 32 EQ 45 32 EQ 45 32 EQ 45 等价于等价于等价于等价于 MOV BXMOV BXMOV BXMOV BX,0 0 0 0指令指令指令指令MOV BXMOV BXMOV BXMOV BX,56 GT 30 56 GT 30 56 GT 30 56 GT 30 等价于等价于等价于等价于 MOV BXMOV BXMOV BXMOV BX,0FFFFH0FFFFH0FFFFH0FFFFH 广州医学院信息技术教研室4.2.2 运运算符算符与与表表达达式式4.4.4.4.取值运算符取值运算符取值运算符取值运算符变量和标号具有段属性、偏移属性和类型属性等,要从变量和标号具有段属性、偏移属性和类型属性等,要从变量和标号具有段属性、偏移属性和类型属性等,要从变量和标号具有段属性、偏移属性和类型属性等,要从变量和标号中取出它们的段地址、偏移地址,变量的类型、变量和标号中取出它们的段地址、偏移地址,变量的类型、变量和标号中取出它们的段地址、偏移地址,变量的类型、变量和标号中取出它们的段地址、偏移地址,变量的类型、元素的个数和占用内存的大小等,就要使用取值运算符(又元素的个数和占用内存的大小等,就要使用取值运算符(又元素的个数和占用内存的大小等,就要使用取值运算符(又元素的个数和占用内存的大小等,就要使用取值运算符(又称分析运算符)。这些运算符是:称分析运算符)。这些运算符是:称分析运算符)。这些运算符是:称分析运算符)。这些运算符是:SEGSEGSEGSEG:取段地址:取段地址:取段地址:取段地址OFFSETOFFSETOFFSETOFFSET:取偏移地址:取偏移地址:取偏移地址:取偏移地址TYPE TYPE TYPE TYPE:返回变量类型:返回变量类型:返回变量类型:返回变量类型LENGTHLENGTHLENGTHLENGTH:返回变量所包含的数据个数:返回变量所包含的数据个数:返回变量所包含的数据个数:返回变量所包含的数据个数SIZE SIZE SIZE SIZE:返回变量的字节数:返回变量的字节数:返回变量的字节数:返回变量的字节数 广州医学院信息技术教研室4.2.2 运运算符算符与与表表达达式式例如:例如:例如:例如:SCORESCORESCORESCORE DW 30 DUP DW 30 DUP DW 30 DUP DW 30 DUP(0 0 0 0)上述伪指令定义了一个变量上述伪指令定义了一个变量上述伪指令定义了一个变量上述伪指令定义了一个变量SCORESCORESCORESCORE ,取值运算符使用,取值运算符使用,取值运算符使用,取值运算符使用如下:如下:如下:如下:MOV AL,TYPE SCOREMOV AL,TYPE SCOREMOV AL,TYPE SCOREMOV AL,TYPE SCOREMOV AH,LENGTH SCOREMOV AH,LENGTH SCOREMOV AH,LENGTH SCOREMOV AH,LENGTH SCOREMOV BL,SIZE SCOREMOV BL,SIZE SCOREMOV BL,SIZE SCOREMOV BL,SIZE SCORE则则则则 (AL)=2,(AH)=30,(BL)=60(AL)=2,(AH)=30,(BL)=60(AL)=2,(AH)=30,(BL)=60(AL)=2,(AH)=30,(BL)=60广州医学院信息技术教研室4.2.2 运运算符算符与与表表达达式式5.5.5.5.合成运算符合成运算符合成运算符合成运算符 也称为修改属性运算符,它能修改变量或标号的原有的也称为修改属性运算符,它能修改变量或标号的原有的也称为修改属性运算符,它能修改变量或标号的原有的也称为修改属性运算符,它能修改变量或标号的原有的类型属性并赋予新的类型。这类运算符是类型属性并赋予新的类型。这类运算符是类型属性并赋予新的类型。这类运算符是类型属性并赋予新的类型。这类运算符是PTRPTRPTRPTR和和和和THISTHISTHISTHIS。PTRPTRPTRPTR的格式:的格式:的格式:的格式:类型类型类型类型 PTR PTR PTR PTR 表达式表达式表达式表达式 其中类型可以是其中类型可以是其中类型可以是其中类型可以是BYTEBYTEBYTEBYTE、WORDWORDWORDWORD、DWORDDWORDDWORDDWORD、NEARNEARNEARNEAR、FARFARFARFAR,表达式是,表达式是,表达式是,表达式是被修改的变量或标号。被修改的变量或标号。被修改的变量或标号。被修改的变量或标号。例如:例如:例如:例如:NUM DB 1NUM DB 1NUM DB 1NUM DB 1,3 3 3 3,5 5 5 5,7 7 7 7则则则则MOV AX,NUM MOV AX,NUM MOV AX,NUM MOV AX,NUM 非法的非法的非法的非法的!因为因为因为因为NUMNUMNUMNUM是字节定义,而是字节定义,而是字节定义,而是字节定义,而AXAXAXAX是字是字是字是字!而应改为:而应改为:而应改为:而应改为:MOV AX,WORD PTR NUMMOV AX,WORD PTR NUMMOV AX,WORD PTR NUMMOV AX,WORD PTR NUM广州医学院信息技术教研室PTRPTRPTRPTR运算符应用例子:运算符应用例子:运算符应用例子:运算符应用例子:数据段定义数据段定义数据段定义数据段定义:VAR1VAR1VAR1VAR1 DB 10H,18H,25H,34HDB 10H,18H,25H,34HDB 10H,18H,25H,34HDB 10H,18H,25H,34HVAR2VAR2VAR2VAR2 DW 1223H,1200HDW 1223H,1200HDW 1223H,1200HDW 1223H,1200H代码段定义代码段定义代码段定义代码段定义:MOV AX,WORD PTR VAR1 ;MOV AX,WORD PTR VAR1 ;MOV AX,WORD PTR VAR1 ;MOV AX,WORD PTR VAR1 ;执行后:执行后:执行后:执行后:AX=1810HAX=1810HAX=1810HAX=1810HMOV BL,BYTE PTR VAR2 ;MOV BL,BYTE PTR VAR2 ;MOV BL,BYTE PTR VAR2 ;MOV BL,BYTE PTR VAR2 ;执行后:执行后:执行后:执行后:BL=23H BL=23H BL=23H BL=23H 广州医学院信息技术教研室4.3 伪指令指令1.1.1.1.符号定义伪指令符号定义伪指令符号定义伪指令符号定义伪指令 等值伪指令等值伪指令等值伪指令等值伪指令EQUEQUEQUEQU 格式:格式:格式:格式:EQUEQUEQUEQU 例如:例如:例如:例如:CONSTANT CONSTANT CONSTANT CONSTANT EQUEQUEQUEQU256 256 256 256 ;将数;将数;将数;将数256256256256赋以符号名赋以符号名赋以符号名赋以符号名 B B B B EQU BP+8 EQU BP+8 EQU BP+8 EQU BP+8;变址引用赋以符号名;变址引用赋以符号名;变址引用赋以符号名;变址引用赋以符号名B B B B AB EQU DATA_ONE+2 AB EQU DATA_ONE+2 AB EQU DATA_ONE+2 AB EQU DATA_ONE+2 ;DATA_ONE;DATA_ONE;DATA_ONE;DATA_ONE必须先定义,否则出错必须先定义,否则出错必须先定义,否则出错必须先定义,否则出错广州医学院信息技术教研室4.3 伪指令指令 等号伪指令等号伪指令等号伪指令等号伪指令 =例如例如例如例如:EMP=6 :EMP=6 :EMP=6 :EMP=6 或或或或 EMP EQU 6 EMP EQU 6 EMP EQU 6 EMP EQU 6 EQUEQUEQUEQU定义的表达式名不允许重复使用。而伪指令则允定义的表达式名不允许重复使用。而伪指令则允定义的表达式名不允许重复使用。而伪指令则允定义的表达式名不允许重复使用。而伪指令则允许重复使用。许重复使用。许重复使用。许重复使用。广州医学院信息技术教研室4.3 伪指令指令(5 5 5 5)DUPDUPDUPDUP按照给定的次数来复制某个(或某些)操作数,按照给定的次数来复制某个(或某些)操作数,按照给定的次数来复制某个(或某些)操作数,按照给定的次数来复制某个(或某些)操作数,可以避免多次重复输入同一个数据。可以避免多次重复输入同一个数据。可以避免多次重复输入同一个数据。可以避免多次重复输入同一个数据。例例例例1 1 1 1:Data1 DB 0FFHData1 DB 0FFHData1 DB 0FFHData1 DB 0FFH,0FFH0FFH0FFH0FFH,0FFH0FFH0FFH0FFH,0FFH0FFH0FFH0FFH,0FFH0FFH0FFH0FFH,0FFH 0FFH 0FFH 0FFH Data2 DB 6 DUP(0FFH)Data2 DB 6 DUP(0FFH)Data2 DB 6 DUP(0FFH)Data2 DB 6 DUP(0FFH)例例例例2 2 2 2:操作数?可以保留存储空间,但不存入数据。:操作数?可以保留存储空间,但不存入数据。:操作数?可以保留存储空间,但不存入数据。:操作数?可以保留存储空间,但不存入数据。Array1 DB 2 DUPArray1 DB 2 DUPArray1 DB 2 DUPArray1 DB 2 DUP(0 0 0 0,1 1 1 1,2 2 2 2,?),?),?),?)Array3 DB 100 DUPArray3 DB 100 DUPArray3 DB 100 DUPArray3 DB 100 DUP(?)(?)(?)(?)广州医学院信息技术教研室4.3 伪指令指令2.2.2.2.数据定义伪指令数据定义伪指令数据定义伪指令数据定义伪指令格式格式格式格式:变量变量变量变量 助记符助记符助记符助记符 操作数,操作数,操作数,操作数,操作数,操作数,操作数,操作数 ;注释;注释;注释;注释该类伪指令用来定义存贮空间及其所存数据的长度。该类伪指令用来定义存贮空间及其所存数据的长度。该类伪指令用来定义存贮空间及其所存数据的长度。该类伪指令用来定义存贮空间及其所存数据的长度。DBDBDBDB:定义字节,即每个数据是:定义字节,即每个数据是:定义字节,即每个数据是:定义字节,即每个数据是1 1 1 1个字节。个字节。个字节。个字节。DWDWDWDW:定义字,即每个数据占:定义字,即每个数据占:定义字,即每个数据占:定义字,即每个数据占1 1 1 1个字(个字(个字(个字(2 2 2 2个字节)。个字节)。个字节)。个字节)。DDDDDDDD:定义双字,即每个数据占:定义双字,即每个数据占:定义双字,即每个数据占:定义双字,即每个数据占2 2 2 2个字。低字部分在低地址,高字部分在高地个字。低字部分在低地址,高字部分在高地个字。低字部分在低地址,高字部分在高地个字。低字部分在低地址,高字部分在高地址。址。址。址。DQDQDQDQ:定义:定义:定义:定义4 4 4 4字长,即每个数据占字长,即每个数据占字长,即每个数据占字长,即每个数据占4 4 4 4个字。个字。个字。个字。DTDTDTDT:定义:定义:定义:定义10101010个字节长,用于压缩式十进制数据。个字节长,用于压缩式十进制数据。个字节长,用于压缩式十进制数据。个字节长,用于压缩式十进制数据。例如:例如:例如:例如:DATA1 DB 10HDATA1 DB 10HDATA1 DB 10HDATA1 DB 10H,6 6 6 6,78H78H78H78H,100100100100表示从表示从表示从表示从DATA1DATA1DATA1DATA1单元开始连续存放单元开始连续存放单元开始连续存放单元开始连续存放10H10H10H10H,6 6 6 6,78H78H78H78H,100100100100,共占,共占,共占,共占4 4 4 4个字节地址。个字节地址。个字节地址。个字节地址。广州医学院信息技术教研室4.3 伪指令指令定义数据伪指令定义数据伪指令定义数据伪指令定义数据伪指令DATA1DATA1DATA1DATA1DBDBDBDB20H20H20H20HDATA2DATA2DATA2DATA2DWDWDWDW0240H,1000H0240H,1000H0240H,1000H0240H,1000HDATA3DATA3DATA3DATA3DBDBDBDB(-1*3),(15/3)(-1*3),(15/3)(-1*3),(15/3)(-1*3),(15/3)DATA4DATA4DATA4DATA4DDDDDDDD12345H12345H12345H12345HDATA5DATA5DATA5DATA5DBDBDBDB3210321032103210DATA6DATA6DATA6DATA6DWDWDWDWAB,C,DAB,C,DAB,C,DAB,C,DDATA7DATA7DATA7DATA7DBDBDBDB?DATA8DATA8DATA8DATA8DDDDDDDD?DATA9DATA9DATA9DATA9DBDBDBDB5DUP(00)5DUP(00)5DUP(00)5DUP(00)DATA10DATA10DATA10DATA10DWDWDWDW3DUP(?)3DUP(?)3DUP(?)3DUP(?)广州医学院信息技术教研室广州医学院信息技术教研室4.3 伪指令指令课后练习课后练习课后练习课后练习例例例例1 1 1 1:请图示下面伪指令定义的数据在内存中的存放形式。:请图示下面伪指令定义的数据在内存中的存放形式。:请图示下面伪指令定义的数据在内存中的存放形式。:请图示下面伪指令定义的数据在内存中的存放形式。(1 1 1 1)BUF1 DB BUF1 DB BUF1 DB BUF1 DB 12121212,12,12H,2*6,12,12H,2*6,12,12H,2*6,12,12H,2*6,-1-1-1-1(2 2 2 2)BUF2 DW BUF2 DW BUF2 DW BUF2 DW 12121212,12H12H12H12H,1234H1234H1234H1234H(3 3 3 3)BUF3 DB 2 DUPBUF3 DB 2 DUPBUF3 DB 2 DUPBUF3 DB 2 DUP(5 5 5 5,4 4 4 4,3DUP3DUP3DUP3DUP(8 8 8 8)广州医学院信息技术教研室4.3 伪指令指令例例例例2 2 2 2:下面是一个定义数据的程序段,设:下面是一个定义数据的程序段,设:下面是一个定义数据的程序段,设:下面是一个定义数据的程序段,设DATADATADATADATA值为值为值为值为1200H1200H1200H1200H,请图示各数据在内存的存放形式。,请图示各数据在内存的存放形式。,请图示各数据在内存的存放形式。,请图示各数据在内存的存放形式。Data segmentData segmentData segmentData segmentorg 100Horg 100Horg 100Horg 100HBuf1 DB 10H,20H,30HBuf1 DB 10H,20H,30HBuf1 DB 10H,20H,30HBuf1 DB 10H,20H,30HBuf2 DW Buf1Buf2 DW Buf1Buf2 DW Buf1Buf2 DW Buf1Buf3 DD Buf2Buf3 DD Buf2Buf3 DD Buf2Buf3 DD Buf2Count EQU Buf2-Buf1Count EQU Buf2-Buf1Count EQU Buf2-Buf1Count EQU Buf2-Buf1Buf4 DW Buf2-Buf1Buf4 DW Buf2-Buf1Buf4 DW Buf2-Buf1Buf4 DW Buf2-Buf1Data endsData endsData endsData ends广州医学院信息技术教研室4.3 伪指令指令3.3.3.3.段定义伪指令段定义伪指令段定义伪指令段定义伪指令 SEGMENTSEGMENTSEGMENTSEGMENT和和和和ENDS ENDS ENDS ENDS 段定义伪指令段定义伪指令段定义伪指令段定义伪指令该指令能对程序分段该指令能对程序分段该指令能对程序分段该指令能对程序分段,其格式为:其格式为:其格式为:其格式为:段名段名段名段名 SEGMENT SEGMENT SEGMENT SEGMENT 定位类型定位类型定位类型定位类型组合类型组合类型组合类型组合类型 类别类别类别类别 段名段名段名段名 ENDSENDSENDSENDS广州医学院信息技术教研室4.3 伪指令指令DATA1 SEGMENTDATA1 SEGMENTDATA1 SEGMENTDATA1 SEGMENT DATA1 ENDSDATA1 ENDSDATA1 ENDSDATA1 ENDSSTACK1 SEGMENT STACKSTACK1 SEGMENT STACKSTACK1 SEGMENT STACKSTACK1 SEGMENT STACK STACK1 ENDSSTACK1 ENDSSTACK1 ENDSSTACK1 ENDSCODE1 SEGMENTCODE1 SEGMENTCODE1 SEGMENTCODE1 SEGMENT ASSUME CS ASSUME CS ASSUME CS ASSUME CS:CODE1CODE1CODE1CODE1,DSDSDSDS:DATA1DATA1DATA1DATA1,SSSSSSSS:STACK1STACK1STACK1STACK1 MOV AX MOV AX MOV AX MOV AX,DATADATADATADATA MOV DS MOV DS MOV DS MOV DS,AXAXAXAX MOV AX MOV AX MOV AX MOV AX,STACKSTACKSTACKSTACK MOV SS MOV SS MOV SS MOV SS,AXAX
展开阅读全文