2010-11-18 3 views
1

J'essaie d'écrire un programme qui nécessite l'utilisation d'une boucle for, entre autres choses. J'ai du mal à trouver des exemples de code de base comme celui-ci sur d'autres sites Web.Bouclage de base dans l'assemblage 68k?

Si quelqu'un pourrait me fournir un simple pour boucle, ou même les instructions que je devrais regarder je serais reconnaissant. Et s'il vous plaît, si vous connaissez une bonne ressource pour les tutoriels débutant 68k, commentez ci-dessous!

Merci!

+0

Avez-vous un processeur 68000 et un compilateur (n'importe quelle langue) pour cela? –

+0

J'utilise Easy68k (un émulateur et un compilateur). – Blackbinary

Répondre

5

Voir here une réponse à votre requête (3 résultats à la recherche google '68000 assembly')

[modifier]

Ajouter une réponse de lien

Le 68000 a la rare (unique?) caractéristique d'avoir séparé l'adresse et les registres de données. Il existe huit registres de données, D0-D7, et huit registres d'adresses, A0-A7. A7 est également le pointeur de la pile, SP. Cela signifie que le langage d'assemblage 68000 a tendance à être plus facile à suivre, car vous pouvez facilement identifier les registres qui contiennent des données et ceux qui contiennent des adresses. Par exemple, cela est assemblée 68000 pour calculer la somme d'un tableau de mots:

moveq #0, d0 
    moveq #0, d1 
    moveq #5, d2 
loop: 
    move.w (a0)+, d0 
    add.l d0, d1 
    dbra d2, loop 

[/ modifier]

+0

J'ai lu cette page entière (je l'ai trouvée plus tôt, comme je l'ai dit, j'ai fait quelques recherches), pourriez-vous me préciser à quelle partie vous faites référence? Merci. – Blackbinary

+1

Dans les bases 68000, la boucle: partie est une boucle «for». Ils sautent l'ensemble du registre D2, mais DBRA est Decrement BRAnch pas égal à 0. Donc, cela va décrémenter D2 jusqu'à ce qu'il soit égal à 0 – KevinDTimm

+0

Merci, maintenant. – Blackbinary

0

Comme cité dans l'aide EASy68K, la syntaxe d'une boucle dans 68K est la suivante:

FOR[.size] op1 = op2 TO op3 [BY op4] DO[.extent] 
    code 
ENDF 

ou

FOR[.size] op1 = op2 DOWNTO op3 [BY op4] DO[.extent] 
    code 
ENDF 

autrement dit:

for.size counter_location = starting_condition to ending_condition step_size 
    operations to be executed each loop 
end of for loop 

Les tailles de pas et de taille sont toutes deux facultatives.

Un exemple en pratique.
Le code suivant suppose la variable dc.b majuscule « ABCDEFGHIJKLMNOPQRSTUVWXYZ » suivants, 0

lea uppercase, a1 ; points a1 at the start of the uppercase variable 
lea $002000, a2  ; points a2 at the start of the destination address 

for d1 = #1 to #26 do.s 
    move.b (a1)+, (a2)+ 
endf 

; Memory locations $002000 - $002019 now contain ABCDEFGHIJKLMNOPQRSTUVYWXYZ 

Cette boucle se déplace 26 octets de l'adresse pointée par a1, à l'adresse pointée par a2. Le compteur sera stocké dans d1. La boucle commencera à 1 (# 1 indique un 'nombre brut' sous forme décimale), augmentera à chaque fois et se terminera à 26. Les do.s à la fin de la première ligne traitent de la taille de la branche aller vers utilisation. Il est également facultatif, mais envoie un avertissement dans EASy68K. Par conséquent, la boucle for ci-dessous fonctionnera également si vous n'avez pas besoin de définir la condition de la branche.

for d1 = #1 to #26 
    move.b (a1)+, (a2)+ 
endf 

En ce qui concerne un tutoriel, je recommande http://mrjester.hapisan.com/04_MC68/. Il ne traite pas des commandes et des sujets les plus avancés, mais il offre une bonne compréhension de ce qui se passe au niveau de base/intermédiaire.

Questions connexes