Nacini adresiranja

Report
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 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:
0
0
1
Op. Kod za
ADD (2H)
0
0
1
0
0
Op kod koji znači Konstanta u obliku binarnog broja
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:
PROGRAM
A 10H
24H
20H
1. BAJT
2. BAJT
• Nakon izvođenja
PROGRAM
A
30H
24H
20H
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
0
1
0
1
Op. Kod za Op kod koji znači da je
Adresa u obliku binarnog broja
ADD (2H) direktno adr. Adrese
nulte stranice
Hexadedadno:
1. Bajt
2. bajt
25H
adresa
• Primjer:
Neka je npr adr 20H a na toj adr je zapisan broj
30H. U acc neka je 10H.
Unutarnji RAM
Programska mem.
20H
21H
30H
25H
20H
A
10H
• Nakon izvođenja instrukcije
A
40
unutarnji RAM
30H
prog. mem
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
• (A)(A)+((R0))
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
10H
Nakon
A
50H
RAM
R0 -40H
PROG. MEM.
28H
• 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,#10H (A)=10H
2. ADD A,#1FH (A)=01H
3. ADD A,10H (A)=10H, (10H)=20H
4. ADD A,10H (A)=01H (10H)=1FH
5. ADD A,@R1 (A)=20H (R1)=10H (10H)=01H
6. 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:
1. 20H
2. 20H
3. 30H
4. 20H
5. 21H
6. 30H
7. 1. bajt 24H
8. 2H
2.bajt 10H
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
2001
2002
2003
2004
1110 0100
0010 0100
0110 0100
0010 0101
0000 1010
E4H
24H
64H
25H
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 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 D3 ili 1101 0011
CLR C ili C3 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 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
ORLILI
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)( A)
-RR A (rotate right)
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
A7
A6
C
RL A rotacija u lijevu stranu
RLC A
A0
SWAP A
primjer
prije
nakon
CLR A
1100 0000
0000 1100

similar documents