Label declarations in Kick Assembler end with ‘:’ and have no postfix when referred to, as shown in the following program:
loop: inc $d020 inc $d021 jmp loop
You can put labels in front of mnemonic arguments. This can be useful when creating self modifying code:
stx tmpX ... ldx tmpX:#$00
Kick Assembler also supports multi labels, which are labels that can be declared more than once. These are useful to prevent name conflicts between labels. A multi label starts with a ‘!’ and when your reference it you have to end with a ‘+’ to refer to the next multi label or ‘-‘ to refer to the previous multi label:
ldx #100 !loop: inc $d020 dex bne !loop- // Jumps to the previous instance of !loop ldx #100 !loop: inc $d021 dex bne !loop- // Jumps to the previous instance of !loop
or
ldx #10 !loop: jmp !+ // Jumps over the two next nops to the ! label nop nop !: jmp !+ // Jumps over the two next nops to the ! label nop nop !: dex bne !loop- // Jumps to the previous !loop label
Applying more than one '+' or '-' will skip labels. E.g. '+++' will jump to the third label:
jmp !+++ // Jumps to the third '!' label !: nop !: nop !: // <- here!
Another way to avoid conflicting variables is to use user defined scopes, which are explained in the scoping section of Chapter 4, Introducing the Script Language.
A ‘*’ returns the value of the current memory location so instead of using labels you can write your jumps like this:
// Jumps with '*' jmp * inc $d020 inc $d021 jmp *-6 // The same jumps with labels this: jmp this !loop: inc $d020 inc $d021 jmp !loop-
When referencing a label that is not yet resolved, the assembler will assume a two byte address, even though it later is found to be in the zeropage. You can mark labels as being in the zeropage with the .zp directive:
// Uses zeropage form of lda and sta eventhough the labels is first // resolved later lda zpReg1 sta zpReg2 *=$10 virtual .zp { zpReg1: .byte 0 zpReg2: .byte 0 }
Note: Currently the .zp directive doesn't handle macros and pseudocommands called within the {}. Labels inside these will be in the form defined in the macro.