zwei kleine Fragen zu Assembler Befehlen

OP #4823694
Lesenswert?
• ▲
▼
Hallo zusammen,

ich hätte 2 Fragen zu Assembler Befehlen.

1. Ich will eine kleine Passwortabfrage proggen. PW wird mit 0 
vorgeladen. Beim drücken der Taste hoch, wird der Wert um eins erhöht, 
bei runter entsprechen um eins verringert. Da ich nur die Zahlen 0-9 
verwenden will, lade ich bei erreichen der 10 wieder eine 0 in PW. Beim 
dec habe ich allerdings das Problem, das er eigentlich bei -1 wieder 
eine 9 laden müsste, da ich die Null als Zahl ja vorkommen kann. Wie 
könnte ich das lösen? (Stelle ist bei dec_PW mit *** markiert.)

hier mein Schnipsel:

inc_PW:
inc     PW
cpi     PW, 10          ; vergleiche PW mit der Konstante 10
brne    Ausgabe      ; wenn nicht gleich, dann mach bei Ausgabe weiter
ldi  PW,0    ; wenn gleich, dann setzte PW auf 0 und LCD Ausgabe
mov  temp2, PW
rcall  lcd_number_einzeln
ret

dec_PW:
dec  PW
cpi  PW, -1   ;***************
brne  Ausgabe
ldi  PW, 9
mov  temp2, PW
rcall  lcd_number_einzeln
ret

Ausgabe:
push  temp1
push  temp2
mov  temp2, PW
rcall  lcd_number_einzeln
rcall  delay5ms
pop  temp1
pop  temp2
rjmp  PWD_Abfrage_1_1
ret

2. Wie "wirkt" der Befehl brne nach einem Vergleich? Ist es eher ein 
rjmp also Sprung ohne Wiederkehr oder ein rcall mit Rückkehr? Muss nach 
dem cpi Befehl zwangsläufig ein brne oder breq usw. stehen oder könnte 
man auch einen rcall oder rjmp Befehl folgen lassen? Ich würde die 
Ausgabe Routine gerne als rcall aufrufen um nicht bei jeder Stelle des 
Passworts eine eigene Routine verwenden zu müssen, sondern das auf :

XXX:
rcall   Ausgabe
rjmp    PWD_Abfrage_1_1
ret

Denke das würde bei z.B einem 6stelligen Password einiges an Platz 
sparen.

Bitte um eure Anregungen, Tipps und Kritik

Danke und Gruß

Thomas
#4823719
Lesenswert?
• ▲
▼
Thomas S. schrieb:
> dec habe ich allerdings das Problem, das er eigentlich bei -1 wieder
> eine 9 laden müsste, da ich die Null als Zahl ja vorkommen kann. Wie
> könnte ich das lösen? (Stelle ist bei dec_PW mit *** markiert.)

> dec  PW
> cpi  PW, -1   ;***************
> brne  Ausgabe

BRPL/BRMI direkt hinter DEC.
Oder SUBI r,1 statt DEC, und dann BRCC/BRCS.

> 2. Wie "wirkt" der Befehl brne nach einem Vergleich? Ist es eher ein
> rjmp also Sprung ohne Wiederkehr

Ebendies.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren