微型计算机原理及其应用第四章汇编语言程序设计教案.ppt
微型计算机原理及其应用第四章汇编语言程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第四章:汇编语言程序设计第四章:汇编语言程序设计1.1.汇编语言的基本要素汇编语言的基本要素2.2.伪指令伪指令3.3.汇编语言程序设计汇编语言程序设计2第四章:汇编语言程序设计第四章:汇编语言程序设计1.1.汇编语言的基本要素汇编语言的基本要素2.2.伪指令伪指令3.3.汇编语言程序设计汇编语言程序设计3第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素1.1.汇编语言的格式汇编语言的格式2.2.汇编语言中的常数汇编语言中的常数3.3.汇编语言中的运算符和表达式汇编语言中的运算符和表达式4第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素1.1.汇编语言的格式汇编语言的格式2.2.汇编语言中的常数汇编语言中的常数3.3.汇编语言中的运算符和表达式汇编语言中的运算符和表达式5第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素汇编语言的格式汇编语言的格式 由汇编语言编写的源程序是由许多语句由汇编语言编写的源程序是由许多语句(也可称为汇编指令也可称为汇编指令)组成组成的。每个语句由的。每个语句由1414个部分组成,其格式是:个部分组成,其格式是:标号标号 指令助记符指令助记符 操作数操作数 ;注解;注解 1.1.标识符:标识符:给指令或某一存储单元地址所起的名字。给指令或某一存储单元地址所起的名字。可由下列字符组成:可由下列字符组成:字母:字母:A z A z;数字:数字:0 9 0 9;特殊字符:特殊字符:?、一、一、$。数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符最长为符最长为3131个字符。当标识符后跟冒号时,表示是标号。它代表该行个字符。当标识符后跟冒号时,表示是标号。它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。识符不加冒号。2.2.指令助记符:指令助记符:表示不同操作的指令,表示不同操作的指令,可以是可以是80868086的指令助记符,也的指令助记符,也可以是伪指令。可以是伪指令。3.3.操作数:操作数:指令执行的对象。指令执行的对象。依指令的要求,可能有一个、两个或者依指令的要求,可能有一个、两个或者没有。没有。4.4.注解:注解:该项可有可无,是为源程序所加的注解,用于提高程序的可读该项可有可无,是为源程序所加的注解,用于提高程序的可读性。性。6第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素1.1.汇编语言的格式汇编语言的格式2.2.汇编语言中的常数汇编语言中的常数3.3.汇编语言中的运算符和表达式汇编语言中的运算符和表达式7第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素汇编语言中的常数汇编语言中的常数 汇编语言中的常数可以分数值常数和字符串常数两类。数值常数汇编语言中的常数可以分数值常数和字符串常数两类。数值常数按其基数的不同,可有二进制数、八进制数、十进制数、十六进制数按其基数的不同,可有二进制数、八进制数、十进制数、十六进制数等几种不同的表示形式,汇编语言中采用不同的后缀加以区分。等几种不同的表示形式,汇编语言中采用不同的后缀加以区分。B B:表示二进制数。例如,表示二进制数。例如,10100101B10100101B。D D:表示十进制数。例如,表示十进制数。例如,278D278D或或278278。Q Q:表示八进制数。例如,表示八进制数。例如,567Q567Q,263Q263Q。H H:表示十六进制数。例如,表示十六进制数。例如,9AH9AH,5678H5678H。字符串常数是由单引号括起来的一串字符。例如:字符串常数是由单引号括起来的一串字符。例如:THIS IS A STUDENT!THIS IS A STUDENT!1234512345要指出的是,此处的要指出的是,此处的 1234512345其值并非是十进制数其值并非是十进制数1234512345,而是代,而是代表它们所对应的表它们所对应的ASCIIASCII码,即码,即31H31H,32H32H,33H33H,34H34H,35H35H。8第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素汇编语言中的运算符和表达式汇编语言中的运算符和表达式 在表达式中,运算符充当着重要的角色。在表达式中,运算符充当着重要的角色。80868086宏汇编有宏汇编有算术运算算术运算符、逻辑运算符、关系运算符、数值回送操作符符、逻辑运算符、关系运算符、数值回送操作符和和属性操作符属性操作符共共5 5种。种。数值回送数值回送(Value_returning)(Value_returning)操作符可以把一些特征或存储器地址的操作符可以把一些特征或存储器地址的一部分作为数值回送。共有一部分作为数值回送。共有5 5个:个:SEG(SEG(求段基值求段基值)、OFFSET(OFFSET(求偏移量求偏移量)、TYPE(TYPE(求变量类型求变量类型)、LENGTH(LENGTH(求字节数求字节数)和和SIZE(SIZE(求字节数求字节数)。其中。其中LENGTHLENGTH和和SIZESIZE只对数据存储器地址操作数有效。只对数据存储器地址操作数有效。属性操作符可以用来建立和临时改变变量或标号的类型以及存储属性操作符可以用来建立和临时改变变量或标号的类型以及存储器操作数的存储单元类型,而忽略当前的属性。共有器操作数的存储单元类型,而忽略当前的属性。共有6 6个:个:PTRPTR、段、段属性前缀、属性前缀、SHORTSHORT、THISTHIS、HIGHHIGH和和LOWLOW。9第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素汇编语言中的运算符和表达式汇编语言中的运算符和表达式 算术运算符逻辑运算符关系运算符数值回送运算符属性运算符+(加法)AND(与)EQ(相等)TYPEPTR-(减法)OR(或)NE(不等)LENGTHTHIS*(乘法)XOR(异或)LT(小于)SIZESHORT/(除法)NOT(非)GT(大于)OFFSETHIGHMOD(求余)LE(小于等于)SEGLOWGE(大于等于)10第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素汇编语言中的运算符和表达式汇编语言中的运算符和表达式数值回送操作符数值回送操作符SEGSEG运算符运算符:利用运算符利用运算符SEGSEG可以得到一个标号或变量的段基址可以得到一个标号或变量的段基址格式:格式:SEGSEG变量名或标号名变量名或标号名 例如:已知数据段例如:已知数据段DATADATA从存储器实际地址从存储器实际地址03000H03000H开始,作如下定义后,开始,作如下定义后,用用SEGSEG运算符求变量所在的段基址。运算符求变量所在的段基址。DATADATASEGMENTSEGMENT;定义数据段定义数据段VAR1VAR1DBDB10H,18H,25H,34H10H,18H,25H,34H;定义字节数据定义字节数据VAR2VAR2DWDW2300H,1200H2300H,1200H;定义字数据定义字数据VAR3VAR3DDDD11002200H,33004400H11002200H,33004400H;定义双定义双字数据字数据DATADATAENDSENDS;数据段结束数据段结束MOV BX,SEG VAR1MOV BX,SEG VAR1 汇编成:汇编成:MOV BX,0300HMOV BX,0300HMOV CX,SEG VAR2MOV CX,SEG VAR2汇编成:汇编成:MOV CX,0300HMOV CX,0300HMOV DX,SEG VAR3MOV DX,SEG VAR3 汇编成;汇编成;MOV DX,0300HMOV DX,0300H11第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素汇编语言中的运算符和表达式汇编语言中的运算符和表达式数值回送操作符数值回送操作符OFFSETOFFSET运算符运算符:利用运算符:利用运算符OFFSETOFFSET可以得到一个标号或变量的偏移量。可以得到一个标号或变量的偏移量。使用格式:使用格式:OFFSET OFFSET 变量名或标号名变量名或标号名DATADATASEGMENTSEGMENT;定义数据段定义数据段VAR1VAR1DBDB10H,18H,25H,34H10H,18H,25H,34H;定义字节数据定义字节数据VAR2VAR2DWDW2300H,1200H2300H,1200H;定义字数据定义字数据VAR3VAR3DDDD11002200H,33004400H11002200H,33004400H;定义双定义双字数据字数据DATADATAENDSENDS;数据段结束数据段结束MOV BX,OFFSET VAR1MOV BX,OFFSET VAR1汇编成:汇编成:MOV BX,0000HMOV BX,0000HMOV CX,OFFSET VAR2MOV CX,OFFSET VAR2汇编成:汇编成:MOV CX,0004HMOV CX,0004HMOV DX,OFFSET VAR3MOV DX,OFFSET VAR3汇编成:汇编成:MOV DX,0008HMOV DX,0008H12汇编语言中的运算符和表达式汇编语言中的运算符和表达式数值回送操作符数值回送操作符TYPETYPE运算符运算符:TYPETYPE运算符可加在变量、结构或标号的前面,所求出的是这些存储运算符可加在变量、结构或标号的前面,所求出的是这些存储器操作数的类型部分。运算符器操作数的类型部分。运算符TYPETYPE的运算结果是一个数值,这个数值与存储器操的运算结果是一个数值,这个数值与存储器操作数类型属性的对应关系。作数类型属性的对应关系。MOV BX,TYPE VAR1MOV BX,TYPE VAR1 汇编成:汇编成:MOV BX,1MOV BX,1MOV CX,TYPE VAR2MOV CX,TYPE VAR2 汇编成:汇编成:MOV CX,2MOV CX,2MOV DX,TYPE VAR3MOV DX,TYPE VAR3 汇编成:汇编成:MOV DX,4MOV DX,4存储操作数类型 TYPE返回值字节数据BYTE(DB定义)1字数据WORD(DW定义)2双字数据DWORD(DD定义)4第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素13第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素汇编语言中的运算符和表达式汇编语言中的运算符和表达式数值回送操作符数值回送操作符LENGTHLENGTH运算符运算符:LENGTHLENGTH运算符放在数组变量的前面,可以求出该数组运算符放在数组变量的前面,可以求出该数组中所包含的变量的个数。中所包含的变量的个数。ARRAY1 DB 100DUPARRAY1 DB 100DUP(?)ARRAY2 DW 10DUPARRAY2 DW 10DUP(?)ARRAY3 DD 10DUPARRAY3 DD 10DUP(?)下列指令:下列指令:MOV BXMOV BX,LENGTH ARRAY1LENGTH ARRAY1汇编汇编后:后:MOV BXMOV BX,100100MOV CXMOV CX,LENGTH ARRAY2LENGTH ARRAY2汇编汇编后:后:MOV CXMOV CX,1010MOV DXMOV DX,LENGTH ARRAY3LENGTH ARRAY3汇编汇编后:后:MOV DXMOV DX,101014第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素汇编语言中的运算符和表达式汇编语言中的运算符和表达式数值回送操作符数值回送操作符SIZESIZE运算符运算符:如果一个变量已经用重复操作符:如果一个变量已经用重复操作符DUPDUP加以说明,则利用加以说明,则利用SIZESIZE运算符可以得到分配给该变量的字节总数。运算符可以得到分配给该变量的字节总数。ARRAY1 DB 100DUPARRAY1 DB 100DUP(?)ARRAY2 DW 10DUPARRAY2 DW 10DUP(?)ARRAY3 DD 10DUPARRAY3 DD 10DUP(?)下列指令:下列指令:MOV BXMOV BX,SIZE ARRAY1SIZE ARRAY1 汇编汇编后:后:MOV BXMOV BX,100100MOV CXMOV CX,SIZE ARRAY2SIZE ARRAY2 汇编汇编后:后:MOV CXMOV CX,2020MOV DXMOV DX,SIZE ARRAY3SIZE ARRAY3 汇编汇编后:后:MOV DXMOV DX,404015第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言的基本要素汇编语言的基本要素汇编语言中的运算符和表达式汇编语言中的运算符和表达式属性操作符属性操作符PTRPTR运算符运算符:用来建立一个符号地址。其本身并不分配存储器,只是用来建立一个符号地址。其本身并不分配存储器,只是用来给已分配的存储器地址赋予另一种属性,使该地址具有另一种类用来给已分配的存储器地址赋予另一种属性,使该地址具有另一种类型。型。VARVAR1 1DB DB 10H,18H,25H,34H10H,18H,25H,34HVAR2VAR2DW 1223HDW 1223H,1200H1200HMOV AXMOV AX,WORD PTR VAR WORD PTR VAR1 1 执执行后:行后:AX=1810HAX=1810HMOV BLMOV BL,BYTE PTR VAR2 BYTE PTR VAR2 执执行后:行后:BL=23HBL=23H 16第四章:汇编语言程序设计第四章:汇编语言程序设计1.1.汇编语言的基本要素汇编语言的基本要素2.2.伪指令伪指令3.3.汇编语言程序设计汇编语言程序设计17第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令 伪指令用来对汇编程序进行控制,对程序中的数据实现条件转移、列伪指令用来对汇编程序进行控制,对程序中的数据实现条件转移、列表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的代码,即不直接命令代码,即不直接命令CPUCPU去执行什么操作。去执行什么操作。亦即它不像机器指令那样是在程序运行期间由计算机来执行的,而亦即它不像机器指令那样是在程序运行期间由计算机来执行的,而是在汇编程序对源程序汇编期间由汇编程序处理的操作。是在汇编程序对源程序汇编期间由汇编程序处理的操作。18第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令1.1.定义数据伪指令定义数据伪指令2.2.符号定义伪指令符号定义伪指令3.3.段定义伪指令段定义伪指令4.4.设定段寄存器伪指令设定段寄存器伪指令5.5.定义过程的伪指令定义过程的伪指令6.6.宏指令宏指令7.7.ORGORG伪指令伪指令8.8.汇编结束伪指令汇编结束伪指令ENDEND19第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令1.1.定义数据伪指令定义数据伪指令2.2.符号定义伪指令符号定义伪指令3.3.段定义伪指令段定义伪指令4.4.设定段寄存器伪指令设定段寄存器伪指令5.5.定义过程的伪指令定义过程的伪指令6.6.宏指令宏指令7.7.ORGORG伪指令伪指令8.8.汇编结束伪指令汇编结束伪指令ENDEND20第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令定义数据伪指令定义数据伪指令该类伪指令用来定义存贮空间及其所存数据的长度。该类伪指令用来定义存贮空间及其所存数据的长度。DBDB:定义字节,即每个数据是:定义字节,即每个数据是1 1个字节。个字节。DWDW:定义字,即每个数据占:定义字,即每个数据占1 1个字(个字(2 2个字节)。个字节)。DDDD:定义双字,即每个数据占:定义双字,即每个数据占2 2个字。低字部分在低地址,高字部分个字。低字部分在低地址,高字部分在高地址。在高地址。DQDQ:定义:定义4 4字长,即每个数据占字长,即每个数据占4 4个字。个字。DTDT:定义:定义1010个字节长,用于压缩式十进制数据。个字节长,用于压缩式十进制数据。例如:例如:DATA1 DB 10HDATA1 DB 10H,6 6,78H78H,100100表示从表示从DATA1DATA1单元开始连续存放单元开始连续存放10H10H,6 6,78H78H,100100,共占,共占4 4个字节个字节地址。地址。21第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令定义数据伪指令定义数据伪指令DATA1DATA1DBDB20H20HDATA2DATA2DWDW0240H,1000H0240H,1000HDATA3DATA3DBDB(-1*3),(15/5)(-1*3),(15/5)DATA4DATA4DDDD12345H12345HDATA5DATA5DBDB01230123DATA6DATA6DWDWAB,C,DAB,C,DDATA7DATA7DBDB?DATA8DATA8DDDD?DATA9DATA9DBDB5DUP(00)5DUP(00)DATA10DATA10DWDW3DUP(?)3DUP(?)22第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令1.1.定义数据伪指令定义数据伪指令2.2.符号定义伪指令符号定义伪指令3.3.段定义伪指令段定义伪指令4.4.设定段寄存器伪指令设定段寄存器伪指令5.5.定义过程的伪指令定义过程的伪指令6.6.宏指令宏指令7.7.ORGORG伪指令伪指令8.8.汇编结束伪指令汇编结束伪指令ENDEND23第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令符号定义伪指令符号定义伪指令EQUEQU伪指令给符号定义一个值。在程序中,凡是出现该符号的地方,伪指令给符号定义一个值。在程序中,凡是出现该符号的地方,汇编时均用其值代替,如:汇编时均用其值代替,如:COUNTCOUNTEQUEQU100100;COUNT;COUNT代替常数代替常数100100SUMSUMEQUEQU30*2530*25;SUM;SUM代替数值表达式代替数值表达式C CEQUEQUCXCX;C;C代替寄存器代替寄存器CXCXMMEQUEQUMOVMOV;M;M代替指令助记符代替指令助记符MOV MOV 需要注意的是,一个符号一经需要注意的是,一个符号一经EQUEQU伪指令赋值后,在整个程序中,不伪指令赋值后,在整个程序中,不允许再对同一符号重新赋值。允许再对同一符号重新赋值。24第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令1.1.定义数据伪指令定义数据伪指令2.2.符号定义伪指令符号定义伪指令3.3.段定义伪指令段定义伪指令4.4.设定段寄存器伪指令设定段寄存器伪指令5.5.定义过程的伪指令定义过程的伪指令6.6.宏指令宏指令7.7.ORGORG伪指令伪指令8.8.汇编结束伪指令汇编结束伪指令ENDEND25第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令段定义伪指令段定义伪指令 段定义伪指令的用途是在汇编语言程序中定义逻辑段,段定义伪指令的用途是在汇编语言程序中定义逻辑段,用它来指定段的名称和范围,并指明段的定位类型、组合类用它来指定段的名称和范围,并指明段的定位类型、组合类型及类别。常用的段定义为指令有型及类别。常用的段定义为指令有SEGMENTSEGMENT和和ENDSENDS。段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 (段内语句系列)(段内语句系列)段名段名 ENDSENDS26第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令段定义伪指令段定义伪指令DATA1 SEGMENT DATA1 SEGMENT DATA1 ENDSDATA1 ENDSSTACK1 SEGMENT STACKSTACK1 SEGMENT STACK STACK1 ENDSSTACK1 ENDSCODE1 SEGMENTCODE1 SEGMENT ASSUME CS ASSUME CS:CODE1CODE1,DSDS:DATA1DATA1,SSSS:STACK1STACK1 MOV AX MOV AX,DATADATA MOV DS MOV DS,AXAX MOV AX MOV AX,STACKSTACK MOV SS MOV SS,AXAX CODE1 ENDS CODE1 ENDS27第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令1.1.定义数据伪指令定义数据伪指令2.2.符号定义伪指令符号定义伪指令3.3.段定义伪指令段定义伪指令4.4.设定段寄存器伪指令设定段寄存器伪指令5.5.定义过程的伪指令定义过程的伪指令6.6.宏指令宏指令7.7.ORGORG伪指令伪指令8.8.汇编结束伪指令汇编结束伪指令ENDEND28第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令设定段寄存器伪指令设定段寄存器伪指令 设定段寄存器伪指令用来通知汇编程序哪一个段寄存器设定段寄存器伪指令用来通知汇编程序哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。常用的段定义为指令有确的目的代码。常用的段定义为指令有ASSUMEASSUME。ASSUME ASSUME 段寄存器:段名段寄存器:段名,段寄存器:段名,段寄存器:段名,注意:由于注意:由于ASSUMEASSUME伪指令只指明某一个段地址应存于哪一伪指令只指明某一个段地址应存于哪一个段寄存器中,并没有包含将段地址送入该寄存器的操作。个段寄存器中,并没有包含将段地址送入该寄存器的操作。因此要将真实段地址装入段寄存器还需用汇编指令来实现。因此要将真实段地址装入段寄存器还需用汇编指令来实现。这一步是不可缺少的。这一步是不可缺少的。29第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令设定段寄存器伪指令设定段寄存器伪指令DATA1 SEGMENT DATA1 SEGMENT DATA1 ENDSDATA1 ENDSSTACK1 SEGMENT STACKSTACK1 SEGMENT STACK STACK1 ENDSSTACK1 ENDSCODE1 SEGMENTCODE1 SEGMENT ASSUME CS ASSUME CS:CODE1CODE1,DSDS:DATA1DATA1,SSSS:STACK1STACK1 MOV AX MOV AX,DATADATA MOV DS MOV DS,AXAX MOV AX MOV AX,STACKSTACK MOV SS MOV SS,AXAX CODE1 ENDS CODE1 ENDS30第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令1.1.定义数据伪指令定义数据伪指令2.2.符号定义伪指令符号定义伪指令3.3.段定义伪指令段定义伪指令4.4.设定段寄存器伪指令设定段寄存器伪指令5.5.定义过程的伪指令定义过程的伪指令6.6.宏指令宏指令7.7.ORGORG伪指令伪指令8.8.汇编结束伪指令汇编结束伪指令ENDEND31第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令定义过程伪指令定义过程伪指令 在程序设计中,可将具有一定功能的程序段看成为一个过程在程序设计中,可将具有一定功能的程序段看成为一个过程(相当于相当于一个子程序一个子程序),它可以被别的程序调用。一个过程由伪指令,它可以被别的程序调用。一个过程由伪指令PROCPROC和和ENDPENDP来定义。来定义。过程名过程名 PROC PROC 类型类型 过程体过程体 RETRET 过程名过程名 ENDP ENDP 其中过程名是为过程所起的名称,不能省略,过程的类型由其中过程名是为过程所起的名称,不能省略,过程的类型由FARFAR(远过程,为段间调用)和(远过程,为段间调用)和NEARNEAR(近过程,在本段内调用)来确定,(近过程,在本段内调用)来确定,如果缺省类型,则该过程就默认为近过程。如果缺省类型,则该过程就默认为近过程。ENDPENDP表示过程结束。过程表示过程结束。过程体内至少应有一条体内至少应有一条RETRET指令,以便返回被调用处。过程可以嵌套,也可指令,以便返回被调用处。过程可以嵌套,也可以递归使用。以递归使用。32第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令定义过程伪指令定义过程伪指令DELAYDELAYPROCPROC MOVMOVBLBL,1010DELYDELY:MOVMOVCXCX,28012801WAITWAIT:LOOPLOOPWAITWAIT DECDECBLBL JNZJNZDELYDELY RETRETDELAYDELAYENDPENDP 33第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令1.1.定义数据伪指令定义数据伪指令2.2.符号定义伪指令符号定义伪指令3.3.段定义伪指令段定义伪指令4.4.设定段寄存器伪指令设定段寄存器伪指令5.5.定义过程的伪指令定义过程的伪指令6.6.宏指令宏指令7.7.ORGORG伪指令伪指令8.8.汇编结束伪指令汇编结束伪指令ENDEND34第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令宏指令宏指令 在汇编语言书写的源程序中,若有的程序段要多次使用,为了简化在汇编语言书写的源程序中,若有的程序段要多次使用,为了简化程序书写,该程序段可以用一条宏指令来代替,而汇编程序汇编到该宏程序书写,该程序段可以用一条宏指令来代替,而汇编程序汇编到该宏指令时,仍会产生源程序所需的代码。指令时,仍会产生源程序所需的代码。宏指令的一般格式为:宏指令的一般格式为:宏指令名宏指令名 MACRO MACRO 形式参量表形式参量表 宏体宏体 ENDMENDM 例如:例如:SHIFT MACROSHIFT MACROMOV CL,4MOV CL,4SAL AL,ClSAL AL,ClENDM ENDM 35第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令1.1.定义数据伪指令定义数据伪指令2.2.符号定义伪指令符号定义伪指令3.3.段定义伪指令段定义伪指令4.4.设定段寄存器伪指令设定段寄存器伪指令5.5.定义过程的伪指令定义过程的伪指令6.6.宏指令宏指令7.7.ORGORG伪指令伪指令8.8.汇编结束伪指令汇编结束伪指令ENDEND36第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令ORGORG伪指令伪指令ORGORG伪指令规定了在某一段内,程序或数据代码存放的起始偏移地址。伪指令规定了在某一段内,程序或数据代码存放的起始偏移地址。一般格式:一般格式:ORG ORG 例如:例如:DATADATASEGMENTSEGMENT BUFF1 BUFF1DBDB23,56H,23,56H,EOFEOF ORG ORG2000H2000H BUFF2 BUFF2DBDBSTRINGSTRING DATA DATAENDS ENDS 37第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令1.1.定义数据伪指令定义数据伪指令2.2.符号定义伪指令符号定义伪指令3.3.段定义伪指令段定义伪指令4.4.设定段寄存器伪指令设定段寄存器伪指令5.5.定义过程的伪指令定义过程的伪指令6.6.宏指令宏指令7.7.ORGORG伪指令伪指令8.8.汇编结束伪指令汇编结束伪指令ENDEND38第四章:汇编语言程序设计第四章:汇编语言程序设计伪指令伪指令汇编结束伪指令汇编结束伪指令ENDEND 该伪指令表示源程序的结束令汇编程序停止汇编。因此,任何一该伪指令表示源程序的结束令汇编程序停止汇编。因此,任何一个完整的源程序均应有个完整的源程序均应有ENDEND指令。指令。一般格式:一般格式:END END 表达式表达式 其中表达式表示该汇编程序的启动地址。例如:其中表达式表示该汇编程序的启动地址。例如:END START END START ;表明该程序的启动地址为;表明该程序的启动地址为STARTSTART。39第四章:汇编语言程序设计第四章:汇编语言程序设计1.1.汇编语言的基本要素汇编语言的基本要素2.2.伪指令伪指令3.3.汇编语言程序设计汇编语言程序设计40第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言程序设计汇编语言程序设计1.1.汇编语言程序设计概述汇编语言程序设计概述2.2.顺序程序设计顺序程序设计3.3.选择程序设计选择程序设计4.4.循环程序设计循环程序设计5.5.子程序设计子程序设计41第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言程序设计汇编语言程序设计1.1.汇编语言程序设计概述汇编语言程序设计概述2.2.顺序程序设计顺序程序设计3.3.选择程序设计选择程序设计4.4.循环程序设计循环程序设计5.5.子程序设计子程序设计42第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计概述汇编语言程序设计概述1 1编写源程序编写源程序 在弄清问题的要求,确定方案后,汇编语言程序设计者便可依据前在弄清问题的要求,确定方案后,汇编语言程序设计者便可依据前面的指令系统和汇编语言的规定,逐个模块地编写汇编语言源程序。面的指令系统和汇编语言的规定,逐个模块地编写汇编语言源程序。2 2源程序输入微型机源程序输入微型机 在编辑软件在编辑软件EDIT.EXEEDIT.EXE或其他编辑软件的支持下,将源程序输入到计或其他编辑软件的支持下,将源程序输入到计算机中。通常,汇编语言源程序的扩展名为算机中。通常,汇编语言源程序的扩展名为 ASMASM。3 3汇编汇编 利用汇编程序(或宏汇编程序)(利用汇编程序(或宏汇编程序)(ASMASM或或MASMMASM)对汇编语言源程)对汇编语言源程序进行汇编,产生扩展名为序进行汇编,产生扩展名为OBJOBJ的可重定位的目的代码。的可重定位的目的代码。4 4连接连接 利用连接程序(利用连接程序(LINKLINK)可将一个或多个扩展名为)可将一个或多个扩展名为OBJOBJ文件进行连接,文件进行连接,生成扩展名为扩展名为生成扩展名为扩展名为EXEEXE的可执行文件。的可执行文件。5 5调试调试 对于稍大一些的程序来说,经过上述步骤所获得的对于稍大一些的程序来说,经过上述步骤所获得的 EXEEXE可执行文可执行文件,在运行过程中难免无错。调试汇编程序最常用的工具是动态调试程件,在运行过程中难免无错。调试汇编程序最常用的工具是动态调试程序序DEBUGDEBUG。43第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计概述汇编语言程序设计概述44第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言程序设计汇编语言程序设计1.1.汇编语言程序设计概述汇编语言程序设计概述2.2.顺序程序设计顺序程序设计3.3.选择程序设计选择程序设计4.4.循环程序设计循环程序设计5.5.子程序设计子程序设计45第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言程序设计汇编语言程序设计顺序程序设计顺序程序设计 对于一些简单的数据处理,只要把完成处理的各个步骤用汇编语言对于一些简单的数据处理,只要把完成处理的各个步骤用汇编语言描述清楚,让计算机按指令编写的次序从头到尾一条条执行即可,这样描述清楚,让计算机按指令编写的次序从头到尾一条条执行即可,这样的程序结构称为顺序结构。的程序结构称为顺序结构。【例例4-14-1】已知已知X X和和Y Y是数据段中的两个无符号字节单元,用程序完成是数据段中的两个无符号字节单元,用程序完成表达式表达式Z=(XZ=(X2 2Y Y2 2)/2)/2的计算。的计算。46第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言程序设计汇编语言程序设计顺序程序设计顺序程序设计 DATADATASEGMENTSEGMENTX XDB 15DB 15Y YDB 34DB 34Z ZDW?DW?DATADATA ENDSENDSCODECODESEGMENTSEGMENTASSUMEASSUMECS:CODE,DS:DATACS:CODE,DS:DATASTART:START:MOV MOV AX,DATAAX,DATAMOV MOV DS,AXDS,AX;初始化数据段初始化数据段MOVMOVAL,XAL,X;X;X中的内容送中的内容送ALALMULMULALAL;计算计算XXXXMOVMOVBX,AXBX,AX;XX;XX乘积送乘积送BXBXMOV MOV AL,YAL,Y;Y;Y中的内容送中的内容送ALALMULMULALAL;计算计算YYYYADDADDAX,BXAX,BX;计算计算X X2 2Y Y2 2SHRSHRAX,1AX,1;计算计算(X(X2 2Y Y2 2)/2)/2MOV MOV Z,AXZ,AX;结果送结果送Z Z单元单元MOV MOV AH,4CHAH,4CHINTINT21H21H;返回返回DOSDOSCODECODEENDSENDSENDEND STARTSTART;汇编结束汇编结束47第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言程序设计汇编语言程序设计顺序程序设计顺序程序设计【例例4-24-2】从键盘读入两个一位数(按键时保证按下的是数字键),显示它们的从键盘读入两个一位数(按键时保证按下的是数字键),显示它们的积。先后从键盘上读取两个按键,分别减去积。先后从键盘上读取两个按键,分别减去30H30H得到它们对应的数值,然后相乘得到它们对应的数值,然后相乘分解成十位数字与个位数字,转换成分解成十位数字与个位数字,转换成ASCASC码后依次输出即可。为了输入输出效码后依次输出即可。为了输入输出效果的直观,有必要在每次按键后回车换行。果的直观,有必要在每次按键后回车换行。CODECODESEGMENTSEGMENTASSUMEASSUMECS:CODECS:CODEMAIN:MAIN:MOV MOV AH,1AH,1INTINT21H21H;读入第读入第1 1个数字个数字MOVMOVBL,ALBL,AL;保存在保存在BLBL中中MOVMOVAH,2AH,2MOVMOVDL,13DL,13INTINT21H21H;回车回车MOVMOVDL,10DL,10INT INT 21H21H;换行换行MOVMOVAH,1AH,1INTINT21H21H;读入第读入第2 2个数字个数字SUBSUBAL,30HAL,30H;第第2 2个数字转换成十进制数个数字转换成十进制数SUBSUBBL,30HBL,30H;第第1 1个数字转换成十进制数个数字转换成十进制数MULMULBLBL;两个数相乘,积在两个数相乘,积在AXAX中中48第四章:汇编语言程序设计第四章:汇编语言程序设计汇编语言程序设计汇编语言程序设计顺序程序设计顺序程序设计MOVMOVBL,10BL,10;DIVDIVBLBL;积除以积除以1010取商送取商送ALAL,余数在,余数在AHAH中中ADDADDAX,3030HAX,3030H;转换成相应的转换成相应的ASCASC码码MOVMOVBX,AXBX,AX