In the small model, parameters passed in fixed memory locations
are stored in internal data memory. The parameter passing segment for
variables is located in the data area.
The following are two assembly code examples. The first shows how
the example function is called from assembly. The second example
displays the assembly code for the example function.
Calling a C function from assembly.
.
.
.
EXTRN CODE (_function) ; Ext declarations for function names
EXTRN DATA (?_function?BYTE) ; Seg for local variables
EXTRN BIT (?_function?BIT) ; Seg for local bit variables
.
.
.
MOV R6,#HIGH intval ; int a
MOV R7,#LOW intval ; int a
MOV R7,#charconst ; char b
SETB ?_function?BIT+0 ; bit c
MOV ?_function?BYTE+3,longval+0 ; long d
MOV ?_function?BYTE+4,longval+1 ; long d
MOV ?_function?BYTE+5,longval+2 ; long d
MOV ?_function?BYTE+6,longval+3 ; long d
MOV C,bitvalue
MOV ?_function?BIT+1,C ; bit e
LCALL _function
MOV intresult+0,R6 ; store int
MOV intresult+1,R7 ; retval
.
.
.
Asssembly code for the example function:
NAME MODULE ; Names of the program module
?PR?FUNCTION?MODULE SEGMENT CODE ; Seg for prg code in 'function'
?DT?FUNCTION?MODULE SEGMENT DATA OVERLAYABLE
; Seg for local vars in 'function'
?BI?FUNCTION?MODULE SEGMENT BIT OVERLAYABLE
; Seg for local bit vars in 'function'
PUBLIC _function, ?_function?BYTE, ?_function?BIT
; Public symbols for 'C' function call
RSEG ?PD?FUNCTION?MODULE ; Segment for local variables
?_function?BYTE: ; Start of parameter passing segment
v_a: DS 2 ; int variable: v_a
v_b: DS 1 ; char variable: v_b
v_d: DS 4 ; long variable: v_d
.
. ; Additional local variables
.
RSEG ?BI?FUNCTION?MODULE ; Segment for local bit variables
?_function?BIT: ; Start of parameter passing segment
v_c: DBIT 1 ; bit variable: v_c
v_e: DBIT 1 ; bit variable: v_e
.
. ; Additional local bit variables
.
RSEG ?PR?FUNCTION?MODULE ; Program segment
_function: MOV v_a,R6 ; A function prolog and epilog is
MOV v_a+1,R7 ; not necessary. All variables can
MOV v_b,R5 ; immediately be accessed.
.
.
.
MOV R6,#HIGH retval ; Return value
MOV R7,#LOW retval ; int constant
RET ; Return
This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.
ARM websites use two types of cookie: (1) those that enable the site to function and perform as required; and (2) analytical cookies which anonymously track visitors only while using the site. If you are not happy with this use of these cookies please review our Privacy Policy to learn how they can be disabled. By disabling cookies some features of the site will not work.