Assembler LDI OUT Frage

OP #6287687
Lesenswert?

Hallo zusammen :)

Auf das Risiko hin, dass die Frage schon tausend mal beantwortet wurde:

Warum kann ich nicht direkt mit LDI Werte in ein Register laden?

Also zb: LDI SPL, LOW(RAMEND) ?

Ich finde überall nur den Umweg über ein Arbeitsregister und dann das 
Laden über OUT.

Also in dem Fall:
LDI r16, LOW(RAMEND);
OUT SPL, r16;

Ist das nicht langsamer, da ein Befehl mehr?

Viele Grüße
Stefan
#6287692
Lesenswert?

Stefan H. schrieb:
> Warum kann ich nicht direkt mit LDI Werte in ein Register laden?
weil LDI nich mit den Registern funktioniert. Es kann sogar nur Register 
16 bis 31.

> Ist das nicht langsamer, da ein Befehl mehr?
geht aber nicht anders, ansonsten würde LDI kein 16 bit Befehl mehr sein 
können. Lies mal das hier, dann wird es etwas klarer (nur die Seite zu 
LDI, nicht alles)
http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf

Edit:
OUT und LDI sind beide 16 bit und brauchen 1 Cycle, ein 32Bit Befehl 
würde auch 2 Cycles brauchen und kaum einen/keinen Vorteil bieten, dabei 
aber die Menge der möglichen Opcodes eventuell sprengen.

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