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

Podobne dokumenty