Nacini adresiranja

download report

Transcript Nacini adresiranja

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 0010 2 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 0 0 1 0 0

Op. Kod za ADD (2H) Op kod koji znači da je direktno adr. Konstante (4H) Konstanta u obliku binarnog broja

• 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 ADD (2H) Op kod koji znači da je direktno adr. Adrese nulte stranice Adresa u obliku binarnog broja

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.

A 20H 21H

30H 25H 10H

20H

• 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 10H unut. RAM R0 40H 40H 50H progr. Memorija 26H Nakon: A 60H unut. RAM progr. Memorija 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=100 10 pridružujemo simbol STO) DESET EQU 10 (10 10 =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 2001, 2002 2003, 2004 CLR A ADD A,#STO 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 ORL XRL CPL ILI isključivo ILI 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 nakon 0010 1100 00010110

RRC A Rotacija se odvija kroz zastavicu C

A0 A7 A6

C RL A rotacija u lijevu stranu RLC A

SWAP A primjer prije nakon CLR A 1100 0000 0000 1100