samedi 2 août 2014

Les labels (I) [fr]

Continuons notre apprentissage dans la joie et la bonne humeur avec aujourd'hui les labels qui sont en fait des adresses.

Il y a plusieurs types de labels. Les premiers sont ceux indiquant le début d'une routine. Reprenons notre exemple de la dernière fois, et ajoutons au tout début un nom à nos trois instructions. Il est conseillé de les précéder d'un _ afin de bien les reconnaître :

 
Viennent ensuite les branchements. Pour vous les expliquez, je vous présente maintenant une nouvelle mnémonique : beq qui signifie Branch if EQual. Elle fonctionne tout simplement en analysant le CCR. Si le bit Z est à zéro, et bien le programme sautera au label indiqué (ici .branch_si_zero qu'il est coutume de précéder d'un .). Reprenons notre exemple et rajoutant quelques instructions simples :

  
Lorsque le programme s'exécute, il arrive à notre beq et regarde le CCR : son bit Z n'est pas à zéro puisque la précédente instruction agissait sur un registre d'adresse, c'est donc le move.w $8012,d0 qui a le dernier mis à jour le CCR.

Donc, notre beq ne va rien faire du tout et va aller à la prochaine instruction qui move.l #$00000001,d0.

Ensuite en continuant le programme, avec cette fois le move.l #$00000000,d0 le CCR aura bien son bit Z à zéro et notre deuxième beq ira donc directos cette fois au second label .branch_si_zero2, c'est à dire au move.w #$FFFF,d1 :

  
Encore une fois, amusez-vous à tester par vous même sous AsmOne pour mieux comprendre... Il suffit de tracer une à une les mnémoniques avec la flèche du bas.

Il existe d'autres labels, nous verrons plus tard...

Pour finir, vérifiez par vous-même que les labels sont des adresses. Allez dans les menus déroulants, sélectionner Assemble, et ensuite Monitor :

  
En effet, AmigaOS est multitâche et c'est le Kickstart qui s'occupe automatiquement de la gestion des adresses avec quelques exceptions comme par exemple celles de la mémoire écran (chipmem) qui peuvent être utilisées directement par les coders.

Lorsque vous assemblez (= convertir un fichier source avec les mnémoniques intelligibles pour nous les humains en langage machine fait de 0 et 1 compréhensibles par le CPU) notre petit programme, AmigaOS décidera lui-même de le placer à une adresse mémoire disponible, et qui sera certainement toujours différente d'une fois à l'autre. Rassurez-vous, nous y reviendrons...
  
Pour cette exemple, AmigaOS et AsmOne ont placé notre _MonPremierProggy à l'adresse fastram $0A7E04C. Ils ont ensuite remplacé nos deux branchements par des adresses.

Je simplifie volontairement pour rester compréhensible aux débutants, nous irons plus loin plus tard...
 

Aucun commentaire:

Enregistrer un commentaire