Vous êtes sur la page 1sur 24

11.

10 ASEMBLERSKE INSTRUKCIJE
// osnovne oznake Rn registar (oznaka za jednu od grupa) DIRECT direktna memorijska lokacija (8-bitna u RAM-u) @Ri sadrzaj registara R0 ili R1 ukazuje na memorijsku lokaciju u RAM-u #DATA 8-bitni podatak (H - hex, B - binarni, bez slova - decimalni) A akumulator DPTR 16-bitni registar (DPH+DPL) PC program counter BIT jedan bit unutar nekog registra REL labela tj. relativna adresa (opseg pomeraja -128~127) // aritmeticke instrukcije 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 ADD ADD ADD ADD ADDC ADDC ADDC ADDC SUBB SUBB SUBB SUBB INC INC INC INC DEC A, Rn; A, DIRECT; A, @Ri; A, #DATA; A, Rn; A, DIRECT; A, @Ri; A, #DATA; A, Rn; A, DIRECT; A, @Ri; A, #DATA; A; Rn; DIRECT; @Ri; A; AA+Rn AA+DIRECT AA+((@Ri)) AA+#F3h AA+Rn+C AA+DIRECT+C AA+((@Ri))+C AA+#F3h+C AA-Rn-C AA-DIRECT-C AA-((@Ri))-C AA-#F3h-C AA+1 RnRn+1 DIRECTDIRECT+1 ((@Ri))((@RI))+1 AA-1 sabira sadrzaj A i Rn, rezultat se smesta u A (prekoracenje u carry flag) sabira sadrzaj A i sadrzaj direktne mem. lokacije, rezultat se smesta u A (prekoracenje u carry flag) sabira sadrzaj A i sadrzaj mem. lokacije na koju ukazuje @Ri (R0 ili R1), rezultat se smesta u A (prekoracenje u cf) sabira sadrzaj A sa heksa-decimalnim brojem , rezultat se smesta u A (prekoracenje u carry flag) sabira sadrzaj A sa Rn i carry flagom sabira sadrzaj A sa sadrzajem direktne mem. lokacije i carry flagom sabira sadrzaj A sa sadrzajem mem. lokacije na koju ukazuje @Ri (R0 ili R1) i carry flagom sabira sadrzaj A sa heksa-decimalnim brojem i carry flagom od sadrzaja A se oduzima Rn i carry flag od sadrzaja A se oduzima sadrzaj direktne mem. lokacije i carry flag od sadrzaja A se oduzima sdrzaj mem. lokacije na koju ukazuje @Ri (R0 ili R1) i carry flag od sadrzaja A se oduzima hex podatak i carry flag uvecava sadrzaj A za 1 uvecava sadrzaj Rn za 1 uvecava sadrzaj direktne mem. lokacije za 1 uvecava sadrzaj mem. lokacije na koju ukazuje @Ri za 1 umanjuje sadrzaj A za 1

018 019 020 021 022 023 024

DEC DEC DEC INC MUL DIV DA

Rn; DIRECT; @Ri; DPTR; AB; AB; A;

RnRn-1 DIRECTDIRECT-1 ((@Ri))((@RI))-1 DPTRDPTR+1 A*B A/B dec. podesavanje

umanjuje sadrzaj Rn za 1 umanjuje sadrzaj direktne mem. lokacije za 1 umanjuje sadrzaj mem. lokacije na koju ukazuje @Ri za 1 uvecava sadrzaj DPTR za 1 mnozi sadrzaj A sa sadrzajem B, u A se smesta rezultat, a u B prekoracenje deli se sadrzaj A sa sadrzajem B, u A se smesta rezultat, a u B ostatak vrsi konversiju heksa-decimalnih brojeva u decimalne pre nego sto se prikazu na displeju sadrzaj Rn kopira u akumulator sadrzaj direktne memorijske lokacije kopira u akumulator sadrzaj mem. lokacije na koju ukazuju R0 ili R1 kopira u akumulator hex podatak kopira u akumulator sadrzaj akumulatora kopira u registar Rn (privremeno odlaganje) sadrzaj direktne memorijske lokacije kopira u Rn hex podatak kopira u Rn sadrzaj akumulatora kopira u direktnu memorijsku lokaciju sadrzaj Rn kopira u direktnu memorijsku lokaciju razmena sadrzaja lokacija u RAM sadrzaj mem. lokacije na koju ukazuju R0 ili R1 kopira u direktnu mem. lokaciju hex podatak kopira u direktnu memorijsku lokaciju sadrzaj akumulatora kopira u memorijsku lokaciju na koju ukazuje sadrzaj R0 ili R1 sadrzaj direktne mem. lokacije kopira u mem. lokaciju na kuju ukazuje sadrzaj reg. R0 ili R1 unosenje hex podatka u mem. lokaciju na koju ukazuje sadrzaj R0 ili R1 hex podatak kopira u DPTR registar (16bitni, dph+dpl) sadrzaj aku. + sadrzaj dptr i to ukazuje na neku mem. lok. ciji se sadrzaj kopira u aku.

025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041

// instrukcije za prenos podataka MOV A, Rn; MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOVC A, DIRECT; A, @Ri; A, #DATA; Rn, A; Rn, DIRECT; Rn, #DATA; DIRECT, A; DIRECT, Rn; DIRECT, DIRECT; DIRECT, @Ri; DIRECT, #DATA; @Ri, A; @Ri, DIRECT; @Ri, #DATA; DPTR, #DATA; A, @A+DPTR;

ARn ADIRECT A((@Ri)) A#F3h RnA RnDIRECT Rn#F3h DIRECTA DIRECTRn DIRECTDIRECT DIRECT((@Ri)) DIRECT#F3h ((@Ri))A ((@Ri))DIRECT ((@Ri))#F3h DPTR#F3C9h A((@A+DPTR))

042 043 044 045 046 047 048 049 050 051 052

MOVC MOVX MOVX MOVX MOVX PUSH POP XCH XCH XCH XCHD

A, @A+PC; A, @Ri; A, @A+DPTR; @Ri, A; @DPTR, A; DIRECT DIRECT A, Rn; A, DIRECT; A, @Ri; A, @Ri;

A((@A+PC)) A((@Ri)) A((@A+DPTR)) ((@Ri))A ((@DPTR))A

ARn ADIRECT A((@Ri))

sadrzaj aku. + sadrzaj pc i to ukazuje na neku mem. lok. ciji se sadrzaj kopira u aku. (novi sadrzaj pc-a) sadrzaj R0 ili R1 ukazuje na sadrzaj spoljne mem. lok. i njen sadrzaj kopira u aku. (unos podataka iz spoljne mem.) sadrzaj aku. + sadrzaj dptr pa rezultat u dptr i njegov sadrzaj ukazuje na spoljnu mem. lok. i njen sadrzaj kopira u aku. sadrzaj aku. se kopira u spoljasnju mem. lok. na koju ukazuje sadrzaj reg. R0 ili R1 sadrzaj aku. se kopira u spoljasnju mem. lok. na koju ukazuje sadrzaj reg. dptr gurni sadrzaj registra ili mem. lok. u stek vraca sadrzaj iz steka u registar tj. mem. lok. po principu last in - first out (za interapte) razmena sadrzaja A i Rn razmena sadrzaja A i direktne mem. lok. u ram-u razmena sadrzaja A i mem. lok. na koju ukazuje sadrzaj R0 ili R1 menja sadrzaj donjeg nibla (za maskiranje bitova) && - logicka I funkcija

053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072

// logicke instrukcije (za rad sa bitovima i registrima) ANL A, Rn; AA && Rn ANL A, DIRECT; AA && DIRECT ANL A, @Ri; AA && ((@Ri)) ANL ANL ANL ORL ORL ORL ORL ORL ORL XRL XRL XRL XRL XRL XRL CRL CPL A, #DATA; DIRECT, A; DIRECT, #DATA; A, Rn; A, DIRECT; A, @Ri; A, #DATA; DIRECT, A; DIRECT, #DATA; A, Rn; A, DIRECT; A, @Ri; A, #DATA; DIRECT, A; DIRECT, #DATA; A; A; AA && #F3h DIRECTDIRECT && A DIRECTDIRECT && #F3h AA || Rn AA || DIRECT AA || ((@Ri)) AA || #F3h DIRECTDIRECT || A DIRECTDIRECT || #F3h AA $ Rn AA $ DIRECT AA $ ((@Ri)) AA $ #F3h DIRECTDIRECT $ A DIRECTDIRECT $ #F3h AA=0 Akompl A

za maskiranje bitova unutar registra ili akumulatora

|| - logicka ILI funkcija

$ - exkluzivno ILI (ako Rn=A onda A=FFh, u suprotnom 00h)

ciscenje sadrzaja akumulatora negacija bitova u akumulatoru

073 074 075 076 077

RL RLC RR RRC SWAP

A; A; A; A; A;

rotate left A (kao da sadrzaj aku. pomnozimo binarno sa 2) rotate left kroz carry flag (7 bit ostaje u C, a C ide u 0 ; za grananje) rotate right A (binarno deljenje A sa 2) rotate right kroz carry flag A=F3h SWAP A; A=3Fh (invertuje sadrzaj) ciscenje carry flag-a (obavezno pri oduzimanju) ciscenje jednog bita u registru (u portu P1, 3. bit = 0) postavlja carry flag na 1 postavlja P1.7 na 1 negacija carry flag-a pa u carry flag negacija P3.7 logicko I izmeu cf i 7. bita P3 porta, rezultat u cf logicko I izmeu cf i komplementiranog 7. bita P3 porta, rezultat u cf logicko ILI izmeu cf i 7. bita P3 porta, rezultat u cf logicko ILI izmeu cf i komplementiranog 7. bita P3 porta, rezultat u cf 7. bit P3 porta kopira u carry flag carry flag kopira u 7. bit P3 porta skoci na labelu ako C=1 skoci na labelu ako C=0 skoci na labelu ako je BIT setovan skoci na labelu ako BIT nije setovan skoci ako je BIT setovan na neku labelu i resetuj taj bit (za interapte) poziv podprograma koji je udaljen max 2^11 lokacija poziv podprograma koji je udaljen max 2^16 lokacija (long call) bezuslovni skok na mem. lok. kada zelimo da preskocimo deo koda, moze biti udaljen -128~127 (short jump) povratak iz podprograma tj. kraj podprograma (return) povratak iz interapt podprograma (pc uzima adresu u trenutku kada je prihvacen zahtev za interapt)

// instrukcije za rad sa bitovima 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 CLR CLR SETB SETB CPL CPL ANL ANL ORL ORL MOV MOV JC JNC JB JNB JBC C; BIT; C; BIT; C; BIT; C, BIT; C, ^BIT; C, BIT; C, ^BIT; C, BIT; BIT, C; REL; REL; BIT, REL; BIT, REL; BIT, REL; CC=0 CLR P1.3 CC=1 SETB P1.7 Ckompl C CPL P3.7 CANL C, P3.7 CANL C, ^P3.7 CORL C, P3.7 CORL C, ^P3.7 CP3.7 P3.7C

JBC P1.4, LABEL

// instrukcije za poziv podprograma i skokove 095 096 097 098 099 ACALL LCALL SJMP RET RETI addr 11 addr 16 REL

100 101 102 103 104

AJMP LJMP JMP JZ JNZ

addr 11 addr 16 @A+DPTR REL REL

105 106 107 108 109 110 111

CJNE CJNE CJNE CJNE NZ NZ NOP

A, DIRECT, REL A, #DATA, REL Rn, #DATA, REL @Ri, #DATA, REL Rn, REL DIRECT, REL

bezuslovni (apsolutni) skok na apsolutnu adresu mem. lok. (11-bitna adresa) long jump na apsolutnu adresu memorijske lokacije (traje vise takt intervala) sadrzaj dptr uvecati za sadrzaj aku. i nova vrednost u dptr i on ukazuje na mem. lok. na koju treba skociti ako zero flag = 1 tj. sadrzaj aku = 0 skoci na na relativnu adresu, -128~127 (jump if zero set) skoci ako zero flag = 0 na relativnu adresu (jump if not zero) uporedi sadrzaj aku. i direktne mem. lok. i ako nisu jednaki skoci na navedenu relativnu adresu (za ispitivanje da li sadrzaj nekog reg. pripada nekom skupu tj. tabeli)

umanji sadrzaj Rn za 1 i ako nije = 0 skoci na labelu tj. relativnu adresu (za formiranje petlje) no operation (trosi procesorsko vreme, 1 interval)

ZADACI IZ ASEMBLERA:
1) Napisati program u asembleru koji proverava da li je ACC veci,manji ili jednak #09H. Ako je manji- R7=0 Ako je jednak- R7=1 Ako je veci- R7=2 Nacrtati algoritam i ispisati kod.

2) Napisati program u asembleru koji puni memorijske lokacije od 0030H brojevima od 00 do 0F. Nacrtati algoritam i ispisati kod.

1) Napisati program koji realizuje treperenje LED-diode. Nacrtati algoritam i ispisati kod.

4) napisati program koji proverava da li je slucajni sadrzaj P1 porta jednak sadrzaju registra R3. Ako jeste kopiraj P1 na memorijsku lokaciju 30H. Nacrtati algoritam i ispisati kod.

5) Napisati program u asembleru koji prebrojava jedinice u R3 i izbrojane jedinice smesta u registar R6. Nacrtati algoritam i spisati kod.

VEBA BROJ 6
VEBANJE U ASEMBLERU
Napisati program u asembleru koji sabira dva broja. ; Program uenik ; Moj prvi asemblerski program ORG 0100H MOV A,#03H MOV R3,#02H SJMP PRG NOP NOP PRG: ADD A,R3 R3 NOP END ; pauza ; kraj programa ; prevesti program od 0100H ; napuniti akomulator sa 03H ; napuniti R3 sa 02H ; bezuslovni skok na PRG ; Ovaj deo koda preskoi ; dodaje akomulatoru sadraj

VEBA BROJ 8
PRIMERI PROGRAMIRANJA U ASEMBLERU
NAPISATI PROGRAM U ASEMBLERU KOJI RADI 4 OSNOVNE RAUNSKE OPERACIJE

= SABIRANJE = Napisati program u asembleru koji izvrava matematiku operaciju sabiranje. ORG 0100H

MOV A,#09H MOV R7,#05H ADD A,R7 END

; punjenje akomulatora heksadec. brojem ; punjenje reg. R7 heksadec. brojem ;dodaje sadraj reg. R7 akomulatoru

= ODUZIMANJE = Napisati program u asembleru koji izvrava matematiku operaciju oduzimanje. ORG 0100H MOV A,#09H heksadec. brojem MOV R7,#05H brojem CLR C oduzimanje SUBB A,R7 END ; punjenje akomulatora ; punjenje reg. R7 heksadec. ; ienje kerija pri ins. ; oduzima sadraj R7 od A

= MNOENJE = Napisati program u asembleru koji izvrava matematiku operaciju deljenje. ORG 0100H MOV A,#09H heksadec. brojem MOV R7,#05H brojem MOV B,R7 reg. MUL A,B END ; punjenje akomulatora ; punjenje reg. R7 heksadec. ; prebacuje sadraj reg. R7 u B ; operacija mnoenje

= DELJENJE = Napisati program u asembleru koji izvrava matematiku operaciju deljenje.

ORG 0100H MOV A,#09H heksadec. brojem MOV R7,#05H brojem MOV B,R7 reg. DIV A,B END

;punjenje akomulatora ; punjenje reg. R7 heksadec. ; prebacuje sadraj reg. R7 u B ; operacija deljenje

Pitanja:
1. emu sluzi instrukcija MOV A,#09H u primeru sabiranje?

2. 3. 4. 5.

emu sluzi instrukcija CLR C u primeru oduzimanje? emu sluzi instrukcija SUBB A,R7 u primeru oduzimanje? emu sluzi instrukcija MUL A,B u primeru mnoenje? emu sluzi instrukcija DIV A,B u primeru deljenje?

VEBA BROJ 9
VEBANJE U ASEMBLERU
1.Puni memorisku lokaciju unutranje RAM memorije. Lokacije poinju od 0025H, a pune se brojevima 091h do 091 + 15H

ORG 0100H MOV A,#91H MOV R0,#25H MOV R4,#0FH LAB:NOP ;pauza MOV @R0,A
koju ukazuje R0

;puni akumulator sa 91H ;puni R0 ;puni R4 ;sadraj A u mem. lok. na ;inkrementira R0 ;inkrementira A ;ako R40 skoi na LAB

INC R0 INC A DJNZ R4,LAB END Pitanja:

1. emu slui instrukcija MOV @R0,A? 2. emu slui instrukcija INC R0? 3. emu slui instrukcija DJNZ R4,LAB?

VEBA BROJ 10
1.Pokazivai po memoriji su registri R0 i R1 (MOV R0,#33H). u memoriji raunara (
K) nalzi se niz od 60 izmerenih taaka. Poetna mem. lok. je #33H. Poslednja mem. lok. je 33+60. merni rezultati imaju gresku. Filtriranje se vri metodom usrednjavanja u 4 take. Uneti broj u mem. lok. Usrednjavanje raditi u 4 take. ORG 0100H MOV R7,#60H ;puni reg R7 sa 60H MOV R0,33H ;puni reg R0 sa 33H MOV A,33H ;puni akumulator sa 33H PET: MOV @R0,A ;sadraj mem lok na koju ukazuje R0 kopira u A INC A ;inkrementira A INC R0 ;inkrementira R0 DEC R7 ;dekrementira R7 DJNZ R7,PET ;umanji R7 za 1 i ako nije 0 skoi na PET MOV R0,47H ;puni reg R0 sa 47H MOV A,@R0 ;sadraj A kopira na mem lok na koju ukazuje sadrz reg R0 ADD A,#7 ;sadrz A dodaje 7 MOV @R0,A ;sadraj mem lok na koju ukazuje R0 kopira u A INC R0 ;inkrementira R0 MOV A,@R0 ;sadraj A kopira na mem lok na koju ukazuje sadrz reg R0 ADD A,#5 ;sadrz A dodaje 5 MOV @R0,A ;sadraj mem lok na koju ukazuje R0 kopira u A MOV R0,5H ;puni reg R0 sa 5H MOV A,@RO ;sadraj A kopira na mem lok na koju ukazuje sadrz reg R0 SUBB A,#7 ;umanjuje sadraj akumulatora za 7 MOV @R0,A ;sadraj mem lok na koju ukazuje R0 kopira u A INC R0 ;inkrementira R0 MOV A,@R0 ;sadraj A kopira na mem lok na koju ukazuje sadrz reg R0 SUBB A,#17 ;umanjuje sadraj akumulatora za 17 MOV @R0,A ;sadraj mem lok na koju ukazuje R0 kopira u A MOV R6,#57 ;puni reg R6 sa 57 MOV R0,#33H ;puni reg R0 sa 33H MOV B,#4 ;puni B sa 4 MOV R1,#33H ;puni reg R1 sa 33H PETLA: MOV A,@R0 ;sadraj A kopira na mem lok na koju ukazuje sadrz reg R0 INC R0 ;inkrementira R0 ADD A,@R0 ;sadraju A dodaje sadr mem lok na koju ukazuje sadrz reg R0 INC R0 ;inkrementira R0 ADD A,@R0 ;sadraju A dodaje sadr mem lok na koju ukazuje sadrz reg R0 INC R0 ;inkrementira R0 ADD A,@R0 ;sadraju A dodaje sadr mem lok na koju ukazuje sadrz reg R0 INC R0 ;inkrementira R0

VEBANJE ZADATAKA U ASEMBLERU

ADD A,@R0 ;sadraju A dodaje sadr mem lok na koju ukazuje sadrz reg R0; CLR C ;isti C DIV A,B ;sadr A deli sa sadr B i rezultat smeta u A MOV @R1,A ;sadraj mem lok na koju ukazuje R1 kopira u A DEC R0 ;dekrementira R0 DEC R0 ;dekrementira R0 DEC R0 ;dekrementira R0 INC R1 ;inkrementira R1 DJNZ R6,PETLA ;umanji R6 za 1 i ako nije 0 skoi na PETLA

Pitanja:
1. emu slui instrukcija MOV @R0,A? 2. emu slui instrukcija DJNZ R7,PET? 3. Zato se instrukcije ADD A, @R0 i INC R0 ponavljaju 4 puta?

VEBA BROJ 11
VEBANJE ZADATAKA U ASEMBLERU
1.Trai najmanji broj u sluajnom nizu brojeva u memorijskim lokacijama(20H 20 + 15H). Napuniti ih sa CF-C0.U R5 smestiti najmanji broj. ;puni R0 sa 20H ;puni A sa CFH ;puni R1 sa 20H ;puni R7 sa 15 ;pocetak podprograma ;puni R0 sa sadr A ;inkrementira R0 ;dekrementira A ;puni R0 sa 20H ;puni R0 sa 20H ; pocetak podprograma ;puni R0 sa 20H ;puni R0 sa 20H ;sadr A dodaje sadr mem lok na koju ukazuje
R0 ;inkrementira R0 ;dekrementira R0 ;pocetak podprograma ;bezuslovni skok na UPITD ;puni R0 sa 20H ;pocetak podprograma ;kraj programa

Pitanja:
1. ta je ponov u programu? 2. ta je upit u programu?

3. ta je petlj u programu? 4. ta je upitd u programu?

VEBA BROJ 12
VEBANJE ZADATAKA U ASEMBLERU

Pitanja:
1. ta je cek u programu?

2. ta je ponov u programu? 3. ta oznaava instrukcija SET R7.6? 4. ta su lab i lab1 u programu?

VEBA BROJ 13
VEBANJE ZADATAKA U ASEMBLERU
K nalazi se niz od 60 izmerenih taaka. Poetna memorijska 1. U memoriji lokacija je 33H. Poslednja je 33H+60. Izmereni rezultati imaju gresku. Izvriti usrednjavanje u 4 take.

ORG 0100H

MOV R7,#58H

;puni R7 sa 58H

MOV B,#04H ;puni B sa 04H MOV R0,#34H ;puni R0 sa 34H PET:NOP ;poetak podprograma PET CLR A ;prazni A DEC RO ;dekrementira R0 ADD A,@R0 ;dodaje akumulatoru sadr. mem. lok. na koju ukazuje sadr. R0 INC R0 ;inkrementira R0 ADD A,@R0 ;dodaje akumulatoru sadr. mem. lok. na koju ukazuje sadr. R0 INC R0 ;inkrementira R0 ADD A,@R0 ;dodaje akumulatoru sadr. mem. lok. na koju ukazuje sadr. R0

INC R0 ADD A,@R0 DEC R0 DEC R0 DIV A,B MOV @R0,A INC R0 DJNZ R7,PET END

;inkrementira R0 ;dodaje akumulatoru sadr. mem. lok. na koju ukazuje sadr. R0 ;dekrementira R0 ;dekrementira R0 ;deli sadr. A sa sadr. B ;puni mem. lok. na koju ukazuje sadr. R0 sa sadr. A ; inkrementira R0 ;umanji R7 za 1 i ako nije 0 skoi PET ;kraj programa

Pitanja:
1. emu slui instrukcija MOV B,#04H? 2. Zato se instrukcije ADD A, @R0 i INC R0 ponavljaju 4 puta? 3. emu slui instrukcija DJNZ R7,PET?

Vous aimerez peut-être aussi