您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机原理与接口技术 中科大第四版 ppt
1微型计算机原理及其应用——第四章:汇编语言程序设计合肥工业大学计算机与信息学院2第四章:汇编语言程序设计1.汇编语言的基本要素2.伪指令3.汇编语言程序设计3第四章:汇编语言程序设计1.汇编语言的基本要素2.伪指令3.汇编语言程序设计4第四章:汇编语言程序设计——汇编语言的基本要素1.汇编语言的格式2.汇编语言中的常数3.汇编语言中的运算符和表达式5第四章:汇编语言程序设计——汇编语言的基本要素1.汇编语言的格式2.汇编语言中的常数3.汇编语言中的运算符和表达式6第四章:汇编语言程序设计——汇编语言的基本要素汇编语言的格式由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。每个语句由1~4个部分组成,其格式是:[标号]指令助记符[操作数][;注解]1.标识符:给指令或某一存储单元地址所起的名字。可由下列字符组成:字母:A~z;数字:0~9;特殊字符:?、·、@、一、$。数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符最长为31个字符。当标识符后跟冒号时,表示是标号。它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。2.指令助记符:表示不同操作的指令,可以是8086的指令助记符,也可以是伪指令。3.操作数:指令执行的对象。依指令的要求,可能有一个、两个或者没有。4.注解:该项可有可无,是为源程序所加的注解,用于提高程序的可读性。7第四章:汇编语言程序设计——汇编语言的基本要素1.汇编语言的格式2.汇编语言中的常数3.汇编语言中的运算符和表达式8第四章:汇编语言程序设计——汇编语言的基本要素汇编语言中的常数汇编语言中的常数可以分数值常数和字符串常数两类。数值常数按其基数的不同,可有二进制数、八进制数、十进制数、十六进制数等几种不同的表示形式,汇编语言中采用不同的后缀加以区分。B:表示二进制数。例如,10100101B。D:表示十进制数。例如,278D或278。Q:表示八进制数。例如,567Q,263Q。H:表示十六进制数。例如,9AH,5678H。字符串常数是由单引号括起来的一串字符。例如:‘THISISASTUDENT!’‘12345’要指出的是,此处的’12345’其值并非是十进制数12345,而是代表它们所对应的ASCII码,即31H,32H,33H,34H,35H。9第四章:汇编语言程序设计——汇编语言的基本要素汇编语言中的运算符和表达式在表达式中,运算符充当着重要的角色。8086宏汇编有算术运算符、逻辑运算符、关系运算符、数值回送操作符和属性操作符共5种。数值回送(Value_returning)操作符可以把一些特征或存储器地址的一部分作为数值回送。共有5个:SEG(求段基值)、OFFSET(求偏移量)、TYPE(求变量类型)、LENGTH(求字节数)和SIZE(求字节数)。其中LENGTH和SIZE只对数据存储器地址操作数有效。属性操作符可以用来建立和临时改变变量或标号的类型以及存储器操作数的存储单元类型,而忽略当前的属性。共有6个:PTR、段属性前缀、SHORT、THIS、HIGH和LOW。10第四章:汇编语言程序设计——汇编语言的基本要素汇编语言中的运算符和表达式算术运算符逻辑运算符关系运算符数值回送运算符属性运算符+(加法)AND(与)EQ(相等)TYPEPTR-(减法)OR(或)NE(不等)LENGTHTHIS*(乘法)XOR(异或)LT(小于)SIZESHORT/(除法)NOT(非)GT(大于)OFFSETHIGHMOD(求余)LE(小于等于)SEGLOWGE(大于等于)11第四章:汇编语言程序设计——汇编语言的基本要素汇编语言中的运算符和表达式——数值回送操作符SEG运算符:利用运算符SEG可以得到一个标号或变量的段基址格式:SEG变量名或标号名例如:已知数据段DATA从存储器实际地址03000H开始,作如下定义后,用SEG运算符求变量所在的段基址。DATASEGMENT;定义数据段VAR1DB10H,18H,25H,34H;定义字节数据VAR2DW2300H,1200H;定义字数据VAR3DD11002200H,33004400H;定义双字数据DATAENDS;数据段结束MOVBX,SEGVAR1汇编成:MOVBX,0300HMOVCX,SEGVAR2汇编成:MOVCX,0300HMOVDX,SEGVAR3汇编成;MOVDX,0300H12第四章:汇编语言程序设计——汇编语言的基本要素汇编语言中的运算符和表达式——数值回送操作符OFFSET运算符:利用运算符OFFSET可以得到一个标号或变量的偏移量。使用格式:OFFSET变量名或标号名DATASEGMENT;定义数据段VAR1DB10H,18H,25H,34H;定义字节数据VAR2DW2300H,1200H;定义字数据VAR3DD11002200H,33004400H;定义双字数据DATAENDS;数据段结束MOVBX,OFFSETVAR1汇编成:MOVBX,0000HMOVCX,OFFSETVAR2汇编成:MOVCX,0004HMOVDX,OFFSETVAR3汇编成:MOVDX,0008H13汇编语言中的运算符和表达式——数值回送操作符TYPE运算符:TYPE运算符可加在变量、结构或标号的前面,所求出的是这些存储器操作数的类型部分。运算符TYPE的运算结果是一个数值,这个数值与存储器操作数类型属性的对应关系。MOVBX,TYPEVAR1汇编成:MOVBX,1MOVCX,TYPEVAR2汇编成:MOVCX,2MOVDX,TYPEVAR3汇编成:MOVDX,4存储操作数类型TYPE返回值字节数据BYTE(DB定义)1字数据WORD(DW定义)2双字数据DWORD(DD定义)4第四章:汇编语言程序设计——汇编语言的基本要素14第四章:汇编语言程序设计——汇编语言的基本要素汇编语言中的运算符和表达式——数值回送操作符LENGTH运算符:LENGTH运算符放在数组变量的前面,可以求出该数组中所包含的变量的个数。ARRAY1DB100DUP(?)ARRAY2DW10DUP(?)ARRAY3DD10DUP(?)下列指令:MOVBX,LENGTHARRAY1汇编后:MOVBX,100MOVCX,LENGTHARRAY2汇编后:MOVCX,10MOVDX,LENGTHARRAY3汇编后:MOVDX,1015第四章:汇编语言程序设计——汇编语言的基本要素汇编语言中的运算符和表达式——数值回送操作符SIZE运算符:如果一个变量已经用重复操作符DUP加以说明,则利用SIZE运算符可以得到分配给该变量的字节总数。ARRAY1DB100DUP(?)ARRAY2DW10DUP(?)ARRAY3DD10DUP(?)下列指令:MOVBX,SIZEARRAY1汇编后:MOVBX,100MOVCX,SIZEARRAY2汇编后:MOVCX,20MOVDX,SIZEARRAY3汇编后:MOVDX,4016第四章:汇编语言程序设计——汇编语言的基本要素汇编语言中的运算符和表达式——属性操作符PTR运算符:用来建立一个符号地址。其本身并不分配存储器,只是用来给已分配的存储器地址赋予另一种属性,使该地址具有另一种类型。VAR1DB10H,18H,25H,34HVAR2DW1223H,1200HMOVAX,WORDPTRVAR1执行后:AX=1810HMOVBL,BYTEPTRVAR2执行后:BL=23H17第四章:汇编语言程序设计1.汇编语言的基本要素2.伪指令3.汇编语言程序设计18第四章:汇编语言程序设计——伪指令伪指令用来对汇编程序进行控制,对程序中的数据实现条件转移、列表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的代码,即不直接命令CPU去执行什么操作。亦即它不像机器指令那样是在程序运行期间由计算机来执行的,而是在汇编程序对源程序汇编期间由汇编程序处理的操作。19第四章:汇编语言程序设计——伪指令1.定义数据伪指令2.符号定义伪指令3.段定义伪指令4.设定段寄存器伪指令5.定义过程的伪指令6.宏指令7.ORG伪指令8.汇编结束伪指令END20第四章:汇编语言程序设计——伪指令1.定义数据伪指令2.符号定义伪指令3.段定义伪指令4.设定段寄存器伪指令5.定义过程的伪指令6.宏指令7.ORG伪指令8.汇编结束伪指令END21第四章:汇编语言程序设计——伪指令定义数据伪指令该类伪指令用来定义存贮空间及其所存数据的长度。DB:定义字节,即每个数据是1个字节。DW:定义字,即每个数据占1个字(2个字节)。DD:定义双字,即每个数据占2个字。低字部分在低地址,高字部分在高地址。DQ:定义4字长,即每个数据占4个字。DT:定义10个字节长,用于压缩式十进制数据。例如:DATA1DB10H,6,78H,100表示从DATA1单元开始连续存放10H,6,78H,100,共占4个字节地址。22第四章:汇编语言程序设计——伪指令定义数据伪指令DATA1DB20HDATA2DW0240H,1000HDATA3DB(-1*3),(15/5)DATA4DD12345HDATA5DB'0123'DATA6DW'AB','C','D'DATA7DB?DATA8DD?DATA9DB5DUP(00)DATA10DW3DUP(?)20HDATA140HDATA202H00H10HFDHDATA305H45HDATA423H01H00H33HDATA532H31H30H42HDATA641H43H00H44H00H??DATA7??DATA8??????00DATA900000000??DATA10??????????23第四章:汇编语言程序设计——伪指令1.定义数据伪指令2.符号定义伪指令3.段定义伪指令4.设定段寄存器伪指令5.定义过程的伪指令6.宏指令7.ORG伪指令8.汇编结束伪指令END24第四章:汇编语言程序设计——伪指令符号定义伪指令EQU伪指令给符号定义一个值。在程序中,凡是出现该符号的地方,汇编时均用其值代替,如:COUNTEQU100;COUNT代替常数100SUMEQU30*25;SUM代替数值表达式CEQUCX;C代替寄存器CXMEQUMOV;M代替指令助记符MOV需要注意的是,一个符号一经EQU伪指令赋值后,在整个程序中,不允许再对同一符号重新赋值。25第四章:汇编语言程序设计——伪指令1.定义数据伪指令2.符号定义伪指令3.段定义伪指令4.设定段寄存器伪指令5.定义过程的伪指令6.宏指令7.ORG伪指令8.汇编结束伪指令END26第四章:汇编语言程序设计——伪指令段定义伪指令段定义伪指令的用途是在汇编语言程序中定义逻辑段,用它来指定段的名称和范围,并指明段的定位类型、组合类型及类别。常用的段定义为指令有SEGMENT和ENDS。段名SEGMENT[定位类型][组合类型][类别]…(段内语句系列)段名ENDS27第四章:汇编语言程序设计——伪指令段定义伪指令DATA1SEGMENT┇DATA1ENDSSTACK1SEGMENTSTACK┇STACK1ENDSCODE1SEGMENTASSUMECS:CODE1,DS:DATA1,SS:STACK1MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AX┇CODE1ENDS28第四章:汇编语言程序设计——伪指令1.定义数据伪指令2.符号定义伪指令3.段定义伪指令4.设定段寄存器伪指令5.定义过程的伪指令6.宏指令7.ORG伪指令8.汇编结束伪指令END29第四章:汇编语言程序设计——伪指令设定段寄存器伪指令设定段寄存器伪指令用来通知汇编程序哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。常用的段定义为指令有ASSUME。ASSUME段寄存器:段名[,段寄存器:段名,……]注意:由于ASSUME伪指令只指明某一个段地址应存于哪
本文标题:微机原理与接口技术 中科大第四版 ppt
链接地址:https://www.777doc.com/doc-3164738 .html