500 likes | 692 Views
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. O vim instrukcijama adresira se isključivo unutrašnji RAM. Instrukcija ADD(zbroji) Postoje 4 načina adresiranja:
E N D
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 R0 i R1 • Adresiranje općih registara (R0-R7)-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 2H (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: Konstanta u obliku binarnog broja Op. Kod za ADD (2H) Op kod koji znači da je direktno adr. Konstante (4H)
Neka je npr konstanta 20H a u ACC se nalazi podatak 10H (prije izvođenja instrukcije) Napiši binarni HEX oblik instrukcije prije i nakon izvođenja instrukcija. Prije izvođenja: A PROGRAM 10H BAJT BAJT
Nakon izvođenja PROGRAM A 30H BAJT 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 Op. Kod za ADD (2H) Op kod koji znači da je direktno adr. Adrese nulte stranice Adresa u obliku binarnog broja
Hexadedadno: • Bajt 2. bajt 25H adresa
Primjer: Neka je npradr 20H a na toj adr je zapisan broj 30H. U acc neka je 10H. Unutarnji RAM Programska mem. A 20H 21H
Nakon izvođenja instrukcije A unutarnji RAM prog. mem 40 30H 25H 20H
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 R0 I R1 U reg R0 i R1 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-R0 0111-R1 Binarno: 0010 0110 ili 26H ako se adresira R0 0010 0111 ili 27H -||- R1
Primjer: Neka je u (A)= 10H (R0)=40H (40H)=50H i imamo instrukciju ADD A, @R0 A unut. RAM progr. Memorija 10H R0 40H 26H 40H 50H Nakon: A unut. RAM progr. Memorija 60H 26H
4. ADRESIRANJE OPĆIH REGISTARA R0-R7 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 2H a donja poprima vrijednost od 1000-1111 Npr. 1000-R0, 1001-R1, … i 1111 za R7
Primjer: Instrukcija ADD A,R0 (A)=10H, (R0)=40H A RAM PROG. MEM. 10H R0 -40H 28H Nakon A 50H
Odredi koji je sadržaj acc A nakon izvođenja instrukcija. Prikaži bin i hex oblik podataka prije i nakon izvođenja instrukcija. • ADD A,#10H (A)=10H • ADD A,#1FH (A)=01H • ADD A,10H (A)=10H, (10H)=20H • ADD A,10H (A)=01H (10H)=1FH • ADD A,@R1 (A)=20H (R1)=10H (10H)=01H • ADD A,R1 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 00H, (A)=00H, koji je broj u A nakon izvođenja instr. 10. ADD A, direct ako je drugi bajt instr 10H, (10H)=00H, (A)=00H Što je u A nakon izvođenja instr.
Odgovori: • 20H • 20H • 30H • 20H • 21H • 30H • 1. bajt 24H 2.bajt 10H • 2H
11.Prije izvođenja (SP)=10H, (A)=00H što je u sp a što u A nakon instr MOV A,SP ADD A,#02H MOV C,A PUSH C
12. (A)=00H, (X)=20H, (SP)=09H 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 0AH Naredba asemb EQU nekom broju pridružuje slovčani simbol STO EQU 64H (vrijednosti broja 64H=10010 pridružujemo simbol STO) DESET EQU 10 (1010=0AH)
SLOVO_A EQU 41H KONST_1 EQU STO Naredba asemblera ORG zadaje na koju adresu u memoriji će biti smješten prvi bajt instrukcije programa. ORG 2000 2000 CLR A 2001, 2002 ADD A,#STO 2003, 2004 ADD A,DESET
2000 1110 0100 E4H • 0010 0100 24H • 0110 0100 64H 2003 0010 0101 25H 2004 0000 1010 0AH
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 2000H CLR A ADD A,#STO ZBROJ: ADD A,DESET Vrijednost koju poprima oznaka zbroj je 2003H Oznake se često koriste kod instrukcija skoka npr JMP ZBROJ
Instrukcije za aritmetičke operacijeAritmetič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 D3 ili 1101 0011 CLR C ili C3 ili 1100 0011
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 30H ;(30H)=172 Y EQU 31H ;(31H)=15 REZ EQU 32H OST EQU 33H ORG 1500H 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 ORL- ILI XRL isključivo ILI CPL negacija
Primjer pretvoriti ascii kod malog slova u kod za veliko slovo SLOVO EQU 30H VELIKO_SLOVO EQU 31H MASKA EQU 11011111B ORG 2000H 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 30H MALO_SLOVO EQU 31H MASKA EQU 00100000B ORG 2000H MOV A,SLOVO ANL A,#MASKA MOV MALO_SLOVO,A
Instrukcije vezane samo za akumulator -CPL A (A) -RR A (rotateright) Svi bitovi se pomiču za jedno mjesto udesno a zadnji prelazi na mjesto prvoga. MOV A,#2CH RR A prije 0010 1100 nakon 00010110
RRC A Rotacija se odvija kroz zastavicu C RL A rotacija u lijevu stranu RLC A C
SWAP A primjer prije 1100 0000 nakon 0000 1100 CLR A