|
|||||||||||
Technical Support On-Line Manuals Cx51 User's Guide ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Small Model ExampleIn 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 . . . Assembly 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 | ||||||||||
|
Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.