单片机开发可以用手工汇编机器汇编两种方法。采用手工汇编就是先编写出汇编程序,然后对照单片机汇编表手工将汇编程序翻译成机器码,最后将机器码一个一个地送入开发仿真器的RAM中去进行调试

  由于采用手工汇编的机器码是相对于存储器的绝对地址进行定位的,因此在调试时,若要在程序中增加或删除一条指令,就会造成指令的绝对地址发生变化。这样除修改那条指令外,几乎所有转移、调用指令的操作数都要作相应的修改,稍有疏忽程序就会出错。

  而采用机器汇编,在很大程度上可以避免上述麻烦。只要通过键盘输入源程序后,其余作工作都由计算机来进行,即查出相应的机器码,对地址进行定位,建立能被开发装置接收的机器码文件、建立能打印出清单的列表文件等等。机器码不需要再一个一个地从仿真器的键盘上键入,只要从PC机的通讯口直接传送到开发装置中去。因此使用机器汇编大大提高了单片机开发的速度。

  源程序被输入到机器中后,以一个文件的形式保存起来,然后就可以对这个文件进行处理了,要对这个文件进行汇编,必须有相应的汇编程序。在PC机上进行汇编的程序有多种,以下介绍的MASM51软件就是其中的一种,它的主要特点有:

1.对用户编写的源程序格式要求不太严格,例如,英文字母的大、小写不受限制,变量名或标号名没有长度限制,对源程序中的空格数也没有严格的要求等等。这些给用户编写程序带来很大的方便。

2.具有较强的功能,例如支持宏语句,使同一程序中类似的程序结构,只要输入一次,在使用时可用宏语句调用。此外还允许用条件汇编语句以及完善的伪指令系统等。减少了编写、输入源程序的工作量。

3.不管用户的源程序有多少错误,它都能全部汇编完,并能形成列表文件及目标文件,以供用户修改错误。

4.可以接收汉字注释,并能完整的将汉字注释复制到列表文件,而其它一些汇编软件则不能处理汉字,或会使列表文件中的汉字注释混乱。

运行MASM51软件的条件很低,现在的PC机都能达到。

第二节 如何启动MASM51宏汇编程序

一、启动和退出

MASM51软件有两个文件:MASM51.EXE和MASM51.OVL,只要将这两个文件拷入硬盘的一个目录中(如MASM51)中,然后在DOS命令行中打入:MASM51(回车)

即在显示器上显示如下信息:

The Cybernetic Micro Systems
CYS- Software Package
Version .`
for the IBM Personal Computer
(C)Copy right Cybrenetic MIcro Systems,,,,

High Level Language Commands
ASM51[file] P8751 file P8744 file//
P27XX file COMP[file] READ[kbytes] DISP[start,num]
INITIALIZE CLEAR LIST EXIT
RUN[file] GOTO Label STOP CONT
DIR[spec] TYPE file DOS cmd HELP
PRINT arglist EQU = WARBLE
DELAY[secs] CLS HLSEARCH flag BEEP
OFFSET pc[,loc] PROM type SECURE SAVE file[,start,num]
LOAD file EDBYTE pc PVOLT value PSETUP num,value
>

信息的出现说明已进入MASM51宏汇编程序,在屏幕下方出现的符号‘〉’是宏汇编程序提示符,它的出现告诉用户,宏汇编程序处于接收命令状态。

虽然屏幕上提供了很多的命令,但大部份命令要在相应的硬件配合下才能实现。当用来汇编源程序时,使用的主要命令是:

ASM51 盘号:文件名 〈回车〉 进行汇编

DIR 盘号:文件名 〈回车〉 显示目录

EXIT 〈回车〉 退出宏汇编

二、进行汇编

用户在使用宏汇编程序之前,应该已使用编缉器(如EDIT、CCED等)编好了8051汇编语言的源程序,并已作为一个文件存盘,该文件一般以.ASM为扩展名。

进入MASM51后,键入 ASM51 [d:filename[.asm] [选项]

如果省略扩展名,则系统默认为.asm,如果不以.asm为扩展名,则应键入文件的全名。汇编后,将产生两个输出文件:一个是16进制代码文件,以.hex为扩展名,另一个是列表文件,以.lst为扩展名,文件名与输入文件的文件名相同。

在汇编时,可以加入一些选项进行控制,可加的选项如下:

1./L选项:只在屏幕上显示列表文件的内容,不生成列表文件。

2./H选项:汇编后不在磁盘上产生.hex文件。

3./S选项:产生的列表文件中将不包括符号表。

4./P选项:汇编程序序所生成的符号表将成为能被其他源程序引用的永久符号表的一部份,即如果不退出宏汇编,该符号表将保留在内存中,在汇编其它源程序时可以引用它们,以便连接几个源文件。

5./N选项:使生成的列表文件在打印(或显示)时不分页。不加'/N'则每隔55行源代码生成一个新页头。

一般情况下,我们不需要在命令后面加任何选项。

如下面所示:ASM51 Filename[.asm] [回车]即可

下面列出DEMO51.ASM的源文件,及用MASM51汇编后产生的代码文件和列表文件,以供参考。

T0_flag bit
T1_flag bit
INIT_Timer0 equ 0FE80H
INIT_Timer1 equ 0FD00H

X0_vector equ 0003H
X1_vector equ 0013H
T0_vector equ 000BH
T1_vector equ 001BH
S0_vector equ 0023H

INIT: AJMP SETUP  ;Interrept Jump Table

ORG X0_vector

RETI ;int0 interrupt

ORG T0_vector
T0INT: ACALL TIM0 ;timer0 interrupt
RETI

ORG X1_vector

RETI ;int1 interrupt

ORG T1_vector
T1INT: ACALL TIM1 ;timer1 interrupt
RETI
ORG S0_vector
AJMP SERIAL ;UART interrupt

DB 'This is demo program for MCS-51TM'

SETUP: MOV SP,#5FH ;set sp point
MOV TMOD,#11H ;set timer mode
MOV TH0,#HIGH(INIT_Timer0)
MOV TL0,#LOW(INIT_Timer0)
MOV TH1,#HIGH(INIT_Timer1)
MOV TL1,#LOW(INIT_Timer1)
SETB EX0
SETB PX0
SETB EX1
CLR PX1
SETB PT1
SETB ET0
SETB ET1
SETB TR0
SETB TR1
SETB ES
MOV SCON,#99H
SETB EA ;enable interrupt
WAIT: NOP
AJMP WAIT ;wait

SERIAL: NOP ;serial interrupt process
CLR RI
RETI

TIM0: CLR TR0 ;timer0 interrupt process
CPL T0_flag
MOV TL0,#LOW(INIT_Timer0)
MOV A,#HIGH(INIT_Timer0)
MOV TH0,A
SETB TR0
CLR P3.
RET

TIM1: CLR TR1 ;timer1 interrupt process
CPL T1_flag
MOV TL1,#LOW(INIT_Timer1)
MOV A,#HIGH(INIT_Timer1)
MOV TH1,A
SETB TR1
CLR P3.
RET

END

;********************************************************
;DEMO51.ASM FILE END
;********************************************************

以上是DEMO51.ASM源程序文件。

The Cybernetic Micro Systems  Family Assembler, Version . Page
--

 = T0_flag bit
 = T1_flag bit
FE80 = INIT_Timer0 equ 0FE80H
FD00 = INIT_Timer1 equ 0FD00H

 = X0_vector equ 0003H
 = X1_vector equ 0013H
000B = T0_vector equ 000BH
001B = T1_vector equ 001BH
 = S0_vector equ 0023H
INIT: AJMP SETUP  ;Interrept Jump Table
 ORG X0_vector
 D2B2
  RETI ;int0 interrupt

000B ORG T0_vector
 T0INT: ACALL TIM0 ;timer0 interrupt
 RETI

 ORG X1_vector
 D2B3
  RETI ;int1 interrupt

001B ORG T1_vector
 T1INT: ACALL TIM1 ;timer1 interrupt
 RETI

 ORG S0_vector
  AJMP SERIAL ;UART interrupt

    DB 'This is demo program for MCS-51TM'

        6D 6F
   6F    6D   6F
  4D   2D    4D
 75815F   MOV TMOD,#11H ;set timer mode
004C 758CFE MOV TH0,#HIGH(INIT_Timer0)
004F 758A80 MOV TL0,#LOW(INIT_Timer0)
 758DFD MOV TH1,#HIGH(INIT_Timer1)
 758B00 MOV TL1,#LOW(INIT_Timer1)
 D2A8 SETB EX0
005A D2B8 SETB PX0
005C D2AA SETB EX1
005E C2BA CLR PX1
 D2BB SETB PT1
 D2A9 SETB ET0
 D2AB SETB ET1
 D28C SETB TR0
 D28E SETB TR1
006A D2AC SETB ES
 MOV SCON,#99H

The Cybernetic Micro Systems  Family Assembler, Version . Page
--

006F D2AF SETB EA ;enable interrupt
  WAIT: NOP
  AJMP WAIT ;wait

  SERIAL: NOP ;serial interrupt process
 C298 CLR RI
  RETI

 C28C TIM0: CLR TR0 ;timer0 interrupt process
007A B200 CPL T0_flag
007C 758A80 MOV TL0,#LOW(INIT_Timer0)
007F 74FE MOV A,#HIGH(INIT_Timer0)
 F58C MOV TH0,A
 D28C SETB TR0
 C2B3 CLR P3.
  RET

 C28E TIM1: CLR TR1 ;timer1 interrupt process
008A B201 CPL T1_flag
008C 758B00 MOV TL1,#LOW(INIT_Timer1)
008F 74FD MOV A,#HIGH(INIT_Timer1)
 F58D MOV TH1,A
 D28E SETB TR1
 C2B2 CLR P3.
  RET
 END

The Cybernetic Micro Systems  Family Assembler, Version . Page
--

;%T Symbol Name Type Value

INIT_TIMER0 . . . . . . . . . . I FE80
INIT_TIMER1 . . . . . . . . . . I FD00
INT_0 . . . . . . . . . . . . . L
INT_1 . . . . . . . . . . . . . L
S0_VECTOR . . . . . . . . . . . I
SERIAL. . . . . . . . . . . . . L
SETUP . . . . . . . . . . . . . L
T0INT . . . . . . . . . . . . . L 000B
T0_FLAG . . . . . . . . . . . . B
T0_VECTOR . . . . . . . . . . . I 000B
T1INT . . . . . . . . . . . . . L 001B
T1_FLAG . . . . . . . . . . . . B
T1_VECTOR . . . . . . . . . . . I 001B
TIM0. . . . . . . . . . . . . . L
TIM1. . . . . . . . . . . . . . L 

X0_VECTOR . . . . . . . . . . . I
X1_VECTOR . . . . . . . . . . . I
;%Z

 Errors ()
以上是DEMO51.LST文件。
:020000000146B7
:03000300D2B23244
:03000B0011783237
:03001300D2B33233
:03001B0011883217
:0D0023000174546869732069732064656D71
:100030006F2070726F6772616D20666F72204D4322
:10004000532D3531544D75815F758911758CFE7551
:100050008A80758DFD758B00D2A8D2B8D2AAC2BA9B
:10006000D2BBD2A9D2ABD28CD28ED2AC759899D257
:10007000AF00017100C29832C28CB200758A8074E0
:10008000FEF58CD28CC2B322C28EB201758B007485
:08009000FDF58DD28EC2B222F3

以上是DEMO51.HEX文件。

宏汇编软件MASM51的使用的更多相关文章

  1. ASM-51 宏汇编使用手册

    A51与ASM51基本相同   ASM-51 宏汇编主要用来开发Inter8051系列单片机,它具有宏处理,数据处理,列表处理和条件处理等多种功能.源程序的编写完全采用 Inter标准助记符和行格式. ...

  2. 干货|宏巍软件之Java线程监控之旅

    宏巍软件 许向 大家好,我是上海宏巍信息技术有限公司(简称:宏巍软件)的许向,宏巍软件成立于2005年,是一家以电商ERP软件开发为主的高新技术科技型软件公司,致力于为大型网商和电子商务企业提供专业. ...

  3. 学 Win32 汇编[34] - 宏汇编(1)

    从接触 C 语言时, 我就不大喜欢宏; 但为了看懂别人的代码也不得不去了解. 宏可定义在源程序的任意位置, 但一般放在 .data 前面.有些简单的宏可以用 equ.textequ 或 = 来代替, ...

  4. 浏览器录宏重放软件-iMacros

    iMacros https://imacros.net/ iMacros v12 Now Available The world's most popular web automation, data ...

  5. 用户手册是Yasm汇编

    本文档的用户手册是Yasm汇编. 它是介绍和通用所有Yasm用户参考. 英文的参考:http://www.cnblogs.com/coryxie/p/3959888.html 1 .介绍 Yasm b ...

  6. 【原创】NES第一波:如何用通用型6502宏汇编器,制用NES/FC游戏。

    在163的博客关了呀.在这边重新开张了. 以后若网友有什么要长篇解答的问题,也在这儿作答. 作为第一波原创文章,我打算做一次小白示范.那就是一步一步的展示某个汇编编译器的用法. 一.科普 很多人认为程 ...

  7. 使用DOSBox在Win7_x64下搭建汇编环境

    1. 软件安装 1. debug.exe,masm.exe,link.exe,edit.com等汇编工具,一般32位的windows系统有自带,但64位系统下并没有,而且将32位系统下的工具拷贝到64 ...

  8. 利用宏定义实现C++程序在Unix和Win32环境下的通用性

    [转] 1.1. 宏定义软件的代码,从跨平台的角度来看,可以分为平台相关的和平台无关的.采用C/C++编写的软件,在进行移植时,平台无关的的代码基本上不需要做大的改动,但平台相关的代码需要做很大的调整 ...

  9. 汇编3栈帧,参数传递,串操作,混合汇编,x64,asm文件

    基础知识2 选择结构 通过判断 + 条件跳转指令来实现 循环结构 通过判断 + 条件跳转指令来实现(会有一个向上跳转的语句) 函数调用约定 C调用约定: 由外部平衡栈 标准调用约定 : 由函数内部平衡 ...

随机推荐

  1. office web apps server 问题和解决办法

    New-OfficeWebAppsFarm –InternalURL "http://owa.zjkhlib.com" –AllowHttp –EditingEnabled 错误1 ...

  2. linux0.12 学习总序(不断更新状态中)

    最近有空闲时间,想静下心来学点东西.一直对kernel有兴趣,又苦于无从下手,就拿linux0.12练手.尝试了解并熟悉kernel各模块工作原理. 接下来的博客主要用来记录自己所遇到的问题和解决的方 ...

  3. Python 2 到 Python 3的变化

    Python 2.x到Python 3.x变化还是挺大的,具体的变化,参考官方文档: https://docs.python.org/3.0/whatsnew/3.0.html

  4. Oracle_Q&A_02

    Step02: Import SQL FILE Step02: QUESTION & ANSWER --1查询员工姓名和职位字数相等的员工 --2查询e_name以s结尾的员工(不用like) ...

  5. 总结QueueUserWorkItem传参的几种方式

    最近在学习citrix的xenserver6.2的源代码,发现多处用到System.Threading命名空间下的ThreadPool.QueueUserWorkItem方法: public stat ...

  6. EditText设置可以编辑和不可编辑状态

    1.首先想到在xml中设置android:editable="false",但是如果想在代码中动态设置可编辑状态,没有找到对应的函数 2.然后尝试使用editText.setFoc ...

  7. android中发送邮件

    在移动互联网时代,手机邮件已不是什么新鲜事了,我们可以使用内置的Gmail引擎来发送邮件,也可以使用SMTP来发送邮件,下面用一个简单示例来演示邮件的发送,包括单方发送邮件.多方发送邮件以及抄送邮件, ...

  8. Codeforces Round #FF (Div. 2):Problem A - DZY Loves Hash

    A. DZY Loves Hash time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. JDK版本错误:Unsupported major.minor version 51.0

    错误原因 有时候把项目从本机编译文件部署到服务器,或者发给别人使用时,会报如下异常: java.lang.UnsupportedClassVersionError: test_hello_world ...

  10. Zend Framework 留言本实战(转)

    一.环境搭建和ZF安装              *[注]本节内容大部分来至Zend Framework官方手册       1.1 Zend Framework下载 Zend Framework 使 ...