AVR: Undokumentierte LAT Instruktion?

OP #1527513
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
OP #1527750
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren