Forum: Mikrocontroller und Digitale Elektronik Fragen zu AVR Assembler und den AVR Opcodes


von Kaj G. (Firma: RUB) (bloody)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

ich habe da die ein oder andere Frage zu AVR Assembler und den AVR 
Opcodes.

Nehmen wir als Beispiel den OUT Befehl. Mir ist der Aufbau des Opcodes 
nicht ganz klar. Im AVR Instruction Set Manual ist der Opcode so 
beschrieben (siehe Bild):
1
1011  |  1AAr  |  rrrr  |  AAAA
Was soll mir jetzt aber das "1AAr" sagen?

Grüße

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Okay, ich glabu ich habs gerade verstanden.
Da r zwischen 0 und 31 liegen muss, wird das fünfte Bit mit in dem 
Besagten Nibbel gespeichert, gleiches gilt für A (0 bis 63). Ist diese 
Annahme richtig?

von Stefan K. (stefan64)


Lesenswert?

Die "A" sind die Adress-Bits des IO-Space.
Die "r" sind die Register-Adressierbits.

Alle 6 "A" Bits zusammengenommen ergeben eine 6-Bit-Zahl, also 0 -- 63. 
Sie bilden zusammen eine Adresse im IO-Space.

Alle 5 "r" Bits zusammengenommen ergeben eine 5-Bit-Zahl, also 0 -- 31. 
Sie bilden zusammen die Nummer des verwendeten Registers.

Die vordersten 5 Bits 10111 dienen der Befehlsdekodierung.

Viele Grüße, Stefan

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Kaj G. schrieb:
> Was soll mir jetzt aber das "1AAr" sagen?

Das sagt dir: 1, dann 2bit der Adresse, wo der Out hingeht und dann 1bit 
der Registernummer, die geoutet wird.
Mutmasslich jeweils die MSBs von Adresse und Register.

Gruss
WK

von S. Landolt (Gast)


Lesenswert?

Und wenn es wirklich interessiert, kann man sich ja auch mal das 
.lst-File anschauen.

von Axel S. (a-za-z0-9)


Lesenswert?

Allerdings ist dieses Wissen von nur sehr beschränktem Nutzen. Es sei 
denn, man möchte einen (weiteren) Assembler für AVR schreiben.

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Axel S. schrieb:
> Es sei
> denn, man möchte einen (weiteren) Assembler für AVR schreiben.
Oder man möchte vielleicht einen (weiteren) Emulator schreiben/andere 
Emulatoren verstehen... Oder man beschäftigt sich mit Embedded-Security 
und Reverse-Engineering, oder..., oder..., oder...

von Jakob (Gast)


Lesenswert?

Nun ja, kann ja mal passieren, dass man seinen Quelltext
überschrieben hat - und die neue Variante nicht funktioniert.
Dann ist Reverse Engineering sowieso legal.

Habe es auch schon mal bei Z80-Code gemacht, um einem Hersteller
einen dummen Bug nachzuweisen - das war auch legal, da ich ja
keinen Gewinn aus fremder Leistung ziehen wollte.

Ansonsten ist die Rückübersetzung bei AVR doch kein Problem:
1, oder 0 ist Befehlscode, die Adress-, Offset-, Register-,
..., Konstantenbits etc. sind von außen betrachtet recht frei
dort hineingewürfelt.

Wer sich durch die Nibble-Abgrenzung verwirren lässt, ist
selber Schuld

Bleibt nur noch das kleine Problem, welchen Registern man
(temporär?) welchen Inhalt - und welchen Speicherbereichen man
was zugeordnet hat. War bei Z80 auch nicht leichter... ;-)

von Axel S. (a-za-z0-9)


Lesenswert?

Kaj G. schrieb:
> Axel S. schrieb:
>> Es sei
>> denn, man möchte einen (weiteren) Assembler für AVR schreiben.

> Oder man möchte vielleicht einen (weiteren) Emulator schreiben/andere
> Emulatoren verstehen... Oder man beschäftigt sich mit Embedded-Security
> und Reverse-Engineering

Ja, und? Alles die gleiche Baustelle.

Die AVR-Architektur ist zweifellos nett. Aber sie hat ihren Horizont 
überschritten. Und daß sie jetzt aus dem Haus Microchip kommt, macht sie 
ganz sicher nicht besser oder beliebter. Mithin wird das Bedürfnis nach 
weiteren (!) Assemblern/Emulatoren/$WHATEVER sicher nicht zu- sondern 
eher abnehmen.

Also nochmal: abgesehen von dem Wert von Wissen an sich - welchen 
praktischen Nutzen zieht man heute noch aus dem Bit-für-Bit 
Verständnis des AVR Befehlssatzes?

von S. R. (svenska)


Lesenswert?

Axel S. schrieb:
> Also nochmal: abgesehen von dem Wert von Wissen an sich - welchen
> praktischen Nutzen zieht man heute noch aus dem Bit-für-Bit
> Verständnis des AVR Befehlssatzes?

Muss jedes Wissen sofort praktischen Nutzen haben?

Wenn man verstanden hat, wie Befehle auf dem AVR codiert werden, dann 
versteht man auch, wie es auf so ziemlich allen anderen CPUs gemacht 
wird. Und auf dem AVR ist es deutlich einfacher als z.B. auf ARM oder 
x86.

von Stefan F. (Gast)


Lesenswert?

> Muss jedes Wissen sofort praktischen Nutzen haben?

Ich hatte mal (in Zeiten vor dem Internet) eine 8051 Assembler selbst 
geschrieben, weil ich keinen Zugang zu einem kostenlosen oder 
kostengünstigen hatte.

Da musst ich mich mit solchen Details auch herum schlagen. War 
lehrreich, ich würde es heute aber nicht mehr so angehen.

von Falk B. (falk)


Lesenswert?

@Axel Schwenke (a-za-z0-9)

>Die AVR-Architektur ist zweifellos nett. Aber sie hat ihren Horizont
>überschritten.

Das hat noch keiner geschafft, nicht mal der AVR. Du meinst eher den 
Zenit ;-)

>Also nochmal: abgesehen von dem Wert von Wissen an sich - welchen
>praktischen Nutzen zieht man heute noch aus dem Bit-für-Bit
>Verständnis des AVR Befehlssatzes?

Frag mal Josef G.!

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.