KEIL的宏汇编器A51介绍
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介绍的更多相关文章
- 【原创】NES第一波:如何用通用型6502宏汇编器,制用NES/FC游戏。
在163的博客关了呀.在这边重新开张了. 以后若网友有什么要长篇解答的问题,也在这儿作答. 作为第一波原创文章,我打算做一次小白示范.那就是一步一步的展示某个汇编编译器的用法. 一.科普 很多人认为程 ...
- ARM 开发工具 Keil和DS-5的比较。
http://www.eeboard.com/bbs/thread-25219-1-1.html 如今ARM体系架构的处理器在嵌入式市场上呼风唤雨,从低端的MCU应用到高端的多媒体消费电子,移动设备领 ...
- keil 51启动代码
Startup code:启动代码. 在Keil中,启动代码在复位目标系统后立即被执行.启动代码主要实现以下功能: (1) 清除内部数据存储器 (2) 清除外部数据存储器 (3) 清除外部页存储器 ( ...
- STARTUP.A51详解
STARTUP.A51 这个文件有什么用,有必要添加到工程吗? 如果不添加"startup.a51"文件,编译器就会自动加入一段初始化内存以及堆栈等的代码,这时的内存初始化部分你就 ...
- STARTUP.A51详解及如何使能可重入函数
$NOMOD51 ;Ax51宏汇编器控制命令:禁止预定义的8051;------------------------------------------------------------ ...
- Keil的使用方法 - 常用功能(一)
Ⅰ.概述 学习一门软件的开发,开发工具的掌握可以说尤为重要.由于Keil集成开发工具支持多种MCU平台的开发,是市面上比较常见的,也是功能比较强大一款IDE.所以,对于大多数人说,选择Keil几乎是单 ...
- Keil Mdk5.0 破解包 和谐包【worldsing笔记】
有关Keil MDK 5.0的介绍和下载 http://www.cnblogs.com/worldsing/p/3355911.html 下载地址 点击下载:http://pan.baidu.com/ ...
- VS2010中编写宏添加作者信息与函数注释
这里所说的宏是指通过一系列键盘组合键和可以插入自定义内容.下面介绍怎么编写一个自己的宏: 1.在Visual Studio 2010中按Alt+F11打开宏IDE: 2.打开后选择添加模块: 3.在弹 ...
- 编译器内置宏__LINE__&__FUNCTION__
编译器内置宏: 先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息. ANSI C标准中有几个标准预定义宏(也是常用的): ...
随机推荐
- logstash match
[elk@zjtest7-frontend config]$ cat stdin04.conf input { stdin { } } filter { # drop sleep events gro ...
- Google GFS文件系统深入分析
Google GFS文件系统深入分析 现在云计算渐成潮流,对大规模数据应用.可伸缩.高容错的分布式文件系统的需求日渐增长.Google根据自身的经验打造的这套针对大量廉价客户机的Google GFS文 ...
- PHP页面静态化(转)
在很多地方都看到有PHP整站静态化的东东,怪唬人的..其实,你会静态化一个页面,那么别说整站了,想静态化多少都可以.所以关键是,首先要知道怎么静态化一个页面,了解静态化的原理是关键.. 这里就说下我个 ...
- openstack组件手动部署整合
preface:当你完全且正确的配置好整个OpenStack ENV 你将能看到的和体验到的!!! 我们先来看看简单效果吧,祝君能在这条路上走的更远,更好;
- Oracle Database 12c Using duplicate standby database from active database Created Active DataGuard
primary database db_name=zwc, db_unique_name=zwc standby database db_name=zwc, db_unique_name=standb ...
- c语言结构体5之匿名结构体
注意: 1匿名结构体不会出现重合 重命名的情况 2有名结构体 名称不能相同 也就是不能重名 //匿名结构体不会出现重名的情况 struct //无名结构体 { ]; ]; int num; };//不 ...
- python入门第一天,循环与判断
学习一门新的语言最重要的就是练习. 一.脚本需求: 编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 二.脚本流程图: 写代码之前画个流程图总是好的,可以让你理清思路,避免写着写着 ...
- MVC4 成员资格、 身份验证
SimpleMembership,成员资格提供程序. 通用的提供者和新的 ASP.NET 4.5 Web 窗体和 ASP.NET MVC 4 模板 ASP.NET MVC 4 互联网模板中添加一些新的 ...
- php:兄弟连之面向对象版图形计算器1
曾经看细说PHP的时候就想做这个,可是一直没什么时间,这次总算忙里偷闲搞了代码量比較多的project. 首先,文档结构,都在一个文件夹下就好了,我的就例如以下. 一開始,进入index.php文件. ...
- Verilog 读写文件
Verilog 读写文件 在数字设计验证中,有时我们需要大量的数据,这时可以通过文件输入,有时我们需要保存数据,可以通过写文件保存. 读写文件testbench module file_rw_tb() ...