Guckstu da:
http://www.rn-wissen.de/index.php/As...nd_.22V.22_Bit
VIelleicht hilft dir das ja.
ich habe ein kleines Prog geschrieben, und der soll 2 Reg vergleichen, wenn reg 1>reg2 dann zeigt das richtiges Ergebnis aber andersrum(reg2>reg1) tut er nicht: zum Beispiel:
Code:reg1 = 0x0501 reg2 = 0xA2BB main: mov temp1, V1 ; V1=low (reg1) in temp1 speichern mov temp2,V2 ; V2=high(reg1) in temp2 speichern sub temp1,V3 ; V3=low(reg2) ;(V1-V3) in temp1 speichern sbc temp2,V4 ; V4=high(reg2) ; (V2-V4) in temp2 speichern cp temp1, low(65531) cp tem2, high(65531) brsh led2_aus cp temp1, low(5) cp tem2, high(5) brsl led2_aus Cp V1,V3 Breq led1_on Brlo led2_on Brsh led2_aus Led1_on: Sbi portb,0 Rjmp main Led2_on: Sbi portb, 2 Rjmp main Led2_aus: Cbi portb2 Rjmp main
Das Ergebnis ist: temp1 = 0x63 ( das richtige Ergeb= 0xFFFFFFFFFFFFFF63)
: temp2 = 0x46 (Erg= FFFFFFFFFFFFFF46).
Wie macht man das um den richtigen Wert zu zeigen, gibt es irgend einen Befehl für den absolut Wert.
Oder wie macht man das?
danke
Guckstu da:
http://www.rn-wissen.de/index.php/As...nd_.22V.22_Bit
VIelleicht hilft dir das ja.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Für den Absolutbetrag gibt es keinen extra Befehl.
Es gibt da nur einen etwas verwirrenden (könnte man auch BUG nennen) Text in der Beschreibung zum Carry Falg beim CMP und SUB Befehl.
Original steht da in der Hilfe von AVRstudio, und der offiziellen Befehlsbeschreibung zum Carry Flag:
Set if the absolute value of the contents of Rr is larger than the absolute value of Rd; cleared otherwise.
Da hat das Wort absolute ist da aber falsch, richtig müßte da stattdessen "unsigned" stehen.
Bei dem Programm siehr die Subtraktion noch richtig aus, nur die Vergleiche sind muks. Die macht man fast wie die Subtraktion und schaut dann je nach Zahlen Format (mit oder ohne Vorzeichen) das V oder C-Flag an.
bei Compares in denen die zu vergleichenden Werte in mehreren Registern stehen wird auch das Kommando CPC verwendet.
Dann stimmt das auch.
cp reg1a,reg1b
cpc reg2a,reg2b
cpc reg3a,reg3b
cpc reg4a,reg4b
brcs rega_grösser
oder
breq
oder
brne
oder
brcc
Für den Vergleich mit Immideate Werten wie CPI gibt es leider kein Kommando, das mit Carry arbeitet.
Da muß man dann den Wert schon in ein Register übertragen.
Lesezeichen