KEIL 伪指令
//为了大家查找方便,命令按字母排序:
0、ALTNAME
功能: 这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。
格式: ALTNAME 保留字 自定义名
注意: 自定义名与保留字之间首字符必须相同。
1、BIT
功能:指令用于将一个位地址赋给指定的符号名。
指令格式:符号名 BIT 位地址
经BIT 指令定义过的位符号名不能更改。
例如:X_ON BIT 60H ;定义一个绝对位地址
X_OFF BIT 24h.2 ;定义一个绝对位地址
2、BSEG
功能:绝对选择指令指令BSEG选择绝对位寻址数据段
指令格式如下:BSEG [AT 绝对地址表达式]
3、CODE
功能:用于将程序存储器ROM 地址赋给指定的符号名。
指令格式:符号名 CODE 表达式
例如:RESET CODE 00H
4、CSEG
功能:绝对选择指令CSEG选择绝对代码段;
指令格式如下:CSEG [AT 绝对地址表达式]
5、DATA(BYTE)
功能:指令用于将一个内部RAM 的地址赋给指定的符号名
指令格式:符号名 DATA 表达式
数值表达式的值应在0~255 之间,表达式必须是一个简单再定位表达式。例如:
REGBUF DATA(BYTE) 40H
PORT0 DATA(BYTE) 80H
DATA与BYTE的区别: DATA与BYTE是相类似的伪指令。 当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。
6、DB
功能:DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。该伪指令的参数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为:标号: DB 表达式
只要表达式不是字符串,每一表达式值都被赋给一个字节。计算表达式值时按16位处理,但其结果只取低8位,若多个表达式出现在一个DB伪指令中,它们必须以逗号分开。
表达式中有字符串时,以单引号“'”作分隔符,每个字符占一个字节,字符串不加改变地被存在各字节中,并不将小写字母转换成大写字母。
例如:
DB 00H 01H 03H 46H
DB 'This is a demo!'
7、DBIT
功能:在内部数据区的BIT 段以位为单位保留存储空间。
指令格式:[标号:] DBIT 数值表达式
其操作类似于DB。
8、DS
功能:DS为定义存储内容的伪指令,用它定义一个存储区,并用指定的参数填满该存储区。DS伪指令包含两个变元,第一个变元定义了存储区的长度的字节数,在汇编时,汇编程序将跳过这些单元把其它指令汇编在这些字节之后,因此在使用DS伪指令时第一个变元不可活力第二个变元表示在这些单元中真入什么值,第二个变元可以活力活力时这些字节将不处理。下例中0173处有一条DS 9,则空出9个字节,下一第指令被汇编到017C处;在017C处空出1BH个单元,在这些字节中被27H所填充。DS指令的格式如下:
标号: DS 表达式1,表达式2
表达式1定义了存储区的长度(以字节为单位)。这个变元不能省略。表达式2是可选择的,它的值低8位用以填入所定义的存储区。若省略则这部分存储单元不处理。例:
0000 04 INC A
0001 DS 9
000A 04 INC A
000B DS 1BH,27H
0026 04 INC A
9、DSEG
功能:绝对选择指令DSEG内部绝对数据段
指令格式如下:DSEG [AT 绝对地址表达式]
10、DW
功能:DW为以字节为单元(十六位二进制)来给一个的存储区赋值,其格式为:
标号: DW 表达式
例如: 0000 3035 D46B DW 12341,54379,10110100101110B
11、END
功能:END语句标志源代码的结束,汇编程序遇到END语句即停止运行。若没有END语句,汇编将报错。END语句有一个参数,可以是数值0,也可以是表达式,其格式是: 标号: END 表达式
它的值就是程序的地址并且作为一个特殊的记录写入HEX文件。若这个表达式省略,HEX文件中其值就是0。
12、EQU(=)
存器名赋给一个指定符号名。
指令格式: 符号名 EQU(=)表达式
符号名 EQU(=) 寄存器名
经过EQU 指令赋值的符号可在程序的其它地方使用,以代替其赋值。
例如:MAX EQU 2000
则在程序的其它地方出现MAX,就用2000 代替。
13、EXTRN
EXTRN 是与PUBLIC 配套使用的,要调用其它模块的函数,就必须先在模块前声明。
指令格式:EXTRN 段类型(符号,符号······)
例如:EXTRN CODE (TONGXING,ZHUANHUAN)
调用外部TONGXING和ZHUANHUAN 程序。
14、IDATA
IDATA 指令用于将一个间接寻址的内部RAM 地址赋给指定的符号名。
指令格式:符号名 IDATA 表达式
例如:FULLER IDATA 60H
15、IF
条件伪操作格式:
IF 表达式
[ 程序块1 ]
[ ELSE ]
[ 程序块2 ]
ENDIF
当IF指令中的表达式为真时,被汇编的代码段是程序块1;当IF指令中的表达式为假时,被汇编的代码段是程序块2。 在一个条件结构中,仅有一个代码段被汇编,其它的则被忽略。
16、INCLUDE
功能: 利用此伪指令可将一个源文件插入到当前源文件中一起汇编,最终成为一个完整的源程序。
格式: INCLUDE [ 驱动器名: ] [ 路径名 ] 文件名
注意:1、文件名中若没有扩展名,则系统默认是。ASM(该文件必须是能打开的)。
2、被插入的源程序中不能包含END伪指令,否则汇编会停止运行。被链接文件的每一行,在程序清单中以“I“开头。
3、链接伪指令可有8级嵌套, 若要求嵌套的多, 则要修改 DOS 中的CONFIG。SYS文件的FILES参数。
17、ISEG
功能:绝对选择指令ISEG内部间接寻址绝对数据段idata
指令格式如下:ISEG [AT 绝对地址表达式]
18、MACRO
宏指令格式
[ 宏指令名 ] MACRO [形式参数,。。。]
代码段
ENDM
宏调用格式
[ 宏指令名 ] [实在参数,。。。]
19、LIST
它们的格式为:
$LIST
功能:LIST伪指令使汇编时主生程序清单,但即使不用该指令,汇编也会自动产生清单。但如果使用了NOLIST伪指令后需要继续主生清单则必须使用LIST伪指令。
20、NAME
功能:用来给当前模块命名。
指令格式:NAME 模块名
例如:NAME TIMER
定义一个模块名为TIMER 的模块。
21、NOCODE
其格式为$NOCODE
NOCODE伪指令使得在汇编时,条件汇编程序结构中那些真值为假的条件不产生清单。有关条件汇编结构在下面介绍。如果没有这条伪指令,汇编将主生所有条件下的清单, 不论其真值是否为真。但是假的条件,不产生目标码。而NOCODE伪指令使汇编清单中只列出那些由汇编程序用到的部分,因此,当使用NOCODE伪指令时,程序清单与源程序并非逐行对应。
22、NOLIST
它们的格式为:$NOLIST
功能:NOLIST伪指令使汇编时不产生清单,所有包含此伪指令及在这条伪指令之后的语句都不进入列表文件。当不需要任何列表文件,并且不需要显示程序清单时,可以在启动汇编时不加.L附加项,且在源代码的第一行加上NOLIST指令。
使用NOLIST伪指令与附加项/L不同之处是NOLIST伪指令可加在源程序中,与LIST伪指令配合使用,使源程序中某些部分不产生清单。而不加附加项/L则不产生任何程序清单。不过,不管有无$NOLIST伪指令,程序在汇编时检查到的错误都将在屏幕上显示出错的源代码行及错误信息
23、PAGE
功能:PAGE伪指令用于形成新的一中定义一面的行数。其格式为:$PAGE 表达式
若表达 式缺省则开始新的一页,若有表达式,则每页行数重新定义。汇编开始时页长为66行。一页中除出页外,剩余55行用于打印源程序,这一格式适用于标准打印纸。
如果变元值小于66,页内可打印的源代码行将相应减少。页长最小值为12。若小于12时,每页内除页上只打印一行源程序。
页长变元是16位字节,因而每页最长可定义到65535行,这时分页打印变为连续打印,在屏幕显示程序清单或在卷筒纸上打印程序清单时,常常使用连续打印,如果在启动汇编时用/N选项,页长就是65535。
24、PUBLIC
功能:声明可被其它模块使用的公共函数名。
指令格式:PUBLIC 符号 [,符号,符号[,······]]
PUBLIC 后可跟多个函数名,用逗号格开。每个函数名都必须是在模块内定义过的。
例如:PUBLIC INTER,_OUTER
其中_OUTER 可供C 调用。
25、RSEG
功能:再定位段选择指令为RSEG,用于选择一个已在前面定义过的再定义段作为当前段,
指令格式:RSEG 段名
段名必须是在前面声明过的再定位段。
例如:
DATAS SEGMENT DATA :声明一个再定位DATA 段
CODES SEGMENT CODE ;声明一个再定位CODE 段
BSEG AT 60H
RSEG CODES ;选择前面声明的再定位CODE 段作为当前段。
26、SEGMENT
功能:SEGMENT 指令用来声明一个再定位段和一个可选的再定位类型。
指令格式:再定位段型 SEGMENT 段类型(再定位类型)
段类型用于指定所声明的段将处的储存器地址空间,可用的段类型有CODE
/XDATA/DATA/IDATA 和BIT。
例如: FLAG SEGMENT BIT
PONITER SEGMENT IDATA
27、SET
功能:SET 指令类似于EQU 指令,不同的是SET 指令定义过的符号可重定义。
指令格式:符号名 SET 表达式
符号名 SET 寄存器名
例如:MAX SET 2000
MAX SET 3000
28、TTILE
功能:TITLE伪指令用于在列表文件页头建立一个标题,其格式为: $TITLE 标题行
这里标量行就是将出现在页头的标量与通常的字符串定义不同。这里标量行不加引号。汇编从$TITLE 之后的第一个可打印字符开始,到回车符之间的字符串作为标量标量的最大长度是60个字符,基标量行省略,则标题行为空行。若TITLE伪指令在一页,它说明的标量行包含在本页,否则,标题将出现在下页页头。
29、XDATA
功能:XDATA 指令用于将一个外部RAM 的地址赋给指定的符号名。
指令格式:符号名 XDATA 表达式
例如:RSEG XSEG1 ;选择一个外部数据段
ORG 100H
MING DS 10 ;在标号MING 处保留10 个字节
HOUR XDATA MING+5
MUNIT XDATA HOUR+5
30、XSEG
功能:绝对选择指令XSEG外部绝对数据段xdata
指令格式如下:XSEG [AT 绝对地址表达式]
KEIL 伪指令的更多相关文章
- Keil伪指令
Keil伪指令 目录 Keil伪指令... 1. ALTNAME. 2 2. BIT. 2 3. BSEG.. 2 4. CODE. 2 5. CSEG.. 2 ...
- keil 51启动代码
Startup code:启动代码. 在Keil中,启动代码在复位目标系统后立即被执行.启动代码主要实现以下功能: (1) 清除内部数据存储器 (2) 清除外部数据存储器 (3) 清除外部页存储器 ( ...
- keil C51绝对地址访问
在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.C51提供了三种访问绝对地址的方法: 1. 绝对宏 在 ...
- KEIL C51之绝对地址定位
单片机空间分配看*.M51文件,ARM,DSP空间分配看*.map文件 1.函数定位 假如要把C源文件 tools.c 中的函数 int BIN2HEX(int xx) { ... } 放在CODE ...
- 使用Keil软件编写汇编源程序应注意事项
1)一定要使用微软的txt文本编辑器,否则键入逗号时编译通不过.应该是这个样('),不该是这个样(,). 2) 用数字做标号时,前面一定要加一个英文字母,否则编译通不过. 3) 有时编译通过的.asm ...
- Keil的可重定位段
对于一个大的文件,为了便于管理,一个好的办法时把一个大文件分为若干个小文件,每个小文件包含一部分相关的功能,这样功能将显得很整洁,而且移植到其它工程的时候也很方便,把文件copy过去即可. 对于汇编, ...
- keil C语言与汇编语言混合编程
C与汇编混合编程主要有以下几种:(1)C语言中嵌入汇编(2)无参数传递的函数调用(3)有参数传递的函数调用 一.C语言中嵌入汇编 1.在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码: #prag ...
- KEIL中的一些细节
1.KEIL中的指针: 基于存储器的指针:数据类型 [指向存储区] *[ 指针存储区]指针变量 char xdata * px //px本身存在于自动分配的空间,一般位于data中,指向的内容位于x ...
- keil Ax51中条件编译指令IF与$IF的区别
keil A51中条件编译指令IF与$IF的区别:1.IF和$IF是不等价的,不要混淆了;2.带前缀$的条件编译$IF用法:(汇编器指示命令Assembler Directive)只能用来测试由$SE ...
随机推荐
- android实现类似于支付宝余额快速闪动的效果
效果如下: 此图片不会动,但实际上是会快速跳动的. 之前看到有支付宝的效果非常牛逼.就是进去看到余额呼噜噜的直接上蹿下跳到具体数字,效果帅,但不知道怎么实现,最近终于知道了. 思路: 首先经常用 ...
- RequireJS进阶(一)
为了应对日益复杂,大规模的JavaScript开发.我们化整为零,化繁为简.将复杂的逻辑划分一个个小单元,各个击破.这时一个项目可能会有几十个甚至上百个JS文件,每个文件为一个模块单元.如果上线时都是 ...
- 随记,C#修饰符访问级别
private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内部和继承类中可以访问. (无修饰符时默认)internal: 在同一命名空间内可以访问.public : ...
- Gson 基础教程 —— 自定义类型适配器(TypeAdapter)
1,实现一个类型适配器(TypeAdapter) 自定义类型适配器需要实现两个接口: JsonSerializer<T> JsonDeserializer<T> 和两个方法: ...
- hibernate 一对多双向关联 详解
一.解析: 1. 一对多双向关联也就是说,在加载班级时,能够知道这个班级所有的学生. 同时,在加载学生时,也能够知道这个学生所在的班级. 2.我们知道,一对多关联映射和多对一关联映射是一样的,都是在 ...
- Sqlserver更新数据表xml类型字段内容某个节点值的脚本
GO USE [JC2010_MAIN_DB] 1.新建备份表JobObjectVersion_JCSchemVersion_BCK) GO IF EXISTS (SELECT * FROM sys. ...
- Netmon: A light-weight network monitor for Windows
Netmon is a light-weight network monitor that works on Windows operating systems. It provides differ ...
- js中时间戳与日期转换-js日期操作
常用的一些日期操作. 用js获取一个时间戳. <script type="text/javascript"> var date = new Date();//当前时间 ...
- 酷Q机器人,QQ机器人使用教程
软件介绍: 酷Q,软件酷Q机器人是一款基于webqq开发的一款自动接收.处理qq消息的软件. 改程序使用易语言编写,精简大量不必要代码,减小了软件体积,优化程序速度,使得酷Q更加轻巧好用. 在消息处理 ...
- Java基础知识强化37:StringBuffer类之StringBuffer的构造方法
1. StringBuffer的构造方法: (1)StringBuffer(): (2)StringBuffer(CharSequence seq): (3)StringBuffer(int capa ...