Wieso kein ADDI?

Gast #94431
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
Gast #94432
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
Gast #94436
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
Gast #94437
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.