📄 masm1.htm
字号:
<html>
<head>
<title>宏汇编软件的使用</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#cccccc">
<div align="center"><b><font face="宋体" lang="ZH-CN" size=5>宏汇编软件</font><font face="Arial" size=5>MASM51</font><font face="宋体" lang="ZH-CN" size=5>的使用</font></b></div>
<ol>
<ol>
<b><font face="宋体" lang="ZH-CN" size=5> </font><font face="黑体" lang="ZH-CN" size=5></font></b>
<p align="JUSTIFY">
<div align="center"><b><font face="黑体" lang="ZH-CN" size=4>第一</font></b> <b><font face="黑体" lang="ZH-CN" size=4>节</font><font face="Arial" size=4>
</font><font face="黑体" lang="ZH-CN" size=4>概</font><font face="Arial" size=4>
</font><font face="黑体" lang="ZH-CN" size=4>述</font><font face="黑体" lang="ZH-CN" size=4>
</font> </b> </div>
<p></p>
<font face="宋体" lang="ZH-CN" size=4> </font>
</ol>
<ol>
<font face="宋体" lang="ZH-CN" size=4> </font>
</ol>
<ol>
<font face="宋体" lang="ZH-CN" size=4>
<p align="JUSTIFY"></p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>单片机开发可以用手工汇编和机器汇编两种方法。采用手工汇编就是先编写出汇编程序,然后对照单片机汇编表手工将汇编程序翻译成机器码,最后将机器码一个一个地送入开发仿真器的RAM中去进行调试。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>由于采用手工汇编的机器码是相对于存储器的绝对地址进行定位的,因此在调试时,若要在程序中增加或删除一条指令,就会造成指令的绝对地址发生变化。这样除修改那条指令外,几乎所有转移、调用指令的操作数都要作相应的修改,稍有疏忽程序就会出错。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>而采用机器汇编,在很大程度上可以避免上述麻烦。只要通过键盘输入源程序后,其余作工作都由计算机来进行,即查出相应的机器码,对地址进行定位,建立能被开发装置接收的机器码文件、建立能打印出清单的列表文件等等。机器码不需要再一个一个地从仿真器的键盘上键入,只要从PC机的通讯口直接传送到开发装置中去。因此使用机器汇编大大提高了单片机开发的速度。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>源程序被输入到机器中后,以一个文件的形式保存起来,然后就可以对这个文件进行处理了,要对这个文件进行汇编,必须有相应的汇编程序。在PC机上进行汇编的程序有多种,以下介绍的MASM51软件就是其中的一种,它的主要特点有:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>1.对用户编写的源程序格式要求不太严格,例如,英文字母的大、小写不受限制,变量名或标号名没有长度限制,对源程序中的空格数也没有严格的要求等等。这些给用户编写程序带来很大的方便。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>2.具有较强的功能,例如支持宏语句,使同一程序中类似的程序结构,只要输入一次,在使用时可用宏语句调用。此外还允许用条件汇编语句以及完善的伪指令系统等。减少了编写、输入源程序的工作量。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>3.不管用户的源程序有多少错误,它都能全部汇编完,并能形成列表文件及目标文件,以供用户修改错误。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>4.可以接收汉字注释,并能完整的将汉字注释复制到列表文件,而其它一些汇编软件则不能处理汉字,或会使列表文件中的汉字注释混乱。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>运行MASM51软件的条件很低,现在的PC机都能达到。</font></p>
<font face="宋体" lang="ZH-CN" size=3>
<p align="JUSTIFY">
</font>
<div align="center"><font face="Arial" size=4></font><font face="黑体" lang="ZH-CN" size=4>第二节</font><font face="Arial" size=4>
</font><font face="黑体" lang="ZH-CN" size=4>如何启动MASM51宏汇编程序</font><b><font face="黑体" lang="ZH-CN" size=4>
</font><font face="黑体" lang="ZH-CN" size=4> </font></b></div>
<b><font face="黑体" lang="ZH-CN" size=4>
<p></p>
</font></b>
<ol>
<b><font face="黑体" lang="ZH-CN" size=4> </font>
<p align="JUSTIFY"> <font face="宋体" lang="ZH-CN" size=3> </font> <font face="Arial" size=3></font><font face="宋体" lang="ZH-CN">一、启动和退出</font><font face="宋体" lang="ZH-CN">
</font>
<font face="宋体" lang="ZH-CN">
<p></p>
</font></b><font face="宋体" lang="ZH-CN" size=3>
<p align="JUSTIFY"></p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>MASM51软件有两个文件:MASM51.EXE和MASM51.OVL,只要将这两个文件拷入硬盘的一个目录中(如MASM51)中,然后在DOS命令行中打入:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>MASM51(回车)</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>即在显示器上显示如下信息:</font></p>
<font face="Arial" size=3>
<p align="JUSTIFY"> The Cybernetic Micro Systems</p>
<p align="JUSTIFY"> CYS-8051 Software Package</p>
<p align="JUSTIFY"> Version 3.03`</p>
<p align="JUSTIFY"> for the IBM Personal Computer</p>
<p align="JUSTIFY"> (C)Copy right Cybrenetic MIcro Systems,Inc 1983,1984,1985,</p>
<p align="JUSTIFY"> 1986</p>
<p align="JUSTIFY">High Level Language Commands</p>
<p align="JUSTIFY"> ASM51[file] P8751 file P8744 file//</p>
<p align="JUSTIFY"> P27XX file COMP[file] READ[kbytes] DISP[start,num]</p>
<p align="JUSTIFY"> INITIALIZE CLEAR LIST EXIT</p>
<p align="JUSTIFY"> RUN[file] GOTO Label STOP CONT</p>
<p align="JUSTIFY"> DIR[spec] TYPE file DOS cmd HELP</p>
<p align="JUSTIFY"> PRINT arglist EQU = WARBLE</p>
<p align="JUSTIFY"> DELAY[secs] CLS HLSEARCH flag BEEP</p>
<p align="JUSTIFY"> OFFSET pc[,loc] PROM type SECURE SAVE file[,start,num]</p>
<p align="JUSTIFY"> LOAD file EDBYTE pc PVOLT value PSETUP num,value</p>
<p align="JUSTIFY"> ></p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>信息的出现说明已进入MASM51宏汇编程序,在屏幕下方出现的符号‘〉’是宏汇编程序提示符,它的出现告诉用户,宏汇编程序处于接收命令状态。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>虽然屏幕上提供了很多的命令,但大部份命令要在相应的硬件配合下才能实现。当用来汇编源程序时,使用的主要命令是:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>ASM51</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>盘号:文件名</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>〈回车〉</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>进行汇编</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>DIR</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>盘号:文件名</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>〈回车〉</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>显示目录</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>EXIT</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>〈回车〉</font><font face="Arial" size=3>
</font><font face="宋体" lang="ZH-CN" size=3>退出宏汇编</font></p>
<b><font face="宋体" lang="ZH-CN">
<p align="JUSTIFY">
<li></li>
<p></p>
<p align="JUSTIFY">
<li><a name="_Toc416236549">二、进行汇编</a></li>
<p></p>
</font></b>
</ol>
<font face="宋体" lang="ZH-CN" size=3>
<p align="JUSTIFY"></p>
</font>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>用户在使用宏汇编程序之前,应该已使用编缉器(如EDIT、CCED等)编好了8051汇编语言的源程序,并已作为一个文件存盘,该文件一般以.ASM为扩展名。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>进入MASM51后,键入</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> ASM51 [d:filename[.asm] [</font><font face="宋体" lang="ZH-CN" size=3>选项</font><font face="Arial" size=3>]</font></p>
<p align="JUSTIFY"> <font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>如果省略扩展名,则系统默认为</font><font face="Arial" size=3>.asm</font><font face="宋体" lang="ZH-CN" size=3>,如果不以</font><font face="Arial" size=3>.asm</font><font face="宋体" lang="ZH-CN" size=3>为扩展名,则应键入文件的全名。汇编后,将产生两个输出文件:一个是16进制代码文件,以</font><font face="Arial" size=3>.hex</font><font face="宋体" lang="ZH-CN" size=3>为扩展名,另一个是列表文件,以</font><font face="Arial" size=3>.lst</font><font face="宋体" lang="ZH-CN" size=3>为扩展名,文件名与输入文件的文件名相同。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>在汇编时,可以加入一些选项进行控制,可加的选项如下:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>1.</font><font face="Arial" size=3>/L</font><font face="宋体" lang="ZH-CN" size=3>选项:只在屏幕上显示列表文件的内容,不生成列表文件。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>2.</font><font face="Arial" size=3>/H</font><font face="宋体" lang="ZH-CN" size=3>选项:汇编后不在磁盘上产生</font><font face="Arial" size=3>.hex</font><font face="宋体" lang="ZH-CN" size=3>文件。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>3.</font><font face="Arial" size=3>/S</font><font face="宋体" lang="ZH-CN" size=3>选项:产生的列表文件中将不包括符号表。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>4.</font><font face="Arial" size=3>/P</font><font face="宋体" lang="ZH-CN" size=3>选项:汇编程序序所生成的符号表将成为能被其他源程序引用的永久符号表的一部份,即如果不退出宏汇编,该符号表将保留在内存中,在汇编其它源程序时可以引用它们,以便连接几个源文件。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>5.</font><font face="Arial" size=3>/N</font><font face="宋体" lang="ZH-CN" size=3>选项:使生成的列表文件在打印(或显示)时不分页。不加</font><font face="Arial" size=3>'/N'</font><font face="宋体" lang="ZH-CN" size=3>则每隔55行源代码生成一个新页头。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>一般情况下,我们不需要在命令后面加任何选项。</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>如下面所示:</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> ASM51 Filename[.asm] [</font><font face="宋体" lang="ZH-CN" size=3>回车</font><font face="Arial" size=3>]</font><font face="宋体" lang="ZH-CN" size=3>即可</font></p>
<p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>下面列出DEMO51.ASM的源文件,及用MASM51汇编后产生的代码文件和列表文件,以供参考。</font></p>
<i><font face="Arial" size=3>
<p align="JUSTIFY">T0_flag bit 0</p>
<p align="JUSTIFY">T1_flag bit 1</p>
<p align="JUSTIFY">INIT_Timer0 equ 0FE80H</p>
<p align="JUSTIFY">INIT_Timer1 equ 0FD00H</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY">X0_vector equ 0003H</p>
<p align="JUSTIFY">X1_vector equ 0013H</p>
<p align="JUSTIFY">T0_vector equ 000BH</p>
<p align="JUSTIFY">T1_vector equ 001BH</p>
<p align="JUSTIFY">S0_vector equ 0023H</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY">INIT: AJMP SETUP</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY">;Interrept Jump Table</p>
<p align="JUSTIFY"> ORG X0_vector</p>
<p align="JUSTIFY">INT_0: SETB P3.2</p>
<p align="JUSTIFY"> RETI ;int0 interrupt</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"> ORG T0_vector</p>
<p align="JUSTIFY">T0INT: ACALL TIM0 ;timer0 interrupt</p>
<p align="JUSTIFY"> RETI</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"> ORG X1_vector</p>
<p align="JUSTIFY">INT_1: SETB P3.3</p>
<p align="JUSTIFY"> RETI ;int1 interrupt</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"> ORG T1_vector</p>
<p align="JUSTIFY">T1INT: ACALL TIM1 ;timer1 interrupt</p>
<p align="JUSTIFY"> RETI</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY"> ORG S0_vector</p>
<p align="JUSTIFY"> AJMP SERIAL ;UART interrupt</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY">DB 'This is demo program for MCS-51TM'</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY">SETUP: MOV SP,#5FH ;set sp point</p>
<p align="JUSTIFY"> MOV TMOD,#11H ;set timer mode</p>
<p align="JUSTIFY"> MOV TH0,#HIGH(INIT_Timer0)</p>
<p align="JUSTIFY"> MOV TL0,#LOW(INIT_Timer0)</p>
<p align="JUSTIFY"> MOV TH1,#HIGH(INIT_Timer1)</p>
<p align="JUSTIFY"> MOV TL1,#LOW(INIT_Timer1)</p>
<p align="JUSTIFY"> SETB EX0</p>
<p align="JUSTIFY"> SETB PX0</p>
<p align="JUSTIFY"> SETB EX1</p>
<p align="JUSTIFY"> CLR PX1</p>
<p align="JUSTIFY"> SETB PT1</p>
<p align="JUSTIFY"> SETB ET0</p>
<p align="JUSTIFY"> SETB ET1</p>
<p align="JUSTIFY"> SETB TR0</p>
<p align="JUSTIFY"> SETB TR1</p>
<p align="JUSTIFY"> SETB ES</p>
<p align="JUSTIFY"> MOV SCON,#99H</p>
<p align="JUSTIFY"> SETB EA ;enable interrupt</p>
<p align="JUSTIFY">WAIT: NOP</p>
<p align="JUSTIFY"> AJMP WAIT ;wait</p>
<p align="JUSTIFY"></p>
<p align="JUSTIFY">SERIAL: NOP ;serial interrupt process</p>
<p align="JUSTIFY"> CLR RI</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -