Intrukcni soubor: Bitove operace: BCLR -- nastavi nulu BSET -- nastavi jednicku BSW.C reg, bit -- zapise carry do bitu do registru reg BTG mem/reg, #bit -- BTST.C -- nastavuje CARRY flag BTST.Z -- nastavuje ZERO flag BTSTS mem/reg, #bit nastav Z BTSTS f, #bit4 ; nastav Z podle bitu bit4 v dmem[f] a nastav bit bit4 BTSTS.C Ws, #bit4 ; nastav C podle bitu bit4 v Ws a nastav bit4 BTSTS.Z Ws, #bit4 ; nastav Z podle bitu bit4 v Ws a nastav bit4 FBCL -- log2 z cisla rozcahu -2 < reg < 2 FF1L -- pozice nejlevejsi jednicky FF1R -- nejpravejsi jednicka Operace porovnani: CP CPB -- odecteni s carry pro porovnonani CP0 -- porovnani proti nule CPSEQ -- porovna a preskoci nasledujici instrukci jestize rovno CPSGT CPSLT CPSNE Logicke operace: AND CLR -- nulovani registru COM -- negace zamenou za jednici IOR -- logicky OR NEG -- prevod mezi zapornym a kladnym cislem (COM + increment) SETM -- nastaveni maxima XOR Posuvy: ASR -- aritmenticky do prava LSR -- logicky do prava SL -- posun do leva Rotace: s carry a bez carry RLC -- RLNC -- Ridici instrukce CLRWDT DISI -- zakazani preruseni NOP -- same nuly NOPR -- same jednicky, nenaprogramovana FLASH se samimy jednickami se tvari jako same NOPRy PWRSAV -- rezim nizke spotreby RESET -- softwarove vyvolani resetu ================================================================================ Programovaci techniky: Zasobnik je v pameti dat a roste smerem nahoru. Od adresy 0x800 se umistuji promenne programu a zasobnik se umustuhje nad ne s vyuzitim zbyleho volneho prostoru. Pri deklarace N prommenych se pri pridani prommene se musi prepocitat zacatecni hodnota zasobniku. Symbolicke oznaceni zacatku a limitu zasobniku: __SP_init __SPLIM_init Pokud program prekroci pri pushovani SPLIMit je vyvolano preruseni. Kazdy program musi zacinat timto nastavenim mov #__SP_init, w15 ; nastavi stack pointer mov #__SPLIM_init, w0 ; mow w0, SPLIM ; Deklarace promennych: segmenty -- deklarace pameti dat, programu (cast flash, eeprom) .text -> pamet programu .bss -> pamet dat .text -> pamet programu .bss -> pamet dat Relativni assembler si to pak spoji dohromady, linker to umi i pro vice textovych souboru. .text ; code segment 0x100 mov #3, w0 0x102 bra __reset ; nasledujici cisla se ulozi do code segmentu 0x104 navesti_a: .byte 37 0x105 navesti_b: .byte 12 0x106 count: .int 763 ; integer je 4 bytovy! 0x10A d: .float 7.4 ; float je 4 bytovy s 0x10E e: .asciz "AHOJ" 0x ; k temto datum se pak pristupuje zvlastnim zpusobem .bss ; pamet dat do data segmentu index: .space 2 mov #index, w1 ; do w1 adresa index mov [w1], w3 ; do w3 uloz obsah na adrese index mov index, w1 ; do w1 ulozi hodnotu na adrese index bez krize se vyzvedava hotnoda na adrese Nutne zarovnani: 16 bit hodnotu neni mozne cist z liche adresy! .align 2 ; nasledujici instrukci zarovna na sudou adresu ; zarovnavat je nutne i konstanty v kodovem segnemu Globalni promenna: .data ; segment pro globalni prommene v datovem segmentu se vycleni prostor pro danou promennou crt0.s -- program u CC, ktery zahrnuje instrukce, ktere se provedou pred vlastnim spusteni nasich dat. Instrukce pro cteni a zapis do pameti programu: cteni z datoveho slova pameti programu, ma 24 bitu TBLRDL -- precte dolnich sestnact bitu TBLRDH -- precte hornich osm bitu TBLWDR TBLWDH Informace o assembleru je v AsmLinker30.pdf Je potreba nahrat: .include "p30f4011.inc" ; aby fungovali nektere konstanty a presudoinstrukce CORCOC, #PSV