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通过寄存器R6,R7传递
以下程序是同一个源程序编译成的汇编程序,只是使用了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段递的
文章评论(0条评论)
登录后参与讨论