采用宏定义的方法实现高级语言内嵌汇编编程
发表:2023-08-29 11:59:48 阅读:63

采用宏定义的方法实现高级语言内嵌汇编编程

例如:

#define EnableInterrupts—asm CLl;

当然也可以用一个定义包含多条汇编指令:

#define INIT—SP—FROM—STARTUP—DESC()一asm LDHX@一SEG—END—ssTAcK一asm TXS;

对于多条汇编指令,为了增强可读性,可以将指令写成多行,除最后一行外,都要加“\”续行符号:

#define INIT _SP_FROM_STARTUP_DESC()_asm LDHX@_SED_SSTACK;\_asm TXS;

内嵌宏汇编中也可以携带参数。

#define Clear(wr)一asm CLR var;

如果内嵌宏汇编中包含有立即数操作符号“#”,则需要在前面使用#pragma N0—STRING—CONSTR指令。

如果内嵌汇编中包含有标号,则宏被多次调用后,会导致相同的标号重复出现。此时可以使用“##"字符串连接符以便自动修改标号。例如:

/*以下代码将,src’指向的字符串内容复制到dest”指向的存储区,inst是该宏被调用的次数。这段代码需要根据具体的CPU和汇编语言修改后才能使用*/

#pragma NO_STRING_CONSTR

#define copyMacr02(src,dest,inst){\

asm LOAD@src,Re90;/*装载源地址*/\

asm LOAD@dest,Regl;/*装载目标地址*/\

asm CLR Re92:/*清传递作用的间址寄存器*/\

aSm lp##inst:LOADB(Re92,RegO);/*装载字节*/\

asm STOREB(Re92,Re91);/*存储*/\

asm ADD#1,Reg2;/*修改间址寄存器*/\

asm TST Re92;/*检查是否结束*/\

asm BNE lp##inst;}

对宏copyMacr02的调用如下:

copyMacr02(source2.destination2,1);

copyMacr02(source2.destination3,2);

该宏被展开后标号分别为lpl和lp2。

 

阅读更多请您关注:

飞思卡尔编译器特性及参数设置

编译器的输入/输出文件

给全局变量定义绝对地址的方法

freescale代理