www.mikrocontroller.net

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


Autor: Markus M. (adrock)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ben ___ (burning_silicon)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: doc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

OK. Hat sich damit erledigt.

MfG Spess

Autor: Thomas R. (tinman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus M. (adrock)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht doch im Thread. Ist der COM Befehl (Komplement).

Autor: Markus M. (adrock)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas R. (tinman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.