c02-Setul de Instructiuni

22
SISTEME CU MICROPROCESOARE – note de curs 1 2. SETUL DE INSTRUCŢIUNI Cuprins Introducere Obiective 2.1 FORMATUL INSTRUCŢIUNILOR 2.1.1 Instrucţiuni pe octet 2.1.2 Instrucţiuni pe bit 2.1.3 Instrucţiuni cu constante 2.1.4 Instrucţiuni de control 2.2 CLASIFICAREA INSTRUCŢIUNILOR ÎN FUNCŢIE DE OPERAŢIILE REALIZATE 2.2.1 Instrucţiuni matematice pe octet 2.2.2 Instrucţiuni logice pe octet 2.2.3 Instrucţiuni matematice şi logice cu constante 2.2.4 Instrucţiuni logice pe bit 2.2.5 Instrucţiuni de comparaţie pe bit 2.2.6 Instrucţiuni de comparaţie pe octet 2.2.7 Instrucţiuni de mutare 2.2.8 Instrucţiuni de control 2.2.9 Alte instrucţiuni Concluzii Teste de autoevaluare Bibliografie Dicţionar Teste de evaluare

Transcript of c02-Setul de Instructiuni

  • SISTEME CU MICROPROCESOARE note de curs

    1

    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

    Teste de autoevaluare

    Bibliografie

    Dicionar

    Teste de evaluare

  • SETUL DE INSTRUCIUNI

    2

    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 legtur cu arhitectura microcontrolerului, iar

    un dezvoltator de microsisteme ncorporate trebuie s fie foarte bine

    familiarizat att cu arhitectura software ct i cu cea hardware, mai ales

    dac va 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

    Dup parcurgerea acestui capitol cursantul va trebui:

    - s cunoasc instruciunile disponibile pentru microcontrolerul PIC18F4455;

    - s cunoasc modul n care sunt codificate instruciunile n memoria program;

    - s cunoasc rolul 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.

    reprezint datele cu care lucreaz instruciunile.

    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 formeaz setul extins.

    Acestea din urm, pe care le vom ignora n acest capitol, vizeaz optimizarea codului recursiv

    sau care utilizeaz o stiv software.

    Majoritatea instruciunilor disponibile (71) au lungimea de un cuvnt (16 bii), dar

    exist i 4 instruciuni avnd lungimea de dou cuvinte (32 bii). Pentru reprezentarea acestor

  • SISTEME CU MICROPROCESOARE note de curs

    3

    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 putea stoca

    toat informaia necesar execuiei operaiilor pe care le implementeaz.

    n esen majoritatea instruciunilor utilizeaz date stocate n memorie. n aceste

    condiii, o instruciune trebuie s aib posibilitatea de a informa UCP despre tipul operaiei

    pe 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)

    Exist i cteva excepii de la aceast regul cum ar fi, de exemplu, instruciunea NOP

    (No OPeration), care consum timpul procesorului fr a realiza ns o 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 eficient a 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 (specificat prin operandul d) 3. Zona de memorie accesat (specificat prin operandul a)

    n instruciunile pe octet, operandul f specific registrul care urmeaz a fi folosit de instruciune. Registrul f poate 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. Dac d=0 (d=W) rezultatul operaiei va fi plasat n registrul de lucru WREG. Dac d=1 (d=F) rezultatul operaiei va nlocui coninutul registrului f specificat n instruciune.

  • SETUL DE INSTRUCIUNI

    4

    Operandul a, denumit i bit de acces, specific modul de acces la registrul f. Dac a=0 (a=ACCESS) atunci registrul f se gsete n Access Bank. Dac a=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 prezint formatul instruciunilor pe octet. Acest format reprezint modul

    n 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 f sunt 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 prezentat n Tabelul 2.1. Tot n

    acest tabel se pune n eviden i cazul unor instruciuni care opereaz cu octei, dar care

    utilizeaz doar dou argumente

    Tabel 2.1. Formatul general al instruciunilor orientate pe octet

    Format instruciuni orientate pe octet Exemplu de utilizare cod_operaie f,d,a cod_operaie f,a f=adresa pe 8 bii a registrului d=0 (d=W) destinaia rezultatului este registrul de lucru WREG d=1 (d=F) destinaia rezultatului este registrul f a=0 (a=ACCESS) registrul f se gsete n Access Bank a=1 (a=BANKED) registrul f se gsete n Bank-uri Excepie: MOVFF fs,fd fs=adresa pe 12 bii a registrului surs fd=adresa pe 12 bii a registrului destinaie

    ADDWF REG1, W, BANKED CLRF 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 adres surs la o adres destinaie (MOVFF). Aceast instruciune face parte din categoria instruciunilor lungi i necesit 32 de bii pentru reprezentare. Formatul general al

    acestei instruciuni se prezint n Fig. 2.2.

    15 12 11 0 Cod operaie fs (adresa registrului surs)

    15 12 11 0 1 1 1 1 fd (adresa registrului destinaie)

    Fig. 2.2. Formatul general al instruciunilor de mutare octet MOVFF

  • SISTEME CU MICROPROCESOARE note de curs

    5

    n cazul instruciunii MOVFF, prezentat mai sus, cmpurile alocate adreselor surs i destinaie au dimensiunea de 12 bii. Astfel, aceast instruciune 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 operandul b) 3. Zona de memorie accesat (specificat prin operandul a)

    n aceste instruciuni, operandul b, format din trei bii, are rolul de a specifica poziia bitului n cadrul registrului f care este afectat de operaia realizat de instruciune. Operandul f conine 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 prezint formatul 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 utilizare cod_operaie f,b,a f=adresa pe 8 bii a registrului b=poziia bitului (0:7) n cadrul registrului f a=0 (a=ACCESS) registrul f se gsete n Access Bank a=1 (a=BANKED) registrul f se gsete n Bank-uri

    BSF REG, 4, ACCESS

    2.1.3 Instruciuni cu constante (literali)

    Instruciunile cu constante utilizeaz un singur operand k. Acesta are rezervai cei opt bii inferiori ai instruciunii i reprezint valoarea unei constante, denumit i literal. Modul

    de reprezentare al acestor instruciuni n memoria program se prezint n Fig. 2.4.

  • SETUL DE INSTRUCIUNI

    6

    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 lung i care va ncrca o constant de 12 bii n unul din cei trei regitrii speciali

    FSR. Tabelul 2.3 pune n eviden modul de utilizare al acestor instruciuni n program.

    Tabel 2.3. Formatul general al instruciunilor cu constante

    Format instruciuni cu constante Exemplu de utilizare cod_operaie k k=valoarea efectiv pe 8 bii Excepie: LFSR f,k f=registrul FSR utilizat k=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 adres din memoria program / etichet (specificat prin operandul n) - utilizarea stivei rapide n cazul instruciunilor CALL, RETURN i RETFIE (specificat

    prin operandul s) - fr operand

    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 stocat n 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 prezint formatul instruciunii

    de control GOTO care permite realizarea de salturi n ntreg spaiul de adresare al memoriei program.

  • SISTEME CU MICROPROCESOARE note de curs

    7

    15 8 7 0 Cod operaie n (adres din memoria program)

    15 12 11 0 1 1 1 1 n (adres din 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 utilizare cod_operaie n cod_operaie n,{s} cod_operaie s cod_operaie n=etichet (adres din memoria program) s= utilizare stiv rapid Excepie: RETLW k k=constant pe 8 bii

    GOTO main_loop CALL rutina RETURN FAST NOP 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, n acest paragraf se ncearc o clasificare a instruciunilor

    disponibile n funcie de operaiile realizate.

    2.2.1 Instruciuni matematice pe octet

    n acest categorie 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 analizeaz cazul instruciunii cu forma general: ADDWF f, d, a

    Aceast instruciune adun coninutul registrului de lucru WREG cu coninutul registrului a crui adres este specificat prin 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

  • SETUL DE INSTRUCIUNI

    8

    acolo. Cele dou situaii posibile sunt puse n eviden n 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 consider ca 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 consider c

    naintea execuiei instruciunii n registrul de lucru WREG se gsete valoarea b00101001=h29=d41, iar n registrul de la adresa 0x02C se 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.

  • SISTEME CU MICROPROCESOARE note de curs

    9

    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 i

    starea biilor indicatori din registrul STATUS. Bineneles, pentru valorile alese ale operanzilor, registrul STATUS nu este influenat n urma execuiei instruciunii.

    n aceeai categorie a instruciunilor matematice pe octet se mai regsesc i

    instruciunile din Tabelul 2.5. Tabel 2.5. Instruciuni matematice pe octet

    Instruciuni Descriere Cicluri instr. ADDWF f,d,a Adun WREG cu f 1 ADDWFC f,d,a Adun WREG cu f i cu bitul de transport 1 SUBWF f,d,a Scade WREG din f 1 SUBWFB f,d,a Scade f din WREG cu bitul de mprunut 1 SUBFWB f,d,a Scade WREG din f cu bitul de mprumut 1 INCF f,d,a Incrementeaz f 1 DECF f,d,a Decrementeaz f 1 MULWF f,a nmulete f cu WREG1 1 NEGF f,a Negare f 1 2.2.2 Instruciuni logice pe octet

    n acest categorie s-au considerat instruciunile care realizeaz operaii 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 instruciunilor

    logice pe octet.

    O analiz comparativ ntre instruciunile din aceast categorie i cele din categoria

    instruciunilor matematice pe octet pune n eviden faptul c parametrii 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.

    1 rezultatul acestei operaii se va regsi n regitrii PRODH:PRODL

  • SETUL DE INSTRUCIUNI

    10

    Tabel 2.6. Instruciuni logice pe octet

    Instruciuni Descriere Cicluri instr. ANDWF f,d,a I logic ntre WREG i f 1 IORWF f,d,a SAU logic ntre WREG i f 1 XORWF f,d,a SAU-EXCLUSIV ntre WREG i f 1 COMF f,d,a Complement f 1 CLRF f,a Resetare bii din registrul f 1 SETF f,a Setare bii din registrul f 1 SWAPF f,d,a Interschimbare semioctei din registrul f 1 RLCF f,d,a Rotire f la stnga cu bit de transport 1 RLNCF f,d,a Rotire f la stnga fr bit de transport 1 RRCF f,d,a Rotire f la dreapta cu bit de transport 1 RRNCF f,d,a Rotire f la dreapta fr bit de transport 1

    Exemplu

    Se analizeaz cazul instruciunii cu forma general: RLCF f, d, a

    Aceast instruciune realizeaz rotirea spre stnga cu bit de transport a

    coninutului de la adresa specificat prin 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 evideniat n 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 = 11100110 C = 0

    Dup instruciune: REG = 11100110 WREG = 11001100 C = 1

  • SISTEME CU MICROPROCESOARE note de curs

    11

    Exemplu

    Se analizeaz cazul instruciunii cu forma general: RLNCF f, d, a

    Aceast instruciune realizeaz rotirea spre stnga fr bit de transport a

    coninutului de la adresa specificat prin 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 fr bit de transport este evideniat n 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

    Dup instruciune: REG = 11100110 WREG = 11001101 C = 1

    n cele dou exemple prezentate anterior, parametrul f al instruciunii este specificat

    prin intermediul unei nume simbolic care nlocuiete adresa fizic a 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 RRCF i RRNCF, se realizeaz n mod asemntor.

  • SETUL DE INSTRUCIUNI

    12

    2.2.3 Instruciuni matematice i logice cu constante

    Aceste instruciuni au fost grupate ntr-o singur categorie deoarece respect acelai

    format i acelai principiu de funcionare, dup cum 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 Adun WREG cu literal 1 SUBLW k Scade WREG din literal 1 MULLW k nmulete WREG cu literal 1 ANDLW k I logic ntre WREG i literal 1 IORLW k SAU logic ntre WREG i literal 1 XORLW k SAU-EXCLUSIV ntre WREG i 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 constant MULLW, la fel ca i cealalt instruciune de nmulire MULWF, amintit n categoria instruciunilor matematice pe octet, va depune ntotdeauna rezultatul n doi regitri speciali PRODH:PRODL. Acest lucru se datoreaz faptului c nmulirea a dou valori 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 reprezint pe 9 bii)

    Exemplu

    Se analizeaz cazul instruciunii cu forma general: ANDLW k

    Aceast instruciune realizeaz operaia logic I 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 Dup instruciune:

    WREG = 00000110

  • SISTEME CU MICROPROCESOARE note de curs

    13

    2.2.4 Instruciuni logice pe bit

    n aceast categorie au fost grupate instruciunile care manipuleaz starea unui singur

    bit prin realizarea unor operaii de setare, resetare sau schimbare a strii (en. toggle). De altfel,

    aceast categorie cuprinde doar trei instruciuni cu format asemntor care implementeaz

    cele trei operaii amintite anterior. Tabelul 2.8 centralizeaz aceste instruciuni.

    Tabel 2.8. Instruciuni logice pe bit

    Instruciuni Descriere Cicluri instr. BCF f,b,a Reseteaz bitul b din registrul f 1 BSF f,b,a Seteaz bitul b din registrul f 1 BTG f,b,a Schimb starea bitului b din registrul f 1

    Pentru a exemplifica modul de utilizare al acestor instruciuni se consider urmtorul

    exemplu.

    Exemplu

    Se analizeaz cazul instruciunii cu forma general: BCF f, b, a

    Aceast instruciune realizeaz operaia de resetare, sau punere pe 0 logic,

    a bitului de pe poziia b din registrul a crui adres se sprecific prin parametrul f al instruciunii. Rezultatul obinut n urma acestei operaii se va regsi ntotdeauna n registrul f. Avnd n vedere c regitrii microcontrolerului sunt de 8 bii, parametrul

    b al acestor instruciuni va avea ntotdeauna o valoare cuprins ntre 0 i 7, unde 0 identific bitul cel mai puin semnificativ, iar 7 identific bitul

    cel mai semnificativ al unui octet.

    Modul de utilizare al acestei instruciuni este evideniat n continuare:

    BCF REG, 2, 0 naintea instruciunii:

    REG = 11100110 Dup instruciune:

    REG = 11100010

  • SETUL DE INSTRUCIUNI

    14

    2.2.5 Instruciuni de comparaie pe bit

    O categorie aparte de instruciuni sunt instruciunile de comparaie, deoarece acestea

    permit implementarea ramificaiilor de tip if n programele realizate n limbaj de asamblare. Instruciunile de comparaie pe bit sunt doar dou la numr i permit testarea strii unui

    anumit bit dintr-un registru. n Tabelul 2.9 sunt menionate cele dou instruciuni.

    Tabel 2.9. Instruciuni de comparaie pe bit

    Instruciuni Descriere Cicluri instr. BTFSC f,b,a Testeaz bitul b din reg. f, salt dac este 0 1 (2 sau 3) BTFSS f,b,a Testeaz bitul b din reg. f, salt dac este 1 1 (2 sau 3)

    Exemplu

    Se analizeaz cazul 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 BTFSC va fi instruciunea 1.

  • SISTEME CU MICROPROCESOARE note de curs

    15

    2.2.6 Instruciuni de comparaie pe octet

    Instruciunile de comparaie pe octet pot fi grupate n dou sub-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 sau

    decrementare. 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 analizeaz cazul instruciunii cu forma general: CPFSEQ f, a

    Aceast instruciune compar coninutul registrului f cu cel al registrului de lucru WREG. Dac cele dou sunt identice se face salt peste instruciunea urmtoare. n Fig. 2.10 se prezint principiul de funcionare

    al acestei instruciuni.

    Fig. 2.10. Principiul de funcionare al instruciunii CPFSEQ

    Exemplu

    Se analizeaz cazul 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 excut un salt peste instruciunea urmtoare. Prezena parametrului d n codul instruciunii indic faptul c rezultatul decrementrii poate fi stocat

    fie n registrul de lucru WREG, fie la adresa specificat prin f.

  • SETUL DE INSTRUCIUNI

    16

    n Fig. 2.11 se prezint principiul 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 realizeaz acest lucru.

    Exemplu

    Se consider cazul implementrii unei bucle de tip for care permite execuia unei instruciuni oarecare de o sut de 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_for CLRF 0x00, 0 DECFSZ REG, F, 0 GOTO Bucla_for

    Instruciunile de comparaie pe octet sunt centralizate n Tabelul 2.10.

  • SISTEME CU MICROPROCESOARE note de curs

    17

    Tabel 2.10. Instruciuni de comparaie pe octet

    Instruciuni Descriere Cicluri instr. CPFSEQ f,a Compar f cu WREG, salt dac f=WREG 1 (2 sau 3) CPFSGT f,a Compar f cu WREG, salt dac f>WREG 1 (2 sau 3) CPFSLT f,a Compar f cu WREG, salt dac f

  • SETUL DE INSTRUCIUNI

    18

    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 dac bitul de transport (carry) este 1 1 (2) BN n Salt dac bitul negativ este 1 1 (2) BOV n Salt dac bitul de depire (overflow) este 1 1 (2) BZ n Salt dac bitul zero este 1 1 (2) BNC n Salt dac bitul de transport (carry) este 0 1 (2) BNN n Salt dac bitul negativ este 0 1 (2) BNOV n Salt dac bitul de depire (overflow) este 0 1 (2) BNZ n Salt dac bitul zero este 0 1 (2) BRA n Salt necondiionat 2 GOTO n Salt la adresa / etichet 2 PUSH Pune n stiv (Salveaz PC n stiv) 1 POP Scoate din stiv (Reface PC) 1 CALL n,s Apel de subrutin 2 RETURN s Revenire din subrutin 2 RETLW k Revenire din subrutin cu literal n WREG 2 RETFIE s Revenire din rutina de tratare a ntreruperii 2 NOP 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 direct a valorii

    numrtorului 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. Astfel, instruciunea BRA realizeaz un salt relativ, iar instruciunea GOTO realizeaz un salt absolut n memoria program.

    Modul de execuie al celor dou instruciuni se prezint n Fig. 2.12.

  • SISTEME CU MICROPROCESOARE note de curs

    19

    Fig. 2.11. Exemplificarea diferenei ntre saltul necondiionat relativ (BRA)i cel absolut (GOTO)

    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 aceast categorie 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

    Tabel 2.11. Instruciuni de scriere i citire tabelar

    Instruciuni Descriere Cicluri instr. TBLRD* Citire tabelar 2 TBLRD*+ Citire tabelar cu post incrementare TBLRD*- Citire tabelar cu post decrementare TBLRD+* Citire tabelar cu pre incrementare TBLWT* Scriere tabelar 2 TBLWT*+ Scriere tabelar cu post incrementare TBLWT*- Scriere tabelar cu post decrementare TBLWT+* Scriere tabelar cu pre incrementare

  • SETUL DE INSTRUCIUNI

    20

    Concluzii

    Acest capitol cuprinde prezentarea setului de instruciuni al

    microcontrolerului PIC18F4455. Este prezentat modul n care sunt

    codificate 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 instruciunilor

    disponibile i a modului de utilizare al acestora, se propune ncheierea

    capitolului cu urmtorul exemplu:

    Exemplu

    Se consider urmtoarea aplicaie:

    - s se iniializeze registrul de la adresa 0x37 cu valoarea 71 - s se incrementeze aceast valoare de 50 de ori - s se seteze bitul 4 al rezultatului - dac rezultatul obinut este mai mare dect 200 s tearg

    coninutul registrului de la adresa 0x37

    - dac rezultatul obinut este mai mic dect 200 s se seteze toi biii registrului de la adresa 0x37

    Se cere codul surs care implementeaz funcionalitatea propus.

    REG EQU 0X37 CONTOR EQU 0X00 MOVLW D71 MOVWF REG, 0 MOVLW D50 MOVWF CONTOR, 0

    Bucla_for:

    INCF REG, F, 0 DECFSZ CONTOR, F, 0 GOTO Bucla_for BSF REG, 4, 0 MOVLW D200 CPFSGT REG, 0 SETF REG,0 CLRF REG,0

  • SISTEME CU MICROPROCESOARE note de curs

    21

    1. Ce rol ndeplinete parametrul d n codul instruciunii? 2. Care este diferena ntre instruciunile GOTO i BRA? 3. Care va fi coninutul registrului de lucru WREG ca urmare a celor

    dou operaii implementate prin urmtorul cod surs:

    ADDWF REG, W SUBWF REG, W

    4. Cum s-ar implementa o operaie de deplasare la stnga cu 2 bii?

    5. Ce reprezint operandul f din codul instruciunii? 6. Identificai cele 4 instruciuni reprezentate pe 32 de bii

    7. Explicai instruciunea IORWF.

    Teste de autoevaluare

    8. S se scrie un mic program care iniializeaz registrul de lucru cu

    valoarea 100, rotete la stnga coninutul registrului de lucru de 100

    de ori apoi seteaz bitul 3 i reseteaz bitul 2.

    [1] Sid Katzen The Essential PIC18 Microcontroller, Springer Verlag

    London, 2010

    [2] Genge Bela, Haller Piroska Proiectarea sistemelor dedicate i

    ncorporate cu microcontrolerul PIC, Editura universitii Petru

    Maior din Tg. Mure, 2008

    [3] Microchip PIC18F2455/2550/4455/4550 Data Sheet, Microchip

    Technology Inc. 2006

    Bibliografie

    [4] www.microchip.com

    Dicionar

    Carry

    Bit de transport. Se gsete n registrul STATUS Codul operaiei

    Tipul de operaie implementat de o anumit instruciune

    Cuvnt

    Doi octei. 16 bii

    Decrementare

    Operaie matematic echivalent cu scderea cu 1

    Etichet

    Identificator introdus n codul surs pentru a marca adresa de nceput a

  • SETUL DE INSTRUCIUNI

    22

    unei instruciuni

    Incrementare

    Operaie matematic echivalent adunrii cu 1

    Instruciuni

    Comenzi codificate binar pe care le execut UCP

    Literal

    Valoarea numeric constant

    Memorie

    Spaiu de stocare

    Memorie de date

    Spaiu 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 urmeaz a 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

    aritmetic i logic

    UCP

    Unitate central de prelucrare

    WREG

    Registru de lucru / acumulator. n general conine unul din operanzii

    instruciunilor.