Die Befehle CP und CPC sind ähnlich wie dir Subtraktion mit SUB und SBC, nur das Ergebnis nicht ausgegeben wird. Das Carry Flag ist extra für den Überlauf vom low zum high Byte da.
Druckbare Version
Die Befehle CP und CPC sind ähnlich wie dir Subtraktion mit SUB und SBC, nur das Ergebnis nicht ausgegeben wird. Das Carry Flag ist extra für den Überlauf vom low zum high Byte da.
Also ich würds so machen:
Damit ist in 4-6 CPU--Zyklen der Vergleich abgeschlossen. Die beiden 0x35-Zahlen sind Deine Konstanten, die den Vergleichswert darstellen sollen.Code:vergleich:
cp r24, 0x35
brne nicht_gleich
cp r25, 0x35
brne nicht_gleich
gleich:
was_auch_immer...
ret oder rjmp
nicht_gleich:
was_auch_immer...
@thewulf00
Bei abfragen auf gleiche Zählerstände geht das so.
Bei größer, kleiner Abfragen wirds dann komplizierter.
Übrigens cp geht nicht mit einer Konstanten. Müsste der Befehl dann nicht cpi heissen ?
Also
ldi r16,low(adr)
ldi r17,high(adr)
cp xl,r16
cpc xh,r17
brxyz oder was auch immer
find ich einfacher. Wobei r16 und r17 natürlich die Vergleichswerte enthalten müssen.
r16 und r17 würd ich verwenden, weil mit denen LDI Befehle gehen.
Wenn die Datenquelle das RAM ist, gehen natürlich auch die Register unter r16.
Du hast völlig Recht, es muss CPI heißen. Das wäre der Punkt, wo ich beim Complieren noch mal drüber gucken müsste. :-)
Und ein größer/kleiner ist nicht nötig, siehe Aufgabenstellung:
Zitat:
Zitat von pacer_one
Dank der zahlreichen Tipps hab ich es inzwischen hinbekommen. In der Woche habe ich leider nur nicht immer die Zeit dran zu arbeiten.