2012-02-05 14 views
6

Ho il seguente frammento di codice assembly che sto cercando di capire. È assemblato per un microcontrollore MC68332.Cosa fa esattamente l'istruzione BEQ?

LOOP 
    some instructions 
    some more instructions 
BEQ LOOP 

Googled BEQ e ho trovato che significa ramo su risultato pari a zero, ma io ancora non capisco cosa fa. Confronta il risultato dell'ultima istruzione a 0 e se è 0, torna alla linea LOOP?

+0

Puoi dire a quale microcontrollore ti riferisci? –

+0

il microcontrollore è MC68332, grazie – jazzybazz

+0

aggiunto una risposta, spero che aiuti. –

risposta

4

Sulla famiglia Motorola 68k indica "ramo se uguale" che significa "passa a un indirizzo dato se è impostato zero flag" (come quando il confronto precedente ha avuto esito positivo).

Tuttavia 68332 sembra differire da quello e basato su "sintassi in maiuscolo" potrebbe essere un wrapper di macro attorno ad un'altra istruzione che essenzialmente fa la stessa cosa.

I programmatori di assembly che portano il codice da altri sistemi possono utilizzare macro simili per facilitare il processo di porting.

+0

grazie, è esattamente quello che penso. l'ultima istruzione prima di BEQ è SUB D2, D2 che imposta sempre il flag di zero. quindi è un ciclo infinito. destra? – jazzybazz

+0

sì è corretto a meno che le nostre supposizioni siano sbagliate :) –

1

La risposta esatta dipenderà dal microcontrollore che si sta utilizzando. In generale, se non ci sono operandi, ci si aspetta che BEQ si ramifichi se l'Accumulatore è pari a 0. Questo è molto probabilmente su micros semplici dove l'Accumulatore è il registro primario per i calcoli.

Quale microcontrollore stai usando? Dovresti essere in grado di trovare una definizione per l'istruzione BEQ nel manuale per quel micro.

+0

l'MC68332. non c'è nulla sul comando BEQ nel manuale utente – jazzybazz

+0

cosa significa il verbo "to branch"? – jazzybazz

+0

Il sito Web di Freescale ha una scheda tecnica, è possibile trovare un collegamento ad esso qui: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MC68332. Branching significa saltare a un punto specifico del programma, in questo caso all'etichetta "LOOP". La funzione di questo codice è di eseguire il ciclo fino a quando l'accumulatore mantiene il valore "0". – Stefan