Spécificité autour des labels

Différents types de labels

RASM gère plusieurs types de labels en fonction de différents contextes

  • Les labels globaux, accessibles avec leur nom depuis l'ensemble des sources
  • Les labels de proximité, accessibles rapidement par leur nom court, ou depuis n'importe quel endroit des sources par leur nom complet
  • Les labels locaux, accessibles uniquement depuis le périmètre d'une boucle ou d'une macro
  • Les modules, sorte de supers labels qui encapsulent des labels globaux (du coup, pas si globaux que ça, même si une fois de plus, ils restent accessibles depuis n'importe quel endroit des sources!)

Labels globaux

Simples, les labels globaux commençent systématiquement par une lettre ou un
Ils sont accessibles de partout avec le même nom, ce sont les labels usuels que tout assembleur connait

BANK 0
monlabel1 jp monlabel2
BANK 1
monlabel2 jp monlabel1

Labels de proximité

Les labels de proximité commençent par un point (".")
En interne, un label global est créé, concaténant le dernier label global avec celui de proximité

BANK 0
label_global ld b,5
.label_proximite djnz .label_proximite
BANK 1
label_global2 ld b,5
jp label_global1.label_proximite

Labels locaux

À l'intérieur d'une boucle ou d'une macro, un label local est uniquement "vu" dans le périmètre de la boucle et uniquement cette boucle. Ainsi, on pourra imbriquer 3 boucles et utiliser le même nom de label local, ce sera en fait 3 labels différents en interne, chacun appartenant à sa boucle respective. Les labels locaux commençent par le symbole @

repeat 10
  @debut
  repeat 10
    ld b,5
    @debut djnz @debut
  rend
  djnz @debut ; réfère au premier @debut
rend

Modules

Avec la directive MODULE, on déclare une sorte de super label qui préfixera tous les labels globaux, et par conséquent, tous les labels de proximité. L'utilisation de module rend caduque la règle de globalité des labels globaux ainsi que des alias! ^_^

On peut toujours appeler n'importe quel label de n'importe où, mais en respectant la hierarchie des modules

Pour ceux que le _ séparant le nom du module du label global perturbe, il est possible de redéfinir ce caractère par l'option de ligne de commande -msep

module soft1
label_global ; un label global, pas si global car encapsulé par le module soft1 !
djnz label_global
jp soft2_label_global

module soft2
label_global ; bis repetita
djnz label_global
jp soft1_label_global

Export des labels

Depuis la version 2.1 rasm exporte des chunks et fichiers de symboles spéciaux pour fonctionner avec l'émulateur ACE
Les labels exportés sont positionnés de façon précise dans l'émulateur (en RAM si déclarés en RAM, en ROM si déclarés en ROM)
Néanmoins, on peut avoir besoin de reloger du code (obligatoirement en RAM) depuis une ROM
Il est donc possible de déclarer des labels comme locaux (global par défaut) quand ils sont relogés afin de les voir dans l'émulateur

LABEL LOCAL ; tous les labels suivants seront considérés à leur emplacement de compilation
LABEL GLOBAL ; tous les labels suivants seront considérés dans l'espace adressable des 64K

Quand on assemble des fichiers simples ou à partir d'espaces temporaires (usage de BANK sans spécificité mémoire), on peut attribuer à l'espace temporaire courant une localisation pour l'émulateur

LOCALISATION RAM,4 ; tous les labels de l'espace seront attribués à la page 4 de la RAM
LOCALISATION ROM,LOWER ; tous les labels de l'espace seront attribués à la Lower ROM
LOCALISATION ROM,14 ; tous les labels de l'espace seront attribués à la ROM 14
Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License