您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > ASM-51-汇编使用手册
ASM-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,110110011B10进制******0,1,2...932768缺省基数标记16进制****H0,1...E,F0CDE3H最前面一个字符应是0--9ASCII'**'ASCII'AD'只有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,R1SHL2AND与操作ADDA,R1AND10000101BOR或操作ADDA,R1OR00110000BXOR异或操作ADDA,R1XOR36HNOT非操作ADDA,NOT45HHIGH高字节分离ADDA,HIGH05E2HLOW低字节分离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文件,它只包含由各种程序语句所生成的代码,而不包含任何信息或助记符。该文件是能够在处理器上运行的实际机器指令码。目标代码文件格式如下::ccaaaattddaaddssCR计数器记录地址数据类型记录地址代码的字节和校验回车目标代码文件(.HEX)的每一行以一个冒号开始,后面跟着的数字和符号分别表示十六进制数据的计数器(cc),记录第一个数据字节的16位地址(aaaa),目标记录的数据类型(tt),代码的实际字节(dd),计数器从第一个数据字节到最后的所有字节值累加和的相反数即和校验(ss)等等。(2)列表输出文件(.LST)列表输出文件也是个ASCII文件,它由源程序和目标代码文件组成,可作为程序文档也可被打印。列表输出文件是分页显示,打印的,其长度由缺省值或伪指令$PAGE决定。每页一开始指出汇编程序的类型,版本以及页号等。2、伪操作指令汇编语言中的指示性语句(伪指令),不象指令性语句会产生目标代码,它主要是用来“控制指挥“汇编程序如何把指令性语句翻译成目标代码。除本身伪指令申请分配一部分存贮空间作数据区和堆栈区外,不产生任何目标代码。按照它们的功能,大致分成七类:符号定义伪操作,段定义伪操作,数据定义崐伪操作,列表伪操作,条件伪操作,宏处理伪操作以及其它操作等。如表-3所示。表-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数据定义伪操作数据定义伪操作格式:[标号:]数据定义名[表达式1,表达式2,...]其中数据定义名可为DB,DW,DS等。如表-7所示,数据定义伪操作的含义及说明。表-5段定义伪操作段用法及区别代码段(CSEG)包含由处理器所执行的程序。段名可缺省。有目标代码生成。数据段(DESG)由内部工作寄存器的处理器的RAM组成。用来对程序使用的数据地址赋符号名,大多以ORG,DATA,BYTE,WORD,EDNS等组成。无目标码生成。外部段(XSEG)由外部工作寄存区和RAM组成。使用方法同数据段。无目标码生成。功能段(FSEG)由特殊寄存器位置组成(如:输入/输出部件,计时器,中断控制和连续的寄存器部件接口等)。无目标代码生成。位段(BSEG)由一些独立的位组成,可以用布尔函数实现。该段地址被解释为位地址。无目标代码生成。表-6程序分段的类型符号段标号(Label)字节型操作数(Byte)字型操作数(Word)代码段CSEGLDW数据段DSEGDDW外部段XSEGXXE功能段FSEGFFG位段BSEGBBB说明:(1)在不同的段中类型符号不同;(2)字节型操作数(Byte)一般通过DATA指令赋给符号;字型操作数一般通过WORD指令赋给符号;(3)如果各段中用BYTE赋值,则在各段中符号全以S表示;在SIM51模拟/调试中的符号区显示功能中,对BYTE赋值的将被跳过。(4)在各段中,位类型可以用BIT指令赋给。表-7数据定义伪操作数据定义名含义说明DB用于定义一个字节包含的值表达式不是字符串时,每个表达式赋给一个字节,是字符串时,用单引号“'“作为分隔符。DW用于定义一个字(16位)每个表达式占16位。如果表达式中的存贮内容为字符串,只取最后两个字符。若字符串只有一个字符,高字节置“0“。DS定义一个存贮区通常用在代码段中,作为程序的一部分。若用在数据段,外部段,则作为位置标志使用。表-8列表伪操作伪指令含义及格式说明$TITLE给源程序指定一个标题标题不加““,其最大长度格式:$TITLE[标题行]60个字符。若标题行省略,原来定义的标题行作废。$SUBTTL给源程序指定一个副标题副标题不加““,其最大长度60字符。若副标题行省略,格式:$SUBTTL[副标题行]原来定义的副标题行作废。$PAGE用于形成或定义新的一页或行数汇编时页长为66行(适合于格式:$PAGE[表达式]标准打印纸)。表达式最大为65535,最小为12,表达式缺省,则从新的一页开始。$LIST使源程序汇编时,产生程序清单汇编时无此指令照样产生清单。格式:$LIST$NOLIST使源程序汇编时不产生程序清单格式:$NOLIST$NOCODE源程序汇编时,条件汇编程序值没有此指令汇编时,不论其值是为假的不产生清单。真、假的条件都不产生目标码。格式:$NOCODE2、4列表伪操作如表--8所示,列表伪操作的含义,格式及说明。2、5条件伪操作条件伪操作格式:IF表达式[程序块1][ELSE][程序块2]ENDIF当IF指令中的表达式为真时,被汇编的代码段是程序块1;当IF指令中的表达式为假时,被汇编的代码段是程序块2。在一个条件结构中,仅有一个代码段被汇编,其它的则被忽略。2、6宏处理操作在源程序中,如果有一段程序需要多次使用,为使程序不重复书写这段程序,可用宏定义把所需要重复出现的程序块定义成宏指令,此后在宏指令出现的地方,宏汇编程序总是自动地把它们替换成相应的代码段。(1)宏指令格式[宏指令名]MACRO[形式参数,
本文标题:ASM-51-汇编使用手册
链接地址:https://www.777doc.com/doc-5091214 .html