Model programowy i lista rozkazów CPU05
Transkrypt
Model programowy i lista rozkazów CPU05
µP Asembler HC05 Budowa linii asemblera Pola w linii sa oddzielone znakami białymi (spacje, tabulacje). Wewnatrz pola znaki te nie wystepuja. Linia programu zawiera cztery pola (być może puste): etykieta mnemonik operand * LABEL to jest linia komentarza NOP etykieta moze wystapic... NOP ... * * MW-ZPCiR-ICT-PWr komentarz lub nie operand (o ile jest) zadajemy: LDA LICZ8 symbolicznie, LDA $C0 numerycznie, LDA TABL+TLEN-1 lub przy pomocy wyrazenia 1 µP Asembler HC05 Dyrektywy asemblera TABLEN EQU 5 #define TABLEN 5 ELEM_A ELEM_B ELEM_C STRU_L ORG DS.B DS.W DS.B EQU 0 1 1 TABLEN * typedef struct { char ELEM_A; int ELEM_B; char ELEM_C[TABLEN]; } T_STRU; LICZ8 LICZ16 TABL STR1 STR2 ORG DS.B DS.W DS.B DS.B DS.B RAM 1 1 TLEN STRU_L STRU_L char int char T_STRU ROM 255 $FFFF "ula",0 1,2,3 *-STABL const const const const ORG STALA8 DC.B STALA16 DC.W NAPIS DC.B STABL DC.B STLEN EQU MW-ZPCiR-ICT-PWr LICZ8; LICZ16; TABL[TLEN]; STR1,STR2; char int char char STALA8=255; STALA16=0xffff; * NAPIS="ula"; STABL[STLEN]={1,2,3}; 2 µP Asembler HC05 Tryby adresowania IMM immediate – argument bezpośrednio w programie 0300 A6 55 LDA #$55 $55 -> A INH inherent – bez argumentów (dotyczy rejestrów CPU) 0302 4C INCA (A)+1 -> A EXT extended – 16-bitowy adres argumentu 0303 C6 03 FF LDA $3FF ($03FF) -> A DIR direct page – 8-bitowy adres argumentu 0306 B6 FF LDA $FF ($00FF) -> A IX IX1 IX2 indexed (0,1,2-byte offset) – IX jako wskaźnik argumentu 0308 F6 0309 E6 02 030B D6 03 E0 LDA LDA LDA 0,X 2,X $3E0,X ((IX)) -> A (2+(IX)) -> A ($3E0+(IX)) -> A REL relative – adres wynikowy liczony wzgledem PC 030E 27 EF 0310 MW-ZPCiR-ICT-PWr BRA $300 (PC)+$0300-$0310 -> PC 3 µP Asembler HC05 Adresowanie indeksowe ****************************** * IX jako indeks * UWAGA: * w HC05 indeks: [0..255] CLX LOOP1 LDA TABL,X STA PORTA INX CPX #TLEN BNE LOOP1 ****************************** * IX jako wskaznik * UWAGA: * w HC05 tylko strona zerowa LOOP2 LDX LDA STA INX CPX BNE MW-ZPCiR-ICT-PWr int i; for(i=0;i<TLEN;i++){ PORTA=TABL[i]; } char *ptr; #TABL 0,X PORTA ptr=TABL; do{ PORTA=*ptr++; #(TABL+TLEN) LOOP2 } while(ptr!=TABL+TLEN); 4 µP Asembler HC05 Instrukcje typu rejestr–pamieć tryby: IMM, DIR, EXT, IX, IX1, IX2 skrót opis ADC ADD AND BIT CMP EOR LDA LDX MUL ORA SBC STA STX SUB suma z przeniesieniem suma iloczyn bitowy test bitowy porównanie różnica symetryczna ładowanie akumulatora ładowanie rejestru indeksowego mnożenie A i X (tylko INH) suma bitowa różnica z przeniesieniem składowanie akumulatora (bez IMM) składowanie rejestru indeksowego (bez IMM) różnica MW-ZPCiR-ICT-PWr 5 µP Asembler HC05 Instrukcje jednoargumentowe (RMW) skrót opis ASL arytmetyczne przesuwanie w lewo (DIR, IX, IX1 oraz INH – ASLA, ASLX) arytmetyczne przesuwanie w prawo (DIR, IX, IX1 oraz INH – ASRA, ASRX) zerowanie bitu (DIR) ustawienie bitu (DIR) zerowanie (DIR, IX, IX1 oraz INH – CLRA, CLRX) dopełnienie arytmetyczne (DIR, IX, IX1 oraz INH – COMA, COMX) zmniejszenie o 1 (DIR, IX, IX1 oraz INH – DECA, DECX) zwiekszenie o 1 (DIR, IX, IX1 oraz INH – INCA, INCX) logiczne przesuniecie w lewo (DIR, IX, IX1 oraz INH – LSLA, LSLX) logiczne przesuniecie w prawo (DIR, IX, IX1 oraz INH – LSRA, LSRX) dopełnienie bitowe (DIR, IX, IX1 oraz INH – NEGA, NEGX) obrót w lewo z przeniesieniem (DIR, IX, IX1 oraz INH – ROLA, ROLX) obrót w prawo z przeniesieniem (DIR, IX, IX1 oraz INH – RORA, RORX) sprawdzanie znaku i zera (DIR, IX, IX1 oraz INH – TSTA, TSTX) ASR BCLR BSET CLR COM DEC INC LSL LSR NEG ROL ROR TST MW-ZPCiR-ICT-PWr 6 µP Asembler HC05 Instrukcje wzglednych skoków warunkowych tryb REL skrót BCC BCS BEQ BHCC BHCS BHI BHS BIH BIL BLO BLS BMC BMI BMS BNE BPL BRA BRCLR BRN BRSET MW-ZPCiR-ICT-PWr warunek wykonania skoku brak przeniesienia wystapienie przeniesienia relacja równości brak przeniesienia połówkowego wystapienie przeniesienia połówkowego ostra relacja wiekszości nieostra relacja wiekszości stan wysoki wejścia IRQ stan niski wejścia IRQ ostra relacja mniejszości nieostra relacja mniejszości przerwania nie zamaskowane wynik ujemny przerwania zamaskowane relacja nierówności wynik nieujemny zawsze bit wyzerowany (słowo – tryb DIR) nigdy bit ustawiony (słowo – tryb DIR) 7 µP Asembler HC05 Inne instrukcje sterujace tryb INH skrót opis BSR CLC CLI JMP JSR NOP RSP RTI RTS SEC SEI STOP SWI TAX TXA WAIT wzgledny skok do podprogramu (REL) zerowanie flagi przeniesienia zerowanie maski przerwań skok bezwzgledny (DIR, EXT, IX, IX1, IX2) wywołanie podprogramu (DIR, EXT, IX, IX1, IX2) instrukcja pusta inicjalizacja wskaźnika stosu powrót z obsługi przerwania powrót z podprogramu ustawienie flagi przeniesienia ustawienie maski przerwań zatrzymanie zegara, odblokowanie przerwania IRQ przerwanie programowe przepisanie akumulatora do rejestru indeksowego przepisanie rejestru indeksowego do akumulatora zatrzymanie CPU i odblokowanie przerwań MW-ZPCiR-ICT-PWr 8