- CELL 16bit
- DOUBLE 32bit
- Pointer je 16bit, nebo DOUBLE, pak nižší 2 byte někam ukazují, 3. byte říká kam (0x80 = RAM) a 4. je nula
- ukládání v paměti - nižší řády níž => byte b[]= 0x12345678 => b[0]=0x78; b[1]=0x56; b[2]=0x23; b[3]=0x12; => b: .byte 0x78 0x56 0x34 0x12
- na zásobníku taky 0x12345678 => push(0x12); push(0x34); push(0x56); push(0x78) => forth> 0x12345678 ~ forth> 0x12 0x34 0x56 0x78
- prostě je to normálně jako na 8086 little endian
- oba zásobníky rostou zhora dolů, ukazují na poslední hodnotu v zásobníku. Počáteční adresa je tedy 0x0100. push(x): *(--SP)=x; pop: return *(SP++)
- Adresa funkce a __memx u AVR:
- pokud mam navesti ve strojaku w_test_data a v .c ho mam jako `extern const __memx char w_test_data;` a nactu ho do `const __memx InstrPoint_t *IP;` `IP=(const __memx void)&w_test_data;` tak se nacte jako hodnota (např.) 0x0001A3.
- Zatimco funkce void f_docol(void) se nacte IP=(const __memx void*)&f_docol jako hodnota 0x8002CE
- Hlavni rozdil je, ze data smeruji spravne do FLASH, zatimco f_docol smeruje nespravne do RAM - proc je tomu tak a jak to udelat lip?
; normalni funkce
ldi r24,lo8(gs(f_docol))
ldi r25,hi8(gs(f_docol))
ldi r26,lo8(-128)
; z asm.S
ldi r24,lo8(w_test_data)
ldi r25,hi8(w_test_data)
ldi r26,hlo8(w_test_data)