原创 使用#pragma NOREGPARMS指令强迫使用固定存储区传递函数参数

2008-9-19 10:44 3209 0 分类: MCU/ 嵌入式

Using the SRC Directive使用指令SRC


可以用Cx51编译器来生成一个汇编代码程序,并且用这个程序来决定应该使用的传递规则。指令SRC可以指定Cx51生成一个汇编程序而不是目标程序。例如以下C程序:


#pragma SRC


#pragma SMALL


unsigned int asmfunc1 (


unsigned int arg)


{


return (1 + arg);


}



生成以下的汇编程序:


; ASM1.SRC generated from: ASM1.C


NAME ASM1


?PR?_asmfunc1?ASM1 SEGMENT CODE


PUBLIC _asmfunc1


; #pragma SRC


; #pragma SMALL


;


; unsigned int asmfunc1 (


RSEG ?PR?_asmfunc1?ASM1


USING 0


_asmfunc1:


;---- Variable 'arg?00' assigned to Register 'R6/R7' ----


; SOURCE LINE # 4


; SOURCE LINE # 6


; return (1 + arg);


; SOURCE LINE # 7


MOV A,R7


ADD A,#01H


MOV R7,A


CLR A


ADDC A,R6


MOV R6,A


; }


; SOURCE LINE # 8


?C0001:


RET


; END OF _asmfunc1


END


在这个例子中,函数名asmfunc1,在汇编程序中加了一个下划线前缀,表明参数通过寄存器传递。参数据arg通过寄存器R6R7传递


以下程序是同一个源程序编译成的汇编程序,只是使用了NOREGPARMS指令


; ASM2.SRC generated from: ASM2.C


NAME    ASM2


?PR?asmfunc1?ASM2 SEGMENT CODE


?DT?asmfunc1?ASM2 SEGMENT DATA


PUBLIC ?asmfunc1?BYTE


PUBLIC asmfunc1


RSEG ?DT?asmfunc1?ASM2


?asmfunc1?BYTE:


arg?00: DS 2


; #pragma SRC


; #pragma SMALL


; #pragma NOREGPARMS


;


; unsigned int asmfunc1 (


RSEG ?PR?asmfunc1?ASM2


USING 0


asmfunc1:


; SOURCE LINE # 5


; SOURCE LINE # 7


; return (1 + arg);


; SOURCE LINE # 8


MOV A,arg?00+01H


ADD A,#01H


MOV R7,A


CLR A


ADDC A,arg?00


MOV R6,A


; }


; SOURCE LINE # 9


?C0001:


RET


; END OF asmfunc1


END



注意在例子中函数名asmfunc1前面没有加了下划线前缀,而参数是是通过?asmfunc1?BYTE段递的

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
0
关闭 站长推荐上一条 /3 下一条