5/24/2018 Microprocesoare,capitol 2
1/22
SETUL DE INSTRUCIUNI
24
2. SETUL DE INSTRUCIUNI
Cuprins
Introducere
Obiective
2.1 FORMATUL INSTRUCIUNILOR
2.1.1 Instruciuni pe octet
2.1.2 Instruciuni pe bit
2.1.3 Instruciuni cu constante
2.1.4 Instruciuni de control
2.2 CLASIFICAREA INSTRUCIUNILOR N FUNCIE DE
OPERAIILE REALIZATE
2.2.1 Instruciuni matematice pe octet
2.2.2 Instruciuni logice pe octet
2.2.3 Instruciuni matematice i logice cu constante
2.2.4 Instruciuni logice pe bit
2.2.5 Instruciuni de comparaie pe bit
2.2.6 Instruciuni de comparaie pe octet
2.2.7 Instruciuni de mutare
2.2.8 Instruciuni de control
2.2.9 Alte instruciuni
Concluzii
ntrebri de autoevaluareTermeni eseniali
5/24/2018 Microprocesoare,capitol 2
2/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
25
Introducere
Un program const dintr-o serie de instruciuni scrise ntr-o anumit
ordine n vederea realizrii unor sarcini. Instruciunile disponibile pentru
acest lucru sunt n strns legturcu arhitectura microcontrolerului, iar
un dezvoltator de microsisteme ncorporate trebuie s fie foarte bine
familiarizat att cu arhitectura software ct i cu cea hardware, mai alesdacva scrie programele sale n limbaj de asamblare.
Acest capitol cuprinde prezentarea instruciunilor disponible pentru
microcontrolerul PIC18F4455, precum i modul n care acestea sunt
reprezentate n memoria program.
Obiective
Dupparcurgerea acestui capitol cursantul va trebui:
- s cunoasc instruciunile disponibile pentru microcontrolerulPIC18F4455;
- s cunoasc modul n care sunt codificate instruciunile n
memoria program;
- scunoascrolul pe care l au parametrii instruciunilor;
- s utilizeze n mod adecvat instruciunile pentru implementarea
operaiilor necesare diferitelor programe.
2.1 FORMATUL INSTRUCIUNILOR
Scrierea unui program se poate asemna, ntr-o oarecare msur, cu ridicarea unei
case. Avnd la dispoziie o serie de materiale de costrucii, constructorul le asambleaz pe
acestea ntr-o anumit ordine pentru a obine produsul finit. Etapele necesare construciei:
sparea fundaiei, zidirea, tencuirea etc. pot fi asociate instruciunilor implementate de UCP,
iar materialele i echipamentele de construcii necesare: crmizi, mortar, ciment etc.
reprezintdatele cu care lucreazinstruciunile.
n conformitate cu arhitectura de tip RISC pe care este bazat, microcontrolerul
PIC18F4455 implementez un set redus de instruciuni standard, format din 75 de
instruciuni, care este completat cu 8 instruciuni opionale care formeazsetul extins.[15]
Din setul standard de instruciuni, majoritatea (71) au lungimea de un cuvnt (16 bii),
dar exist i 4 instruciuni avnd lungimea de dou cuvinte (32 bii). Pentru reprezentarea
acestor instruciuni n memoria program sunt necesari 16, respectiv 32 de bii, adic 2,
respectiv 4 locaii de memorie consecutive. Instruciunile lungi au fost introduse pentru a
5/24/2018 Microprocesoare,capitol 2
3/22
SETUL DE INSTRUCIUNI
26
putea stoca toat informaia necesar execuiei operaiilor pe care le implementeaz (ex.
instruciunea MOVFF utilizeaz ca operanzi dou adrese absolute din memorie reprezentate
fiecare pe cte 12 bii).
n esen majoritatea instruciunilor utilizeaz date stocate n memorie. n aceste
condiii, o instruciune trebuie saibposibilitatea de a informa UCP despre tipul operaieipe care o implementeaz, respectiv despre locul unde se gsesc datele cu care aceast
instruciune opereaz. Astfel, o instruciune va codifica binar urmtoarele informaii:
- codul operaiei
- unul sau mai muli operanzi (adres, constant, bit de destinaie, bit de acces)
Existi cteva excepii de la aceastregulcum ar fi, de exemplu, instruciunea NOP
(No OPeration), care consumtimpul procesorului fra realiza nso operaie.
Pentru acest microcontroler au fost definite mai multe formate de instruciuni.Lungimea cmpului corespunztor codului operaiei variaz n funcie de tipul instruciunii,
permind astfel o utilizare mai eficienta lungimii instruciunii.
Setul de instruciuni al microcontrolerului PIC18F4455 poate fi mprit n patru
categorii de baz:
- Instruciuni pe octet
- Instruciuni pe bit
- Instruciuni cu constante (literali)
- Instruciuni de control
2.1.1 Instruciuni pe octet
Majoritatea instruciunilor orientate pe octet au trei operanzi:
1. Registrul (specificat prin operandul f)
2. Destinaia rezultatului (specificatprin operandul d)
3. Zona de memorie accesat(specificatprin operandul a)
n instruciunile pe octet, operandul fspecificregistrul care urmeaza fi folosit de
instruciune. Registrul fpoate fi specificat fie prin numele su simbolic (dac are) fie prin
adresa sa de 8 bii.
Operandul d, denumit i bit de destinaie al rezultatului, specific locul n care va fi
plasat rezultatul operaiei realizate de instruciune. Dacd=0 (d=W)rezultatul operaiei va
fi plasat n registrul de lucru WREG. Dac d=1 (d=F) rezultatul operaiei va nlocuiconinutul registrului fspecificat n instruciune.
5/24/2018 Microprocesoare,capitol 2
4/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
27
Operandul a, denumit i bit de acces, specificmodul de acces la registrul f. Dac
a=0 (a=ACCESS)atunci registrul fse gsete n Access Bank. Daca=1 (a=BANKED)
atunci registrul f se gsete n Bank-uri, iar pentru a-l accesa se utilizeaz registrul BSR.
Asupra modului de acces se va reveni n capitolul 3.
n Fig. 2.1 se prezintformatul instruciunilor pe octet. Acest format reprezintmoduln care acest tip de instruciuni sunt codificate binar n memoria program a
microcontrolerului. Se poate observa c pentru codul instruciunii sunt alocai 6 bii (biii
), pentru adresa registrului fsunt alocai 8 bii (biii ), rmnnd 2 bii necesari
pentru operanzii d(bitul 9), respectiv a(bitul 8).
15 10 9 8 7 0
Cod operaie d a f(adresa registrului)Fig. 2.1.Formatul general al instruciunilor orientate pe octet
n program, aceste instruciuni vor fi scrise sub forma prezentatn Tabelul 2.1. Tot n
acest tabel se pune n eviden i cazul unor instruciuni care opereaz cu octei, dar care
utilizeazdoar douargumente
Tabel 2.1. Formatul general al instruciunilor orientate pe octet
Format instruciuni orientate pe octet Exemplu de utilizarecod_operaie f,d,acod_operaie f,a
f=adresa pe 8 bii a registruluid=0 (d=W)destinaia rezultatului este registrul de lucru WREGd=1 (d=F)destinaia rezultatului este registrul fa=0 (a=ACCESS)registrul fse gsete n Access Banka=1 (a=BANKED)registrul fse gsete n Bank-uri
Excepie: MOVFF fs,fdfs=adresa pe 12 bii a registrului surs
fd=adresa pe 12 bii a registrului destinaie
ADDWF REG1, W, BANKEDCLRF 0x01, ACCESS
MOVFF REG_s, REG_d
Excepie de la modul de reprezentare din Fig. 2.1 face instruciunea de mutare a unui
octet de la o adressursla o adresdestinaie (MOVFF). Aceastinstruciune face parte din
categoria instruciunilor lungi i necesit32 de bii pentru reprezentare. Formatul general al
acestei instruciuni se prezintn Fig. 2.2.
15 12 11 0
Cod operaie fs(adresa registrului surs)
15 12 11 01 1 1 1 fd(adresa registrului destinaie)
Fig. 2.2.Formatul general al instruciunilor de mutare octet MOVFF
5/24/2018 Microprocesoare,capitol 2
5/22
SETUL DE INSTRUCIUNI
28
n cazul instruciunii MOVFF, prezentatmai sus, cmpurile alocate adreselor sursi
destinaie au dimensiunea de 12 bii. Astfel, aceastinstruciune permite utilizarea adreselor
absoulute n realizarea operaiei de mutare a unui octet ntre cele dou locaii de memorie.
Pentru codul operaiei sunt rezervai 4 bii (biii din cuvntul superior), iar cei 4 bii
rmai neutilizai sunt ntotdeauna 1 (biii din cuvntul inferior).
2.1.2 Instruciuni pe bit
Toate instruciunile orientate pe bit au trei operanzi:
1. Registrul (specificat prin operandul f)
2. Bitul din registru (specificat prin operandulb)
3. Zona de memorie accesat(specificatprin operandul a)
n aceste instruciuni, operandul b, format din trei bii, are rolul de a specifica poziia
bitului n cadrul registrului fcare este afectat de operaia realizatde instruciune. Operandul
fconine adresa de opt bii a registrului din memorie implicat n instruciune, iar operandul a,
zona de memorie n care se gsete registrul accesat.
n Fig 2.3 se prezint modul de reprezentare al instruciunilor pe bit n memoria
program, iar n Tabelul 2.2 se prezintformatul general al acestor instruciuni i un exemplu
de utilizare.
15 12 11 9 8 7 0
Cod operaie b (poziie bit) a f(adresa registrului)Fig. 2.3.Formatul general al instruciunilor orientate pe bit
Tabel 2.2.Formatul general al instruciunilor orientate pe bit
Format instruciuni orientate pe bit Exemplu de utilizarecod_operaie f,b,a
f=adresa pe 8 bii a registruluib=poziia bitului (0:7) n cadrul registrului fa=0 (a=ACCESS)registrul fse gsete n Access Banka=1 (a=BANKED)registrul fse gsete n Bank-uri
BSF REG, 4, ACCESS
2.1.3 Instruciuni cu constante (literali)
Instruciunile cu constante utilizeazun singur operand k. Acesta are rezervai cei opt
bii inferiori ai instruciunii i reprezintvaloarea unei constante, denumiti literal. Modul
de reprezentare al acestor instruciuni n memoria program se prezintn Fig. 2.4.
5/24/2018 Microprocesoare,capitol 2
6/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
29
15 8 7 0
Cod operaie k(constant)Fig. 2.4. Formatul general al instruciunilor orientate pe bit
Excepia de la acest mod de reprezentare o constituie instruciunea LFSR, care este o
instruciune lungi care va ncrca o constantde 12 bii n unul din cei trei regitrii specialiFSR.
Tabelul 2.3 pune n evidenmodul de utilizare al acestor instruciuni n program.
Tabel 2.3. Formatul general al instruciunilor cu constante
Format instruciuni cu constante Exemplu de utilizarecod_operaie k
k=valoarea efectivpe 8 bii
Excepie: LFSR f,kf=registrul FSR utilizatk=adresa pe 12 bii
MOVLW d23
LFSR FSR0, h100
2.1.4 Instruciuni de control
n funcie de tipul operaiei implementate, instruciunile de control pot utiliza
urmtorii operanzi:
- o adresdin memoria program / etichet(specificatprin operandul n)
- utilizarea stivei rapide n cazul instruciunilor CALL, RETURNi RETFIE(specificat
prin operandul s)
- froperand
Aceste instruciuni au rolul de a controla execuia programului prin implementarea de
bucle, salturi, apeluri de subrutina etc. Operandul n, specific o adresa de salt n memoria
program. n urma apelului acestor instruciuni se va modifica valoarea stocatn numrtorul
de program, lucru care va conduce la realizarea efectiv a saltului. Aceast adres de salt
corespunde etichetelor care se introduc n codul surs pentru a marca adresa de nceput a
anumitor seciuni de cod.
n funcie de tipul operaiei realizate, pentru instruciunile de control sunt definite mai
multe moduri de reprezentare, prezentate succint n Tabelul 2.4, dar asupra crora nu se va
insista n acest capitol. Totui, cu scop informativ, n Fig. 2.5 se prezintformatul instruciunii
de control GOTOcare permite realizarea de salturi n ntreg spaiul de adresare al memoriei
program.
5/24/2018 Microprocesoare,capitol 2
7/22
SETUL DE INSTRUCIUNI
30
15 8 7 0
Cod operaie n (adresdin memoria program)15 12 11 01 1 1 1 n(adresdin memoria program)
Fig. 2.5.Formatul general al unei instruciuni de control
Tabel 2.4. Formatul general al instruciunilor de control
Format instruciuni de control Exemplu de utilizarecod_operaie ncod_operaie n,{s}cod_operaie scod_operaie
n=etichet(adresdin memoria program)s= utilizare stivrapid
Excepie: RETLW kk=constantpe 8 bii
GOTO main_loopCALL rutinaRETURN FASTNOP
RETLW 0x15
2.2 CLASIFICAREA INSTRUCIUNILOR N FUNCIE DE OPERAIILE
REALIZATE
Pentru o mai bun nelegere i pentru identificarea facil a instruciunilor necesare
implementrii diferitelor programe, acest paragraf conine o clasificare a instruciunilor
disponibile n funcie de operaiile realizate.
2.2.1 Instruciuni matematice pe octet
n acestcategorie s-au considerat instruciunile care realizeaz operaii matematice
elementare asupra datelor cu dimensiunea de opt bii. Operaiile realizate sunt: adunarea,
scderea, incrementarea, decremenetarea i nmulirea.
Exemplu
Se analizeazcazul instruciunii cu forma general:
ADDWF f, d, a
Aceast instruciune adun coninutul registrului de lucru WREG cu
coninutul registrului a crui adreseste specificatprin parametrul f. Dac
bitul de destinaie al rezultatului va fi d=0 (d=W), rezultatul obinut n
urma operaiei va fi depus n registrul de lucru WREG. Dac bitul de
destinaie al rezultatului va fi d=1 (d=F), rezultatul obinut n urma
operaiei va fi stocat n registrul f, nlocuind astfel operandul care se gsea
5/24/2018 Microprocesoare,capitol 2
8/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
31
acolo. Cele dousituaii posibile sunt puse n evidenn Fig. 2.6.
Parametrul a intervine n modul de formare al adresei f. Asupra acestui
parametru se va reveni n capitolul 3. n exemplele care vor urma acest
parametru se considerca avnd valoarea a=0.
Fig. 2.6.Selectarea destinaiei rezultatului pentru instruciunea ADDWF
n continuare se va analiza exemplul prezentat n Fig. 2.6. Se considerc
naintea execuiei instruciunii n registrul de lucru WREG se gsete
valoarea b00101001=h29=d41, iar n registrul de la adresa
0x02Cse gsete valoarea b01100111=h67=d103.
n cazul a., n urma realizrii operaiei:
ADDWF 0x2C, W, 0
rezultatul obinut b10010000=h90=d144 va fi stocat n
registrul de lucru WREG, nlocuind operandul 1.
5/24/2018 Microprocesoare,capitol 2
9/22
SETUL DE INSTRUCIUNI
32
n cazul b.:
ADDWF 0x2C, F, 0
se produce acelai rezultat, dar acesta va fi stocat n memorie la adresa
0x02C, nlocuind operandul 2.
Dup cum se poate vedea i din figur, operaiile realizate pot influena istarea biilor indicatori din registrul STATUS. Bineneles, pentru valorile
alese ale operanzilor, registrul STATUSnu este influenat n urma execuiei
instruciunii.
n aceeai categorie a instruciunilor matematice pe octet se regsesc i instruciunile
din Tabelul 2.5.
Tabel 2.5. Instruciuni matematice pe octetInstruciuni Descriere Cicluri instr.
ADDWF f,d,a AdunWREGcu f 1ADDWFC f,d,a AdunWREGcu fi cu bitul de transport 1SUBWF f,d,a Scade WREGdin f 1SUBWFB f,d,a Scade fdin WREGcu bitul de mprunut 1SUBFWB f,d,a Scade WREGdin fcu bitul de mprumut 1INCF f,d,a Incrementeazf 1DECF f,d,a Decrementeazf 1MULWF f,a nmulete fcu WREG1 1NEGF f,a Negare f 1
2.2.2 Instruciuni logice pe octet
n acestcategorie s-au considerat instruciunile care realizeazoperaii logice asupra
datelor cu dimensiunea de opt bii. Printre operaiile realizate se pot aminti: I logic, SAU
logic, SAU-EXCLUSIV, Complement, rotire de bii etc.
Tabelul 2.6 cuprinde instruciunile care se ncadreaz n categoria instruciunilorlogice pe octet.
O analizcomparativ ntre instruciunile din aceastcategorie i cele din categoria
instruciunilor matematice pe octet pune n evidenfaptul cparametrii acestor instruciuni
(f,d,a) sunt aceeai i ndeplinesc acelai rol. Se pot identifica totui cteva instruciuni, a
cror nelegere poate ridica mici probleme. Este vorba despre instruciunile de rotire, la
stnga sau la dreapta, cu sau fr bit de transport (en. Carry). Aceste instruciuni vor fi
analizate n exemplul urmtor.
1rezultatul acestei operaii se va regsi n regitrii PRODH:PRODL
5/24/2018 Microprocesoare,capitol 2
10/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
33
Tabel 2.6. Instruciuni logice pe octet
Instruciuni Descriere Cicluri instr.ANDWF f,d,a I logic ntre WREGi f 1IORWF f,d,a SAU logic ntre WREGi f 1XORWF f,d,a SAU-EXCLUSIV ntre WREGi f 1
COMF f,d,a Complement f 1CLRF f,a Resetare bii din registrul f 1SETF f,a Setare bii din registrul f 1SWAPF f,d,a Interschimbare semioctei din registrul f 1RLCF f,d,a Rotire fla stnga cu bit de transport 1RLNCF f,d,a Rotire fla stnga frbit de transport 1RRCF f,d,a Rotire fla dreapta cu bit de transport 1RRNCF f,d,a Rotire fla dreapta frbit de transport 1
Exemplu
Se analizeazcazul instruciunii cu forma general:
RLCF f, d, a
Aceast instruciune realizeaz rotirea spre stnga cu bit de transport a
coninutului de la adresa specificatprin parametrul f. Rezultatul obinut
va fi stocat n registrul f sau n registrul de lucru WREG, n funcie de
starea bitului de destinaie al rezultatului d.
Rotirea spre stnga cu bit de transport este evideniatn Fig. 2.7. Bitul de
transport (en. Carry) este un bit al registrului STATUS.
Fig. 2.7.Rotirea spre stnga cu bit de transport RLCF
Modul de utilizare al instruciunii de rotire cu bit de transport este
evideniat n continuare:
RLCF REG, W, 0
naintea instruciunii:REG = 11100110C = 0
Dupinstruciune:REG = 11100110WREG = 11001100C = 1
5/24/2018 Microprocesoare,capitol 2
11/22
SETUL DE INSTRUCIUNI
34
Exemplu
Se analizeazcazul instruciunii cu forma general:
RLNCF f, d, a
Aceast instruciune realizeaz rotirea spre stnga frbit de transport a
coninutului de la adresa specificatprin parametrul f. Rezultatul obinut
va fi stocat n registrul f sau n registrul de lucru WREG, n funcie destarea bitului de destinaie al rezultatului d.
Rotirea spre stnga frbit de transport este evideniatn Fig. 2.8.
Fig. 2.8.Rotirea spre stnga cu bit de transport RLNCF
Modul de utilizare al instruciunii de rotire fr bit de transport este
evideniat n continuare:
RLCF REG, W, 0
naintea instruciunii:REG = 11100110
C = 0
Dupinstruciune:
REG = 11100110WREG = 11001101C = 1
n cele douexemple prezentate anterior, parametrul f al instruciunii este specificat
prin intermediul unei nume simbolic care nlocuiete adresa fizica registrului. Acest nume
simbolic trebuie declarat anterior utilizrii. Mai multe detalii despre numele simbolice vor fi
prezentate n capitolul 4.
Rotirile spre dreapta, implementate de instruciunile RRCFi RRNCF, se realizeaznmod asemntor.
5/24/2018 Microprocesoare,capitol 2
12/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
35
2.2.3 Instruciuni matematice i logice cu constante
Aceste instruciuni au fost grupate ntr-o singurcategorie deoarece respectacelai
format i acelai principiu de funcionare, dupcum se poate vedea din Tabelul 2.7, dar i n
exemplul considerat.
Tabel 2.7. Instruciuni matematice i logice cu constante
Instruciuni Descriere Cicluri instr.ADDLW k AdunWREGcu literal 1SUBLW k Scade WREGdin literal 1MULLW k nmulete WREGcu literal 1ANDLW k I logic ntre WREGi literal 1IORLW k SAU logic ntre WREGi literal 1
XORLW k SAU-EXCLUSIV ntre WREGi literal 1
Cu excepia instruciunii de nmulire MULLW, toate instruciunile din aceast
categorie vor avea unul dintre operanzi n registrul de lucru WREG, cel de-al doilea operand va
fi constanta k, iar rezultatul obinut n urma operaiei va fi stocat n registrul de lucru.
Instruciunea de nmulire cu o constantMULLW, la fel ca i cealaltinstruciune de
nmulire MULWF, amintit n categoria instruciunilor matematice pe octet, va depune
ntotdeauna rezultatul n doi regitri speciali PRODH:PRODL. Acest lucru se datoreazfaptului cnmulirea a douvalori reprezentate pe opt bii poate conduce la un rezultat cu o
dimensiune mai mare de opt bii, care nu poate fi stocat nici n registrul de lucru WREG, nici n
registrul f. (10 x 30 = 300. 300 este o valoare care se reprezintpe 9 bii)
Exemplu
Se analizeazcazul instruciunii cu forma general:
ANDLW k
Aceastinstruciune realizeazoperaia logicI ntre coninutul registrul
de lucru i constanta de 8 bii k. Rezultatul obinut va fi stocat n registrul
de lucru WREG.
Modul de utilizare al acestei instruciuni este evideniat n continuare:
ANDLW 0x0F
naintea instruciunii:WREG = 11100110
Dupinstruciune:WREG = 00000110
5/24/2018 Microprocesoare,capitol 2
13/22
SETUL DE INSTRUCIUNI
36
2.2.4 Instruciuni logice pe bit
n aceastcategorie au fost grupate instruciunile care manipuleazstarea unui singur
bit prin realizarea unor operaii de setare, resetare sau negare a strii (en. toggle). De altfel,
aceast categorie cuprinde doar trei instruciuni cu format asemntor care implementeazcele trei operaii amintite anterior. Tabelul 2.8 centralizeazaceste instruciuni.
Tabel 2.8. Instruciuni logice pe bit
Instruciuni Descriere Cicluri instr.BCF f,b,a Reseteazbitul bdin registrul f 1BSF f,b,a Seteazbitul bdin registrul f 1BTG f,b,a Neagstarea bitului bdin registrul f 1
Pentru a exemplifica modul de utilizare al acestor instruciuni se considerurmtorul
exemplu.
Exemplu
Se analizeazcazul instruciunii cu forma general:
BCF f, b, a
Aceastinstruciune realizeazoperaia de resetare, sau punere pe 0 logic,
a bitului de pe poziia b din registrul a crui adres se sprecific prin
parametrul fal instruciunii. Rezultatul obinut n urma acestei operaii se
va regsi ntotdeauna n registrul f.
Avnd n vedere cregitrii microcontrolerului sunt de 8 bii, parametrul
bal acestor instruciuni va avea ntotdeauna o valoare cuprinsntre 0 i
7, unde 0 identificbitul cel mai puin semnificativ, iar 7 identificbitul
cel mai semnificativ al unui octet.
Modul de utilizare al acestei instruciuni este evideniat n continuare:
BCF REG, 2, 0
naintea instruciunii:REG = 11100110
Dupinstruciune:REG = 11100010
5/24/2018 Microprocesoare,capitol 2
14/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
37
2.2.5 Instruciuni de comparaie pe bit
O categorie aparte de instruciuni sunt instruciunile de comparaie, deoarece acestea
permit implementarea ramificaiilor de tip ifn programele realizate n limbaj de asamblare.
Instruciunile de comparaie pe bit sunt doar dou la numr i permit testarea strii unuianumit bit dintr-un registru. n Tabelul 2.9 sunt menionate cele douinstruciuni.
Tabel 2.9. Instruciuni de comparaie pe bit
Instruciuni Descriere Cicluri instr.BTFSC f,b,a Testeazbitul bdin reg. f, salt daceste 0 1 (2 sau 3)BTFSS f,b,a Testeazbitul bdin reg. f, salt daceste 1 1 (2 sau 3)
Exemplu
Se analizeazcazul instruciunii cu forma general:BTFSC f, b, a
Aceast instruciune compar dac bitul de pe poziia b din cadrul
registrului f este 0. Dac bitul este 0 se face salt peste instruciunea
urmtoare. Fig. 2.9 curpinde o diagram care prezint principiul de
funcionare al acestei instruciuni.
Fig. 2.9.Principiul de funcionare al instruciunii BTFSC
n cazul prezentat n Fig. 2.9, avnd n vedere c n registrul cu numele
simbolic REG se gsete valoarea 01011001, care are bitul 3 setat,
instruciunea care se va executa dupa BTFSCva fi instruciunea 1.
5/24/2018 Microprocesoare,capitol 2
15/22
SETUL DE INSTRUCIUNI
38
2.2.6 Instruciuni de comparaie pe octet
Instruciunile de comparaie pe octet pot fi grupate n dousub-categorii: instruciuni
cu doi parametri, care realizeaz doar o comparaie urmat sau nu de un salt, respectiv
instruciuni cu trei parametri care mai realizeaz n plus o operaie de incrementare saudecrementare. n funcie de specificul lor aceste instruciuni vor fi utilizate fie la
implementarea unor ramificaii de tip if, fie la implementarea unor bucle iterative de tip
for.
Pentru a evidenia principiul de funcionare al instruciunilor din cele dou sub-
categorii se va considera cte un exemplu semnificativ pentru ambele formate de instruciuni.
Exemplu
Se analizeazcazul instruciunii cu forma general:CPFSEQ f, a
Aceastinstruciune comparconinutul registrului fcu cel al registrului
de lucru WREG. Dac cele dou sunt identice se face salt peste
instruciunea urmtoare. n Fig. 2.10 se prezintprincipiul de funcionare
al acestei instruciuni.
Fig. 2.10. Principiul de funcionare al instruciunii CPFSEQ
Exemplu
Se analizeazcazul instruciunii cu forma general:
DECFSZ f, d, a
Aceast instruciune realizeaz o decrementare a valorii stocate n
registrul f, iar dac rezultatul obinut n urma decrementrii este 0 se
excutun salt peste instruciunea urmtoare. Prezena parametrului d n
codul instruciunii indicfaptul crezultatul decrementrii poate fi stocat
fie n registrul de lucru WREG, fie la adresa specificatprinf.
5/24/2018 Microprocesoare,capitol 2
16/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
39
n Fig. 2.11 se prezintprincipiul de funcionare al acestei instruciuni.
Fig. 2.11. Principiul de funcionare al instruciunii DECFSZ
Instruciunea DECFSZ, prezentat anterior poate fi utilizat cu uurin pentru
realizarea unor bucle de tip for. Exemplul urmtor consider o seciune de cod care
realizeazacest lucru.
Exemplu
Se consider cazul implementrii unei bucle de tip for care permite
execuia unei instruciuni oarecare de o sutde ori.
Se pornete de la premisa conform creia registrul REG, utilizat pe post de
iterator, este n prealabil iniializat cu valoarea 100. n aceste condiii
secvena urmtoare de cod permite execuia instruciunii CLRF de o sut
de ori.
Bucla_forCLRF 0x00, 0
DECFSZ REG, F, 0GOTO Bucla_for
Instruciunile de comparaie pe octet sunt centralizate n Tabelul 2.10.
5/24/2018 Microprocesoare,capitol 2
17/22
SETUL DE INSTRUCIUNI
40
Tabel 2.10. Instruciuni de comparaie pe octet
Instruciuni Descriere Cicluri instr.CPFSEQ f,a Comparfcu WREG, salt dacf=WREG 1 (2 sau 3)CPFSGT f,a Comparfcu WREG, salt dacf>WREG 1 (2 sau 3)CPFSLT f,a Comparfcu WREG, salt dacf
5/24/2018 Microprocesoare,capitol 2
18/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
41
2.2.8 Instruciuni de control
Majoritatea instruciunilor din aceast categorie controleaz modul de execuie al
programului ca urmare a modificrii valorii numrtorului de program, prin realizarea de
salturi condiionate sau necondiionate, apeluri de subrutin, revenire din subrutin etc.Tabelul 2.12 cuprinde lista acestor instruciuni.
Tabel 2.11. Instruciuni de control
Instruciuni Descriere Cicluri instr.BC n Salt dacbitul de transport (carry) este 1 1 (2)BN n Salt dacbitul negativ este 1 1 (2)BOV n Salt dacbitul de depire (overflow) este 1 1 (2)BZ n Salt dacbitul zero este 1 1 (2)BNC n Salt dacbitul de transport (carry) este 0 1 (2)BNN n Salt dacbitul negativ este 0 1 (2)BNOV n Salt dacbitul de depire (overflow) este 0 1 (2)BNZ n Salt dacbitul zero este 0 1 (2)BRA n Salt necondiionat 2GOTO n Salt la adresa / etichet 2PUSH Pune n stiv(SalveazPCn stiv) 1POP Scoate din stiv(Reface PC) 1CALL n,s Apel de subrutin 2RETURN s Revenire din subrutin 2
RETLW k Revenire din subrutincu literal n WREG 2RETFIE s Revenire din rutina de tratare a ntreruperii 2NOP Nici o operaie 1
Instruciunile de salt condiionat (BC, BN, BNC, BNN, BNOV, BNZ, BOV,
BZ) realizeaz saltul la o instruciune destinaie marcat printr-o etichet dac rezultatul
operaiilor anterioare ndeplinete anumite criterii care pot fi verificate prin intermediul biilor
indicatori din registrul STATUS.
Instruciunile de salt necondiionat vor realiza saltul prin modificarea directa valoriinumrtorului program. Astfel, instruciunea BRA realizeaz un salt la o instruciune
destinaie prin adaugarea unui offset la adresa curent stocat de numrtorul program, iar
instruciunea GOTO realizeaz saltul direct la orice adres din spaiul de memorie al
programului. n consecin, instruciunea BRA realizeaz un salt relativ, iar instruciunea
GOTOrealizeazun salt absolut n memoria program.
Modul de execuie al celor douinstruciuni se prezintn Fig. 2.12.
5/24/2018 Microprocesoare,capitol 2
19/22
SETUL DE INSTRUCIUNI
42
Fig. 2.12. Exemplificarea diferenei ntre saltul necondiionat relativ (BRA)i cel absolut (GOTO)
Conform figurii de mai sus, la execuia instruciunii BRA .+6, numrtorul de
program (PC) indic, din cauza existenei pipeline-ului, spre instruciunea urmtoare
(PC=h008). Execuia acestei instruciuni modific valoarea efectiv a numrtorului de
program, realiznd un salt peste n cuvinte (n x 16 bii) din memoria program. Deci, noua
adres a numrtorului de program, i implicit a noii instruciuni care va fi extras din
memorie n vederea execuiei, va fi: PC = h008+2xn = h008+h00C=h014.
Pe de altparte, instruciunea GOTOdeterminsaltul absolut n memoria program la
instruciunea gsitla adresa fizich07F2, codificatprin Eticheta_2.
Asupra instruciunilor de apel i revenire din subrutin (CALL, RETURN,
RETFIE, RETLW) i a celor care intervin n utilizarea stivei (PUSH, POP) se va reveni n
capitolele urmtoare.
2.2.9 Alte instruciuni
Instruciunile cuprinse n aceastcategorie permit realizarea scrierii i citirii tabelare
din memoria program. Aceste instruciuni, vor fi doar amintite n acest capitol, n Tabelul
2.12, fiind prezentate mai detaliat n unul din capitolele urmtoare.
5/24/2018 Microprocesoare,capitol 2
20/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
43
Tabel 2.11. Instruciuni de scriere i citire tabelar
Instruciuni Descriere Cicluri instr.TBLRD* Citire tabelar 2TBLRD*+ Citire tabelarcu post incrementareTBLRD*- Citire tabelarcu post decrementareTBLRD+* Citire tabelarcu pre incrementareTBLWT* Scriere tabelar 2TBLWT*+ Scriere tabelarcu post incrementareTBLWT*- Scriere tabelarcu post decrementareTBLWT+* Scriere tabelarcu pre incrementare
Concluzii
Acest capitol cuprinde prezentarea setului de instruciuni al
microcontrolerului PIC18F4455. Este prezentat modul n care suntcodificate aceste instruciuni n memoria program, sunt prezentai
parametrii instruciunilor, iar clasificarea din subcapitolul 2.2 are scopul
de a facilita identificarea diferitelor instruciuni necesare pentru realizarea
programelor n funcie de tipul de operaie realizat. De asemenea,
exemplele ntlnite n acest capitol au rolul de a evidenia caracteristicile
comune ale diferitelor grupe de instruciuni.
n vederea unei ct mai bune nelegeri a instruciunilordisponibile i a modului de utilizare al acestora, se propune ncheierea
capitolului cu urmtorul exemplu:
Exemplu
Se consider urmtoarea aplicaie, care implementeaz succesiv nite
operaii dupcum urmeaz:
- se iniializeazregistrul de la adresa 0x37 cu valoarea 71
- se incrementeazaceastvaloare de 50 de ori
- se seteazbitul 4 al rezultatului
- dac rezultatul obinut este mai mare dect 200 se terge
coninutul registrului de la adresa 0x37
- dacrezultatul obinut este mai mic dect 200 se seteaztoi biii
registrului de la adresa 0x37
Se cere codul surscare implementeazfuncionalitatea propus.
REG EQU 0X37CONTOR EQU 0X00
5/24/2018 Microprocesoare,capitol 2
21/22
SETUL DE INSTRUCIUNI
44
MOVLW D71MOVWF REG, 0MOVLW D50MOVWF CONTOR, 0
Bucla_for:
INCF REG, F, 0DECFSZ CONTOR, F, 0GOTO Bucla_for
BSF REG, 4, 0
MOVLW D200CPFSGT REG, 0SETF REG,0CLRF REG,0
1. Ce rol ndeplinete parametrul dn codul instruciunii?
2. Care este diferena ntre instruciunile GOTOi BRA?
3. Care va fi coninutul registrului de lucru WREG ca urmare a celor
douoperaii implementate prin urmtorul cod surs:
ADDWF REG, WSUBWF REG, W
4. Cum s-ar implementa o operaie de deplasare la stnga cu 2 bii?
5. Ce reprezintoperandul fdin codul instruciunii?
6. Identificai cele 4 instruciuni reprezentate pe 32 de bii
7. Explicai instruciunea IORWF.
ntrebri de
autoevaluare
8. Sse scrie un mic program care iniializeaz registrul de lucru cu
valoarea 100, rotete la stnga coninutul registrului de lucru de 100
de ori apoi seteazbitul 3 i reseteazbitul 2.
Termeni
eseniali
Carry
Bit de transport. Se gsete n registrul STATUS
Codul operaiei
Tipul de operaie implementat de o anumitinstruciune
Cuvnt
Doi octei. 16 bii
Decrementare
Operaie matematicechivalentcu scderea cu 1
5/24/2018 Microprocesoare,capitol 2
22/22
SISTEME CU MICROPROCESOARE. MICROCONTROLERUL PIC18F4455
45
Etichet
Identificator introdus n codul surspentru a marca adresa de nceput a
unei instruciuni
Incrementare
Operaie matematicechivalentadunrii cu 1Instruciuni
Comenzi codificate binar pe care le executUCP
Literal
Valoarea numericconstant
Memorie
Spaiu de stocare
Memorie de dateSpaiu de stocare temporar (RAM) pentru datele cu care lucreaz
programul
Memorie program
Spaiu de stocare pentru program
Numrtor de program
Numrtor binar utilizat pentru adresarea instruciunilor. Conine adresa
instruciunii care urmeaza fi executat
Octet
1 Byte = 8 bii. Capacitatea de stocare a unui registru
Registru
Spaiu de stocare . Locaie de memorie .
Resetare
Punerea unui bit sau a unui grup de bii pe 0 logic
RISC
Reduced Instruction Set Computer
Setare
Punerea unui bit sau a unui grup de bii pe 1 logic
STATUS
Registru care indic starea operaiilor aritmetice executate de unitatea
aritmetici logic
WREG
Registru de lucru / acumulator. n general conine unul din operanzii
instruciunilor