2012-02-05 3 views
6

J'ai l'extrait de code d'assemblage suivant que j'essaie de comprendre. C'est l'assemblage pour un microcontrôleur MC68332.Que fait exactement l'instruction BEQ?

LOOP 
    some instructions 
    some more instructions 
BEQ LOOP 

J'ai googlé BEQ et je l'ai trouvé cela signifie branche sur le résultat zéro, mais je ne comprends toujours pas vraiment ce qu'il fait. Est-ce qu'il compare le résultat de la dernière instruction à 0, et s'il vaut 0, il retourne à la ligne LOOP?

+0

Pouvez-vous dire de quel microcontrôleur vous parlez? –

+0

le microcontrôleur est MC68332, merci – jazzybazz

+0

a ajouté une réponse, j'espère que cela aide. –

Répondre

4

Sur la famille Motorola 68k, cela signifie «branchez si égal», ce qui signifie «sauter à l'adresse donnée si le drapeau zéro est activé» (comme lorsque la comparaison précédente a réussi).

Cependant, 68332 semble différer de cela et basé sur la «syntaxe majuscule», il pourrait s'agir d'une macro entourant une autre instruction qui fait essentiellement la même chose.

Les programmeurs assembleurs qui utilisent le code de port d'autres systèmes peuvent utiliser des macros similaires pour faciliter le processus de portage.

+0

merci, c'est exactement ce que je pense. la dernière instruction avant le BEQ est SUB D2, D2 qui définit toujours le drapeau zéro. c'est donc une boucle infinie. droite? – jazzybazz

+0

oui c'est correct à moins que nos hypothèses sont fausses :) –

1

La réponse exacte dépend du microcontrôleur que vous utilisez. En général, s'il n'y a pas d'opérandes, on s'attendrait à ce que BEQ se branche si l'Accumulateur est à 0. C'est probablement sur des micros simples où l'Accumulateur est le registre principal pour les calculs.

Quel microcontrôleur utilisez-vous? Vous devriez être capable de trouver une définition pour l'instruction BEQ dans le manuel pour ce micro.

+0

le MC68332. il n'y a rien à propos de la commande BEQ dans le manuel d'utilisation – jazzybazz

+0

que signifie le verbe "to branch"? – jazzybazz

+0

Le site Web de Freescale a une fiche technique, vous pouvez trouver un lien ici: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MC68332. Branchement signifie sauter à un point spécifique du programme, dans ce cas à l'étiquette "LOOP". La fonction de ce code est de faire une boucle jusqu'à ce que l'accumulateur ait la valeur "0". – Stefan