Naini adresiranja Instrukcije za obavljanje AL operacija su
Načini adresiranja
• Instrukcije za obavljanje A-L operacija su jednoadresne. To znači da se jedan od operanada nalazi u akumulatoru A i rezultat će biti u acc A.
• Ovim instrukcijama adresira se isključivo unutrašnji RAM. • Instrukcija ADD(zbroji) Postoje 4 načina adresiranja: ü Neposredno (direktno) adresiranje konstante ü Direktno adresiranje unutarnjeg RAM-a ü Indirektno adresiranje preko registara R 0 i R 1 ü Adresiranje općih registara (R 0 -R 7)-Rn
• U prva dva načina instrukcija zauzima dva bajta a u 3. i 4. samo jedan bajt. 1. BAJT -OPERACIJSKI KOD za zbrajanje iznosi 00102 ili 2 H (gornja 4 bita prvog bajta) -način adresiranja (donja 4 bita)
Neposredno adresiranje konstante Mnemonički oblik zapisa instrukcije za zbrajanje u kojoj se direktno adresira konstanta koju zbrajamo sa sadržajem ACC i rezultat ostaje u u ACC: ADD A, #konst. (DATA) Binarni zapis instrukcije: 0 0 1 Op. Kod za ADD (2 H) 0 0 1 0 0 Op kod koji znači Konstanta u obliku binarnog broja da je direktno adr. Konstante (4 H)
• Neka je npr konstanta 20 H a u ACC se nalazi podatak 10 H (prije izvođenja instrukcije) Napiši binarni HEX oblik instrukcije prije i nakon izvođenja instrukcija. Prije izvođenja: PROGRAM A 10 H 24 H 20 H 1. BAJT 2. BAJT
• Nakon izvođenja PROGRAM A 30 H 24 H 20 H 1. BAJT 2. BAJT
• 2. DIREKTNO ADRESIRANJE UNUTARNJEG RAM-A U acc se zbraja sadržaj acc i sadržaj sa adrese u instrukciji (NE ADRESA!) ADD A, direct Binarni zapis ove instrukcije je 0 0 1 0 1 Op. Kod za Op kod koji znači da je Adresa u obliku binarnog broja ADD (2 H) direktno adr. Adrese nulte stranice
Hexadedadno: 1. Bajt 2. bajt 25 H adresa
• Primjer: Neka je npr adr 20 H a na toj adr je zapisan broj 30 H. U acc neka je 10 H. Unutarnji RAM Programska mem. 20 H 21 H 30 H 25 H 20 H A 10 H
• Nakon izvođenja instrukcije A 40 unutarnji RAM 30 H prog. mem 25 H 20 H
• Ovim načinom adr se može dohvatiti bilo koji bajt iz nulte stranice unutarnjeg RAM-a pa tako i sadržaj iz bilo kojeg SFR. 3. INDIREKTNO ADR PREKO REGISTAR R 0 I R 1 U reg R 0 i R 1 je zapisana adresa na kojoj se nalazi traženi podatak kojeg zbrajamo sa sadržajem ACC(adresiranje adrese)
• Mnemonički oblik ADD A, @Ri i=0 ili 1 Instrukcija ima samo 1 bajt u kojem je donja četvorka bitova 0110 -R 0 0111 -R 1 Binarno: 0010 0110 ili 26 H ako se adresira R 0 0010 0111 ili 27 H -||R 1
• Primjer: Neka je u (A)= 10 H (R 0)=40 H (40 H)=50 H i imamo instrukciju ADD A, @R 0 A unut. RAM progr. Memorija 10 H R 0 40 H 26 H 40 H 50 H Nakon: A unut. RAM progr. Memorija 60 H 26 H
4. ADRESIRANJE OPĆIH REGISTARA R 0 -R 7 Ovim načinom se direktno adresira jedan od 8 općih registara iz grupe odabrane u PSW-u sa dva bita. Instrukcija ima jedan bajt. Gornja četvorka je ista za ADD 0010 ili 2 H a donja poprima vrijednost od 1000 -1111 Npr. 1000 -R 0, 1001 -R 1, … i 1111 za R 7
• Primjer: Instrukcija ADD A, R 0 (A)=10 H, (R 0)=40 H A 10 H Nakon A 50 H RAM R 0 -40 H PROG. MEM. 28 H
• Odredi koji je sadržaj acc A nakon izvođenja instrukcija. Prikaži bin i hex oblik podataka prije i nakon izvođenja instrukcija. 1. ADD A, #10 H (A)=10 H 2. ADD A, #1 FH (A)=01 H 3. ADD A, 10 H (A)=10 H, (10 H)=20 H 4. ADD A, 10 H (A)=01 H (10 H)=1 FH 5. ADD A, @R 1 (A)=20 H (R 1)=10 H (10 H)=01 H 6. ADD A, R 1 isto kao u prethodnom
7. Koji je drugi bajt instr. u prvom zadatku (binarno i hex) 8. Koliko bajtova imaju instrukcije u 1. , 2. , 3. , 4. , i 5. zad 9. ADD A, #data ako je dugi bajt 00 H, (A)=00 H, koji je broj u A nakon izvođenja instr. 10. ADD A, direct ako je drugi bajt instr 10 H, (10 H)=00 H, (A)=00 H Što je u A nakon izvođenja instr.
• Odgovori: 1. 20 H 2. 20 H 3. 30 H 4. 20 H 5. 21 H 6. 30 H 7. 1. bajt 24 H 8. 2 H 2. bajt 10 H
11. Prije izvođenja (SP)=10 H, (A)=00 H što je u sp a što u A nakon instr MOV A, SP ADD A, #02 H MOV C, A PUSH C
12. (A)=00 H, (X)=20 H, (SP)=09 H ADD A, X ADD A, #10 PUSH A ADD A, SP
Simbolički oblik adresa Asembler dopušta pisanje adresa u simb. Obliku. Postoje tablice u kojima se automatski prevode te adr u binarni oblik. Tako npr umjesto adrese specijalnih reg pišemo simbole kao: A ili ACC za akumulator A, B umjesto adrese B reg SP kazalo stoga
Ispred hex brojeva koji počinju znamenkama A-F potrebno je staviti 0 ispred (da se ne bi razumjeli kao neki slovčani simboli) npr. AH treba napisati kao 0 AH Naredba asemb EQU nekom broju pridružuje slovčani simbol STO EQU 64 H (vrijednosti broja 64 H=10010 pridružujemo simbol STO) DESET EQU 10 (1010=0 AH)
SLOVO_A EQU 41 H KONST_1 EQU STO Naredba asemblera ORG zadaje na koju adresu u memoriji će biti smješten prvi bajt instrukcije programa. ORG 2000 CLR A 2001, 2002 ADD A, #STO 2003, 2004 ADD A, DESET
2000 2001 2002 2003 2004 1110 0100 0010 0100 0110 0100 0010 0101 0000 1010 E 4 H 24 H 64 H 25 H 0 AH
• Oznake ili labele Olakšavaju razumijevanje napisanog programa. Pišu se ispred instrukcije i iza se stavlja dvotočka. Asembler ih pretvara u vrijednost koja je jednaka adresi na kojoj se nalaze.
Npr. ORG 2000 H CLR A ADD A, #STO ZBROJ: ADD A, DESET Vrijednost koju poprima oznaka zbroj je 2003 H Oznake se često koriste kod instrukcija skoka npr JMP ZBROJ
Instrukcije za aritmetičke operacije Aritmetičke instrukcije procesora Intel 8051 mogu se podijeliti na sljedeće podskupine:
Instrukcije za zbrajanje i oduzimane (ADD, ADDC, SUBB) Instrukcije za množenje i dijeljenje (MUL, DIV) Instrukcije za uvećanje i umanjenje sadržaja za jedan (INC, DEC) Instrukcije za podešavanje sadržaja nakon zbrajanja pakiranih BCD brojeva (DA)
• Postoje i instrukcije koje se odnose na zastavicu C (SETB C, CLR C) SETB C ili D 3 ili 1101 0011 CLR C ili C 3 ili 1100 0011
• Dijeljenje
Broj spremljen u A se dijeli brojem spremljenim u B. Rezultat ide u A a ostatak u B. Zastavica OV postavit će se u 1 ako je prije dijeljenja u B nula. Primjer:
X EQU 30 H ; (30 H)=172 Y EQU 31 H ; (31 H)=15 REZ EQU 32 H OST EQU 33 H ORG 1500 H MOV A, X MOV B, Y DIV AB MOV REZ, A MOV OST, B
• Instrukcije INC i DEC INC A (A)<-(A)+1 INC direct (dir)<-(dir)+1 INC @Ri INC Rn INC DPTR (DPTR)+1 isto za DEC…
• Instrukcije za logičke operacije ANL-logičko I ORLILI XRL isključivo ILI CPL negacija
• Primjer pretvoriti ascii kod malog slova u kod za veliko slovo SLOVO EQU 30 H VELIKO_SLOVO EQU 31 H MASKA EQU 11011111 B ORG 2000 H MOV A, SLOVO ANL A, #MASKA MOV VELIKO_SLOVO, A
Primjer : Uporabom ili operacije može se ascii kod velikog slova pretvoriti u kod malog slova SLOVO EQU 30 H MALO_SLOVO EQU 31 H MASKA EQU 00100000 B ORG 2000 H MOV A, SLOVO ANL A, #MASKA MOV MALO_SLOVO, A
• Instrukcije vezane samo za akumulator -CPL A (A) -RR A (rotate right) Svi bitovi se pomiču za jedno mjesto udesno a zadnji prelazi na mjesto prvoga. MOV A, #2 CH RR A prije 0010 1100 nakon 00010110
RRC A Rotacija se odvija kroz zastavicu C A 7 A 6 C RL A rotacija u lijevu stranu RLC A A 0
SWAP A primjer prije nakon CLR A 1100 0000 1100
- Slides: 49