汇编语言教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

汇编语言第5章5.18086汇编语言基础5.1.1汇编语言基本语法5.1.2汇编语言语句5.1.3伪指令语句5.1.4宏指令语句5.2汇编语言程序设计5.2.1顺序程序设计5.2.2分支程序设计5.2.3循环程序设计5.2.4子程序设计5.2.5DOS功能调用●汇编语言的处理过程:(1)编写汇编语言源程序,生成扩展名为ASM的汇编源源文件。(2)对汇编源程序进行编译。(3)对目标文件进行连接。教学进程5.18086汇编语言基础●●1)效率低(与人们描述计算过程的需要差距大);2)机器硬件的具体结构联系过于紧密——在一种结构的机器上开发的程序极难移植到另一种不同结构的机器上去。教学进程5.18086汇编语言基础汇编语言进行程序设计的优点1)充分利用机器的硬件功能和结构特点,加快程序的执行速度,减少目标程序所占用的存储空间;2)用来编写实时控制程序、实时通信程序,有时也用来编制某些系统软件程序。汇编语言进行程序设计缺点教学进程宏指令语句是由编程者按照一定的规则来定义的一种较“宏大”的指令,可包括多条指令或伪指令。汇编语言基本语法在8086汇编中使用的语句可以分成3种类型这类指令能够产生目标代码,是CPU可以执行的能够完成特定功能的语句,主要由机器指令组成。在汇编时一条指令语句被翻译成对应的机器码,对应着特定的操作。指令语句:伪指令语句:伪指令语句是为汇编程序和连接程序提供一些必要控制的管理性语句,它不产生目标代码,仅仅在汇编过程中告诉汇编程序应如何汇编,并完成相应的伪操作。宏指令语句:5.1.1教学进程汇编语言源程序中的语句可以由四项组成,格式如下:[名字]操作符[操作数][;注释]汇编语言语句5.1.2(2)操作符可以是指令、伪指令或宏指令的助记符。(3)操作数字段是操作符的操作对象。(4)注释字段是以“;”开头的说明部分,可以用英文或者中文书写。(1)名字项是程序设计人员自己定义的符号,用于代表内存单元的地址,表示本条语句的符号地址。一般来说,名字可以是标号和变量,统称为标识符。●1.汇编语言格式5.1.2汇编语言语句教学进程●1.汇编语言格式标号:标号在代码段中定义,后面跟着冒号标号。变量:变量在数据段或附加数据段中定义,后面不跟冒号。标识符标号和变量都有三个属性段属性:标号所代表的段的值,可用SEG算符得到。偏移量属性:标号所代表的偏移量的值,可用OFFSET算符得到。类型属性:标号所代表的内存单元所存放的数据或指令代码的类型。组成标号的字符:A〜Z,a〜z,0〜9,?,@,$,和_(下划线);标号的最大长度为3l(字符个数);标号的第一个字符不能是0〜9的数字;机器指令语句中标号必须以冒号结束,伪指令语句中的标号不允许有冒号。名字项的组成规则●算术操作符有+、-、*、/和MOD以及SHL(左移)、SHR(右移)。其中MOD运算是取模运算,即除法之后所得的余数。5.1.2汇编语言语句2.例:MOVAL,10MOD3;AL=1ADDAL,11HSHR1;AL=8MOVAX,(9-1)*2;AX=0FH教学进程算术操作符逻辑操作符包括AND、OR、XOR、NOT,逻辑操作符是按位操作的,只能用于数字表达式。5.1.2汇编语言语句例:ANDDX,PORT_VALAND;DX=DXANDPORT_VALANDMOVAL,00HAND0FH;AL=00HMOVCX,08FHORF8H;CX=0FFHS教学进程●3.逻辑操作符●求变量或标号类型值格式:TYPE变量或标号功能:若为变量,则程序将回送该变量以字节数表示的类型:DB为1,DW为2,DD为4,DQ为8,DT为10。若为标号,则程序将回送代表该标号类型的数值:NEAR为-1,FRA为-2。5.1.2汇编语言语句例:ARRAYDW1,2,3MOVAX,05HADDAX,TYPEARRAY;AX=5+2=7教学进程●4.数值回送操作符●格式:OFFSET变量或标号功能:返回变量或标号所在段的段内偏移地例:MOVAXOFFSETLABEL;AX=0001H5.1.2汇编语言语句●取段基地址格式:SEG变量或标号功能:返回变量或标号所在段的段地址例:MOVDXSEGLABEL;AX=1000H教学进程4.数值回送操作符●取地址的偏移量●格式:LENGTH变量功能:如果变量是用DUP说明,则返回DUP定义变量的重复次数,否则,返回值为1。●取变量字节数格式:SIZEBIANL1功能:返回变量的字节数,等于LENGTH与TYPE的乘积。例:BUFFER1DB10DUP(10H)BUFFER2DW20DUP(20H)MOVAX,LENGTHBUFFER1;AX=10MOVBX,SIZEBUFFER2;BX=20教学进程5.1.2汇编语言语句4.数值回送操作符●取变量单元数5.1.2汇编语言语句●PTR操作符格式:类型PTR符号名功能:该操作符用于指定操作数的类型。属性操作符教学进程5.●THIS操作符格式:THIS类型功能:把它后面指定的类型或距离属性赋给当前的变量、标号或定制表达式。●段操作符格式:段寄存器名:地址表达式功能:用来表示变量或地址表达式的段属性。●格式:SHORT标号功能:用来修饰转移指令的目标地址的属性,偏移量为8位。●分类运算符格式:HIGH表达式LOW表达式功能:从表达式种分离出高字节、低字节。运算符:EQ(相等)、NE(不等于)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于),当关系成立时,运算结果为1(FFH或FFFFH),否则为0。格式:表达式1关系运算符表达式2SHORT操作符教学进程5.1.2汇编语言语句属性操作符5.6.关系运算符优先级运算符(操作符)高低括号中的表达式LENGTH,SIZE,WIDTH,MASKPRT,OFFSET,SEG,TYPE,THIS,段前缀HIGH,LOW*,/,MOD,SHL,SHR+,-EQ,NE,LT,TE,GT,GENOTOR,XORSHORT5.1.2汇编语言语句运算的优先级别教学进程7.●EQU等价伪指令格式:符号名EQU表达式功能:用来定义一个符号,用该符号代表机器指令助记符、伪指令助记符、寄存器名字、各种运算符号、常数等。伪指令语句例:VALEQU100JIAEQUADDADREQU[SI+BX+1000H]MOVAL,VALJIAAL,10MOVADR,AL1.符号定义伪指令教学进程5.1.3●等号伪指令格式:符号名=表达式功能:等号伪指令用来定义一个符号,用该符号代表表达式、常数等。5.1.3教学进程伪指令语句(续)1.符号定义伪指令●解除符号定义伪指令格式:PURGE符号1,符号2,……功能:用来解除之前引用符号的定义。数据定义伪指令有五种:DB、DW、DD、DQ、DT和DUP。格式:变量名DB表达式;定义字节变量名DW表达式;定义字变量名DD表达式;定义双字变量名DQ表达式;定义8个字节变量名DT表达式;定义10个字节复制次数DUP表达式功能:其中,DT伪操作指令用来定义10个字节,其后的每个操作数占有10个字节,形成压缩的BCD码;DUP指令可以为若干重复数据分配内存单元。5.1.3伪指令语句数据定义伪指令教学进程2.格式:5.1.3伪指令语句段定义伪指令教学进程3.段名SEGMENT……段名ENDS段定义时,必须将段和段寄存器自之间建立对应关系,可以用ASSUME伪操作来实现,其格式为:ASSUME段寄存器名:段名1[,段名2……]例:***********************data_seg1segment;定义数据段……data_seg1ends***********************code_segsegment;定义代码段assumeds:data_seg1,es:data_seg1assumecs:code_segstart:;程序执行的起始地址movax,data_seg1;数据段地址movds,ax;存入DS寄存器movax,data_seg1;附加段地址moves,ax;存入ES寄存器……code_segends;代码段结束**************************endstart5.1.3伪指令语句教学进程段定义伪指令举例格式:功能:完成过程定义,在过程体中实现过程的操作功能。过程名PROC……过程体RET过程名ENDP5.1.3伪指令语句过程定义伪指令教学进程4.例:CODESEGMENTAPRCPROCNEARADDAX,BX……RETAPRCENDPSTART:MOVAX,CXCALLAPOC……CODEENDSENDSTART条件汇编有多种伪操作指令:(1)IF表达式功能:表达式为1,汇编程序段1,否则跳过。(2)IFE表达式功能:表达式为0,汇编程序段1,否则跳过。(3)IFB参数功能:参数为空格,汇编程序段1,否则跳过。5.1.3伪指令语句格式:IF××表达式……程序段1ELSE……程序段2ENDIF5.教学进程条件汇编伪指令(4)IFNB参数功能:参数不为空格,汇编程序段1,否则跳过。(5)IFIDN参数1,参数2功能:字符串参数1与字符串参数2相同,汇编程序1,否则跳过。5.1.3伪指令语句例:AAEQU10H……IFAA-10HMOVCL,4SALAL,CLELSEMOVCL,4SARAL,CLENDIF教学进程条件汇编有多种伪操作指令(续)5.条件汇编伪指令格式:宏指令名MACRO[形式参数1,形式参数2,……]……ENDM其中,MACRO和ENDM是一对伪操作。宏指令语句1.宏指令的定义教学进程5.1.45.1.4宏指令语句……MINCL,[SI],[DI];把由SI和DI间接寻址的两个内存单元中;不带符号数中小的送入CL……汇编后展开:……+PUSHAX+MOVAL,[SI];实参[SI]替换形参SR1+CMPAL,[DI];实参[DI]替换形参SR2+JNB??00;符合地址ADDR被??00替换+MOVAL,[DI]+??00:MOVCL,AL;实参CL替换形参DES+POPAX……+号代表宏展开的语句。教学进程宏调用举例5.1.4宏指令语句格式:LOCAL符号地址1,符号地址2,……●这些符号地址在宏展开时,由汇编程序重新命名。局域符号定义●例:宏定义可以无参数宏定义:SAVEREGMACROPUSHAXPUSHBXPUSHCXPUSHDXENDM宏调用:SAVEREG3.宏指令举例教学进程2.●例:宏定义参数可以时操作码宏定义:REGINCMOCROP1,P2,P3MOVAX,P1P2P3ENDM宏调用:REGINCIVAR1,INC,AX宏展开:+MOVAX,IVAR1+INCAX5.1.4宏指令语句●伪操作PURGE可以取消宏定义宏定义:ADD2MACROOPTR1,OPTR2,RESULTMOVAX,OPTR1ADDAX,OPTR2MOVRESULT,AXENDM宏调用:ADD2XX,YY,ZZPURGEADD2教学进程伪操作PURGE汇编语言程序设计5.2.1顺序程序设计●Y=5X+8,设X为无符号字节数据,且在ARGX单元存放。计算结果,存入RLTY单元。教学进程5.2SSEGSEGMENTSTACK;堆栈段开始STKDB20DUP(0)SSEGENDS;堆栈段结束DSEGSEGMENT;数据段开始ARGXDB15RLTYDW0DSEGENDS;数据段结束CSEGSEGMENT;代码段开始ASSUMECS:CSEG,DS:DSEGASSUMESS:SSEGCALC:MOVAX,DSEGMOVDS,AXMOVAX,SSEGMOVSS,AXMOVSP,LENGTHSTKMOVAL,ARGX;取原始数MOVBL,05MULBL;计算5xMOVBX,08ADDAX,BX;再加上8MOVRLTY,AX;保存结果MOVAX,4C00HINT21HCSEGENDSENDCALC教学进程顺序程序设计举例(续)●分支程序设计举例:设内存中有三个互不相等的无符号字数据,分别存放在ARG开始的字

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功