Obligement - L'Amiga au maximum

Mardi 23 avril 2024 - 11:33  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Assembleur - l'instruction "Move"
(Article écrit par Little Zeus et extrait d'A-News (Amiga News) - octobre 1988)


Continuons sur la lancée du mois dernier. Rappelons brièvement qu'en gros, l'assembleur consistait en un échange de valeurs entre différentes cases mémoires et que, pour ceci, nous utilisons l'instruction de base, Move.

Move

Eh oui, c'est grâce à elle que nous pourrons faire "transiter" des variables entre différentes adresses. Elle nous permettra tout aussi bien de prendre des valeurs d'autre part ; expliquons-nous :

Voyons en premier lieu ce que nous voulons dire par "transiter" (traduction du verbe "to move"). Ce mot est en fait inapproprié au contexte et "copier" serait plus juste. En fait, "MOVE $100,d0" ne prend pas la valeur comprise en $100 pour la mettre en d0, mais MOVE copie le contenu de $100 en d0, c'est-à-dire qu'en admettant qu'il y ait 4 en $100, après l'exécution de cette instruction, le chiffre 4 sera aussi bien en $100 qu'en d0 et malgré ce que nous aurions pu croire, la case $100 ne s'est pas vidée au profit de d0. Peut-être, trouverez-vous que j'insiste inutilement, mais il est primordial que cette notion soit bien comprise.

$ et #

Attention à ne pas confondre "MOVE $100,d0" avec "MOVE #100,d0" : un caractère changé et les effets ne sont plus les mêmes. Dans le dernier cas, nous écrasons l'ancien contenu de d0 pour y mettre la valeur #100 et veuillons noter que 100 est un nombre décimal dans la mesure où il est nullement précédent d'un "$" qui aurait alors voulu dire que nous avions à faire à un hexadécimal. Si nous avions voulu y mettre $100, nous aurions écrit MOVE #$100,d0. Nous venons en fait de voir, sans le savoir, deux modes d'adressages qui portent respectivement les noms d'adressages absolus et immédiats. Précisons que chacun de ces modes possède différents modes d'utilisation. En ayant dit précédemment que "MOVE $100,d0" recopiait la valeur comprise dans $100 en d0, nous avons été imprécis ; il aurait mieux valu dire que l'instruction recopiait les valeurs comprises en $100 et $101 en d0, c'est-à-dire que MOVE agit sur deux octets.

Il apparaît donc évident que l'instruction MOVE agit par défaut sur deux octets. Nous pourrions penser, que comme l'Amiga est un 16/32 bits (c'est-à-dire qu'il peut traiter des informations ayant jusqu'à 32 bits de longueur) MOVE pourrait peut-être traiter plus d'un mot à la fois et nous aurions raison car elle peut tout aussi bien traiter quatre octets à la fois (un long mot) qu'un seul.

Il faut néanmoins préciser à la machine quel type de variable elle doit traiter et pour cela, nous faisons suivre l'instruction MOVE de ".W" pour un mot (facultatif), de ".L" pour un long mot et de ".B" pour un octet.

d0

Mais au fait, ne faudrait-il pas préciser que d0 n'est pas une case mémoire comme toutes les autres ? Eh oui, elle fait partie des registres internes à l'Amiga. Les huit registres commençant par "d" et suivi d'un chiffre compris entre 0 et 7 font partie des registres de données. Ceux-ci ont une longueur de 32 bits contrairement aux cases mémoires habituelles.

Pourquoi, me demanderez-vous, ces registres existent-ils ? En fait, ils permettent certaines opérations que les cases mémoires usuelles ne nous offrent pas comme ce que nous avons vu précédemment, le fait de copier un contenu d'une case à une autre. Nous verrons plus exactement leurs rôles très prochainement.

Récapitulatif

Nous allons récapituler tout ceci par un petit tableau afin que cela soit clair dans nos esprits.

Immédiat Absolu
octet lmove.b #valeur, destinationl move.b départ, arrivée
mot lmove.w #valeur, destination lmove.w départ, arrivée
long motlmove.l #valeur, destination lmove.l départ, arrivée

Vérifions que nous avons tout bien assimilé : après un "MOVE.L #$FFFFFFFF,d0" suivi de "MOVE.B #$12,d0". Quel est alors le nouveau contenu de d0 ? J'entends $12 ! Non, le nouveau contenu de d0 est "$FFFFFF12". Si on voulait maintenant avoir $12 en d0, il faudrait faire un "MOVE.L #$12,d0".

Instructions ADD et SUB

Les instructions ADD, qui s'occupent des additions, et SUB, qui s'occupe de la soustraction, procèdent exactement de la même façon que MOVE. Par exemple "MOVE.L #52,d0" suivi de "ADD.L #$3,d0" additionnera $3 au contenu de d0, en l'occurrence, $2+$3 et on aura à la suite de ces deux instructions, le nombre $5 en d0. Nous verrons cela plus précisément le mois prochain.

A la prochaine

Ce que nous venons de voir jusqu'à présent peut paraître très théorique mais nous ne pouvons malheureseusement pas faire une routine sans avoir les éléments de base. Ne nous inquiétons tout de même pas, dès le prochain numéro, nous taperons notre première routine en assembleur qui possédera un intérêt certain.


[Retour en haut] / [Retour aux articles]