A51是一种具有通用特性和用法的重定位宏汇编器。它与Intel公司的MASM51宏汇编器具有很好兼容性,支持模块化编程,可以方便地与高级语言接口。A51宏汇编器支持汇编伪指令、宏处理指令以及汇编控制命令,在集成开发环境Keil C51中可通过选项对这些命令进行设置。

  A51汇编语言源程序是以“.A51”或“.ASM”为扩展名的汇编语言源文件。

  符号与表达式

  8051单片机汇编语言程序由若干条8051指令行组成,8051指令行一般形式为: [标号:]助记符 [操作数1] [操作数2]  [,操作数3] [;注释]

  其中“标号”是可选项,它可用来表示程序的转移地址,同时可方便程序的调试。

  助记符是8051单片机的助记符。“操作数1~3”是可选项,它依赖于不同的8051指令助记符,有些指令不需要操作数,有些指令则需要1~3个操作数。操作数可以是数字、符号或地址。数字可以是10进制、16进制、8进制或2进制数。10进制数以“D”为后缀,16进制数以“H”为后缀,8进制数以“O”为后缀,2进制数以“B”为后缀,省略后缀时,则默认为10进制数。立即数的前面须冠以符号“#”

  A51宏编绎器允许使用符号来表示数值、地址和寄存器名等,以增加程序的可读性。

  符号名最长为31个字符第一个字符为英文字母A~Z或a~z、符号“_”或“?”,后续字母为上述字符或数字0~9。标号也是一种符号。一些符号已经定义为A51的保留字,用户不能对它们重新定义。这些符号及其意义如表1所示。

表1  A51宏汇编器保留字

A51保留字

意 义

A

累加器

R0~R7

当前工作寄存器(共有4个寄存器组)

DPTR

16位数据指针,用于访问内部或外部地址空间的数据

PC

16位程序计数器,其值为下一条将被执行的指令的地址

C

进位标志

AB

用于乘除操作的寄存器对

AR0~AR7

表示当前工作寄存器的绝对地址,其值取决于指令所选择的工作寄存器组

“AR0~AR7”表示当前工作寄存器的绝对地址,其值取决于指令所选择的工作寄存器组。其使用方法如下:

    USING           ;定义当前工作寄存器为第3组
    PUSH      AR2    ;将第3组工作寄存器中的寄存器R2压入堆栈
    USING           ;定义当前工作寄存器为第1组
    PUSH      AR2    ;将第1组工作寄存器中的寄存器R2压入堆栈  

  ( 注意:当程序中使用寄存器名“R0~R7”作为寻址方式时,工作寄存器组的选择,要用程序状态字PSW中的RS1、RS0位进行定义。)

  符号“$”是一个特殊的汇编符号,表示当前段的当前地址计数器。CODE、DATA 、IDATA、BIT和XDATA这五个段都有不同的地址计数器。每执行一条指令,地址计数器值也随之增加。如果当前段发生变化,地址计数也将自动变到新段。

例如下面一条指令:

HALT:  SJMP  $  ;表示跳转到标号HALT处

  A51中有三类运算符:算术运算符、逻辑运算符和关系运算符,如表2:

运 算 符

例 子

意 义

+.、-

+5、-4

数或表达式的符号

+、-

2+10-5

加减运算

*

1000H*2

乘法运算

/

17/4

除法运算

MOD

18 MOD 4

取模运算 (=02H)

()

8+(12-5)

改变运顺序

NOT

NOT 5

取反

HIGH

HIGH 1234

选择操作数的高位字节

LOW

LOW  1234

选择操作数的低位字节

SHL、SHR

2 SHL 3、8SHR 4

左、右移位

AND

12H AND 0F0H

逻辑与运算

OR

12H OR 177

逻辑或运算

XOR

12H XOR 14

逻辑异或运算

>=

55>=17

大于等于

<=

32<=44

小于等于

=

12H=18

等于

<

21H<32H

小于

>

55>17

大于

  A51宏汇编器的运算符具有如表2所示的优先级,一个表达式中存在多个不同的优先级的运算时,将按它们的优先级顺序进行运算。如果一个表达式中各个运算都具有相同的优先级,则按从左到右的顺序进行运算。

  表3  A51宏汇编器中运算符的优先级

优 先 级

运 算 符

意 义

1

()

括号

2

NOT、HIGH、LOW

取反、取高、低地址

3

+、-

正、负号

4

*、/、MOD

乘、除、取模运算

5

+、-

加、减运算

6

SHL、SHR

左、右移位

7

AND、OR、XOR

逻辑与、逻辑或、逻辑异或

8

>=、<=、=、<>

大于(等于)、小于(等于)、等于、不等于

   

KEIL的宏汇编器A51介绍的更多相关文章

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

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

  2. ARM 开发工具 Keil和DS-5的比较。

    http://www.eeboard.com/bbs/thread-25219-1-1.html 如今ARM体系架构的处理器在嵌入式市场上呼风唤雨,从低端的MCU应用到高端的多媒体消费电子,移动设备领 ...

  3. keil 51启动代码

    Startup code:启动代码. 在Keil中,启动代码在复位目标系统后立即被执行.启动代码主要实现以下功能: (1) 清除内部数据存储器 (2) 清除外部数据存储器 (3) 清除外部页存储器 ( ...

  4. STARTUP.A51详解

    STARTUP.A51 这个文件有什么用,有必要添加到工程吗? 如果不添加"startup.a51"文件,编译器就会自动加入一段初始化内存以及堆栈等的代码,这时的内存初始化部分你就 ...

  5. STARTUP.A51详解及如何使能可重入函数

    $NOMOD51       ;Ax51宏汇编器控制命令:禁止预定义的8051;------------------------------------------------------------ ...

  6. Keil的使用方法 - 常用功能(一)

    Ⅰ.概述 学习一门软件的开发,开发工具的掌握可以说尤为重要.由于Keil集成开发工具支持多种MCU平台的开发,是市面上比较常见的,也是功能比较强大一款IDE.所以,对于大多数人说,选择Keil几乎是单 ...

  7. Keil Mdk5.0 破解包 和谐包【worldsing笔记】

    有关Keil MDK 5.0的介绍和下载 http://www.cnblogs.com/worldsing/p/3355911.html 下载地址 点击下载:http://pan.baidu.com/ ...

  8. VS2010中编写宏添加作者信息与函数注释

    这里所说的宏是指通过一系列键盘组合键和可以插入自定义内容.下面介绍怎么编写一个自己的宏: 1.在Visual Studio 2010中按Alt+F11打开宏IDE: 2.打开后选择添加模块: 3.在弹 ...

  9. 编译器内置宏__LINE__&__FUNCTION__

    编译器内置宏: 先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息. ANSI C标准中有几个标准预定义宏(也是常用的): ...

随机推荐

  1. Feedly使用技巧

    1:用Chrome的话推荐这个应用:RSS Subscription Extension下载地址:https://chrome.google.com/webstore/detail/rss-subsc ...

  2. Keil 3光标问题 以及汉字问题

    初次使用keil3,光标总是定位不准,修改十分麻烦,google后解决问题,修改tools.ini如下(蓝色为加入项): NAME="YGLenovo User", "a ...

  3. 关于TCP的三次握手和四次分手(整理)

    这个协议非常重要,这里把它的链接和释放整理一下 首先是三次握手: 1.  客户端发起,像服务器发送的报文SYN=1,ACK=0,然后选择了一个初始序号:seq=x. SYN是干什么用的? 在链接的时候 ...

  4. Logstash 介绍

    Logstash 介绍: Logstash 是一个开源的数据收集引擎具有实时管道能力, Logstash 可以动态的统一数据从不同的来源和使数据规范化到你选择的目的地. 当Logstash 起初驾驭创 ...

  5. Squid--hash代码分析

    #ifndef SQUID_HASH_H #define SQUID_HASH_H //几个函数和变量的别名 typedef void HASHFREE(void *); typedef int HA ...

  6. compareTo简介

    compareTo()方法是用来比较字符串大小,该方法用来判断一个字符串是大于,等于还是小于另一个字符串.判断字符串大小的依据是根据他们在字典中的顺序决定的 语法 Str1.compareTo(Str ...

  7. DEV SIT UAT

    DEV环境:DEV顾名思义就是develop,即代码开发的环境.SIT环境:System Integration Test系统集成测试,开发人员自己测试流程是否走通.UAT环境:User Accept ...

  8. C#调用Java代码

    c#直接调用java代码,需要ikvmbin-0.44.0.5.zip.下载地址: http://pan.baidu.com/share/link?shareid=3996679697&uk= ...

  9. iCIBA简单案例

    效果图: 代码: <!DOCTYPE html><html> <head> <meta charset="utf-8" /> < ...

  10. DOM事件处理程序-事件对象-键盘事件

    事件流: 事件流--描述的是从页面中接受事件的顺序 IE  ---事件冒泡流:即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至最不具体的那个节点(文档). Netsc ...