Kesandal
04.07.2011, 21:23
Hallo,
beschäftige mich erst neuerdings (gezwungenermaßen :D) mit Assembler.
Habe leider ein Verständnisproblem mit den Befehlen cpi und andi
Ich war bis jetzt der Meinung, dass ich mit cpi einen Vergleich mache.
Also:
cpi var_x, 0
if(x==0)
breq jp_true
wenn gleich: springe zu jp_true
soweit so gut.
Nun bin ich auf ein Problem gestoßen wenn ich PINA (an dem Port hängen Switches) abfragen möchte.
in C würde meine Abfrage lauten:
if ( PINA & _BV(1) != 0 ){
// Taste gedrückt
}
Nun der Assembler teil
in tmp, PINA
cpi tmp, 1
if(tmp==1)
breq jp_true
wenn gleich: springe zu jp_true
Das klappt so aber leider nicht :(
Statdessen klappt es wenn ich den Befehl andi nehme.
Kann mir bitte jemand sagen warum das so ist?
Muss ich bei PINx immer andi nehmen oder verwechsel ich die Bedeutung von cpi und mein "if(x==xyz)" muss ich mit andi realisieren.
Danke
Kesandal
beschäftige mich erst neuerdings (gezwungenermaßen :D) mit Assembler.
Habe leider ein Verständnisproblem mit den Befehlen cpi und andi
Ich war bis jetzt der Meinung, dass ich mit cpi einen Vergleich mache.
Also:
cpi var_x, 0
if(x==0)
breq jp_true
wenn gleich: springe zu jp_true
soweit so gut.
Nun bin ich auf ein Problem gestoßen wenn ich PINA (an dem Port hängen Switches) abfragen möchte.
in C würde meine Abfrage lauten:
if ( PINA & _BV(1) != 0 ){
// Taste gedrückt
}
Nun der Assembler teil
in tmp, PINA
cpi tmp, 1
if(tmp==1)
breq jp_true
wenn gleich: springe zu jp_true
Das klappt so aber leider nicht :(
Statdessen klappt es wenn ich den Befehl andi nehme.
Kann mir bitte jemand sagen warum das so ist?
Muss ich bei PINx immer andi nehmen oder verwechsel ich die Bedeutung von cpi und mein "if(x==xyz)" muss ich mit andi realisieren.
Danke
Kesandal