Forum: PC-Programmierung Fragen zu Assembler


von Peter S. (peter_smart)


Lesenswert?

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

von Amateur (Gast)


Lesenswert?

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.

von Peter S. (peter_smart)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

Höchste Bit ins Carry rotieren dann den rest mit 32 multiplizieren und 
dann carry zurück ins 0te Bit rorieren.

von MWS (Gast)


Lesenswert?

Das T-Flag und BLD/BST bietet sich an.

von Uwe (Gast)


Lesenswert?

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.

von Amateur (Gast)


Lesenswert?

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.

von A.S.M. (Gast)


Lesenswert?

zu 1.
sollen die restlichen Bits (Bit 1 bis Bit6) unverändert bleiben, oder 
ists egal was mit denen geschieht?

von Peter S. (peter_smart)


Lesenswert?

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
von A.S.M. (Gast)


Lesenswert?

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.

von Peter S. (peter_smart)


Lesenswert?

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?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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?

von Reinhard Kern (Gast)


Lesenswert?

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

von Peter S. (peter_smart)


Lesenswert?

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

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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?

von Amateur (Gast)


Lesenswert?

BLT und BST funktionieren nach meinem Wissen mit R00 bis R31.

von A.S.M. (Gast)


Lesenswert?

sind die mnemonics
sbis und sbic erlaubt? damit geht es auch.

von Amateur (Gast)


Lesenswert?

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