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 loopYou 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 !loopor
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 labelApplying 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.





