Hallo, zwei kurze Fragen: 1) um in Assembler zwei Bits zu tauschen, bspw. das LSB und MSB wollte ich einefach eine Bitmaske verexoren. Kann ich das folgendermaßen ausführen? ldi r17, 0b10000001 eor r16,r17 r16 hätte dann das erste und letzte Bit getauscht oder? 2) wenn ein 16Bit-Wert in zwei Registern steht bspw r16-high und r17-low, wie kann ich eine Abfrage machen ob der Wert größer als zB 0x1753 ist und dann auf 0 zurücksetzen? Hierfür hab ich leider keinen Ansatz, außer dass ich wahrscheinlich mit BRSH arbeiten muss. Weiß leider nicht wie 16Bit-Werte behandelt werden. Danke schonmal
Wie wäre es mit einem kleinen, verschämten Hinweis zum Prozessortypen? zu 1. Wenn Du unter tauschen Invertieren 1 --> 0; 0 --> 1 verstehst: Ja Wenn Du meinst Bit0 --> Bit7; Bit7 --> Bit0: dann nein.
achso stimmt. ne also ich will die schon tauschen. Denk mal dass ich die Bits jeweils isolieren muss mit einer Maske und in ein extra Register schreiben oder? Prozessor ist Atmega16
Höchste Bit ins Carry rotieren dann den rest mit 32 multiplizieren und dann carry zurück ins 0te Bit rorieren.
2. Wenn das High Byte größer ist brauchst du das low Byte gar nicht mehr angucken, nur wenn beide gleich sind brauchst du dir das low byte angucken.
Bei Atmels stehen dafür die Befehle: CP CPC und CPI zur Verfügung Meist kommt bei Variablen CP Reg,Reg // gefolgt von CPC Reg,Reg zur Anwendung. Im Zusammenhang mit Konstanten bietet sich die Sequenz: CPI Reg,Const // Low gefolgt von CPC Reg,Reg // High an.
zu 1. sollen die restlichen Bits (Bit 1 bis Bit6) unverändert bleiben, oder ists egal was mit denen geschieht?
die restlichen sollen unverändert bleiben, nur das erste und letzte getauscht. habs jetzt mal mit dem T-Flag versucht: mov r17,r16 bst r16,0 bld r17,7 bst r16,7 bld r17,0 wär das so okay?
:
Bearbeitet durch User
Peter Smart schrieb: > wär das so okay? Völlig ok. Und das ganz ohne C :-)) Assembler ist doch eine wahre Freude. Logisch, einfach, ohne wirren Klammern- und <!==:<((!^ Spuk.
das Problem ist jetzt leider, also nochmal zur ersten Aufgabe, dass nur bestimmte Befehle zulässig sind (ist ne Klausur-Aufgabe). Das heißt BLD und BST sind tabu. Kann ich die Aufgabe auch mit ror und rol realisieren? also übers carry-flag tauschen?
Peter Smart schrieb: > das Problem ist jetzt leider, also nochmal zur ersten Aufgabe, dass nur > bestimmte Befehle zulässig sind (ist ne Klausur-Aufgabe). Das heißt BLD > und BST sind tabu. Wasn das für'n Mist? Ist es nun ein AVR oder nicht?
Johann L. schrieb: > Wasn das für'n Mist? Ist es nun ein AVR oder nicht? Zitat: (ist ne Klausur-Aufgabe) Da erwartest du doch nicht ernsthaft etwas sinnvolles? Gab es eine Revolution in unserem Schulsystem? Gruss Reinhard Peter Smart schrieb: > Kann ich die Aufgabe auch mit ror und rol realisieren? also übers > carry-flag tauschen? Klar, das funktioniert mit jedem Prozessor, denn Rotate-Befehle hat jeder. Gruss Reinhard
Reinhard Kern schrieb: > > Zitat: (ist ne Klausur-Aufgabe) > > Da erwartest du doch nicht ernsthaft etwas sinnvolles? Gab es eine > Revolution in unserem Schulsystem? Naja wahrscheinlich will er damit das Niveau etwas heben
Reinhard Kern schrieb: > Johann L. schrieb: >> Wasn das für'n Mist? Ist es nun ein AVR oder nicht? > > Zitat: (ist ne Klausur-Aufgabe) Und Zitat: Es ist ein ATmega16 Beitrag "Re: Fragen zu Assembler" Gibt es denn wenigstens eine Auflistung der "erlaubten" Befehle?
>Gibt es denn wenigstens eine Auflistung der "erlaubten" Befehle? http://www.atmel.com/images/doc0856.pdf
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.