2.4伪指令.ppt_第1页
2.4伪指令.ppt_第2页
2.4伪指令.ppt_第3页
2.4伪指令.ppt_第4页
2.4伪指令.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、Sunplus 16 位微控制器,伪指令,nSP汇编伪指令与汇编指令不同,它不会被编译,而仅被用来控制汇编器的操作。伪指令的作用有点像语言中的标点符号,它能使语言中的句子所表达意思的结构更加清晰而成为语言中不可缺少的一部分。在汇编语言中正确使用伪指令,不仅能使程序的可读性增强,且使汇编器的编译效率倍增。,伪指令,伪指令可以写在程序文件中的任意位置,但在其前面必须用一个小圆点引导,以便与汇编指令区分开。伪指令行中方括弧里的参量是任选项,即不是必须带有的参量。如果某一个参量使用双重方括弧括起来,则说明这个任选项参量本身就必须带着方括弧。例如count表示引用该任选参量时必须写出count才可。,伪

2、指令常规格式,伪指令依照其用途可分为五类:定义类、存储类、存储定义类、条件类及汇编方式类。,伪指令分类,1程序; CODE、DATA、TEXT 2程序中所用数据的性质、范围或结构; IRAM、ISRAM、ORAM、OSRAM、RAM、SRAM 3宏或结构 MACRO、MACEXIT、ENDM 4程序 PROC、ENDP、STRUCT、ENDS 5其它 DEFINE、VAR、PUBLIC、EXTERNAL、EQU、VDEF,定义类,一、定义类伪指令,主要用来对段、程序数据等进行定义。 1、 PUBLIC, EXTERNAL, DEFINE, VAR, EQU, VDEF PUBLIC:声明将在其

3、他文件中被引用的全局标号。 格式:.PUBLIC label ,label , 当要声明多个全局标号时,要用逗号将每一标号分开。 在外部文件中用伪指令EXTERNAL所声明的标号必须是用PUBLIC伪指令已经声明过的。 举例: .PUBLIC sym1,sym2 /声明多个全局标号用逗号隔开,空格被忽略,EXTERNAL:在某文件中声明在已经在其他文件中定义过的标号、变量、函数。 格式:.EXTERNAL label ,label, 同时声明多个这样的外部标号,用逗号将每一个标号分开。 本伪指令后面禁止将两个或多个标号进行算术或逻辑操作。 举例: .EXTERNAL num_var1,num_

4、var2; /声明在其他文件中定义过的标号 .EXTERNAL int SACM_A2000_Initial(); /声明在其他文件中定义过的函数,DEFINE:定义常量符号,给常量符号所赋之值既可是一已定义过的常量符号,也可以是一表达式。切忌符号超前引用,否则会出现“非法超前引用”的错误。 举例: .DEFINE BODY 1; .DEFINE IO_PORT 0 x7016; .IFDEF BODY; R1=0 xFFFF; IO_PORT=R1; .ENDIF,VAR:定义变量,并为变量赋初值。 格式:.VAR variable=value 若定义多个具有初值的变量,用逗号隔开; 若要为

5、变量赋初值,则必须在IRAM或ISRAM段中声明;在其他段中声明无效,因为被初始化为0. 若要申请具有初值的单元,也必须在IRAM或ISRAM中声明,其他段中声明都将初始化为0。 举例: .RAM .VAR s1,s2,s3,EQU:为标号赋值。 格式:label: . EQU value 所赋之值可以为在此标号之前定义过的某一符号常量或一表达式。符号不能超前引用。 举例: label: .EQU 10 VDEF:为标号赋值,可以在程序的任何部位为标号重复赋值。 格式:int0: .VDEF 0 x5F,段是应用在汇编器中的地址标签。除了9个预定义段外,用户可以自己定义段。 9个预定义段:CO

6、DE, DATA, TEXT, IRAM, ISRAM, RAM, SRAM, ORAM, OSRAM,预定义段规定的相关内容: 段内存储数据类型:指令/数据,无初始值的变量/有初始值的变量 存储介质类型:ROM/RAM 存储范围:零页中前64个字单元/整个64页 定位排放方式:合并排放/重叠排放,段的定义与调用,一、定义类伪指令,2、CODE、TEXT、DATA 主要用来定义程序和数据放置在哪段地址中。 CODE段可以用来存放所有程序和数据,不能跨页链接。 DATA段可以用来存放任何数据,可以跨页链接。 CODE段和DATA段,不同文件中所有与其同名的预定义段或同属性的用户定义段会被分开定位

7、在ROM中,而同一文件中所有与其同名或同属性的段则会被合并在一起置入ROM中。 TEXT段与CODE段的性质基本相同,唯一区别是TEXT段只能被链接到零页ROM中,且所有与其同名或同属性的各段均会被合并在一起。该段主要用来写中断程序代码。,DATA 【功能描述】切换定义预定义段DATA 【语法格式】.DATA 【举 例】 .DATA tone_table: .DW 5,8,6,9,3,8,0 ;,例1: .CODE PUBLIC _MAIN _MAIN: 例2: .TEXT .PUBLIC _IRQ0 .PUBLIC _IRQ2 _IRQ0: 例3: .DATA Tone_table:.DW

8、5,8,6,9,3,8,0,3、IRAM,ISRAM,ORAM,OSRAM,RAM,SRAM IRAM段用来存放具有初始值的变量,不可跨页链接。在链接时所有与其同名或同属性的各段都会被合并在一起,将同时被分配空间于ROM及RAM中。 RAM段用来存放无初始值的变量。不可跨页链接。在链接时所有与其同名或同属性的各段都会被合并在一起,被定位在RAM中。 ORAM段用来存放无初始值的变量,不可跨页链接。在链接时所有与其同名或同属性的各段都会被合并在一起,被定位在RAM中。但在同一个项目里的不同目标文件中所有与ORAM段同名或同属性的各段会被重叠在一起。,一、定义类伪指令,ISRAM段与IRAM段的性

9、质基本相同,但ISRAM段在RAM中只能被分配在前64(063)个字的数据单元。 SRAM段与RAM段的性质基本相同,但SRAM在RAM中只能被分配在前64(063)个字的数据单元。 OSRAM段与ORAM段的性质基本相同,但OSRAM段在RAM中只能被分配在前64(063)个字的数据单元。,RAM:用来存放无初值的变量 【功能描述】切换定义预定义段RAM 【语法格式】.RAM 【举 例】 .RAM .VAR num , max; /定义变量num、max,常用定义类伪指令说明/该字节被存放到DATA段 section1: .SECTION .CODE;/定义section1段,属性同CODE

10、段 R3=R3-0 x10;/该指令被存入到section1段 .CODE/转换到CODE段 R1=1;/该指令被存入到CODE段 .section1/转换到section1段 R1=R1+2;/该指令被存入到section1段 .DW 0 x30;/该字节被存入到section1段,4、PROC, ENDP, STRUCT, ENDS, MACRO, MACEXIT, ENDM 过程的定义与调用 结构的定义与调用 宏的定义与调用,一、定义类伪指令,过程实际上是一个子程序块。把较大的复杂程序由整化零成一个个简单的过程,以便程序的结构化。 过程定义所用伪指令:.PROC和.ENDP作为定义过程的

11、标志符。 过程定义格式: 过程名:.PROC /开始过程的定义。过程名由用户命名。 若干指令; RETF; /过程调用返回 .ENDP /终止过程定义要用ENDP。两条伪指令应成对使用。,过程(子程序)的定义与调用,举例: Test1: .PROC PUSH BP to SP; R2=0 x20; R2+=0X10; R1=R2; POP BP from SP; RETF; .ENDP,过程调用 在程序中调用一个过程时,程序控制就从调用程序中转移到被调用的过程,且从过程的起始位置开始执行该过程的指令,直到执行到RETF指令时,程序控制返回调用过程时原程序的断点位置继续执行下面的指令。 过程调用

12、格式: CALL 过程名 举例: CALL Test1,结构作为一种数据构造类型,是不同数据类型的若干数据变量的集合体。 结构使用方法:定义结构的说明使用 1、结构定义格式 结构名:.STRUCT/定义结构的开始 各成员项数据存储类型定义 .ENDS,结构的定义与调用,结构定义举例: Person: .STRUCT/定义一个结构Person Name: .DW Ann /定义了三个成员Name,Age,Gender Age: .DW 20 Gender: .DW Female/将三个成员初始化为Ann,20,Female .ENDS /结构定义结束,2、结构的说明: 某个结构一经定义后,便可指

13、明使用该结构的具体对象,这被称为结构的说明。 结构说明的格式: 结构变量名:.结构名结构成员表 其中,结构成员表用来存放结构变量中成员的值。 结构说明举例: Wang: .Personwang,18,Female Li: .PersonLi, ,Male /第二项未被赋值,则保留初值20,3、结构变量的引用 注意:在程序中使用结构时不能把结构作为一个整体来参加数据处理,参加运算和操作的应是结构中各成员项。 结构中各成员项引用的方式: 结构变量名.成员名 举例: R1=Li.Age,宏定义(Macro):在程序里将一序列的指令行用一个简单的宏名所取代。可以增强程序的可读性。 宏定义所用伪指令:.

14、MACRO和.ENDM 宏定义格式: 宏名: .MACRO args /宏定义的起始 多条指令; .ENDM/宏定义的结束,宏的定义与调用,退出宏定义所用伪指令:.MACEXIT 本指令并非用来终止宏定义,是指从宏定义中立即退出。常与条件汇编用在一起,满足条件时从宏定义里退出,接着对ENDM后面的指令进行汇编;不满足条件时,继续汇编MACEXIT后的宏定义内的其他指令。 举例: test2: .MACRO arg1,arg2 .VAR arg1 .IF count .MACEXIT .ENDIF .VAR count-1 .ENDM,以指定的数据类型存储数据或设定程序地址等 DW、DD、FLO

15、AT、DOUBLE、END,二、存储类,nSP汇编指令中的数据类型,DW:以16位整型数据形式来存储常量或变量。 格式:label: .DW value,value, 说明: 本伪指令是把一系列的16位整型常量或变量存入连续的整型数据单元中。 用逗号隔开多个数值。 常量中含有ASCII字符串,必须用单引号将其括起来。 若DW后未输入任何数值,自动会存入一个整型零常量。 举例: Label: .DW Hello,0 x000D,二、存储类,DD:以32位长整型数据形式来存储双字常量或变量。 格式:label: .DD value,value, 举例: label1: .DD 0 x0A10 la

16、bel2: .DD High /以4个32位长整型数据单元来存放字符串 High的ASCII码0 x0048, 0 x0069, 0 x0067, 0 x0068 FLOAT:以单精度浮点型实数数据形式来存储实数常量或变量。 DOUBLE:以双精度浮点型实数数据形式来存储实数常量或变量。,二、存储类,定义若干指定数据类型的数据存储单元 DUP,三、存储定义类 ,DUP 【类 别】存储定义类 【功能描述】本伪指令与DW、FLOAT、DD、DOUBLE存储类伪指令组合在一起用于存放若干个具有相同数值的常量;或者申请若干个备用的整型、单精度浮点型、长整型以及双精度浮点型数据单元。,存储定义类 ,【语

17、法格式1】label:.DW numberDUP(value) 【说 明1】存储若干具有相同数值的16位的整型数据。 【语法格式2】label:.FLOATnumber DUP(value) 【说 明2】存储若干具有相同数值的32位的单精度浮点型实数数据。,存储定义类 ,【语法格式3】label:.DDnumberDUP(value) 【说 明3】存储若干具有相同数值的32位的长整型数据。 【语法格式4】label:.DOUBLEnumberDUP(value) 【说 明4】存储若干具有相数值的64位双精度浮点型实数数据,存储定义类 ,对汇编指令进行条件汇编 IF、ELSE、ENDIF;IFM

18、A、IFDEF、IFNDEF,条件类,IF 【功能描述】引出在条件汇编结果为真时所要汇编的程序指令 【语法格式】.IFvalue 【举 例】.DEFINEvar10 x01 .IF var1 var2 = var1 + 0 x10 ; .ENDIF,常用条件类伪指令说明/声明外部标号Syt .RAM /切换到RAM段,该段存放无初值的变量 .VAR Ram1, Ram2=0 x0001; /初始化Ram2无效,系统将把Ram1和Ram2初始化为0。 L_Ram_In_Main: .DW 5 DUP(?); .SRAM/切换到SRAM段 .VAR Sram1,Sram2=0 x0002; /切换

19、到SRAM段,该段存放无初值的变量,初始化Sram2无效。,.ORAM .VAR Oram_In_Main; L_Oram_In_Main: .DW 10 DUP(5); /初始化无效 .OSRAM/OSRAM具有覆盖性 .VAR Osram_In_Main; L_Osram_In_Main: .DW 8 DUP(7); /初始化无效 .IRAM/IRAM和ISRAM初始化有效 .VAR Iram=0 x5555; L_Iram: .DW 0 x2222; .ISRAM .VAR Isram=0 x0010;,.DATA L_Data: .DW 10,20,30,40,50,23,43,21

20、.CODE .PUBLIC _main: _main: NOP; NOP; NOP; CALL Syt; L_Wait: JMP L_Wait;,/test.asm文件中的代码 .ORAM/ORAM具有覆盖性 .PUBLIC Oram1_In_Test, Oram2_In_Test;/定义全局变量 .VAR Oram1_In_Test, Oram2_In_Test; .OSRAM/OSRAM具有覆盖性 .PUBLIC Osram1_In_Test, Osram2_In_Test;/定义全局变量 .VAR Osram1_In_Test, Osram2_In_Test; .IRAM .PUBLIC

21、 Iram_In_Test; .VAR Iram_In_Test=0 x0010;,.PUBLIC Syt; Syt: PROC R1=Iram_In_Test; RETF; .ENDP,结论: 1、一个项目里不同目标文件中所有与ORAM或OSRAM段同名或同属性的各段会被重叠在一起:test.asm中的变量Oram1_In_Test, Oram2_In_Test的地址与Main.asm中Oram_In_Main, L_Oram_In_Main的地址重叠在一起;同样, test.asm中的变量Osram1_In_Test, Osram2_In_Test的地址与Main.asm中Osram_In_Main, L_Osram_In_Main的地址重叠在一起。因此,需要在不同的文件里使用相同的变量空间时,适合用本伪指令。但不要在这两个段里定义全局变量,因为它可能被局部变量覆盖。 2、RAM, SRAM, ORAM, OSRAM段中定义有初值的变量无效,均被赋。同一文件中,合并后定位。 3、RAM, SRAM, ORAM, OSRAM, IRAM, ISRAM段定位

温馨提示

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

评论

0/150

提交评论