Forum: Mikrocontroller und Digitale Elektronik AVR: Undokumentierte LAT Instruktion?


von Markus M. (adrock)


Lesenswert?

Hallo,

ich schaue mir gerade ein wenig übersetzten C-Code mit dem Disassembler 
an.

Teilweise sind da schon sehr kuriose Konstrukte bei, die mir als alten 
ASM Programmierer die Haare zu Berge stehen lassen, aber das ist hier 
eher nebensächlich :-)

Dort taucht immer wieder die Assembler Instruktion "LAT" (Load And 
Toggle) auf, die aber in der Doku von Atmel nicht erwähnt ist. Was macht 
diese eigentlich?

Ciao...
Markus

von Ben _. (burning_silicon)


Lesenswert?

interessant... zeig doch mal ein stück assemblerlisting, vielleicht läßt 
sich ja rausbekommen was die instruction macht und wozu man sie evtl. 
nutzen kann. für was für einen controller hast du den code compiliert?

von spess53 (Gast)


Lesenswert?

Hi

Wurde mich auch mal interessieren. Ist da der OpCode mit dabei?

MfG Spess

von doc (Gast)


Lesenswert?


von spess53 (Gast)


Lesenswert?

Hi

>Siehe hier:
>http://www.avrfreaks.net/index.php?name=PNphpBB2&f...

OK. Hat sich damit erledigt.

MfG Spess

von Thomas R. (tinman) Benutzerseite


Lesenswert?

AvrAssembler und AvrDisassembler kennen schon die :

Load and Toggle LAT
Load and Clear  LAC
Load and Set    LAS
Exchange        XCH

Die gehören eigentlich nicht zum atmega, also wird ein bug sein.

von spess53 (Gast)


Lesenswert?

Hi

>AvrAssembler und AvrDisassembler kennen schon die :
>...
>Die gehören eigentlich nicht zum atmega, also wird ein bug sein.

Nobody is perfect.

MfG Spess

von Markus M. (adrock)


Lesenswert?

...naja, aber was machen sie denn nun im Code? Also irgendeinen Effekt 
müssen sie doch haben?

Ziel ist übrigens ein ATmega644. Einfach nachzuvollziehen:

#include <stdlib.h>

int main(void) {
 int i;

 i=rand();
}


In der rand() Funktion werden andere Funktionen aus der C-Bibliothek 
aufgerufen, in einer kommt dann z.B. sowas vor:

+00000143:   941A        DEC       R1             Decrement
+00000144:   F769        BRNE      PC-0x12        Branch if not equal
+00000145:   9560        LAT       R22            Load and Toggle
+00000146:   9570        LAT       R23            Load and Toggle
+00000147:   9580        LAT       R24            Load and Toggle
+00000148:   9590        LAT       R25            Load and Toggle
+00000149:   019B        MOVW      R18,R22        Copy register pair
+0000014A:   01AC        MOVW      R20,R24        Copy register pair
+0000014B:   01BD        MOVW      R22,R26        Copy register pair
+0000014C:   01CF        MOVW      R24,R30        Copy register pair
+0000014D:   9508        RET                      Subroutine return

Ciao...
Markus

von Simon K. (simon) Benutzerseite


Lesenswert?

Steht doch im Thread. Ist der COM Befehl (Komplement).

von Markus M. (adrock)


Lesenswert?

Ah ok, ja hatte das COM in dem Kontext nicht verstanden, da ich noch 
nicht alle Befehle des AVRs im Kopf habe und den COM habe ich bis jetzt 
noch nicht gebraucht.

Danke...
Markus

von Thomas R. (tinman) Benutzerseite


Lesenswert?

Dear Customer,

The mnemonics output by the disassembler however doesn't seem
to co-relate with those in the datasheet or instruction set.
This may have been done to add readability and comment about the 
operation of each instruction. We would confirm this from the AVR Studio
development team and get back to you.

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.