z80 assembler uvod

download z80 assembler uvod

of 42

Transcript of z80 assembler uvod

Mikroprocesor Z80Instrukcijski set

Sa etakInstrukcije prijenosa podataka Na ini adresiranja podataka Rad sa stogom Blokovski prijenos podataka Ulazno / izlazne instrukcije Zbrajanje i oduzimanje Logi ke funkcije Postavljanje, brisanje i ispitivanja bita Posmak i rotacija Bezuvjetni i uvjetni skok Bezuvjetni i uvjetni poziv Kontrola mikroprocesora Kontrola prekida

Aritmeti ke i logi ke instrukcije

Instrukcije programske kontrole

Instrukcije prijenosa podataka

Na ini adresiranja podatakaNeposredno adresiranje (Immediate data transfer) 8-bitno LD REG,d8; LD (HL),d8 REG = B, C, D, E, H, L, A; d8 = 8-bitni podatak 16-bitno LD RR,d16 RR = BC, DE, HL, IX, IY, SP; d16 = 16-bitni podatak

Direktno adresiranje (Direct data transfer) 8-bitno LD A,(a16); LD (a16),A 16-bitno LD RR,(a16); LD (a16),REG a16 = 16-bitna adresa

Na ini adresiranja podatakaIndirektno adresiranje (Indirect data transfer) LD A,(RR); LD (RR),ARR = BC, DE, HL

Registarsko adresiranje (Register data transfer) LD R,RR = B, C, D, E, H, L, A

Indeksirano adresiranje (Index data transfer) LD (II + dd),R ; LD (II+dd),d8II = IX, IY; dd = 8-bitni broj s predznakom; d8 = 8-bitni podatak

Rad sa stogomLIFO memorija (Last In First Out) slu i za pohranu povratne adrese potprograma te za privremenu pohranu podataka

LD SP,1000H1000 0FFF 0FFE 0FFD 0FFC 0FFB 0FFA 0FF9 SP

(H) (B) (L) (C)

PUSH BC EX (SP),HL POP DE

ADRESE

Instrukcije zamjeneZamjena sa podatkom na stogu LD (SP),HL LD DE,HL LD (SP),IX LD (SP),IY

Zamjena registarskih parova Zamjena akumulatora i statusnog registra osnovnog skupa registara s pomo nim LD AF,AF

Zamjena osnovnog i pomo nog skupa registara EXX

Instrukcije prijenosa bloka podatakaInstrukcije za prijenos podataka sa memorijske lokacije adresirane HL registarskim parom na memorijsku lokaciju adresiranu sa DE registarskim parom LDD (Load and Decrement) prenese podatak, dekrementira HL i DE LDI (Load and Increment) prenese podatak, inkrementira HL i DE

Registarski par BC sadr i koli inu podataka koju treba prenijeti i uvijek je dekrementiran ovim instrukcijama Prijenos se mo e ponavljati dok BC ne dostigne nula instrukcijama LDDR i LDIR LDDR (Load Decrement and Repeat) LDIR (Load Increment and Repeat)

Instrukcije za prijenos U/I podatakaPrijenos podataka izme u Z80 i vanjskih ure aja Broj porta fiksan IN A,d8 OUT d8,A

d8 = 8-bitna adresa porta

Broj porta varijabilan (nalazi se u C) IN REG,(C) OUT (C),REGREG = B, C, D, E, H, L, A

Blokovski prijenos podataka sa(na) memorijske lokacije adresirane HL registarskim parom na(sa) port adresiran C registrom. Mogu e je ponavljanje pri emu je broja registar B. INI OUTI IND OUTD INIR OUTIR INDR OUTDR

Pitanja za vje buKojih pet na ina adresiranja postoje kod Z80 mikroprocesora? Za to je rijetkost u programu prona i instrukciju LD B,B? Neposredno, direktno, indirektno, registarsko, indeksirano.

Ako je IX=1200h i izvr i se instrukcija LD A,(IX+12h), koja memorijska lokacija je u itana u akumulator? 1212h. 16.

Jer je besmislena, u itava sadr aj reg. B u reg. B.

Koliko bita na stog stavlja instrukcija PUSH? Ako nakon PUSH BC instrukcije slijedi instrukcija POP AF to sadr i statusni registar? Sadr aj registra C

ZadatakNapisati program koji kopira 300 podataka iz memorije s po etkom na 2000H na adresu 4000H. Koristiti instrukciju LDIR.ORG LD LD LD LDIR END 0000H BC, 300 HL, 2000H DE, 4000H

Aritmeti ke i logi ke instrukcije

Aritmeti ke i logi ke funkcijeFunkcije zbrajanja i oduzimanja Zbrajanje Zbrajanje sa prijenosom Oduzimanje Oduzimanje sa prijenosom Komplement Logi ki I Logi ki ILI Logi ki isklju ivo ILI

Logi ke funkcije

Instrukcije postavljanja, brisanja i ispitivanja bita Instrukcije posmaka Instrukcije rotacije

Zbrajanje8-bitno zbrajanje dodaje operand sadr aju akumulatora, zastavice se mijenjaju u skladu sa rezultatom ADD A,d8 ADD A,REG ADD A,(HL) ADD A,(II+dd) d8 = 8-bitni podatak; REG = B, C, D, E, H, L, A; II = IX, IY; dd = 8-bitni broj s predznakom

Za razliku od 8-bitnih instrukcija utje u samo na stanje C zastavice. ADD HL,RR ADD II,RR ADC HL,RRRR = BC, DE, HL, SP; II = IX, IY

Zbrajanje sa prijenosomRadi ostvarenja prijenosa pri zbrajanju vi e-bajtnih brojeva koristi se zbrajanje sa prijenosom. Dodaje se operand i zastavica C (carry) sadr aju akumulatora ADC A,d8d8 = 8-bitni podatak

ADC A,REG REG = B, C, D, E, H, L, A ADC A,(HL) ADC A,(II+dd)II = IX, IY; dd = 8-bitni broj s predznakom

OduzimanjeOduzimaju operand od sadr aja akumulatora, zastavice se mijenjaju u skladu sa rezultatom SUB SUB SUB SUB A,d8 A,REG A,(HL) A,(II+dd)

d8 = 8-bitni podatak; REG = B, C, D, E, H, L, A; II = IX, IY; dd = 8-bitni broj s predznakom

Oduzimanje sa prijenosomRadi ostvarenja prijenosa pri oduzimanju vi e-bajtnih brojeva koristi se oduzimanje sa prijenosom. Od sadr aja akumulatora oduzima se operand i zastavica C (carry). SBC SBC SBC SBC SBC A,d8 A,REG A,(HL) A,(II+dd) HL,RR

d8 = 8-bitni podatak; REG = B, C, D, E, H, L, A; II = IX, IY; dd = 8-bitni broj s predznakom;

RR = BC, DE, HL, SP

Inkrementiranje i dekrementiranjeZbrajanje sa 1 (INC) i oduzimanje za 1 (DEC) 8-bitno utje e na sve zastavice osim C INC REG INC (HL) INC (II+dd) REG = B, C, D, E, DEC REG DEC (HL) DEC (II+dd) H, L, A; II = IX, IY; dd =

8-bitni broj s predznakom

16-bitno ne utje e na stanja zastavica INC RR DEC RR INC II DEC II RR = BC, DE, HL, SP

BCD zbrajanje i oduzimanjeZbrajanje i oduzimanje brojeva zapisanih u BCD (Binary Coded Decimal) obliku. Nakon regularnog binarnog zbrajanja ili oduzimanja koristi se specijalna funkcija koja namje ta sadr aj akumulatora u BCD. DAA instrukcija (Decimal accumulator adjust)Ako je manje zna ajni nibble ve i od 9 ili je H zastavica postavljena sadr aju akumulatora dodaje se 06H. Ako je vi e zna ajni nibble ve i od 9 ili je C zastavica postavljena sadr aju akumulatora dodaje se 60H.

Instrukcije uspore ivanjaModificirane instrukcije oduzimanja rezultat ne odlazi u akumulator, u skladu sa rezultatom mijenja se stanje zastavica. Ako je operand jednak sadr aju akumulatora zastavica Z je postavljena. CP CP CP CP d8 REG (HL) (II+dd) A-d8 A-REG A-(HL) A-(II+dd)

Blokovsko uspore ivanje podataka uspore uje sadr aj memorijske lokacije adresirane HL registarskim parom sa sadr ajem akumulatora. Mogu e je ponavljanje pri emu je broja registarski par BC. CPI CPD CPIR CPDR

Logi ke instrukcijeKomplement sadr aja akumulatora CPL unarni komplement NEG dualni komplement

Logi ki I selektivno brisanje bitova akumulatora maskom (0=brisanje bita, 1=nepromijenjeno stanje bita) AND d8 AND REG AND (HL) AND (II+dd) d8 = 8-bitni podatak; REG = B, C, D, E, H, L, A; II = IX, IY; dd = 8-bitni broj s predznakom

Logi ke instrukcijeLogi ki ILI selektivno postavljanje bitova akumulatora maskom (1=postavljanje bita, 0=nepromijenjeno stanje bita) OR OR OR OR d8 REG (HL) (II+dd)

Logi ki isklju ivi ILI selektivno invertiranje bitova akumulatora maskom (1=invertiranje bita, 0=nepromijenjeno stanje bita) XOR XOR XOR XOR d8 REG (HL) (II+dd)

d8 = 8-bitni podatak; REG = B, C, D, E, H, L, A; II = IX, IY; dd = 8-bitni broj s predznakom

Postavljanje, brisanje i testiranje bitaPostavljanje pojedina nog bita RES x,REG RES x,(HL) RES x,(II+dd) SET x,REG SET x,(HL) SET x,(II+dd) BIT x,REG BIT x,(HL) BIT x,(II+dd)

Brisanje pojedina nog bita

Testiranje pojedina nog bita zastavica Z se postavlja u skladu sa rezultatom

x = broj bita od 0 do 7; REG = B, C, D, E, H, L, A; II = IX, IY; dd = 8-bitni broj s predznakom

Instrukcije posmakaLogi ki posmak u lijevo i desno0 CY 0 CY SLA

SRL

Aritmeti ki posmak u desno dijeljenje s 2 broja s predznakom

SRA CY

Instrukcije rotacijeRotiranje u lijevo i desnoCY RL

CY

RR

Cirkularno rotiranje u lijevo i desnoRLC CY

RRC CY

Pitanja za vje buKoja instrukcija utje e na zastavicu Z; LD A,0 ili XOR A? XOR A. U kojem registru se nalazi rezultat ve ine aritmeti kih i logi kih instrukcija? A. to ini instrukcija NEG? Dualni komplement akumulatora (mijenja predznak). Koju selektivnu promjenu bitova obavljaju instrukcije AND, OR i XOR? AND brisanje OR postavljanje XOR invertiranje Za koje aritmeti ke operacije se koriste instrukcije posmaka SLA i SRA? SLA mno enje sa 2 SRA dijeljenje sa 2 broja sa predznakom

ZadatakNapisati program za 16 bitno oduzimanje ako je prvi podatak na adresi 1000H a drugi na 1002H. Rezultat spremiti na 1004H.

ORG LD LD SBC LD END

0000H HL, (1000H) BC, (1002H) HL,BC (1004H),HL

ZadatakNapisati program koji mno i sadr aj registra D sa 9.

ORG LD SLA SLA SLA ADD LD END

0000H A,D A A A A,D D,A

Zadatak Tra enje podatka 1AH u memorijskom bloku od 6000H do 6064H. Ni i byte adrese na enog podatka treba zapisati u registar D.

Pokazati na primjeru kori tenje instrukcije CPDR.

ORG 0000H LD A, 1AH LD HL, 6064H LD BC, 64H CPDR LD D,L END

Instrukcije programske kontrole

Instrukcije bezuvjetnog skokaPojavljuju se u tri oblika Apsolutni skok (JP) omogu ava programski skok na instrukciju na bilo kojoj memorijskoj lokaciji.JP a16 a16=16-bitna adresa

Relativni skok (JR) omogu ava programski skok na instrukciju koja se nalazi u memoriji u rasponu od +127 do -128 byte-a od trenutne lokacije.JR dd dd=8-bitni broj s predznakom

Indirektni skok (JP) omogu ava programski skok na instrukciju na lokaciji na koju pokazuje neki od registara HL, IX, IY.JP (RR) RR=HL,IX,IY

Instrukcije uvjetnog skokaUvjet se testira pomo u zastavica kako bi se odlu ilo ho e li do i do skoka ili ne. Postoje u apsolutnom i relativnom obliku. Testiranje zastavice Z (Zero) JP Z,a16 JP NZ,a16 JR Z,dd JR NZ,dd Testiranje zastavice C (Carry) JP C,a16 JP NC,a16 JR C,dd JR NC,dd Testiranje zastavice S (Sign) JP M,a16 JP P,a16 Testiranje zastavice P (Parity/overflow) JP PO,a16 JP PE,a16

DJNZ instrukcija kombinacija dvije instrukcije DEC B i JR NZ,dd koja se koristi kada treba dekrementirati neki broja i testirati ga na nulu. Ne mijenja stanje zastavice Z.

Z=Zero, NZ=Not Zero, C=Carry, NC=Not Carry, M=Minus, P=Positive PO=Parity Odd, PE=Parity Even

Instrukcije pozivaPotprogram se poziva CALL instrukcijom a iz njega se u glavni program vra a RET instrukcijom CALL instrukcija je kombinacija PUSH instrukcije (sadr aj programskog brojila stavlja se na stog) i JP instrukcije (programski skok na prvu instrukciju potprograma). Mo e biti uvjetna i bezuvjetna. CALL a16 CALL UV,a16 RET instrukcija je kombinacija POP instrukcije (skida adresu povratka sa stoga u programsko brojilo) i JP instrukcije (skok na adresu povratka). Mo e biti uvjetna i bezuvjetna. RET RET UV RST (Restart) instrukcija je poseban slu aj bezuvjetne CALL instrukcije. Poziva potprogram koji po inje na fiksnoj memorijskoj adresi te zauzima manje mjesta u memoriji. Koristi se za sistemske potprograme. RST &&H ekvivalentno CALL 00&&H&&=00, 08, 10, 18, 20, 28, 30, 38 UV=C, NC, Z, NZ, P, M, PO, PE

Kontrola mikroprocesoraNOP (No Operation) trati vrijeme SCF (Set Carry Flag) postavlja zastavicu C CCF (Complement Carry Flag) komplementira zastavicu C HALT zaustavlja program dok se mikroprocesor ne resetira ili se ne dogodi prekid

Kontrola prekidaPrekidni na in rada mikroprocesora namijenjen je poslu ivanju vanjskih jedinica u vremenski kriti nim slu ajevima. Prekidni zahtjev vanjske jedinice mo e se dovesti na dvije no ice mikroprocesora NMI nemaskirani prekid jer se ne mo e programski onemogu iti. Prekidni potprogram mora se upisati u memoriju po ev i od adrese 0066H. INT - maskirani prekid jer se mo e programski onemogu iti, odnosno dozvoliti. Postoje tri mogu a na ina prekidnog rada 0 , 1 i 2.

Instrukcije za kontrolu prekidaIM 0 (Interrupt Mode 0) Odabire prekidni na in rada 0 pri kojemu vanjska jedinica daje naredbu RST 00&&H mikroprocesoru. Prekidni potprogram se mora postaviti s po etkom od adrese 00&&H. (&& mo e biti 00, 08, 10, 18, 20, 28, 30 ili 38).

IM 1 (Interrupt Mode 1) Odabire se prekidni na in rada 1 koji je sli an nemaskiranom samo to se prekidni program treba postaviti s po etkom od adrese 0038H u ROM-u.

Instrukcije za kontrolu prekidaIM2 (Interrupt Mode 2) Odabire se vektorski na in prekidnog rada pomo u kojeg se prekidna rutina mo e postaviti bilo gdje u memoriju. Kada se dogodi prekid, mikroprocesor zahtjeva od vanjske jedinice 8-bitni podatak. Taj podatak je ni i bajt prekidnog vektora dok se vi i bajt uzima iz registra I. Prekidni vektor je zapravo adresa pokaziva a. Pokaziva je 16-bitni podatak koji pokazuje na adresu prve naredbe prekidne rutine. Ni i bajt adrese prve naredbe nalazi se na adresi pokaziva a a vi i bajt na sljede oj adresi. Prekidni vektor mo e biti bilo koja parna adresa (bit 0 u adresi mora biti 0), dok pokaziva mo e biti bilo koja lokacije memorije, odnosno ROM-a.

Instrukcije za kontrolu prekidaEI (Enable Interrupt) Omogu enje no ice INT brisanje unutarnje zastavice prekdida IF (Interrupt Flag)

DI (Disable Interrupt) Onemogu enje no ice INT postavljanje zastavice IF.

RETI (Return from Interrupt) Povratak iz prekidnog potprograma INT no ice.

RETN (Retrun from Nonmaskable Interrupt) Povratak iz prekidnog potprograma RET no ice

Pitanja za vje buKoja zastavice je mogu e testirati instrukcijom JP?

Z, C, P, S.

Koju instrukciju skoka moramo upotrijebiti za usporedbu jednakosti dva broja?

JP Z,a16 ili JR Z,dd. PUSH i JP.

Koje dvije instrukcije izvodi instrukcija CALL? Gdje instrukcija RET pronalazi adresu povrataka i gdje je stavlja?

Na stogu i stavlja je u PC. CALL 0020H.

emu je ekvivalentna instrukcija RST 20H?

Na koje na ine je mogu e iza i iz stanja HALT instrukcije. Resetiranjem procesora Prekidom Koju no icu Z80 mikroprocesora kontroliraju EI i DI? INT.

ZadatakNapisati program koji dijeli sadr aj registra C sa 7.ORG 0000H LD A, C LD B, 0H PON: INC B SUB 7 JP C, ISP1 JP Z, ISP2 JP PON ISP1: DEC B ISP2: LD C, B END

ZadatakNapisati prekidni potprogram za NMI koji sprema stanja registara op e namjene na stog te zamjenjuje sadr aje glavnog i alternativnog skupa registara.smje tanje programa ORG 0066H na potrebnu adresu spremanje stanja PUSH AF registra na stog PUSH BC PUSH DE PUSH HL zamjena sadr aja EXX skupova registara povratak iz prekidne RETN rutine

ZadatakMikroprocesor radi u IM 2. Spojene su 3 periferne jedinice od kojih svaka mo e izazvati prekid koji tra i druga iju obradu. Poznato je da prva jedinica ima prekidni vektor 00h, druga 02h a tre a 04h te da prekidna rutina prve jedinice po inje na 1000h, druge na 2000h a tre e na 3000h. Potrebno je definirati stranicu za prekidne vektore.

LD A,0FFH rezervacija stranice za prekidne vektore LD I,A LD HL,1000H postavljanje adrese prve prekidne rutine LD (0FF00H),HL LD HL,2000H postavljanje adrese druge prekidne rutine LD (0FF02H),HL

LD HL,3000H postavljanje adrese tre (0FF04H),HL LD e prekidne rutine