You are here: Home DOCUMENTATION information SBASIC Manual - Page 57

Technological Arts Inc.

Your Shopping Cart

Your Cart is currently empty.

SBASIC Manual - Page 57

Article Index
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
Page 16
Page 17
Page 18
Page 19
Page 20
Page 21
Page 22
Page 23
Page 24
Page 25
Page 26
Page 27
Page 28
Page 29
Page 30
Page 31
Page 32
Page 33
Page 34
Page 35
Page 36
Page 37
Page 38
Page 39
Page 40
Page 41
Page 42
Page 43
Page 44
Page 45
Page 46
Page 47
Page 48
Page 49
Page 50
Page 51
Page 52
Page 53
Page 54
Page 55
Page 56
Page 57
Page 58
Page 59
Page 60
Table of Contents
All Pages

     SBasic User's Manual     SBasic Version 2.7             Page 57
     Printed:  December 5, 1999
     as both a function and a statement, if you so choose.  What's more,
     you could pass varying numbers of arguments to the same ASMFUNC label
     as a statement.  You are responsible for ensuring your assembly
     language routine behaves properly in all cases.  SBasic will blindly
     load up the arguments and perform the JSR; your code has to deal
     properly with any variations in argument count.

     Note that the second example is not completely general, since it can
     be called only from the top level (main) of your SB program.  If, for
     example, you tried to do a SETSTK from within an SB routine, that
     routine would crash when it executed a RETURN statement, since its
     return address had moved when the stack pointer changed.

     When writing assembly language code invoked with ASMFUNC labels,
     remember to preserve SB's registers.  For the 68hc11 and 68hc12, the
     Y-register holds the data stack pointer and the S-register holds the
     return stack pointer.  Additionally, any argument returned to the
     calling routine is passed back in the D-register.

     To summarize, you can use an ASMFUNC label as either a statement or a
     function.  If used as a statement, you can supply zero, one, or more
     arguments; any arguments will be pushed left to right onto the data
     stack before the JSR to your label is executed.  If used as a
     function, you MUST supply one and only one argument to the function.
     This argument will be passed to the called routine in the D-register,
     though your routine can ignore it.  Upon returning from your routine,
     the contents of the D-register will be used as the returned value of
     the function.

     Additionally, remember that ASMFUNC labels do not exist as SBasic
     labels.  You cannot do a GOSUB to an ASMFUNC label, since that label
     only exists in the assembly language module.

     Since the ASMFUNC statement only affects subsequent references, the
     statement must appear in your source file before any references to the
     target label appear.  Thus, it's best if you put all of your ASMFUNC
     statements near the beginning of your source file.