Keil™, An ARM® Company

C166 User's Guide

TINY Model

LOC  OBJ       LINE     SOURCE
                  1     ; A166 must be CASE sensitive for interfacing with C166.
                  2     $CASE
                  3     ; TINY model works in NON-SEGMENTED mode of the 80C166.
                  4     $NONSEGMENTED
                  5
                  6                     NAME    A166_modul
                  7
                  8     ;  /***********************************/
                  9     ;  /* Sample Assembler to C Interface */
                 10     ;  /***********************************/
                 11     ;
                 12     ;  extern int func1 (int a1, int a2, bit b);
                 13     ;
                 14     ;  extern bit flag;
                 15     ;  extern int near val;
                 16     ;
                 17     ;  int func2 (int *x1, int *x2)  {
                 18     ;    int y;
                 19     ;
                 20     ;    y = func1 (*x1, *x2, flag);
                 21     ;    val += y;
                 22     ;    return (y);
                 23     ;  }
                 24
                 25     EXTRN   func1 : NEAR
                 26     EXTRN   val   : WORD
                 27     EXTRN   flag  : BIT
                 28
                 29     ?PR?A166_modul  SECTION CODE 'NCODE'
                 30
                 31     PUBLIC          func2           ; entry point for func2
                 32
                 33     func2           PROC    NEAR
                 34     ;---- Variable 'x2' is passed in Register 'R9'
                 35     ;---- Variable 'x1' is passed in Register 'R8'
0000 ECFF        36                     PUSH    R15     ; Save R15 because of Bit Parameter
0002 A899        37                     MOV     R9,[R9]
0004 A888        38                     MOV     R8,[R8]
0006 4A??FF?0 E  39                     BMOV    R15.0,flag
000A CA00???? E  40                     CALLA   cc_UC,func1
                 41     ;---- The function value of 'func1' is returned in Register 'R4'
                 42     ;---- temporary Variable 'y' is saved in Register 'R5'
000E 04F4???? E  43                     ADD     val,R4  ; TINY requires no DPP
                 44
0012 FCFF        45                     POP     R15     ; restore R15
                 46     ;---- The function value 'y' is placed in 'R4'
0014 CB00        47                     RET
                 48     func2           ENDP
                 49
                 50     ?PR?A166_modul  ENDS
                 51
                 52                     END