Forum: Mikrocontroller und Digitale Elektronik Assembler Code für ATTiny2313 richtig verstehen


von Stefan_KM (Gast)


Lesenswert?

Hallo zusammen.

Ich habe eine Frage zum Assembler Code eines ATTiny 2313. Ich habe eine 
Programm in C geschrieben und compeliert. Anschließend habe ich mir den 
Assembler Code im List File angeschaut und finde immer wieder Stellen 
die wie folgt übersetzt sind:

LDI  R30,LOW(24)


Was bedeutet das LOW(24)?
Diese Zeile wird von der Syntax her immer wieder wiederholt, dann steht 
auch mal ein HIGH(xx) da.

Kann mir jemand eine kurze erläuterung geben?
Danke euch

von spess53 (Gast)


Lesenswert?

Hi

>Was bedeutet das LOW(24)?

Low(x) sind die unteren 8 Bit eines 16-Bit-Wertes

Low($1234)   -> $34
High($1234)  -> $12

MfG Spess

von Holger P. (Gast)


Lesenswert?

Ich versuche es Dir mal zu erklären. Kann aber sein da ich auch noch 
recht neu bin das ich es eventuell nicht 100%ig erkläre.

Also da ein Register nur 8Bit (1Byte) in sich aufnehmen kann, den Wert 
von 0-255 (0-ff) wird damit erreicht das du auch 16Bit Werte bearbeiten 
kannst. Dafür hat der ATTiny auch Register.

Nun kannst du die Registerpaare aber nicht direkt mit einem 16Bit wert 
beschreiben, also musst du es aufteilen. Dieses macht man mit LOW() und 
HIGH()

ldi  r16,low(1025)  ist also gleich ldi r16,1
ldi  r17,high(1025) ist also gleich ldi r17,4

Warum? 4x256+1=1025

Also high liefert die das high von 16Bit und low den rest.

Hoffe ich habe jetzt nix falsch gesagt. So habe ich das wenigstens 
verstanden.

von Stefan_KM (Gast)


Lesenswert?

Danke euch.

Habe ich jetzt verstanden und macht auch Sinn. Die Werte die ich in C 
setze oder einem Register zuweise, werden so im Assembler entsprechend 
mit Low() oder High () einem Resgister zugewiesen.

Danke nochmal.

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.