Azért olvasd el azt is, amit feljebb írtam! Ha kell, van 96 regiszter is. Meg amit előbb írtam! VAN indexregiszter, csak számodra (és a GCC fejlesztői számára) idegen, mert nem a 68000 szerinti általános regiszterhalmaz része.
MPLAB XC8 Compilers support all 8-bit PIC® and AVR® microcontrollers...
Tehát van olyan fordító, amelyik mindkettőt támogatja, vagyis megcsinálható és meg is csinálták.
A magasszintű nyelveket támogató cpu-ra könnyű portolni egy C fordítót. A PIC teljesen más filozófiával készült, szerintem nem is a legutolsó, hanem egyáltalán nem szempont, hogy miiyen szabványnak megfelelő C-t támogat. Van C, ha abban szeretnél programozni vagy létező lib-et használni. Az elsődleges szempont itt a hardver, mert annak alapján választod ki a példányt. Legyen benne legalább 4 db CLC, viszont a C89 tökmindegy. Ugyanaz a kód valószínűleg fog futni egy másik típuson is, amiben van 4 db CLC. Vagyis nem tudsz és nem is akarsz PIC -> x86 irányba hordozható kódot előállitani. ;) (Na, a topicnyitó az üdítő kivétel.) Talán az 512B flash (<= 256 utasítás) + 25B ram esetében fontosabb szempont, hogy csak 6 vagy 8 lába van.
A PIC esetében nem kell "okos" fordító, mert berúgod a hardvert és működik. Ez az egyszerű dolog C-ben általában bonyolultabb módon írható le.
Kedvedért itt a mintafüggvényed XC8 fordító C99 módban, kísértetiesen hasonlít az én pontatlan kódomra.
7D7E EE00 LFSR 0, 0x1 ;X=&a
7D82 0E14 MOVLW 0x14 ;W=20
7D84 6AEE CLRF POSTINC0, ACCESS ;loop: *X++=0
7D86 06E8 DECF WREG, F, ACCESS ;W--
7D88 E1FD BNZ 0x7D84 ;i!=0 -> goto loop
7D8A 0100 MOVLB 0x0
7D8C EFB8 GOTO 0x7D70
Ennek ellenére nem használok C fordítót, mert a régiek tényleg vállalhatatlanok, az újak meg fizetősek. Ráadásul akkora apparátus kell hozzá...
Érdekességképp a hasonó szerkezetű 8051 sem támogatott, az SDCC kezeli (?), de a PIC támogatás 2-3 példány után elhalt. Az egyetlen használható asm fordító a gputils, viszon Dunát lehet rekeszteni az elhalt és / vagy működésképtelen ópenszósz PIC utilitiessel.