Page 53 of 62
SBasic User's Manual SBasic Version 2.7 Page 53
Printed: December 5, 1999
ASM and ENDASM
The ASM and ENDASM statements allow you to imbed assembly language
source inside your SBasic program. Assembly language source lines
between these two statements (with one exception) are not processed by
SB; instead, they are passed directly to the output file for
subsequent assembly.
This feature allows you to drop down into assembly language when
necessary, should you need to write code that must run faster or take
up less space. Additionally, imbedded assembly language gives you
direct access to registers on the target system not currently
supported by SBasic. For example, you can gain access to the 68hc11's
hardware stack register (S) by using imbedded assembly language.
The following example shows how to imbed 68hc11 assembly language:
foo:
asm ' switch to assembly language
ldx #$1000 point x at i/o regs
ldd $0e,x get 16-bit counter TCNT
std _time save in variable TIME
endasm ' switch back to SBasic
return ' and return
This example shows an SB routine named FOO that uses imbedded assembly
language to access the 68hc11's TCNT register. The value read from
TCNT is stored in the SBasic variable TIME. The example then uses the
ENDASM statement to switch back to SBasic, where the RETURN statement
returns control to the calling routine.
Note that you will generally use an SBasic label at the start of an
assembly section; other SBasic routines can use this label to pass
control to your assembly section. Note also that imbedded assembly
language lines can (and should) have comments appended to them.
With one exception, all source lines between an ASM and an ENDASM
statement are passed unaltered to the output file for processing by
the assembler. Thus, you cannot use SBasic statements or functions
within an assembly section. Such statements or functions would be
processed by the assembler, not by SBasic, and will result in
assembler errors.
The sole exception to the above involves an underscore character. As
shown in the example above, you can refer to SBasic variables,
constants, or labels by prepending an underscore to the name. Before
SBasic passes each assembly source line to the output file, it scans
the line for any underscores. If SB detects an underscore, the
following characters are parsed and tested against SBasic's list of