mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wieso kein ADDI?


Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Vielleicht sind ja hier noch ein paar ausser mir, die rein mit ASM auf
den AVR´s programmieren.
Frage mich gerade wieder, wieso gibt es keinen Befehl wie ADDI rd,k
(Add Immediate)?
Wo es doch den Befehl SUBI rd,k (Subtract Immediate) gibt.
Kann mir das jemand erklären?
Gut, da kann man ja mit nen Macro machen so wie...

.macro ADDI
   ldi   r25,@1
   add   @0,r25
.endmacro

... aber kostet nur (marginal) unnötig Rechenzeit und Flash.

Gibt es noch undokumentierte, echte Befehle von denen es auch Infos
irgend wo im Netz gibt?
Zu meiner Zeit mit Z80-CPU (ZX81, ZX-Spectrum) war damals in ner
Zeitung ein Bericht über "geheime" CPU-Befehle.

Gruß
Andi

Autor: Khani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andi,

ADDI hätte ich auch schon mal gebraucht. Naja eigentlich ist der Befehl
ja auch überflüssig. Man kann ja einfach das 2erKomplement einer
Konstante mit SUBI abziehen. Das läuft dann wie a+b = a - (-b).
Kostet keinen Prozessorzyklus und kein bit mehr im Speicher.

MfG, Khani

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.macro ADDI
   subi @0, -(@1)
.endmacro


Peter

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man, auf das mit dem SUBI rd,-k hätt ich eigentlich selber kommen
müssen.
Danke für die Hinweise.

Gruß
Andi

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So macht es auch der gcc wie ich gesehen habe.

Autor: Gralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

gar nicht mal so dumm, "addi" mit "subi -k" zu machen. Aber wie
lauft das dann mit einer 16bit?
Ich möchte ähnlich adiw einer beliebigen 16-bit-Zahl eine positive
16bit-Konstante addieren. Wie sieht das dann als Macro aus?

.macro subi16 ;H:L,k
subi  @1,low(@2)
sbci  @0,high(@2)
.endmacro

subi16 würde ja subtrahieren. Wo muß jetzt das "-" hin?
subi  @1,-low(@2)
sbci  @0,-high(@2)
;oder
subi  @1,low(-@2)
sbci  @0,high(-@2)
;oder wie???

Danke für die Hilfe
Gralf

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier aus meiner Sammlung der Macrobefehle:

.macro AddIW                  ;Word-Addition auf Register RdL:RdH,K
        subi    @0L,low(-@1)  ;AddIW low:high + K16
        sbci    @0H,high(-@1)
.endm

Das W steht für Word, also 16 Bit.

MfG
Andi

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habe mir erlaubt, das ganze unter
http://www.mikrocontroller.net/articles/AVR_Assembler_Makros
einzubasteln. So ein Quatsch wegen Urheberechts greift bei aufgrund der
Schöpfungshöhe sowieso noch nicht ;-)


Viele Grüße

Autor: Gralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Andi!

Werde mir wohl auch mal ne Macrosammlung anlegen. Dann steht man nur
einmal vor solch Problemen.

Gralf

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.