Keil伪指令

时间:2023-03-09 09:40:27
Keil伪指令

Keil伪指令

目录

Keil伪指令...

1.     ALTNAME. 2

2.     BIT. 2

3.     BSEG.. 2

4.     CODE. 2

5.     CSEG.. 2

6.     DATA(BYTE)... 2

7.     DB. 2

8.     DBIT. 3

9.     DS. 3

10.       DSEG.. 3

11.       DW.. 3

12.       END.. 3

13.       EQU(=)... 3

14.       EXTRN.. 3

15.       IDATA. 3

16.       IF. 3

17.       INCLUDE. 3

18.       ISEG.. 3

19.       MACRO.. 3

20.       LIST. 3

21.       NAME. 3

22.       NOCODE. 3

23.       NOLIST. 3

24.       PAGE. 3

25.       PUBLIC.. 3

26.       RSEG.. 3

27.       SEGMENT. 3

28.       SET. 3

29.       TTILE. 3

30.       XDATA. 3

31.       XSEG.. 3

 


1.    
ALTNAME

功能:这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。

格式:ALTNAME  保留字  自定义名

注意:自定义名与保留字之间首字符必须相同。

2.    
BIT

功能:指令用于将一个位地址赋给指定的符号名。

指令格式:符号名 BIT 位地址

经BIT 指令定义过的位符号名不能更改。

例如:X_ON  
BIT  60H ;定义一个绝对位地址

X_OFF  BIT  24h.2 ;定义一个绝对位地址

3.    
BSEG

功能:绝对选择指令BSEG选择绝对位寻址数据段

指令格式如下:BSEG [AT 绝对地址表达式]

4.    
CODE

功能:用于将程序存储器ROM 地址赋给指定的符号名。

指令格式:符号名  CODE  表达式

例如:RESET  CODE 
00H

5.    
CSEG

功能:绝对选择指令CSEG选择绝对代码段;

指令格式如下:CSEG [AT 绝对地址表达式]

6.    
DATA(BYTE)

功能:指令用于将一个内部RAM 的地址赋给指定的符号名

指令格式:符号名 DATA  表达式

数值表达式的值应在0~255 之间,表达式必须是一个简单再定位表达式。

例如:REGBUF  DATA(BYTE)  40H

PORT0    DATA(BYTE)  80H

DATA与BYTE的区别: DATA与BYTE是相类似的伪指令。当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。

7.    
DB

功能:DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。该伪指令的参数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为:

标号: DB 表达式
只要表达式不是字符串,每一表达式值都被赋给一个字节。计算表达式值时按16位处理,但其结果只取低8位,若多个表达式出现在一个DB伪指令中,它们必须以逗号分开。
表达式中有字符串时,以单引号“'”作分隔符,每个字符占一个字节,字符串不加改变地被存在各字节中,并不将小写字母转换成大写字母。

例如:DB 00H 01H 03H 46H

DB 'This is a demo!'

8.    
DBIT

功能:在内部数据区的BIT 段以位为单位保留存储空间。

指令格式:[标号:]   DBIT 数值表达式

其操作类似于DB。

9.    
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

10. DSEG

功能:绝对选择指令DSEG内部绝对数据段
指令格式如下:DSEG [AT 绝对地址表达式]

11. DW

功能:DW为以字节为单元(十六位二进制)来给一个的存储区赋值,其格式为:

标号:DW 表达式

例如:0000 3035 D46B DW
12341,54379,10110100101110B

12. END

功能:END语句标志源代码的结束,汇编程序遇到END语句即停止运行。若没有END语句,汇编将报错。END语句有一个参数,可以是数值0,也可以是表达式,其格式是:

标号:END 表达式

它的值就是程序的地址并且作为一个特殊的记录写入HEX文件。若这个表达式省略,HEX文件中其值就是0。

13. EQU(=)

存器名赋给一个指定符号名。

指令格式:  符号名 EQU(=)表达式

符号名 EQU(=) 寄存器名

经过EQU 指令赋值的符号可在程序的其它地方使用,以代替其赋值。

例如:MAX EQU 2000

则在程序的其它地方出现MAX,就用2000 代替。

14. EXTRN

EXTRN 是与PUBLIC 配套使用的,要调用其它模块的函数,就必须先在模块前声明。

指令格式:EXTRN 段类型(符号,符号······)

例如:EXTRN  CODE
(TONGXING,ZHUANHUAN)

调用外部TONGXING和ZHUANHUAN 程序。

15. IDATA

IDATA 指令用于将一个间接寻址的内部RAM 地址赋给指定的符号名。

指令格式:符号名  IDATA 
表达式

例如:FULLER 
IDATA  60H

16. IF

条件伪操作格式:

IF   表达式

[ 程序块1 ]

[ ELSE ]

[ 程序块2 ]

ENDIF

当IF指令中的表达式为真时,被汇编的代码段是程序块1;当IF指令中的表达式为假时,被汇编的代码段是程序块2。在一个条件结构中,仅有一个代码段被汇编,其它的则被忽略。

17. INCLUDE

功能:利用此伪指令可将一个源文件插入到当前源文件中一起汇编,最终成为一个完整的源程序。

格式:INCLUDE  [ 驱动器名:]  [ 路径名 ]  文件名

注意:1、文件名中若没有扩展名,则系统默认是
.ASM(该文件必须是能打开的)。

2、被插入的源程序中不能包含END伪指令,否则汇编会停止运行。被链接文件的每一行,在程序清单中以“I“开头。

3、链接伪指令可有8级嵌套,若要求嵌套的多,则要修改 DOS 中的CONFIG.SYS文件的FILES参数。

18. ISEG

功能:绝对选择指令ISEG内部间接寻址绝对数据段idata

指令格式如下:ISEG [AT 绝对地址表达式]

19. MACRO

宏指令格式:

[ 宏指令名 ]  MACRO  [形式参数,。。。]

代码段

ENDM

宏调用格式

[ 宏指令名 ]  [实在参数,。。。]

20. LIST

它们的格式为:$LIST

功能:LIST伪指令使汇编时产生程序清单,但即使不用该指令,汇编也会自动产生清单。但如果使用了NOLIST伪指令后,需要继续产生清单则必须使用LIST伪指令。

21. NAME

功能:用来给当前模块命名。

指令格式:NAME 模块名

例如:NAME TIMER

定义一个模块名为TIMER 的模块。

22. NOCODE

其格式为:$NOCODE

NOCODE伪指令使得在汇编时,条件汇编程序结构中那些真值为假的条件不产生清单。如果没有这条伪指令,汇编将产生所有条件下的清单,不论其真值是否为真。但是假的条件,不产生目标码。而NOCODE伪指令使汇编清单中只列出那些由汇编程序用到的部分,因此,当使用NOCODE伪指令时,程序清单与源程序并非逐行对应。

23. NOLIST

它们的格式为:  $NOLIST

功能:NOLIST伪指令使汇编时不产生清单,所有包含此伪指令及在这条伪指令之后的语句都不进入列表文件。当不需要任何列表文件,并且不需要显示程序清单时,可以在启动汇编时不加.L附加项,且在源代码的第一行加上NOLIST指令。

使用NOLIST伪指令与附加项/L不同之处是NOLIST伪指令可加在源程序中,与LIST伪指令配合使用,使源程序中某些部分不产生清单。而不加附加项/L则不产生任何程序清单。不过,不管有无$NOLIST伪指令,程序在汇编时检查到的错误都将在屏幕上显示出错的源代码行及错误信息。

24. PAGE

功能:PAGE伪指令用于形成新的一中定义一面的行数。其格式为:$PAGE 表达式

若表达式缺省则开始新的一页,若有表达式,则每页行数重新定义。汇编开始时页长为66行。一页中除出页外,剩余55行用于打印源程序,这一格式适用于标准打印纸。

如果变元值小于66,页内可打印的源代码行将相应减少。页长最小值为12。若小于12时,每页内除页上只打印一行源程序。

页长变元是16位字节,因而每页最长可定义到65535行,这时分页打印变为连续打印,在屏幕显示程序清单或在卷筒纸上打印程序清单时,常常使用连续打印,如果在启动汇编时用/N选项,页长就是65535。

25. PUBLIC

功能:声明可被其它模块使用的公共函数名。

指令格式:PUBLIC 符号 [,符号,符号[,······]]

PUBLIC 后可跟多个函数名,用逗号格开。每个函数名都必须是在模块内定义过的。

例如:PUBLIC  INTER,_OUTER

其中_OUTER 可供C 调用。

26. RSEG

功能:再定位段选择指令为RSEG,用于选择一个已在前面定义过的再定义段作为当前段

指令格式:RSEG 段名

段名必须是在前面声明过的再定位段。

例如:

DATAS SEGMENT DATA :声明一个再定位DATA 段

CODES SEGMENT CODE ;声明一个再定位CODE 段

BSEG AT 60H

RSEG CODES ;选择前面声明的再定位CODE 段作为当前段。

27. SEGMENT

功能:SEGMENT 指令用来声明一个再定位段一个可选的再定位类型

指令格式:再定位段型  SEGMENT 段类型(再定位类型)

段类型用于指定所声明的段将处的储存器地址空间,可用的段类型有CODE/XDATA/DATA/IDATA 和BIT。

例如: 
FLAG    SEGMENT   BIT

PONITER SEGMENT   IDATA

28. SET

功能:SET 指令类似于EQU 指令,不同的是SET 指令定义过的符号可重定义。

指令格式:符号名 SET 表达式

符号名 SET 寄存器名

例如:MAX SET 2000

MAX SET 3000

29. TTILE

功能:TITLE伪指令用于在列表文件页头建立一个标题,其格式为:$TITLE 标题行

这里标题行就是将出现在页头的标量与通常的字符串定义不同。这里标题行不加引号。汇编从$TITLE 之后的第一个可打印字符开始,到回车符之间的字符串作为标题,标题的最大长度是60个字符,标题行省略,则标题行为空行。若TITLE伪指令在一页,它说明的标量行包含在本页,否则,标题将出现在下页页头。

30. using

功能:USING伪指令用于设置函数使用的寄存器(4组R0-R7),其格式为:USING num 0,1,2,3)

31. XDATA

功能:XDATA 指令用于将一个外部RAM 的地址赋给指定的符号名。

指令格式:符号名  XDATA 表达式

例如:RSEG XSEG1 ;选择一个外部数据段

ORG 100H

MING DS 10 ;在标号MING 处保留10 个字节

HOUR XDATA MING+5

MUNIT XDATA HOUR+5

32. XSEG

功能:绝对选择指令XSEG外部绝对数据段xdata

指令格式如下:XSEG [AT 绝对地址表达式]