haihongyuan.com
海量文库 文档专家
全站搜索:
您现在的位置:首页 > 小学教育 > 小学英语小学英语

Instruction

发布时间:2013-10-25 09:40:07  

凌阳16位单片机

u’nSP指令介绍

2

主要内容

?16位u’nSP 内核架构?指令系统

??’nSP?汇编伪指令3

一、16位u’nSP 内核架构4

16位u’nSP 内核架构

SP

SR1SR2SR3SR4

R1R2R3R4R5(BP)SR

User RegisterPC: Program CounterSP: Stack PointerSB: Shift BufferNZSC: Flag

DS: Data Segment RegisterCS: Code Segment RegisterInternal RegistersAddrGen: Address Generator

MUX

DR: Data RegisterBR: B-Register

DATABUS

DR

16

PC

ADDRESSBUS

ADDRGEN

22

SHIFTER

BR

NZSC

ALU

15109650DSNZSCCS

BR

5

16位数据总线/22位地址总线a: 4M 字寻址空间b: 64页,每页64K字0x0000000x0007FF0x0008000x003FFF0x0040000x006FFF0x0070000x007FFF0x0080000x00FBFF0x00FFF50x00FFFF0x010000SRAM外部 SRAM保留空间I/O 端口系统端口零ò3ROM保留空间中断向量第1页ROM

0x3FFFFF第ROM

6?’nSP?存储器地址映射

?13个16位寄存器

a: 4个通用寄存器(R1-R4)b: 4个二级寄存器(SR1-SR4)c: 1个基址寄存器(BP)000

001d : 4个系统寄存器010SP:堆栈指针011

100SR:状态寄存器101PC:程序指针110

111FR:标志寄存器

?SECBANK ON/OFF7PRIBANKR1R2R3R4BPPCFRSECBANKSR1SR2SR3SR4BPPCFR000001010011100101110111

寄存器号

8

状态寄存器

?CS:代码段?DS:数据段?条件标志

N:负数标志Z:零标志S:符号位C:进位标志9

标志寄存器

?AQ:DIVS/DIVQ 执行的条件判别标志(0)?BNK:第二寄存器组使用标志(0)

[Primary (0)/ Secondary (1)]

?FRA:FRACTION模式(0)

[Off (0) / On (1)]

?FIR:FIR_MOVE 模式(0)

[On (0) / Off (1)]

?SFT BUF:移位缓冲器或FIR运算保护位(0000

)10

标志寄存器(续)

?F:快速中断使能标志(0)

?I:普通中断使能标志(0)

?INE:中断嵌套模式(0)

[IRQNEST ON(1)/IRQNEST OFF(0)]?IRQ PRI:普通中断优先级寄存(1000)

IRQ0>IRQ1>IRQ2>IRQ3>IRQ4>IRQ5>IRQ6>IRQ711

?10个中断源

a: 1个快速中断

b: 8个一般中断

c: 1个软件中断

支持中断嵌套模式

IRQNEST ON/OFF

在中断嵌套模式被启用时,如果在中断过程有更高优先级的中断发生,将发生中断嵌套。12

二、指令系统

13

符号约定

为了便于说明格式,在指令介绍前要先了解一些符号约定。

?Rd

?Rs 目标寄存器或目标存储器指针源寄存器或源存储器指针

R1,R2,R3,R4,R5(BP)

?NZSC SR寄存器中的4个标志位?PC 程序指针

?SP 堆栈指针

?BP 基指针

14

?SR 段寄存器

?→ 数据传送符号

?MR 由R4,R3组成的32位结果寄存器

(R4为高字节,R3为低字节)

?FIR 有限冲击响应(Finite Impulse Response)

指数字信号处理中的一种具有线性相位及任意幅度特性的数字滤波器算法。

?{} 可选项

?[] 寄存器间接寻址标志

15

?// 注释符

?RW 读等待态

?SW 存储等待态

?SRW 存储/读等待态

?ss 两个有符号数之间的操作,

us无符号数与有符号数之间的操作?Label 程序标号

16

?++,--指针单位字增量,字减量?IM6/IM16 6位立即数/16位立即数

?A6/A16 6位地址码/16位地址码

?+,-,×加法符号,减法符号,乘法符号?&,|,^,~ 逻辑与符号,逻辑或符号,

逻辑异或符号,逻辑取反符号

17

6种寻址方式

a: 立即数寻址:操作数以立即数的形式出现

例:R1 = 0x28;

b:存储器直接寻址:通过存储器地址来访问存储器中的数据

例:[0x30] = R4;

R4 = [0X30]; c: 寄存器寻址:操作数在寄存器中

例:R3 = R1

d: 寄存器间接寻址:操作数的地址由寄存器给出

例:R2 = [R3];

18

6种寻址方式

e: 变址寻址:操作数的地址由基址和偏移量(6位)共同给出

例:R3 = [BP + 0x08];

f: 多重间接寻址(入栈/出栈):可以将多个寄存器的值一次压入堆栈,或从堆栈中弹出

例:PUSH R1,R3 TO [SP]

19

指令分类

?数据传送类?算逻运算类

?程序转移控制类?其它控制类?位操作指令20

一、数据传送类指令

?立即数寻址/寄存器寻址/直接地址寻址?变址寻址/寄存器间接寻址

?压栈

?出栈

21

1、立即数寻址/寄存器寻址/直接地址寻址

这组指令会执行Rd = X的数据传送操作,即将源操作数X或源操作单元X中的字数据存入目标寄存器Rd。依据寻址方式的不同,X将有不同的意义。

22

应用举例

R1=0x28 R2=0x2400 R3=[BP + 0x08] R4=[0x30] R5=[0x2480] SR=R2 //IM6 //IM16//[BP+IM6]//A6//A16//RCPU内部标志访问指令:

FR = Rs ;

Rs = FR ;

23

2、变址寻址/寄存器间接寻址

这组指令会执行X = Rd的数据传送操作,即将寄存器Rd的内容存入目标操作单元X。依据寻址方式的不同, X将有不同的意义;24

应用举例

[BP+0x08]=R3 //写入[BP+IM6]

[0x30]=R4 //写入[A6]

[0x2480]=R5 //写入[A16]

[R2++] = 0x25

[R2++] = R1 //R1的值存于0x25单元

//R2=R2 +1

25

3、压栈

PUSH Rx, Ry to [Rs]

PUSH Rx to [Rs]

将n(n=1~7,SIZE)个序列寄存器Rx~Ry(Rx~Ry≠SP)中的数据压入Rs指出地址偏移量初值的存储器中,且总是将序号高的寄存器内容先压入

26

应用举例

27

4、出栈

POP Rx, Ry from [Rs]

POP Rx from [Rs]

将一组由Rs指出地址偏移量初值的存储器中的数据拷贝到n(n = 1~7,SIZE)个序列寄存器Rx~Ry(Rx~Ry≠SP)中,且总是先拷贝数据到序号低的寄存器内。28

应用举例

29

二、算逻运算类指令

顾名思义这类指令就是用来完成一些算术逻辑运算的,基本是执行Rd = X # Y的算术逻辑运算。依据寻址方式的不同,X、Y将有不同的意义。

30

1、加法运算

这组指令会执行Rd = X+Y的算术运算,即将源操作数X、Y或源操作单元X、Y中的字数据进行不带进位的加法运算,结果存入Rd寄存器。

31

应用举例

R1+=0x28

R2=R1+0x2400 R3+=[BP + 0x08]R4+=[0x30] BP=R4+[0x2480]

SR+=R2//IM6//IM16//[BP+IM6]//[A6]//[A16]//R32

2、带进位的加法运算

这组指令会执行Rd = X+Y+C的算术运算,即将源操作数X、Y或源操作单元X、Y中的字数据进行带进位的加法运算,结果存入Rd寄存器。

33

应用举例

R1=0x28,Carry // R1 = R1 +IM6 + 进位CR2=R1+0x2400,Carry// R2 = R1 +IM16 + 进位CR3+=[BP + 0x08],Carry// R3 = R3 +[BP+IM6] + 进位CR4+=[0x30] // R4 = R4 +[A6] + 进位CBP=R4+[0x2480],Carry // BP = R4 +[A16] + 进位CSR+=R2,Carry // SR=SR+R2+ 进位CPC+=D:[BP++],Carry // 写入PC,

34

3、减法运算

这组指令会执行Rd = X -Y的算术运算,即将源操作数X、Y或源操作单元X、Y中的字数据进行不带借位的减法运算,结果存入Rd寄存器。

35

应用举例

R1-=0x28R2=R1-0x2400R3-=[BP + 0x08] R4-=[0x30] BP=R4-[0x2480] SR-=R2 PC-=D:[R5++]// R1 = R1 -IM6// R2 = R1 -IM16// R3 = R1 -[BP+IM6]// R4 = R4 -[A6]// BP = R4 -[A16]// SR = SR -R2// 写入PC,36

4、不带借位的减法运算

这组指令会执行Rd = X -Y -C = X + (~Y) + C的算术运算,即将源操作数X、Y或源操作单元X、Y中的字数据进行带借位的减法运算,结果存入Rd寄存器。37

应用举例

R1-=0x20,Carry // R1 = R1 -IM6 -进位CR2-=R1+0x2400+ Carry // R2 = R1 -IM16 -进位CR3-=[BP + 0x08],Carry // R3 = R3 -[BP+IM6] -进位CR4-=[0x30] // R4 = R4 -[A6] -进位CBP=R4-[0x2480], Carry // BP = R4 -[A16] -进位CSR-=R2,Carry // SR = SR -R2 -进位CPC-=D:[BP++],Carry // 写入PC,

38

5、取补运算

这组指令会执行Rd = -X = (~X) + 1的算术运算,结果存入Rd寄存器。39

应用举例

R1=-0x27 R3=-[BP+0x08] R4=-[0x30]BP=-[0x2480]SR=-R2PC=-D:[R5++] // R1 = R1 -IM6// R3 = R3 -[BP+IM6]// R4 = R4 -[A6]// BP = BP -[A16]// SR = SR -R2// 写入PC40

6、比较运算

这组指令会执行X-Y的算术运算,但只影响NZSC标志,而不将结果存储。41

应用举例

CMP R1,0x27 CMP R3,[BP+0x08]CMP R4,[0x30] CMP BP,[0x2480]CMP SR,R2 // 比较R1,IM6// 比较R3,[BP+IM6]// 比较R4,[A6]// 比较BP,[A16]// 比较SR,R42

7、乘法运算指令

Rd中字数据与Rs中字数据相乘,积存入MR(R4,R3)。如果Fraction mode 是使能的,这个结果会向左移一位。

ss表示为两个有符号数相乘,

us则表示无符号数与有符号数相乘;缺省表示为两个有符号数相乘。

43

MR = Rd * Rs;// 默认情况为有符号乘有符号MR = Rd * Rs,uu;// 无符号乘无符号

MR = Rd * Rs, ss; // 有符号乘有符号

MR = Rd * Rs, us;// Rd为无符号数, Rs 为有符号

//数. 第一个寄存器总是无符号

//的,第二个寄存器是有符号的

44

应用举例:

MR=R2*R1; //两个有符号数相乘MR=R1*R2, us; // R1中是无符号数,

// R2中为有符号数,

45

8、n项内积运算指令

指针Rd与Rs所指存储器地址内有符号字数据之间或无符号与有符号字数据之间进行n项内积运算,结果存入MR。

46

应用举例

MR=[R2]*[R1], 8;

//两个有符号数之内积运算MR=[R1]*[R2], us, 2;

//R1中是无符号数,R2中为有符号数47

9、除法(DIVS、DIVQ)

除法运算可以是有符号或者是无符号的,但分子分母必需是同类型的数据。请将32位的被除数放到MR(R4,R3)中,16位的除数放到R2中,并清掉AQ标志,然后就可以进行除法运算。

对于有符号除法,首先应执行DIVS一次,从而得到商的符号位,然后多次执行DIVQ得到商;

对于无符号除法,通过多次执行DIVQ得到商。运算结果的商在R3中。

48

10、逻辑与

这组指令会执行Rd = X & Y的逻辑与操作,结果存入Rd寄存器。

49

11、逻辑或

这组指令会执行Rd = X | Y的逻辑或操作,结果存入Rd寄存器。

50

12、逻辑异或

这组指令会执行Rd = X ^ Y的逻辑异或操作,结果存入Rd寄存器。

51

13、测试指令

这组指令会执行X&Y的逻辑操作,但只影响NZ标志,而不将结果存储。52

14、移位操作

包括逻辑左移、逻辑右移、循环左移、循环右移、算术右移等操作,移位的同时还可进行其他运算,如加、减、比较、取负、与、或、异或、测试等

53

?移位操作—Ⅰ

ASR:算术右移

LSL:逻辑左移

ROL:循环左移LSR:逻辑右移ROR:循环右移

用法:

(1)Rd = Rd shift-op Rs (Rs值范围:0——15)

(2)Rd = Rd shift-op Imm (Imm值范围:0——4)54

应用举例

R1 = R1 ASR 3 //R1算术右移3位R2 = 2

R3 = R3 ROL R2 //循环左移2位55

?移位操作—Ⅱ

ASR-OR:算术右移-或

LSL-OR:逻辑左移-或

LSR-OR:逻辑右移-或

用法:

(1)MR |= R4 shift-op Rs (Rs值范围:0——15)

(2)Rd |= Rd shift-op Imm (Imm值范围:0——4)56

应用举例

R2 =4

R4 = 0x1234

R3 = 0x5678 //MR=0x12345678 R3 = R3 LSR R2 MR |= R4 LSR R2 //MR=0x0123456757

三、转移控制类指令?软件中断

?子程序调用指令

?有条件/无条件跳转?无条件长跳转

?利用MR寄存器执行长跳转指令?子程序返回

?中断返回

?无条件长跳转

58

1、软件中断

?功能描述:

产生一个由指令控制的软件中断,CPU会跳到中断向量[0x00FFF5]处执行软中断服务子程序。

?应用举例:

BREAK; //产生一个软件中断59

2、子程序调用指令

?功能描述:这是在64页CODE段绝对地址范围内的子程序调用指令。在指令执行期间,程序指针PC和段寄存器SR都会被自动压入栈中。?应用举例: Call sub_1;

60

3、有条件/无条件跳转

这是一组程序条件/无条件近转移指令。通过检测SR寄存器中各标志位作为程序转移的条件。若条件满足则程序跳转到与PC相关的地址上,跳转范围限制为PC+63个字;条件不满足则程序继续执行条件转移指令后面的指令。

61

应用举例:

CMP R1, R2;

JNE label1; //若不相等,跳转到label2JMP labe2; //无条件跳转到label162

4、无条件长跳转

?功能描述:

无条件跳转到用户指定地址。

?应用举例:

GOTO loop; //程序无条件跳转到loop标号地址上。63

5、利用MR寄存器执行长跳转指令调用以MR寄存器内容为入口地址的程序._main:

r1 = 0xefff;

r2 = 0x1713; F_Sub:

r2 = 0x5555

r3 = 0x5555

mr = r2*r3 //r2乘r3

retf//调用F_Sub子程序r3 = OFFSET F_Sub

r4 = SEG F_Sub

call mr

L_MainLoop: jmp L_ MainLoop

64

6、子程序返回

?功能描述:

从子程序返回时须用RETF指令从栈中弹出状态寄存器SR和程序指针PC的值。由于弹栈动作发生在本指令执行之后,故弹栈后SR和PC的值应分别与调用子程序之前二者的值相同。

?应用举例:

F_Sub1:

...

RETF; // return from sub1

65

7、中断返回

?功能描述:

从中断服务子程序返回时须用RETI指令从栈中弹出状态寄存器SR和程序指针PC的值。由于弹栈动作发生在本指令执行之后,故弹栈后SR和PC的值应分别与进入中断服务子程序之前二者的值相同。?应用举例:

.TEXT

.PUBLIC _IRQ1

_IRQ1:

...

RETI; // return from IRQ1

66

四、其它控制类指令

?FIR_MOV ON/OFF

?FIQ 中断使能/屏蔽?IRQ 中断使能/屏蔽

?允许/禁止FIQ和IRQ中断设置?Fraction ON/OFF?SECBANK ON/OFF?空操作

67

1、FIR_MOV ON/OFF

?功能描述:

这组指令用来控制允许/禁止FIR滤波器运算过程中数据的自动移动。由于这会影响到FIR滤波器运算的状态,且此状态具有全局性质,故用在中断服务子程序时要格外小心。

68

应用举例:

.IRAM

.VARNO_1=0x0001, NO_2=0x0002,NO_3=0x0003, NO_4=0x0004.VARNO_5=0x0005, NO_6=0x0006,NO_7,NO_8.CODE

.PUBLIC _main

_main:

FIR_MOV ON //使能FIR操作数据自动搬移r1 =NO_2//将地址“NO_2” 赋给‘r1’ r2 =NO_5//将地址“NO_5” 赋给‘r2Loop_Muls:

mr = [r1]*[r2],us,2 //操作结果存入r4: r3中

[NO_7] =r3//将结果(低16位)读入NO_7中

[NO_8] = r4//将结果(高16位)读入NO_8中nopjmp Loop_Muls

69

2、FIQ 中断使能/屏蔽

FIQ ON

FIQ OFF

功能描述:

这组指令用来开通/关断FIQ中断。70

3、IRQ 中断使能/屏蔽

IRQ ON

IRQ OFF

功能描述:

这组指令用来开通/关断IRQ中断。71

4、允许/禁止FIQ和IRQ中断设置

功能描述:

这组指令用来设置允许/禁止FIQ和IRQ中断的标志。应用举例:

INT FIQ; // 允许FIQ中断,禁止IRQ中断INT FIQ, IRQ; // 允许FIQ与IRQ中断

INT OFF; // 禁止FIQ与IRQ中断

72

5、Fraction ON/OFF

如果Fraction mode 是使能的,乘法结果会向左移一位。

例:

R1 = 0x0002

R2 = 0x2244

FRACTION OFF

MR = R1 * R2

FRACTION ON// MR = 0x00004488

MR = R1 * R2

73// MR = 0x00008910

6、SECBANK ON/OFF

切换二级寄存器.

例:

SECBANK ON

R1 = 0x1234// 0x1234 放入SR1, 而不是R1R2 = 0x5678// 0x5678放入SR2,而不是R2SECBANK OFF

R1 = 0x0F0F // 0x0F0F放入R1, 而不是SR1R2 = 0x0505// 0x0505放入R2,而不是SR274

7、空操作

NOP

功能描述:

空操作,只是将PC指向下一个地址。75

五、位操作指令

TEST:位测试

CLRB:位清除SETB:位置位INVB:位取反

例子:

SETBR1, 15// R1的第15位置1CLRB R1, 15// R1的第15位清除R5 = 1

INVB R1, R5// R5 =1, 因此对R1第1位取反TEST [R1], 8 // 只改变”Z”标志76

三、?’nSP?汇编伪指令

它不会被编译,而仅被用来控制汇编器的操作。伪指令可以写在程序文件中的任意位置,但在其前面必须用一个小圆点引导。

77

78

【语法格式】.DEFINE variable [value][,?]

【功能描述】定义常量符号

【举例】

.DEFINE BODY 1;

.DEFINEIO_PORT0x7016;

.IFDEF BODY;

R1=0xFFFF;

[IO_PORT] = R1;

.ENDIF

79

【语法格式】.PUBLIClabel[,label][,?]

【功能描述】声明将被引用在其它文件中的全局标号

【举例】

.PUBLICsym1

//声明要引用在其它文件中的全局标号

.PUBLIC sym1,sym2

//声明多个全局标号需用逗号将每一标号分开,空//格会被忽略。

80

【语法格式】.EXTERNAL label[,label][,...]

【功能描述】在某文件中声明已在其它文件里定义过

的标号、变量或函数

【举例】

.EXTERNAL num_var1;

//声明在其它文件中定义过的标号

.EXTERNAL int SACM_A2000_Initial(); //声明在其它文件中定义过的函数

81

【语法格式】.RAM

【功能描述】切换定义预定义段SRAM

【举例】

.RAM

start:.DW? //申请一个整型数据单元.VAR num , max; //定义变量num、max82

【语法格式】.SRAM

【功能描述】切换定义预定义段SRAM

【举例】

.SRAM

start:.DW?

//申请一个16位整型数据单元.VAR sum,name

//定义变量sum、name

83

【语法格式】.IRAM

【功能描述】切换定义预定义段IRAM

【举例】

.IRAM

.VSR sum=0x0001

//定义变量,并赋初始值为0x0001Storage:.DW0x20

//在申请的整型数据单元中存放存0x2084

【语法格式】.ISRAM

【功能描述】切换定义预定义段ISRAM

【举例】

.ISRAM

Storage: .DW0x20

//在申请的整型数据单元中存放存0x20.VAR sum=0x0020

//定义变量,并赋初始值为0x002085

【语法格式】.ORAM

【功能描述】切换定义预定义段ORAM

【举例】

.ORAM

.VAR num //定义变量numBuf1:.DW 10 DUP(?)

//申请10个整型的数据单元

86

【语法格式】.OSRAM

【功能描述】切换定义预定义段OSRAM

【举例】

.OSRAM

.VAR num //申请一个变量

Buf2:.DW ? //申请一个整型的数据单元87

88

【语法格式】.VARvariable[=value]

【功能描述】定义变量并为变量置初始值

【举例】

.RAM

.VARs1,s2,s3;//无初值.VARFlag = 0xFF;//有初值89

【语法格式】.DATA

【功能描述】切换定义预定义段DATA

【举例】

.DATA

T _ToneTable: .DW 5,8,6,9,3,8,0 ;90

【语法格式】.CODE

【功能描述】切换定义预定义段CODE

【举例】

.CODE

.PUBLIC _main;

91

【语法格式】.TEXT

【功能描述】切换定义预定义段TEXT

【举例】

.TEXT

. PUBLIC _IRQ0

_IRQ0: //中断子程序入口

PUSH R1,R5 TO [SP]

NOP

POP R1,R5 FROM [SP]RETI

92

93

【语法格式】Label:.PROC

. ENDP

【功能描述】过程的定义

【举例】

F_Test:.PROC

PUSH BP,BP TO [SP];BP=SP+1;

R1 = [0x7015];

POP BP,BP FROM [SP];RETF;

.ENDP

94

【语法格式】Label:.STRUCT

.ENDS

【功能描述】结构的定义

【举例】

Person: .STRUCT Xm: .DW ‘joe’

Nl: .DW 20

Xb: .DW ‘boy’

.ENDS

// 定义一个结构‘Person’,它包含三个变量Xm,// Nl,Xb,且分别被初始化为‘joe’,20,‘boy’95

【语法格式】Label:.MACROargs

.ENDM

【功能描述】宏的定义

【举例】

Personal_info: .MACRO arg1,arg2,arg3

R1 = arg1+arg2;

.ENDM

96

【语法格式】Label: .EQU

【功能描述】为标号赋值

【举例】

Label: .EQU10value

97

【语法格式】Lable: .VDEF value

【功能描述】为标号赋值

【举例】

int0:.VDEF0x005F

98

【语法格式】Label:.DW[value][,value][,...]

【功能描述】以16位整型数据的形式来存储常量或变量

【举例】

.ISRAM

Label:

.DW ‘Hello’,0x000D

//在申请的序列整型数据单元中存放字符串常量//‘Hello’的ASCII码和整型常量0x000D

99

【语法格式】Label:.DD [value][,value][,?]

【功能描述】以32位长整型数据的形式存储双字常

量或变量

【举例】

label1:.DD 0x0A10

//存放一个十六进制数0x0A10

label2:.DD‘High’

//以4个32位长整型数据单元来存放字符串‘High’//的ASCII码0x0048 ,0x0069,0x0067,0x0068100

【语法格式】Label:.DOUBLE value[,value][,?]

【功能描述】以双精度浮点型实数数据的形式存储实

数常量或变量

【举例】

label1:.FLOAT 178.125

//把数值178.125转换成0x43322000格式并存储label2:.FLOAT 10,125,-178.125

//把数值100,125,-178.125转换成0x42C80000,//0x42FA0000,0x0C3322000格式并存储。101

【语法格式】Label:.DWnumberDUP(value)

【功能描述】本伪指令与DW、FLOAT、DD、

DOUBLE存储类伪指令组合在一起用

于存放若干个具有相同数值的常量;或

者申请若干个备用的整型、单精度浮点

型、长整型以及双精度浮点型数据单元。

【举例】

Label1:.DW 20 DUP(0)

//存储20个值为0的整型数据

Label2:. FLOAT 7 DUP(0.521)

//存储7个值为0.521的单精度浮点数

102

【语法格式】.END

【功能描述】用来结束程序文件或结束包含文件

【举例】

.END

103

【语法格式】.IF value

【功能描述】引出在条件汇编结果为真时所要汇编

的程序指令。

【举例】

.DEFINEvar10x01

.IFvar1

var2 = var1 + 0x10 ;

.ENDIF

104

【语法格式】.ELSE

【功能描述】引出IF伪指令设置的条件汇编结果为假

时所要汇编的程序指令。

【举例】

.IF (Cond1)

[0x7016] = R1

//条件表达式Cond1结果为真时的若干汇编指令.ELSE

[0x7016] = R2

//条件表达式Cond1结果为假时的若干汇编指令.ENDIF

105

【语法格式】.ENDIF

【功能描述】用来结束条件汇编组合的定义

【举例】

.IF (Const1)

R1 = Const1

.ENDIF //结束条件汇编

106

【语法格式】.IFDEFvariable

【功能描述】引出若某变量已被赋过值时所要汇编的

程序指令。

【举例】

.Definename0 = 1;

.IFDEFname0

[0x7010] = R1;

.ENDIF

107

【语法格式】.IFNDEF

程序指令。variable 【功能描述】引出某变量还未被赋值时所要汇编的

【举例】

.IFNDEF SPCE

NOP;

.ELSE

[0x7010] = R1;.ENDIF

108

【语法格式】.IFMAargument#

【功能描述】引出若指定的宏参量存在时所要汇编

的程序指令。

【举例】

.IFMA 3//如果宏调用参量值表中的第三个参

//量值存在,则条件结果为真

109

【语法格式】.INCLUDE filename

【功能描述】在汇编文件里包含某个文件

【举例】

.INCLUDEhardware.inc

.INCLUDEkey.h

.INCLUDE hardware.h

110

【语法格式】label:.SECTION.attribute

【功能描述】创建用户定义段

【举例】

section1:.SECTION .CODE

//定义一个段名为section1的段,其链接属性与预//定义段CODE段相同

111

?凌阳单片机网站:

http://www.sunplusMCU.com?凌阳单片机咨询邮箱:

E_mail: mcu@sunplus.com.cn?凌阳单片机咨询电话:

Tel: 010-62981668-2930

凌阳单片机推广中心竭诚为您服务112

网站首页网站地图 站长统计
All rights reserved Powered by 海文库
copyright ©right 2010-2011。
文档资料库内容来自网络,如有侵犯请联系客服。zhit326@126.com