diff --git a/doc/cc65.sgml b/doc/cc65.sgml index a1731879a..74eb1702c 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1200,8 +1200,8 @@ the format specifier before passing the assembly code line to the backend.

+The next example shows how to use global variables to exchange data between C +an assembler and how to handle assembler jumps: + + + unsigned char globalSubA, globalSubB, globalSubResult; + + /* return a-b, return 255 if b>a */ + unsigned char sub (unsigned char a, unsigned char b) + { + globalSubA = a; + globalSubB = b; + __asm__ ("sec"); + __asm__ ("lda %v", globalSubA); + __asm__ ("sbc %v", globalSubB); + __asm__ ("bcs %g", jumpSubNoError); + __asm__ ("lda #$FF"); + jumpSubNoError: + __asm__ ("sta %v", globalSubResult); + return globalSubResult; + } + +

+ +Arrays can also be accessed: + + + unsigned char globalSquareTable[] = { + 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, + 100, 121, 144, 169, 196, 225 + }; + unsigned char globalSquareA, globalSquareResult; + + /* return a*a for a<16, else 255 */ + unsigned char square (unsigned char a) + { + if (a>15){ + return 255; + } + globalSquareA = a; + __asm__ ("ldx %v", globalSquareA); + __asm__ ("lda %v,x", globalSquareTable); + __asm__ ("sta %v", globalSquareResult); + return globalSquareResult; + } + +

Note: Do not embed the assembler labels that are used as names of global variables or functions into your asm statements. Code like this