Hallo Siro,
Zitat Zitat von Siro Beitrag anzeigen
char a;

a = 3;

Das macht der Compiler daraus:

Code:
MOVLW 0x3     ; lade den Wert 3 ins W-Register
MOVWF 0x72    ; speichere den Wert aus W im RAM an der Speicherstelle 0x72
MOVF  0x72,W  ; lade das W-Register mit dem Wert aus Speicherstelle 0x72
MOVWF a       ; speichere den Wert in "a"  a hat die Speicherstelle 0x77
Warum packt der Compiler den Wert erstmal in die Speicherstelle 72 um ihn dort wieder zu laden ?
Das sieht schon sehr merkwürdig aus.
Ich denke ich kann nachvollziehen, was die Entwickler da gemacht haben:
Die 16 direkt ansprechbaren Speicherstellen, werden quasi als CPU-Register verwendet.
Bei den PICs dreht sich alles um das temporäre W-Register

Die meisten CPUs würden dies umsetzen als:
Code:
LDA #0x03, R1
STA R1, a
Da der PIC dies nicht kann, gibt es zwei Macros für STA und LDA...


Mach mal etwas komplizierteres, wie
Code:
a[i] = 3;
MfG Peter(TOO)