Ich bin neu in der Montage und AVR. Was ist der beste Weg, um zwei Werte wie in C zu vergleichen:
#define SOME_VAL 55
int current_counter = 0;
...
...
if(current_counter==SOME_VAL) {
}
Im Assembler habe ich folgenden Code:
.EQU SOME_VAL = 55
.def current_counter = r19
Wie vergleiche ich den aktuellen Wert am besten mit einer definierten Konstante?
Die Anweisung, die Sie benötigen, hat die mnemonische CPI (vergleiche mit sofort).
Dadurch wird je nach Ergebnis ein Flag gesetzt oder gelöscht.
Sie können dann nach Überprüfung des Flags verzweigen.
Sehen Sie sich das folgende Beispiel an. Es stammt aus der [8-Bit] AVR-Anweisungszusammenfassung ( http://www.atmel.com/images/doc0856.pdf ).
Das folgende Beispiel stammt von Seite 24:
Beispiel:
cpi r20,5 ; Compare r20 to the value 5
brbc 1,noteq ; Branch if Zero Flag cleared
...
noteq:nop ; Branch destination (do nothing)
Es gibt andere Anweisungen, die etwas andere Vergleiche durchführen (z. B. zwei Register vergleichen, anstatt ein Register mit einem Literal zu vergleichen).
Nick Johnson
Matt Jung
Greg d’Eon
Mewa