zwei kleine Fragen zu Assembler Befehlen

OP #4823694
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.