Forum: Mikrocontroller und Digitale Elektronik zwei kleine Fragen zu Assembler Befehlen


von Thomas S. (suschi77)


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

von (prx) A. K. (prx)


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.

: Bearbeitet durch User
von Jobst M. (jobstens-de)


Lesenswert?

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

von Thomas S. (suschi77)


Lesenswert?

Ok, danke für die Info, werde ich nachher gleich mal probieren.

Gruß Thomas

von Thomas S. (suschi77)


Lesenswert?

Hi Jobst,

müsste es nicht

Wenn Deine Zahl nach DEC <0 ist, Zahl auf 9 setzen.

heissen?

von Jobst M. (jobstens-de)


Lesenswert?

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

von Jobst M. (jobstens-de)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Jobst M. schrieb:
> Ich sehe da nur Zahlen von 0 bis 255 ;-)

Hmm. Wo du es sagst.. Ich sehe da nur -256..-1. ;-)

von Jobst M. (jobstens-de)


Lesenswert?

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
von (prx) A. K. (prx)


Lesenswert?

Jobst M. schrieb:
> Ist -1 dann low? :-)

So isoliert schwer zu sagen. Sicher aber MI.

von (prx) A. K. (prx)


Lesenswert?

@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
Noch kein Account? Hier anmelden.