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
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.
:
Bearbeitet durch User
Wenn Deine Zahl nach DEC >9 ist, Zahl auf 9 setzen. Wenn Deine Zahl nach INC >9 ist, Zahl auf 0 setzen. Und zwar DIREKT nach DEC/INC. Gruß Jobst
Ok, danke für die Info, werde ich nachher gleich mal probieren. Gruß Thomas
Hi Jobst, müsste es nicht Wenn Deine Zahl nach DEC <0 ist, Zahl auf 9 setzen. heissen?
Thomas S. schrieb: > müsste es nicht > > Wenn Deine Zahl nach DEC <0 ist, Zahl auf 9 setzen. Ich sehe da nur Zahlen von 0 bis 255 ;-) 0 - 1 = 255 Gruß Jobst
Du musst allerdings aufpassen: BRLT - Branch if Less Than (Signed) BRLO - Branch if Lower (Unsigned) BRGE - Branch if Greater or Equal (Signed) BRSH - Branch if Same or Higher (Unsigned) Gruß Jobst
Jobst M. schrieb: > Ich sehe da nur Zahlen von 0 bis 255 ;-) Hmm. Wo du es sagst.. Ich sehe da nur -256..-1. ;-)
A. K. schrieb: > Ich sehe da nur -256..-1. ;-) Komischer Controller ... :-D Edit: Haben die Bits die Wertigkeiten -1 ... -128? Ist -1 dann low? :-) Edit2: Das wären doch interessante Erweiterungen für die bo8-cpu ...!? Gruß Jobst
:
Bearbeitet durch User
@Thomas: Nicht irritieren lassen. Hier verarschen sich grad zwei, die genau wissen was sie tun.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.