(整理)51汇编伪指令详解._第1页
(整理)51汇编伪指令详解._第2页
(整理)51汇编伪指令详解._第3页
(整理)51汇编伪指令详解._第4页
(整理)51汇编伪指令详解._第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品文档51 汇编伪指令伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。许多伪指令要求带参数,这在定义伪指令时由“表达式”域指出,任何数值与表达式匀可以作为参数。不同汇编程序允许的伪指令并不相同,以下所述的伪指令仅适用于MA SM5 1系统,但一些基本的伪 指令在大部份汇编程序中都能使用,当使用其它的汇编程序版本时,只要注意一下它们之间的区别就可以了。MASM51中可用的伪指令有:ORG 设置程序起始地址END 标志源代码结束EQU 定义常数SET 定义整型数DATA 给字节类型符号定值BYTE 给字节类型符号定值WROD

2、 给字类型符号定值BIT 给位地址取名ALTNAME 用自定义名取代保留字DB 给一块连续的存储区装载字节型数据DW 给一块连续的存储区装载字型数据DS 预留一个连续的存储区或装入指定字节。INCLUDE 将一个源文件插入程序中TITLE 列表文件中加入标题行NOLIST 汇编时不产生列表文件NOCODE 条件汇编时,条件为假的不产生清单1、 ORG伪指令 ORG 用于为在它之后的程序设置地址值,它有一个参数,其格式为:ORG 表达式表达式可以是一个具体的数值,也可以包含变量名,如果包含变量名,则必须保证,当第一次遇到这条伪指令时,其中的变量必须已有定义(已有具体的数值),否则,无定义的值将由

3、0 替换,这将会造成错误。在列表文件中,由ORG 定义的指令地址会被打印出来。ORG指令有什么用途呢?指令被翻译成机器码后,将被存入系统的ROM中,一般情况下,机器码总是一个接一个地放在存储器中,但有一些代码,其位置有特殊要求,典型的是五个中断入口,它们必须被放在0003H,000BH,0013H,001BH 和 0023H 的位置,否则就会出错,如果我们编程时不作特殊处理,让机器代码一个接一个地生成,不能保证这些代码正好处于这些规定的位置,执行就会出错,这时就要用到ORG 伪指令了。看如下例子:例:INT_0 EQU 1000HTIME_0 EQU 1010HINT_1 EQU 1020HT

4、IME_1 EQU 1030HSERIAL EQU 1040HAJMP START ; 跳转到主程序起始点LJMP INT_0 ; 外中断 0 处理程序LJMP TIME_0 ; 定时中断0 处理程序LJMP INT_1 ; 外中断 1 处理程序LJMP TIME_1 ; 定时中断1 处理程序LJMP SERIAL ; 串行口中断程序START:NOPEND上面的程序经汇编后列表文件如下:The Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 1 08-26-961000 = INT_0 EQU 1000H10

5、10 = TIME_0 EQU 1010H1020 = INT_1 EQU 1020H1030 = TIME_1 EQU 1030H1040 = SERIAL EQU 1040H0000 0111 AJMP START ; 跳转到主程序起始点0002 021000 LJMP INT_0 ; 外中断 0 处理程序0005 021010 LJMP TIME_0 ; 定时中断0 处理程序0008 021020 LJMP INT_1 ; 外中断 1 处理程序精品文档精品文档000B 021030 LJMP TIME_1 ;定时中断1处理程序000E 021040 LJMP SERIAL ;用行口中断程

6、序START:0011 00 NOP0000 ENDThe Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 2 08-26-96;%T Symbol Name Type ValueINT_0I 1000INT_1I 1020SERIALI1040STARTL 0011TIME_0I1010TIME_1I1030;%Z00 Errors (0000)由列表文件,可以绘出代码在ROM中的映象图如下:代码01H11H02H10H00H02H10H10H02H10H20H地址00H01H02H03H04H05H06H0

7、7H08H09H0AH代码02H10H30H02H10H40H00H地址0BH0CH0DH0EH0FH10H11H12H13H14H15由上面的映象图可知,在0 3 H处的代码为1 0 H ,而不是我们要的0 2 H ,所以外断 程序INT_0不能被正确执行,其它各中断程序的情况同样如此,如在0BH处,本来存放的应当是定时器0中断程序,但按上述的映象图,0 BH处开始的3个代码 是:0 2H, 10H, 3 0 H,这是定时器1的入口地址,所以,如果定时器0发生 中断,所执行的其实是定时器1的中断程序,这当然不对。例2 :INT_0 EQU 1000HTIME_0 EQU 1010HINT_1

8、 EQU 1020HTIME_1 EQU 1030HSERIAL EQU 1040HAJMP START ; 跳转到主程序起始点ORG 0003HLJMP INT_0 ; 外中断 0 处理程序ORG 000BHLJMP TIME_0 ; 定时中断0 处理程序ORG 0013HLJMP INT_1 ; 外中断 1 处理程序ORG 001BHLJMP TIME_1 ; 定时中断1 处理程序ORG 0023HLJMP SERIAL ; 串行口中断程序START:NOPEND上面的程序经过汇编后列表文件如下:The Cybernetic Micro Systems 8051 Family Assemb

9、ler, Version 3.03 Page 1 08-26-961000 = INT_0 EQU 1000H1010 = TIME_0 EQU 1010H1020 = INT_1 EQU 1020H1030 = TIME_1 EQU 1030H1040 = SERIAL EQU 1040H0000 0126 AJMP START ; 跳转到主程序起始点0003 ORG 0003H0003 021000 LJMP INT_0 ; 外中断 0 处理程序000B ORG 000BH000B 021010 LJMP TIME_0 ; 定时中断0 处理程序0013 ORG 0013H0013 0210

10、20 LJMP INT_1 ; 外中断 1 处理程序001B ORG 001BH001B 021030 LJMP TIME_1 ; 定时中断1 处理程序0023 ORG 0023H0023 021040 LJMP SERIAL ; 串行口中断程序START:0026 00 NOP0000 ENDThe Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 208-26-96 ;%T Symbol Name Type ValueINT_0 I 1000INT_1 I 1020SERIALI 1040START L 00

11、26TIME_0I 1010TIME_1I 1030;%Z 00 Errors (0000)由列表文件,可以绘出代码在ROM中的映象图如下:代码01H地址00H代码02H地址0BH代码地址16H代码地址21H11H01H 02H10H10H0CH 0DH17H18H02H22H 23H02H10H03H 04H0EH 0FH19H 1AH10H 40H24H 25H00H05H06H10H11H02H10H1BH 1CH00H26H27H07H 08H02H12H13H30H1DH 1EH28H09H 0AH01H 20H14H 15H1FH 20H2AH 2BH29H由映象图可知,各中断程序

12、的代码都在其规定地址处,一旦产生中断即可执行相应的程序。 至于图中未填的部分(如 02H), 根据各编程器不同而不同,一般为 FFH 或 00H2、 ENDEND 语句标志源代码的结束,汇编程序遇到END 语句即停止运行。若没有END 语句, 汇编将报错。END 语句有一个参数,可以是数值0, 也可以是表达式,其格式是:标号 : END 表达式它的值就是程序的地址并且作为一个特殊的记录写入HEX 文件。 若这个表达式省略,HEX 文件中其值就是0。3、 EQUEQU 以及其它一些符号定义伪指令用来给程序中出现的一些符号赋值。对这些符号名的要求与其它符号相同,即长度不限,大小写字母可互换并且必须

13、以字母开头。由等值指令定义的符号是汇编符号表的一部分。等值伪指令有两种形式。一种用EQU ,另一种用字符“=”即符号名 EQU 表达式符号名 = 表达式两种形式的效果是一样的。符号名在左边,其对应的值在右边。值可以是变元,其它的符号名或表达式。只要在两遍扫描中求出表达式的值就行,否则引用该符号名时将报错。当表达式的值是字符串时,只取后两个字符。若串长为1,高位字节被置0,符号名的值被打印在程序清单中。由等值伪指令定义的符号名不允许重名。如果经定义的符号名被重定义,则汇编将报出错,并且这个符号名按新定义的处理,最好不要在程序中出现重名。例: 0469= ABC EQU 469H0464= XY

14、EQU ABC-502F0= JK = 7520754 XYJK = XY+JK在列表文件中最左边的数字不是这些伪指令所在的地址而是通过汇编后赋给符号名的值。第一条符号名ABC 被起来 469H ,第二条XY 被赋于 ABC-5 ,因此 XY 的值为469H-5=464H , JK 的值为752(即2F0H), XYJK 的值 XY+JK=464H+2F0H=754H4、 SETSET 伪指令有些类似于等值伪指令,它定义了一个整数类型的符号名,它的格式为符号名 SET 表达式SET 伪指令与等值伪指令的唯一区别在于SET 伪指令所定义的符号名右以在程序中多次定义,而不报错。例: 002D= K

15、57 SET 101101B8707= K57 SET 345675、 DATA 与 BYTEDATA 与 BYTE 都是用来定义字节类型的存储单元,赋予字节类型的存储单元一个符号名,以便在程序中通过符号名来访问这个存储单元,以帮助对程序的理解。BYTE 与 DATE 之间的区别类似于EQU 和 SET, BYTE 伪指令不能定义重名。6、 WORDWORD 伪指令类似于DATE 伪指令, 只是 WORD 伪指令定义了一个字类型的符号名,其格式为: 符号名 WORD 表达式0027= VAL31 WORD 390021= PAR7 WORD 21H一个字由2个字节组成。当然,因为8 0 5 1

16、汇编语言集没有字操作,所以程序执行 时,只处理字节。WROD伪指令仅仅允许用户定义一个认为是字的存储位置。7、 BITBIT 伪指令定义了一个字位类型的符号名,其格式为:符号名 BIT 表达式这里表达式的值是一个位地址,这个伪指令有助于位的地址符号化。例:002F= LOG3 BIT 470014= Y731 BIT 14H8、 ALTNAME替换名( ALTNAME )伪指令提供用户一种手段,以定义一个符号名来替换一个保留字,此后这个答名与被替换的保留字均可等效地用于程序中。任何保留类型的答名均可被替换。替换名伪指令格式为:ALTNAME 保留字,新名例:0002= ALTNAME R2 C

17、OUNT013A EA MOV A,R2013B E502 MOV A,COUNT9、 DBDB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。该伪指令的参 数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为:标号: DB 表达式只要表达式不是字符串,每一表达式值都被赋给一个字节。计算表达式值时按1 6位 处理,但其结果只取低8位,若多个表达式出现在一个DB伪指令中,它们必须以逗 号分开。表达式中有字符串时,以单引号“'”作分隔符,每个字符占一个字节,字符串不加改变地被存在各字节中,并不将小写字母转换成大写字母。例如:DB 00H

18、 01H 03H 46HDB 'This is a demo!'十、 DWDW 为以字节为单元(十六位二进制)来给一个的存储区赋值,其格式为:标号: DW 表达式例如:0000 3035 D46B DW 12341,54379,10110100101110B0004 2D2E0006 4344 4243 DW 'ABCD','BC','A'000A 0041000C 2868 02E8 DW 456*375h,83+295h,'YZ',72h-4560010 595A FEAA十一、 DSDS 为定义存储内容的伪指

19、令,用它定义一个存储区,并用指定的参数填满该存储区。DS 伪指令包含两个变元,第一个变元定义了存储区的长度的字节数,在汇编时,汇编程序将跳过这些单元把其它指令汇编在这些字节之后,因此在使用D S伪指令时第一个变元不可活力第二个变元表示在这些单元中真入什么值,第二个变元可以活力活力时这些字节将不处理。下例中 0173 处有一条DS 9, 则空出 9 个字节, 下一第指令被汇编到017C 处;在 017C 处空出 1BH 个单元,在这些字节中被27H 所填充。DS 指令的格式如下:标号:DS表达式1 ,表达式2表达式1定义了存储区的长度(以字节为单位)。这个变元不能省略。表达式2是可选择的,它的值

20、低8位用以填入所定义的存储区。若省略则这部分存储单元不处理。例:0000 04 INC A0001 DS 9000A 04 INC A000B DS 1BH,27H0026 04 INC A十二、 INCLUDEINCLUDE 伪指令用于链接源文件,即将一个源文件插入到另一个源文件中。它有一个参数,指出将要插入的文件名,该文件名中可包括驱动器名和路径名。若文件没有扩展名,则默认为是ASM。但待插入的文件必须是可以打开的。若文件打开操作失败,则产生致命错误,汇编将停止运行。反之,汇编程序将文件内容读入并按源代码处理。当遇到文件结速符时,汇编程序返回到INCLUDE 伪指令处继续身下处理源程序。被

21、插入的文件在程序清单中以“I”开头。本宏汇编版本支持级嵌套,可在程序中用INCLUDE 伪指令插入任意多个文件,但是,在一般情况下DO S允许打开的文件数量是有限的,如果用户需要打开较多的文件, 则必须在CONFIG. SYS文件中加入F I LE S = 40或更多的值,若超过8级嵌套或打开的文件太多,则产生致命错误,汇编中止运行。INCLUDE 伪指令提供了模块化程序设计手段,在汇编程序处理主程序时,模块被插入,尽管这不等价于链接和装配可重定位的目标模块,但它具有类似的功能,被插入的源文件中不应该包含END伪指令,否则,汇编就会提前停止运行,END伪指令只能出现在主程序中。此外,在主程序进

22、行汇编前所有附加的源文件必须通过汇编,产生相应的HEX及L ST文件,由于附加的文件没有END伪指令,因此,附加文件汇编时,汇编程序将显示: “没有结束语句”的错误, 但并不影响与主程序的链接。下面是一个使用INCLUDE伪指令的例子,其主程序的源文件MA I N. ASM为:;MAIN.ASMORG 27HSTART:CLR AMOV R3,AINCLUDE MOD1INC R5INCLUDE MOD2.ASMDEC R3END START主程序为带有END伪指令的完整的源文件。程序中有两INCLUDE伪指令,分别将两附加的文件MODI. ASM及MOD2. ASM链接到主程序中。以下是这两

23、个 文件。;MOD1.ASMMOV R2,#31HMOV R5,#18H;MOD2.ASMMOV R6,#47HANL A,#07HMOV R1,A注意MODI. ASM及MOD 2. ASM均没有END指令。在进行汇编时必须先对MO D 1 . A S M和MO D 2 . A S M进行汇编,然后在汇编 MAIN. ASM,由于上两个文件没有END伪指令,所以在汇编时会出现错误提 示,不用管它,继续下面的工作,就可以得到正确的结果。以下是形成的列表文件:The Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page

24、 1;MOD2.ASMMOV R6,#47HANL A,#07HMOV R1,A08-27-96;MAIN.ASM0027 ORG 27HSTART:0027 E4 CLR A0028 FB MOV R3,AI INCLUDE MOD1I ;MOD1.ASMI0029 7A31 MOV R2,#31HI002B 7D18 MOV R5,#18HI002D 0D INC R5I INCLUDE MOD2.ASMI ;MOD2.ASMI002E 7E47 MOV R6,#47HI0030 5407 ANL A,#07HI0032 F9 MOV R1,A0033 1B DEC R30027 END

25、STARTThe Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 2 08-27-96;%T Symbol Name Type ValueSTART L0027;%Z00 Errors (0000)十三、 T I T LT I TL E伪指令用于在列表文件页头建立一个标题,其格式为:$ T I T L E 标题行这里标量行就是将出现在页头的标量与通常的字符串定义不同。这里标量行不加引号。汇编从$ T I TL E之后的第一个可打印字符开始,到回车符之间的字符串作为 标量标量的最大长度是6 0个字符,基标量行省略,则标题行为空行。若T I T L E 伪指令在一页,它说明的标量行包含在本页,否则,标题将出现在下页页头。十四、 P A C EPAGE伪指令用于形成新的一中定义一面的行数。其格式为:$ PAGE 表达式若表达 式缺省则开始

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论