Forum: Mikrocontroller und Digitale Elektronik Wieso kein ADDI?


von Andi (Gast)


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

von Khani (Gast)


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

von Peter D. (peda)


Lesenswert?

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


Peter

von Andi (Gast)


Lesenswert?

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

Gruß
Andi

von Fritz Ganter (Gast)


Lesenswert?

So macht es auch der gcc wie ich gesehen habe.

von Gralf (Gast)


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

von Andi K. (Gast)


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

von Thomas (Gast)


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

von Gralf (Gast)


Lesenswert?

Danke Andi!

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

Gralf

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.