( bucko | 2022. 11. 30., sze – 14:09 )

Azért a #define csodákat tud ám művelni, ha valamit nem értesz. ;)

A "külső hardvertámogatás" éppúgy a cpu része, mint az a tény, hogy AVR esetén éppen az r27+r26 == X. Pl. a 8080-nál a (HL) neve M regiszter. Azaz az A, B, C, D, E, H,  L regiszterek mellé került egy M, amit ugyanúgy használhatsz, mint a többit,  csak éppen a HL regiszterpárral címzett bájtot jelenti.

Képzeld el, hogy FSR0 = X, FSR1=Y és FSR2=Z, FSR0L=XL=R26 (stb.) és máris AVR-t fogsz látni. Az st X=mov?? INDF0, az st X+ = mov?? POSTINC0 ... stb., tehát X=INDF0, X+=POSTINC0, stb. Az, hogy miként valósítja meg a cpu az az utasításkészlet és a regiszterek számának függvénye.

                            MOVLB   15          (extended módban)
        ldi r30,lo8(a)      LFSR    FSR0, a     (X=&a, mivel &a statikus)
                                                (de AVR Z=&a ??????)
        ldi r31,hi8(a)
        ldi r24,lo8(20)     MOVLW   20          (W=i=20)
        mov r26,r30                             (AVR X=Z ??????)
        mov r27,r31
0:
        st X+,__zero_reg__  CLRF    POSTINC0    (*X++=0)
        dec r24             DECFSZ  WREG
        brne 0b             BRA     0:
        ret                 RET

Én nem látok különbséget.

A "külső hardvertámogatás"azért is poénos, mert a nyomorult processzor egyetlen nyomorult W regisztere is "külső hardvertámogatás" segítségével is elérhető.

Pl. a POSTINC0 az FEEh, míg a W (WREG álnéven) az FE8h címen tartózkodik. Így aztán egy regiszter sincs, csak "külső hardvertámogatás".  Szerinted.

Extended módban már primitív frame pointer / enter-leave technika támogatás is van ezekre az indexregiszterekre.