ASM51宏汇编使用手册.doc_第1页
ASM51宏汇编使用手册.doc_第2页
ASM51宏汇编使用手册.doc_第3页
ASM51宏汇编使用手册.doc_第4页
ASM51宏汇编使用手册.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ASM51宏汇编使用手册2007-01-21 10:33ASM-51宏汇编使用手册ASM-51宏汇编主要用来开发Inter8051系列单片机,它具有宏处理,数据处理,列表处理和条件处理等多种功能。源程序的编写完全采用Inter标准助记符和行格式。在编写程序过程中,可借助于文本编辑(Windows的记事本)或文字处理软件Word等编辑,经ASM-51汇编后生成列表输出文件(.LST)和目标代码文件(.HEX)。此目标代码文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051进行模拟/调试,或直接用于硬件仿真器上运行。当然,这也是要烧写到单片机ROM中的代码。1、宏汇编语言的基本语法1、1宏汇编的特点ASM-51宏汇编完全支持Inter助记符的汇编语言,它含有宏语句,英文大小写字母,变量名,标号等不受限制,有二,十,十六进制和串参数类型,有汇编控制指令和多层条件语句,程序逻辑分段,还有模块化程序设计的连接功能,汇编速度快等特点。1、2汇编处理过程(1)用行编辑EDLIN或文字处理软件WS或全屏幕编辑软件PE等,编辑宏汇编语言源程序,它的文件扩展名为。ASM。(2)用ASM-51宏汇编程序对上述源程序文件进行汇编,产生扩展名为.LST的列表输出文件和扩展名为.HEX的目标代码文件(.HEX)。列表输出文件包含源程序语句所汇编成的代码,以及有关的地址,语句和符号表等。目标代码文件包含源程序语句所汇编成的代码,不包含任何符号信息或助记符。进行模拟/调试,或直接用于硬件仿真器上运行。1、3语句汇编语言可分为两类语句:指令性语句和指示性语句。(1)指令性语句这一类语句是指在汇编过程中能生成指令代码的语句(如MOV,DEC等)。其格式为:标号:指令助记符操作数;注释其中方括号中为选择项。下同。(2)指示性语句这一类语句即通常所说的伪指令,它指示汇编程序后面的指示性语句如何产生代码。ASM-51宏汇编完全支持Inter助记符的汇编语言,因此汇编程序的格式,指令完全与8051汇编语言一样,这里不再介绍它们的指令系统。1、4常量与数值运算(1)常量及其表示常量,就是在汇编时已经确定的值。在汇编语言中,常量主要用作指令性语句中的直接操作数,也可用于存储器操作的组成部分(如位移量),或者为伪指令中的变量输初值。为便于程序设计,常量有多种表示形式:二、十、十六进制数和字符串等,它们的格式各不相同,并采用不同的基数标记加以区分。表-1列出其格式。表-1数据形式格式取值范围例如备注2进制*B0,110011100B10进制*0,1,2.945723缺省基数标记16进制*H0,1.E,F0CDE3H最前面一个字符应是0-9ASCII*ASCIIAD只有DB命令中使用常量以数值形式直接写在汇编语言的语句中称为字面常量,若预先为它定义一个符号名,然后在语句中用符号名来表示该常量称符号常量。使用符号常量的优点可改善程序的可读性,它的定义需要使用伪操作命令EQU或“=“。(2)数值运算宏汇编中,所有参数值均被认为是整数,并以16位的形式存放,表示的范围是0-65535,所有算术操作均对整数以补码形式运算。(1)基本运算汇编语言对常量允许进行算术运算,逻辑运算,分离运算等三种类型的运算。如表-2所示。表-2基本运算运算操作含义以ADD为例算+加操作ADDA,R1+36-减操作ADDA,R1-2EH*乘操作ADDA,R1*0E3H术/除操作ADDA,R1/23MOD模除ADDA,R1MOD12SHR右移ADDA,R1SHR3SHL左移ADDA,R1SHL2逻AND与操作ADDA,R1AND10000101BOR或操作ADDA,R1OR00110000BXOR异或操作ADDA,R1XOR36H辑NOT非操作ADDA,NOT45H分HIGH高字节分离ADDA,HIGH05E2H离LOW低字节分离ADDA,LOW77F0H说明:R1为符号常量(即内存地址)。(2)综合运算综合运算规则1:计算表达式时,所有的运算全部从左到右顺序进行,遇到操作数就进行运算,不考虑优先关系,括号有助于视觉理解,但不改变表达式的?计算顺序。例如:R1SETNOT(0C5FHOR000CH)其结果应为0F3ACH。综合运算规则2:当两个操作数之间没有参数相隔时,第二个操作符优先于第一个操作符计算。例如:R1SETNOT10011010B其结果应为65H。1、5程序分段8051系列的处理器的结构,把内存分成五个独立的内存段,即代码段(段名CSEG),数据段(段名DSEG),外部段(段名XSEG),功能段(段名FSEG)和位段(段名BSEG)等。各个段在源程序中的次序可以任意,段的数目可以根据需要确定,原则上不受限制。程序中的所有段都必须用段名开头,段结束语句ENDS结束。1、6源文件源文件是由汇编语言代码和汇编程序指令组成的ASCII字符文件,扩展名为。ASM。源文件的每一语句行,最多有四个域。每一行的长度不超过80个字符,且以“回车“键结束。1、7列表输出文件和目标代码文件(1)目标代码文件(.HEX)目标代码文件(.HEX)是ASCII文件,它只包含由各种程序语句所生成的代码,而不包含任何信息或助记符。该文件是能够在处理器上运行的实际机器指令码。目标代码文件格式如下:ccaaaattddaaddss计数器数据类型记录地址回车记录地址代码的字节和校验目标代码文件(.HEX)的每一行以一个冒号开始,后面跟着的数字和符号分别表示十六进制数据的计数器(cc),记录第一个数据字节的16位地址(aaaa),目标记录的数据类型(tt),代码的实际字节(dd),计数器从第一个数据字节到最后的所有字节值累加和的相反数即和校验(ss)等等。(2)列表输出文件(.LST)列表输出文件也是个ASCII文件,它由源程序和目标代码文件组成,可作为程序文档也可被打印。列表输出文件是分页显示,打印的,其长度由缺省值或伪指令$PAGE决定。每页一开始指出汇编程序的类型,版本以及页号等。2、伪操作指令汇编语言中的指示性语句(伪指令),不象指令性语句会产生目标代码,它主要是用来“控制指挥“汇编程序如何把指令性语句翻译成目标代码。除本身伪指令申请分配一部分存贮空间作数据区和堆栈区外,不产生任何目标代码。按照它们的功能,大致分成七类:符号定义伪操作,段定义伪操作,数据定义崐伪操作,列表伪操作,条件伪操作,宏处理伪操作以及其它操作等。如表-所示。表-3伪操作指令序号分类伪操作指令1符号定义伪操作EQU,=,DATA,BYTE,WORD,BIT,SET2段定义伪操作ORG,END,CSEG,DSEG,XSEG,FSEG,ENDS3数据定义伪操作DB,DW,DS4列表伪操作$TITLE,$SUBTTL,$PAGE,$LIST,$NOLIST,$NOCODE5条件伪操作IF,ELSE,ENDIF6宏处理伪操作MACRO,ENDM7其它ALTNAME,INCLUDE2、1符号定义伪操作符号定义伪操作及其格式:符号名符号定义名常量或表达式其中符号定义名可以为EQU,=,DATA,BYTE,WORD,BIT,SET等。下面就是这些符号定义伪操作的用法及说明。如表-4所示。表-4符号定义伪操作符号定义名用法说明EQU为常量,符号名等定义符号化常量名符号名不能重名定义=为常量,符号名等定义符号化常量名符号名不能重名定义DATA用来为一个字节类型的符号定值符号名不能重名定义BYTE用来为一个字节类型的符号定值符号名不能重名定义WORD用来为一个字类型的符号定值符号名不能重名定义8051中没有字操作BIT用来定义一个字位类型SET用来定义整数类型的符号名符号名可重名定义DATA与BYTE的区别:DATA与BYTE是相类似的伪指令。当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。2、2段定义伪操作(1)ORG用于设置或改变程序计数器的值。其格式为:ORG常数或表达式例如:ORG0008HORG$+5其中$表示程序计数器的当前值。(2)END表示源代码结束。其格式为:END常数或表达式汇编程序遇到END语句即停止运行。若程序中没有END,则在汇编源程序时显出错(3)8051系列的处理器把内存结构分成五个段,代码段CSEG,数据段DSEG,外部段XSEG,功能段FSEG和位段BSEG等,其用法及区别如表-5所示。在汇编以上各段所定义的符号时,系统根据符号所在不同段,赋与不同类型的字母,如表-6所示。2、3数据定义伪操作数据定义伪操作格式:标号:数据定义名表达式,表达式,。其中数据定义名可为DB,DW,DS等。如表-7所示,数据定义伪操作的含义及说明。表-5段定义伪操作段用法及区别代码段(CSEG)包含由处理器所执行的程序。段名可缺省。有目标代码生成。数据段(DESG)由内部工作寄存器的处理器的RAM组成。用来对程序使用的数据地址赋符号名,大多以ORG,DATA,BYTE,WORD,EDNS等组成。无目标码生成。外部段(XSEG)由外部工作寄存区和RAM组成。使用方法同数据段。无目标码生成。功能段(FSEG)由特殊寄存器位置组成(如:输入/输出部件,计时器,中断控制和连续的寄存器部件接口等)。无目标代码生成。位段(BSEG)由一些独立的位组成,可以用布尔函数实现。该段地址被解释为位地址。无目标代码生成。表-6程序分段的类型符号段标号(Label)字节型操作数(Byte)字型操作数(Word)代码段CSEG数据段DSEG外部段XSEG功能段FSEG位段BSEG说明:(1)在不同的段中类型符号不同;(2)字节型操作数(Byte)一般通过DATA指令赋给符号;字型操作数一般通过WORD指令赋给符号;(3)如果各段中用BYTE赋值,则在各段中符号全以S表示;在SIM51模拟/调试中的符号区显示功能中,对BYTE赋值的将被跳过。(4)在各段中,位类型可以用BIT指令赋给。表-7数据定义伪操作数据定义名含义说明DB用于定义一个字节包含的值表达式不是字符串时,每个表达式赋给一个字节,是字符串时,用单引号“作为分隔符。DW用于定义一个字(16位)每个表达式占16位。如果表达式中的存贮内容为字符串,只取最后两个字符。若字符串只有一个字符,高字节置“0“。DS定义一个存贮区通常用在代码段中,作为程序的一部分。若用在数据段,外部段,则作为位置标志使用。表-8列表伪操作伪指令含义及格式说明$TITLE给源程序指定一个标题标题不加“,其最大长度格式:$TITLE标题行60个字符。若标题行省略,原来定义的标题行作废。$SUBTTL给源程序指定一个副标题副标题不加“,其最大长格式:$SUBTTL副标题行度60字符。若副标题行省略,原来定义的副标题行作废。$PAGE用于形成或定义新的一页或行数汇编时页长为行(适合于格式:$PAGE表达式标准打印纸)。表达式最大为65535,最小为12,表达式缺省,则从新的一页开始。$LIST使源程序汇编时,产生程序清单汇编时无此指令照样产生清单。格式:$LIST$NOLIST使源程序汇编时不产生程序清单格式:$NOLIST$NOCODE源程序汇编时,条件汇编程序值没有此指令汇编时,不论其值是为假的不产生清单。真、假的条件都不产生目标码。格式:$NOCODE2、4列表伪操作如表-8所示,列表伪操作的含义,格式及说明。2、5条件伪操作条件伪操作格式:IF表达式程序块1ELSE程序块2ENDIF当IF指令中的表达式为真时,被汇编的代码段是程序块1;当IF指令中的表达式为假时,被汇编的代码段是程序块2。在一个条件结构中,仅有一个代码段被汇编,其它的则被忽略。2、6宏处理操作在源程序中,如果有一段程序需要多次使用,为使程序不重复书写这段程序,可用宏定义把所需要重复出现的程序块定义成宏指令,此后在宏指令出现的地方,宏汇编程序总是自动地把它们替换成相应的代码段。(1)宏指令格式宏指令名MACRO形式参数,。代码段ENDM在宏定义中,使用了“形式参数“,它们引用宏指令时被给出的一些名字或数值(实在参数)所替换。使用形式参数给宏指令带来了很大的灵活性。(2)宏调用格式宏指令名实在参数,。注意:1、当有两个以上的实参数时,它们之间要用逗号,空格或列表符隔开。2、实参数项将对应替换宏指令中形式参数。如果形式参数为标号时,则在宏调用中,实参也应为标号,且要求实参是唯一的。如果宏定义中有自己的标号,则在宏调用时,汇编程序自动地把标号变成唯一的标号。2、7其他(1)替换名ALTNAME功能:这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。格式:ALTNAME保留字自定义名注意:自定义名与保留字之间首字符必须相同。(2)附加文件的链结INCLUDE功能:利用此伪指令可将一个源文件插入到当前源文件中一起汇编,最终成为一个完整的源程序。格式:INCLUDE驱动器名:路径名文件名注意:1、文件名中若没有扩展名,则系统默认是。ASM(该文件必须是能打开的)。2、被插入的源程序中不能包含END伪指令,否则汇编会停止运行。被链接文件的每一行,在程序清单中以“I“开头。3、链接伪指令可有级嵌套,若要求嵌套的多,则要修改DOS中的CONFIG。SYS文件的FILES参数。3宏汇编运行3、1系统运行环境ASM-51宏汇编要在IBM-PC及其兼容机上运行(至少128K字节的RAM);具有一个软驱动器或硬驱动器,采用ANSI标准终端(包括键盘,显示控制器,打印机,至少一个RS-232异步通讯接口)。软件有PC-DOS,MS-DOS2。0以上版本,ASM_51系统。3、2宏汇编程序的运行以8051宏汇编为例,在DOS系统的提示符下键入AASM51文件名。ASM等错误的个数出现后,键入变返回到DOS提示符下。8051的宏汇编与此相似。4汇编的使用使用ASM-51宏汇编是将8051源程序汇编生成列表输出文件和目标代码文件,供模拟/调试时使用。我们使用的宏汇编完全采用Inter标准助记符和行格式,因此在编写源程序时,可以使用宏汇编中的伪指令,以增加源程序的运行速度和可读性。也可以直接用Inter标准助记符来编写源程序。再经过ASM-51宏汇编进行汇编,便可得到列表输出文件和目标代码文件。汇编的格式如下:ASM51文件名。ASM可选项其中可选项为:/L,/H,/S,/P,/N/L表示源程序汇编后不生成列表册输出文件(.LST),只显示在屏幕上。/H表示源程序汇编后不生成目标代码文件(.HEX)。/S表示源程序汇编后不生成符号表。/P表示源程序汇编后生成符号表。/N表示源程序汇编后,程序是连续的显示。如果没有选择项,则表示产生列表输出文件和目标代码文件,且在LST文件后面列出符号表。生成的目标代码便可以进行模拟/调试,如果在模拟/调试中发现错误,则源程序要经过修改,重新汇编,然后再进行模拟/调试,直到完全正确。若程序汇编过程中有错误,则给出出错信息(出错信息见附录)。生成的目标代码可以进行模拟/调试/烧写。附录ASM-51汇编出错信息表1AddressOutofRange一个被计值的目标地址超出了当前语句的范围。2BadlyFormedArgument数字规定的类型中有非法数字存在。3IllefalEquale有不允许的类型约定。4LabelNameConflictsWithSymbolName在程序中有两个符号相同。5LabelAddressChangedOnPass2。源程序在此错误之前,还有一些错误。6MissingArgumentinExpression表达式中算术运算符后面没有操作数。7MissingENDStatrment汇编的源程序结尾未发现END语句。8MultiplyDefinedLabel源程序中定义了两个标号。9UnbalancedParentheses表达式中多余或缺少括号。10UndefinedSymbol语句中的符号名可能拼错或未被定义。11UnrecognizedStatemenorUndefinedArgument未定义参数的指令或代码。12#118alueOutofRange有一个非法的值来说明一个有着可能值限制的语句。MCS-51汇编语言指令集2007年04月29日 星期日 下午 03:30MCS-51汇编语言指令集 符号定义表符号 含义 Rn R0R7寄存器n=07 Direct直接地址,内部数据区的地址RAM(00H7FH)SFR(80HFFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0Ri间接地址Ri=R0或R1 8051/31RAM地址(00H7FH) 8052/32RAM地址(00HFFH)#data8位常数#data1616位常数Addr1616位的目标地址Addr1111位的目标地址Rel相关地址bit内部数据RAM(20H2FH),特殊功能寄存器的直接地址的位 指令介绍指令字节周期动作说明算数运算指令1ADD A,Rn11将累加器与寄存器的内容相加,结果存回累加器2ADD A,direct21将累加器与直接地址的内容相加,结果存回累加器3ADD A,Ri11将累加器与间接地址的内容相加,结果存回累加器4ADD A,#data21将累加器与常数相加,结果存回累加器5ADDC A,Rn11将累加器与寄存器的内容及进位C相加,结果存回累加器6ADDC A,direct21将累加器与直接地址的内容及进位C相加,结果存回累加器7ADDC A,Ri11将累加器与间接地址的内容及进位C相加,结果存回累加器8ADDC A,#data21将累加器与常数及进位C相加,结果存回累加器9SUBB A,Rn11将累加器的值减去寄存器的值减借位C,结果存回累加器10SUBB A,direct21将累加器的值减直接地址的值减借位C,结果存回累加器11SUBB A,Ri11将累加器的值减间接地址的值减借位C,结果存回累加器12SUBB A,0data21将累加器的值减常数值减借位C,结果存回累加器13INC A11将累加器的值加114INC Rn11将寄存器的值加l15INC direct21将直接地址的内容加116INC Ri11将间接地址的内容加117INC DPTR11数据指针寄存器值加1说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位18DEC A11将累加器的值减119DEC Rn11将寄存器的值减120DEC direct21将直接地址的内容减121DEC Ri11将间接地址的内容减122MUL AB14将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为023DIV AB14将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为024DA A11将累加器A作十进制调整,若(A) 3-09或(AC)=1,则(A) 3-0(A)3-0+6若(A) 7-49或 (C)=1,则(A) 7-4(A)7-4+6逻辑运算指令25ANL A,Rn11将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器26ANL A,direct21将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器27ANL A,Ri11将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器28ANL A,#data21将累加器的值与常数做AND的逻辑判断,结果存回累加器29ANL direct,A21将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址30ANL direct,#data32将直接地址的内容与常数值做AND的逻辑判断,结果存回该直接地址31ORL A,Rn11将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器32ORL A,direct21将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器33ORL A,Ri11将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器34ORL A,#data21将累加器的值与常数做OR的逻辑判断,结果存回累加器35ORL direct,A21将直接地址的内容与累加器的值做OR的逻辑判断,结果存回该直接地址36ORL direct,#data32将直接地址的内容与常数值做OR的逻辑判断,结果存回该直接地址37XRL A,Rn11将累加器的值与寄存器的值做XOR的逻辑判断,结果存回累加器38XRL A,direct21将累加器的值与直接地址的内容做XOR的逻辑判断,结果存回累加器39XRL A,Ri11将累加器的值与间接地扯的内容做XOR的逻辑判断,结果存回累加器40XRL A,#data21将累加器的值与常数作XOR的逻辑判断,结果存回累加器41XRL direct,A21将直接地址的内容与累加器的值做XOR的逻辑判断,结果存回该直接地址42XRL direct,#data32将直接地址的内容与常数的值做XOR的逻辑判断,结果存回该直接地址43CLR A11清除累加器的值为044CPL A11将累加器的值反相45RL A11将累加器的值左移一位46RLC A11将累加器含进位C左移一位47RR A11将累加器的值右移一位48RRC A11将累加器含进位C右移一位49SWAP A11将累加器的高4位与低4位的内容交换。(A)3-0(A)7-4数据转移指令50MOV A,Rn11将寄存器的内容载入累加器51MOV A,direct21将直接地址的内容载入累加器52MOV A,Ri11将间接地址的内容载入累加器53MOV A,#data21将常数载入累加器54MOV Rn,A11将累加器的内容载入寄存器55MOV Rn,direct22将直接地址的内容载入寄存器56MOV Rn,gdata21将常数载入寄存器57MOV direct,A21将累加器的内容存入直接地址58MOV direct,Rn22将寄存器的内容存入直接地址59MOV direct1, direct232将直接地址2的内容存入直接地址160MOV direct,Ri22将间接地址的内容存入直接地址61MOV direct,#data32将常数存入直接地址62MOV Ri,A11将累加器的内容存入某间接地址63MOV Ri,direct22将直接地址的内容存入某间接地址64MOV Ri,#data21将常数存入某间接地址65MOV DPTR,#data1632将16位的常数存入数据指针寄存器66MOVC A,A+DPTR12(A) (A)+(DPTR)累加器的值再加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器67MOVC A,A+PC12(PC)(PC)+1;(A)(A)+(PC)累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器68MOVX A,Ri12将间接地址所指定外部存储器的内容读入累加器(8位地址)69MOVX A,DPTR12将数据指针所指定外部存储器的内容读入累加器(16位地址)70MOVX Ri,A12将累加器的内容写入间接地址所指定的外部存储器(8位地址)71MOVX DPTR,A12将累加器的内容写入数据指针所指定的外部存储器(16位地址)72PUSH direct22将直接地址的内容压入堆栈区73POP direct22从堆栈弹出该直接地址的内容74XCH A,Rn11将累加器的内容与寄存器的内容互换75XCH A,direct21将累加器的值与直接地址的内容互换76XCH A,Ri11将累加器的值与间接地址的内容互换77XCHD A,Ri11将累加器的低4位与间接地址的低4位互换布尔代数运算78CLR C11

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论