Mnemonica

Documente similare
Microsoft Word - intro_msp430.doc

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

1. ARHITECTURA MICROPROCESOARELOR 1.1. Microprocesorul. Noțiuni generale Progresele tehnologice și electronice, înregistrate în ultimele decenii, au d

Slide 1

PROCESOARE NUMERICE DE SEMNAL

Controlerul LCD

Microsoft Word - 4-Interfete paralele.doc

Slide 1

PROCESOARE NUMERICE DE SEMNAL

Microsoft Word - Curs1.docx

SSC-Impartire

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

PowerPoint-Präsentation

PowerPoint-Präsentation

LOGICAL DESIGN OF DIGITAL COMPUTERS

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Slide 1

E_d_Informatica_sp_SN_2014_bar_10_LRO

Microsoft Word - Prelegere 1 - Bratu C. - Microcontrolerul.doc

Slide 1

Microsoft Word - Notiuni de arhitectura calculatoarelor.doc

Microsoft Word - Tema 06 - Convertoare analog-numerice.doc

Ch

-

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Microsoft Word - Programarea Portului Paralel - IBM-PC. .doc

Dot Matrix Display Module and

Paradigme de programare

Microsoft Word - O problema cu bits.doc

Microsoft Word - Lucrarea_10_t.doc

EXCEL FĂRĂ SECRETE Grafice şi diagrame

Laborator 04: Apeluri de funcții

Cartelele telefonice

Implementarea calculatorului didactic DLX (Cursul 3)

Înregistrator de temperatură şi umiditate AX-DT100 Instrucţiuni de utilizare

Lucrarea nr

PowerPoint Presentation

Programarea şi utilizarea calculatoarelor

Minicurs CCS C / Aplicatia1 1.Programul CCS C Compiler. Instalare.Creare proiect. Descarcati ultima versiune a programului de

Microsoft Word - Lab1a.doc

LUMINIŢA SCRIPCARIU

Limbaje de Programare Curs 6 – Functii de intrare-iesire

L4. TEOREMELE ALGEBREI BINARE. FUNCȚII LOGICE ELEMENTARE. OPERAȚII LOGICE PE BIT. SINTEZA FUNCȚIILOR LOGICE DIN TABELE DE ADEVĂR 1. Obiective Prin par

Microsoft Word - CarteC.doc

tehnologii web

Manual de utilizare Room Booking System

Microsoft Word - IngineriF_A.DOC

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Secţiunea 7-8 începători Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 ID 100 puncte Calculatoarele trebuie să se recunoască în rețeau

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Microsoft Word - Prezentare - A4 - cernavoda.doc

Slide 1

LABORATOR 2

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

E_d_Informatica_sp_MI_2015_bar_02_LRO

De la BIT la procesor

Arhitectura calculatoarelor. Indrumator de laborator

Lab6LCD

Slide 1

Sisteme de calcul în timp real

PowerPoint Presentation

VLT® AQUA Cascade Contr. Manual SW1.00

Sisteme cu FPGA şi Soft Processors

Platforma 5. 1 Introducere in MSSQL Introducere Pe parcursul ultimilor ani, se poate observa o cuplare a limbajelor de programare majore cu tipuri de

Microsoft Word - Algoritmi genetici.docx

Microsoft Word - Excel_3.DOC

SCD-Procesoare-1

Microsoft Word - Ansamblul software CRONIS

Guns N' Roses Video Slots Regulile jocului Guns N' Roses Video Slots este un slot video cu 5 role, 3 rânduri și 20 de linii care conține substituții W

ANEXĂ

Slide 1

Universitatea Aurel Vlaicu din Arad Facultatea de Științe Exacte CONCURSUL INTERNAȚIONAL DE MATEMATICĂ ȘI INFORMATICĂ CAIUS IACOB Ediția a VIII-a SECȚ

Informatică aplicată TEST GRILA TEST GRILĂ - REZOLVAT 1.Structura de principiu a unui sistem de calcul contine urmatoarele componente principale: A. u

1

Școala: Clasa a V-a Nr. ore pe săptămână: 4 Profesor: MATEMATICĂ Clasa a V-a Aviz director PLANIFICARE CALENDARISTICĂ ORIENTATIVĂ Nr. crt. Unitatea de

Paradigme de Programare

Lucrarea 10

EW-7416APn v2 & EW-7415PDn Ghid de instalare Macintosh / v2.0 0

Microsoft Word - Laboratorul 3.doc

4. Creşterea vitezei de execuţie a algoritmilor intensiv computaţio-nali cu ajutorul coprocesoarelor ataşate, bazate pe structuri logice reconfigurabi

Regulile jocului Hotline Hotline este un slot video cu 5 role, 3 rânduri și 30 de linii (fixe) care conține simboluri Wild și Expanding Wild, Re-Spins

Laborator 3

PowerPoint-Präsentation

MergedFile

Microsoft Word - Curs_10.doc

Информационная система персонализации, печати и учета документов об образовании

CURS

Microsoft Word - lab-fr_3

PPSD

Microsoft Word - CarteC.doc

Modul Modbus ASCII SISTEME DE COMUNICATIE CURS 5 - Constantinescu Catalin Atunci cand se foloseste modul MODBUS ASCII fiecare octet din mesaj

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Ghidul pentru utilizator

Slide 1

CD180 Romanian quick start guide

Manual Utilizare SEPA DD

carteInvataturaEd_2.0_lectia5.pdf

Microsoft Word - versiunea D doc

Transcriere:

MODELUL PROGRAMATOR 1. Registrele Unitătii Centrale (CPU Registers) Unitatea centrală a unui microcontroler are 16 registre de 16 biti (R0..R15), din care R0, R1, R2 şi R3 au functii dedicate, iar R4 la R15 sunt registre de lucru de uz general (de lucru working registers). O prezentare schematică a masivului de registre este făcută în figurile următoare. La nivelul CPU registrele sunt interconectate şi respectiv conectate cu ALU (unitatea aritmetică şi logică) prin intermediul unei magistrale de date MDB (Memory Data Bus) şi a unei magistrale de adrese MAB (Memory Address Bus), ambele de 16 biti. Tot prin intermediul acestor magistrale masivul de registre este mapat (plasat) în spaţiul de memorie de 64K. OBSERVATII 1. Sintaxa generală a unei instrucţiuni cu doi operanzi este: Mnemonica_instructiune Operand_sursa, Operand_destinatie 1

2. Extensiile utilizate pentru mnemonica instrucţiunii sunt:.b pentru operatii pe octet-byte şi respectiv.w pentru operatii pe cuvant-word. Dacă extensia lipseste, implicit este vorba de o operaţie pe cuvant. Registrele cu functii dedicate sunt următoarele: a. Numărătorul program (Program Counter) PC/R0 PC/R0 indică următoarea instrucţiune (adresa codului ei) care va fi executată. Deoarece instrucţiunile utilizează un număr par de octeti (bytes)- 2, 4 sau 6, şi el va fi incrementat corespunzător cu 2, 4 sau 6. Accesul la codul instrucţiunilor în spatiul de program de 64K se face la nivel de cuvant (2 octeti), astfel ca PC/R0 va contine numai valori (adrese) pare, cu bitul 0 avand întotdeauna valoarea 0. PC/R0 poate fi adresat de toate instrucţiunile, în toate modurile de adresare. Cateva exemple ar fi: MOV #LABEL,PC ; ramificare(salt) la adresa LABEL MOV LABEL,PC ; ramificare la adresa continuta in LABEL MOV @R14,PC ; ramificare indirecta, cu registrul R14 b. Indicatorul de stivă (Stack Pointer)-SP/R1 Indicatorul de stivă SP/R1 este utilizat de unitatea centrală pentru a memora adresa de întoarcere în cazul apelului de subrutine sau al întreruperilor. Schema de stivă utilizată este de pre decrementare şi post incrementare. El poate fi însă utilizat de toate instrucţiunile şi în toate modurile de adresare, deoarece stiva mai poate fi folosită şi pentru a salva un obiect în stivă sau pentru a restaura valoarea unui obiect din stivă. Valoarea sa trebuie initializată de utilizator într-un spatiu de memorie de tip RAM şi este aliniată numai la adrese pare. MOV 2(SP),R6 ; Item I2 > R6 MOV R7,0(SP) ; Suprascrie TOS cu R7 PUSH #0123h ; Salveaza constanta 0123h in TOS POP R8 ; Restaureaza TOS in R8 = 0123h *TOS-Top Of Stack este notatia pentru varful stivei O situatie specială apare atunci cand se salvează/restaurează în/din stiva chiar SP-ul. 2

Astfel, indicatorul de stivă este modificat dupa executia instrucţiunii PUSH SP. Indicatorul de stivă nu este modificat după executia instrucţiunii POP SP deoarece instrucţiunea aduce valoarea SP1 în SP, deci SP1=SP2. c. Registrul de stare (Status Register)-SR/R2 Registrul de stare SR/R2 poate fi folosit doar în modul de adresare registru, cu instrucţiuni de tip cuvânt (word), atat ca operand destinatie cat şi ca operand sursă. Restul modurilor de adresare disponibile sunt folosite ca suport pentru generatorul de constante, registrul R2 putand fi folosit şi pentru generarea de constante (ca CG1). Bitii 15..9 sunt rezervaţi pentru dezvoltări ulterioare. V- Bit depăşire (overflow); este setat în cazul în care apare o depăşire la o operatie aritmetică folosind reprezentarea cu semn. În cazul operaţiilor de adunare ADD(.B),ADDC(.B) este setat cand avem: Pozitiv + Pozitiv = Negativ Negativ + Negativ = Pozitiv În cazul operaţiilor de scădere SUB(.B),SUBC(.B),CMP(.B) este setat cand avem: Pozitiv Negativ = Negativ Negativ Pozitiv = Pozitiv SCG1 - System Clock Generator1; cand este setat opreste ceasul SMCLK SCG0 - System Clock Generator0; cand este setat opreste generatorul de cc DCO, dacă DCOCLK nu este folosit pentru MCLK sau SMCLK. OSCOFF - Oscillator Off; cand este setat opreste oscilatorul LFXT1 (stabilizat cu cuart), dacă LFT1CLK nu este folosit pentru MCLK sau SMCLK. 3

CPUOFF- cand este setat opreste unitatea centrală (CPU) GIE- General Interrupt Enable-activare globală a întreruperilor; cand este setat activează tratarea tuturor întreruperilor mascabile; dupa reset el este 0, astfel că toate întreruperile mascabile sunt dezactivate N- Negative; este setat atunci cand rezultatul unei operaţii pe octet sau cuvant este negativ şi este resetat în caz contrar; Z-Zero; este setat atunci cand rezultatul unei operaţii pe octet sau cuvant este 0, resetat în caz contrar; în cazul unei instrucţiuni pe cuvant, bitul 15 (de semn) al rezultatului este copiat în N, iar în cazul unei operaţii pe octet, bitul 7 este copiat în N. C-Carry - transport; este setat atunci cand rezultatul unei operaţii pe octet sau cuvant produce un transport (sau un imprumut), resetat în caz contrar. d. Registrele generatorului de constante CG1/R2 şi CG2/R3 Setul de instrucţiuni de tip RISC al unităţii centrale are doar 27 de instrucţiuni de bază. Cu ajutorul generatorului de constante sunt implementate alte 24 de instrucţiuni suplimentare, zise instrucţiuni emulate. Asamblorul utilizează în mod automat generatorul de constante, atunci cand una din constantele dintr-un set de 6 constante uzuale, apare ca un operand sursă, în mod imediat. Registrele R2 şi R3 folosite în acest mod de lucru nu pot fi adresate explicit, ele actionand doar ca registre sursă implicite. Cele 6 constante asociate cu registrele R2 şi R2 impreună cu modurile de adresare pentru registrul sursă (As-Adresa sursa) sunt prezentate în tabela următoare: Registru As Constanta Observatii R2 00 ----- Mod registru R2 01 0000 Mod adresă absoluta R2 10 0004h +4, folosita la operatii de prelucrare bit R2 11 0008h +8, folosita la operatii de prelucrare bit R3 00 0000h Prelucrare cuvant R3 01 0001h +1, folosita pentru incrementare la operatii pe octet R3 10 0002h +2, folosita pentru incrementare la operatii pe cuvant R3 11 0FFFFh -1, prelucrare cuvant Cu alte cuvinte setul de constante este: -1, 0, 1, 2, 4, 8. Avantajele utilizării generatorului de constante ar fi: - nu sunt necesare instrucţiuni speciale suplimentare - nu se utilizează memorie de program pentru cele 6 constante - nu se accesează memoria de program pentru a prelua constanta Dacă luăm ca exemplu instrucţiunea cu un singur operand care sterge (aduce în 0) operandul destinaţie CLR dst, ea va fi emulată de instrucţiunea cu doi operanzi, cu aceiaşi lungime, MOV R3,dst sau echivalentul MOV #0,dst. În acest caz constanta imediată #0 este înlocuită de asamblor şi R3 va fi utilizat cu modul As=00. O situaţie asemănătoare se întalneste la instrucţiunea care incrementează operandul destinaţie INC.B dst, care va fi emulată de o instrucţiune ADD 0(R3),dst folosind registrul R3 cu modul de adresare As=01, constanta imediată fiind #1. 4

e. Registrele de uz general R4..R15 Cele 12 registre de uz general sunt R4..R15. Toate aceste registre pot fi folosite ca registre pentru date, ca indicatori (pointeri) de adresă sau ca valori de index. Ele pot fi accesate cu instrucţiuni de prelucrare pe octet şi respectiv pe cuvant. Vom prezenta ca exemplu cazul a două instrucţiuni pe octet (byte,.b). În primul exemplu avem instrucţiunea ADD.B R5,0(R6) Octet inferior în registru + Octet adresat în memorie -> Octet adresat în memorie Valorile iniţiale sunt R5 = 0A28Fh, R6 = 0203h şi conţinutul adresei de memorie Mem(0203h) = 012h. Operaţia realizată va fi: 08Fh + 012h= 0A1h, cu indicatori de condiţie rezultaţi C = 0, Z = 0, N = 1. În al doilea exemplu avem instrucţiunea ADD.B @R6,R5 Octet adresat în memorie + Octet inferior în registru -> Octet inferior în registru, Octetul superior =0 Valorile iniţiale sunt R5 = 01203Fh, R6 = 0223h şi continutul adresei de memorie Mem(0223h) = 05Fh. Operaţia realizată va fi 05Fh + 02h =061h, cu indicatori de condiţie rezultaţi C = 0, Z = 0, N = 0. 2. Modurile de adresare ale operanzilor sursă şi destinaţie Există 7 moduri de adresare pentru operandul sursă şi 4 moduri de adresare pentru operandul destinaţie. În oricare din acestea se poate adresa (accesa) întreg spaţiul de adrese de memorie, fără nici o excepţie. În tabelul următor sunt prezentate sintetic aceste moduri impreună cu valorile de bit care codifică modul pentru operandul sursă (As-Adresa sursa) şi respectiv destinaţie (Ad Adresa destinaţie). As/Ad Mod adresare Sintaxa Descriere 00/0 Mod registru Rn Operandul este continutul registrului 01/1 Mod indexat X(Rn) (Rn+X) este adresa operandului; X este memorat în următorul cuvant 01/1 Mod simbolic ADR (PC+X) este adresa operandului; X este memorat în următorul cuvant. Se utilizează de fapt modul indexat X(PC) 01/1 Mod absolut &ADR Cuvantul care urmează contine adresa absolută ADR. Se utilizează de fapt modul indexat X(SR/CG1), unde X=ADR 10/- Mod registru indirect @Rn Registrul contine adresa operandului 11/- Mod indirect cu autoincrementare @Rn+ Registrul contine adresa operandului; după executia instrucţiunii registrul este incrementat cu 1 pentru instrucţiuni pe octet(.b) şi cu 2 pentru instrucţiuni pe cuvant(.w) 11/- Mod imediat #N Cuvantul care urmează contine constanta imediata N; se utilizează de fapt modul @PC+ OBSERVATIE 1. Etichetele ETI1 şi ETI2 vor fi folosite în continuare ca etichete generice. 2. Exemplificarea modurilor de adresare se va face folosind de cele mai multe ori acelaşi mod de adresare pentru ambii operanzi. 5

a. Modul Registru În acest mod de adresare operandul este chiar conţinutul registrului. Poate fi folosit atat pentru operandul sursă cat şi pentru cel destinatie. Conţinutul registrului poate fi accesat cu instrucţiuni pe octet(.b) cat şi cu instrucţiuni pe cuvant(.w). Dacă se utilizează instrucţiuni pe octet, octetul superior al rezultatului va fi întotdeauna 0. Indicatorii de conditie vor fi actualizaţi conform rezultatului. Lungimea instrucţiunii este de 1 sau 2 cuvinte. Exemplu: MOV R10,R11 o instrucţiune pe cuvant, care copiază conţinutul lui R10 în R11, conţinutul lui R10 nefiind afectat. b. Modul indexat În acest mod de adresare adresa operandului este dată de suma între conţinutul registrului şi un index. Poate fi folosit atat pentru operandul sursă cat şi pentru cel destinatie. Lungimea instrucţiunii este de 2 sau 3 cuvinte Exemplu: MOV 2(R5),6(R6)este o instrucţiune pe cuvant de forma MOV X(R5),Y(R6)cu cele două valori de index X=2 pentru sursa şi Y=6 pentru destinaţie. Ea copiază conţinutul adresei R5+2 în adresa destinatie R6+6. Continutul celor două registre nu este afectat. Este o instrucţiune pe 3 cuvinte (presupus memorată de la adresa 0FF12h-vezi figura). 6

c. Modul simbolic În acest mod de adresare adresa operandului este dată de suma între conţinutul numărătorului program PC şi un index. Poate fi folosit atat pentru operandul sursă cat şi pentru cel destinatie. Lungimea instrucţiunii este de 2 sau 3 cuvinte. Acest mod de adresare este implementat de fapt ca un mod indexat cu registrul R0(PC). Exemplu: MOV ETI1,ETI2 este de fapt memorată ca o instrucţiune MOV X(PC),Y(PC) cu X=ETI1-PC şi Y=ETI2-PC. Ea va copia continutul adresei sursă dată de ETI1 (PC+X) în adresa destinatie dată de ETI2 (PC+Y). Cuvintele care urmează codului instrucţiunii contin diferenta între PC şi adresa sursei şi a destinatiei. Asamblorul va calcula şi insera în mod automat aceste valori. În figura urmatoare este ilustrată situatia în care ETI1= 0F016h şi ETI2=01114h. Este o instrucţiune pe 3 cuvinte (presupus memorată de la adresa 0FF12h) d. Modul absolut În acest mod de adresare adresa operandului este dată de suma între constanta 0 şi valoarea absolută a unei adrese de (în) memorie. Poate fi folosit atat pentru operandul sursă cat şi pentru cel destinatie. Lungimea instrucţiunii este de 2 sau 3 cuvinte. Acest mod de adresare este implementat de fapt ca un mod indexat cu continutul registrului R2/SR/CG1 egal cu 0 De exemplu, instrucţiunea MOV &ETI1,&ETI2 este memorată ca o instrucţiune MOV X(0),Y(0)unde X=ETI1 şi Y=ETI2. Instrucţiunea copiază continutul adresei data de ETI1 în adresa data de ETI2. Cuvintele care urmează codului instrucţiunii contin adresele absolute (în memorie) ale sursei şi destinatiei. În figura următoare este ilustrată executia acestei instrucţiuni, cu ETI1= 0F016h şi ETI2=01114h. Este o instrucţiune pe 3 cuvinte (presupus memorată de la adresa 0FF12h) 7

e. Modul registru indirect În acest mod de adresare continutul registrului este chiar adresa operandului. Este un mod de adresare valid doar pentru operandul sursă. Lungimea instrucţiunii este de 1 sau 2 cuvinte. Pentru operandul destinatie se poate utiliza modul indexat, cu un index nul 0(Rn). Exemplu: MOV @R10,0(R11)instrucţiune care copiază continutul adresei sursei (dată de R10), în adresa destinatie dată de suma 0+R11. În figura următoare este ilustrată executia acestei instrucţiuni, instrucţiune pe 2 cuvinte (presupus memorată de la adresa 0FF12h). 8

f. Modul indirect cu autoincrementare În acest mod, similar modului registru indirect, registrul va contine adresa operandului dar, după executia instrucţiunii, registrul este incrementat cu 1 pentru instrucţiuni pe octet(.b) şi cu 2 pentru instrucţiuni pe cuvant(.w). Este un mod de adresare valid doar pentru operandul sursă. Lungimea instrucţiunii este de 1 sau 2 cuvinte. Pentru operandul destinaţie se poate utiliza modul indexat cu un index nul 0(Rn), urmat însă de o instrucţiunea suplimentara INC Rn. Exemplu: MOV @R10+,0(R11) este o instrucţiune pe cuvant care copiază continutul adresei sursei (dată de R10), în adresa destinatie dată de suma 0+R11 şi apoi incrementeaza cu 2 valoarea lui R10. În figura următoare este ilustrată executia acestei instrucţiuni, instrucţiune pe 2 cuvinte (presupus memorată de la adresa 0FF12h) Este un mod util la prelucrarea tabelelor, următorul element din tabelă fiind adresat fără nici o instrucţiune suplimentară. g. Modul imediat În acest mod, operandul, de natura unei constante, este memorat în corpul instrucţiunii, imediat după cuvantul opcod. Este un mod de adresare valid doar pentru operandul sursă. Lungimea instrucţiunii este de 2 sau 3 cuvinte, dar poate avea cu un cuvant mai putin, dacă se utilizează generatorul de constante (constanta este una din cele 6 generate de CG1 şi CG2). Este implementat printr-un mod registru indirect cu autoincrementare, folosind contorul program @PC+. Exemplu: MOV #45h,ETI2 o instrucţiune care este implementată (memorată) ca 9

MOV @PC+,X(PC)cu X=ETI2-PC şi copiază constanta imediată #45h în adresa de destinatie dată de ETI2. În figura următoare este ilustrată execuţia acestei instrucţiuni, instrucţiune pe 3 cuvinte (presupus memorată de la adresa 0FF12h), pentru ETI2=010A8h. 3. Setul de instrucţiuni Setul complet de instrucţiuni constă din 27 de instrucţiuni zise de bază (core instructions) şi 24 de instrucţiuni emulate. Instrucţiunile de bază sunt instrucţiunile care au un op-cod unic, decodificat ca atare de unitatea centrală (CPU). Instrucţiunile emulate fac mai usoară scrierea şi citirea codului sursă dar nu au op-coduri proprii. Ele vor fi înlocuite, în mod automat, de asamblor cu instrucţiuni de bază care realizează o operaţie echivalentă. Utilizarea instrucţiunilor emulate nu are nici un efect negativ asupra vitezei de execuţie sau dimensiunii codului generat de asamblor. Există 3 categorii diferite de instrucţiuni de bază: - cu doi operanzi - cu un singur operand - de salt Toate instrucţiunile cu un singur operand sau cu doi operanzi, pot fi de prelucrare(operatie) tip octet-byte (cu extensia.b) sau tip cuvant -word (cu extensia.w). Instrucţiunile tip octet sunt folosite pentru a accesa date sau periferice-registre organizate pe octet, iar cele tip cuvant pentru a accesa date sau periferice organizate pe cuvant (doi octeti). Dacă extensia (.) nu este prezentă, implicit instrucţiunea este de tip cuvant. În descrierea care urmează, a formatului acestor instrucţiuni, sursa şi destinaţia sunt definite astfel: - src operandul sursă definit de As(mod adresare sursă) şi S-reg (registru sursă) - dst operandul destinatie definit de Ad(mod adresare destinatie) şi D-reg (registru destinatie) - As camp de biţi care definesc modul de adresare pentru sursă (src) - S-reg registru de lucru utilizat pentru sursă (src) - Ad camp de biti care definesc modul de adresare pentru destinatie (dst) - D-reg registru de lucru utilizat pentru destinatie (dst) - B/W bit care codifică tipul operaţiei; B/W=0 pe cuvant (Word) sau B/W=1 pe octet (Byte) 10

Adresele pentru destinaţie pot fi oriunde în spatiul de memorie al. Atunci cand instrucţiunea respectiva modifică conţinutul destinaţiei, iar destinatia este o locaţie de memorie care nu poate fi scrisă (de exemplu de tip ROM), rezultatul instrucţiunii se va pierde, el neputand fi memorat în destinaţia respectivă. a. Instrucţiuni cu doi operanzi (Formatul I) Formatul acestor instrucţiuni este descris în figura următoare: Mnemonica S-Reg, D-Reg Operaţie Biti Stare VNZC MOV(.B) Src, dst src dst ADD(.B) Src, dst src + dst dst **** ADDC(.B) Src, dst src + dst + C dst **** SUB(.B) Src, dst dst +.NOT.src + 1 dst **** SUBC(.B Src, dst dst +.NOT.src + C dst **** CMP(.B) Src, dst dst src **** DADD(.B) Src, dst src + dst + C dst (zecimal) **** BIT(.B) Src, dst src.and. dst 0*** BIC(.B) Src, dst.not.src.and. dst dst BIS(.B) Src, dst src.or. dst dst XOR(.B) Src, dst src.xor. dst dst **** AND(.B) Src, dst src.and. dst dst 0*** *Bitul de stare este afectat Bitul de stare nu este afectat 0 Bitul de stare este sters(resetat) 1 Bitul de stare este setat Instrucţiunile CMP şi SUB sunt identice cu excepţia faptului că SUB mai şi memorează rezultatul în destinatie (destinaţia este modificată). O situaţie asemănătoare se întalneste la instrucţiunile BIT şi AND. Instrucţiunea DADD realizează însumarea zecimală a sursei şi destinaţiei. Cei doi operanzi se presupune ca sunt în reprezentare binar zecimală (ca numere pozitive, cod BCD 8421): avem 4 cifre BCD pentru operarea pe cuvant şi respectiv 2 cifre BCD pentru operarea pe octet. Rezultatul operaţiei nu este definit dacă operanzii nu sunt în reprezentare binar zecimală. Indicatorul de condiţie Carry(transport) este setat daca rezultatul este mai mare de 9999 (.W) sau respectiv 99 (.B). 11

În figura următoare este ilustrată utilizarea instrucţiunii ADD în cazul prelucrării pe octet (byte) şi respectiv pe cuvant(word). b. Instrucţiuni cu un singur operand (Formatul II) Formatul acestor instrucţiuni este descris în figura următoare: Mnemonica S-Reg, D Reg Operaţie Biti stare VNZC RRC(.B) Dst C MSB...LSB C **** RRA(.B) Dst MSB MSB...LSB C 0*** PUSH(.B) Src SP 2 SP, src @SP SWPB Dst Permuta octetii CALL Dst SP 2 SP, PC+2 @SP, dst PC RETI TOS SR, SP + 2 SP, TOS PC, SP + 2 SP **** SXT Dst Bit 7 Bit 8...Bit 15 0*** *Bitul de stare este afectat Bitul de stare nu este afectat 0 Bitul de stare este sters(resetat) 1 Bitul de stare este setat Pentru instrucţiunea CALL (apel subrutină) sunt disponibile toate modurile de adresare. Dacă se utilizeaza modurile: simbolic, imediat(#), absolut(&) sau indexat, cuvantul care urmează opcodului va conţine adresa de destinaţie. 12

c. Instrucţiuni de salt În figura următoare este descris formatul acestei categorii de instrucţiuni: Mnemonica S-Reg, D-Reg Operatie JEQ/JZ Eticheta Salt la etichetă dacă bitul Z(zero) este setat JNE/JNZ Eticheta Salt la etichetă dacă bitul Z(zero) este resetat JC Eticheta Salt la etichetă dacă bitul C(carry) este setat JNC Eticheta Salt la etichetă dacă bitul C(carry) este resetat JN Eticheta Salt la etichetă dacă bitul N(negative) este setat JGE Eticheta Salt la etichetă dacă (N.XOR. V) = 0 ; cei 2 biti sunt identici JL Eticheta Salt la etichetă dacă (N.XOR. V) = 1 ; cei 2 biti sunt diferiti JMP Eticheta Salt la etichetă, neconditionat Salturile condiţionate (care testează valoarea indictorilor de condiţie- a biţilor de stare) şi saltul necondiţionat sunt salturi relative fata de valoarea curentă a PC-ului şi nu afectează indicatorii de conditie. Domeniul în care se poate face saltul este de la 511 la +512 cuvinte relativ la valoarea PC-ului pentru instrucţiunea de salt respectivă. Offsetul respectiv pentru PC este codificat ca un întreg cu semn pe 10 biti (de aici şi domeniul de reprezentare de 511 la +512) care este dublat (fiind vorba de cuvinte) şi adunat la PC: PC nou (eticheta) = PC vechi + 2 + offset PC x 2; 13

SETUL COMPLET DE INSTRUCŢIUNI Mnemonică Descriere V N Z C ADC(.B) dst * Adună pe C la destinatie dst + C dst * * * * ADD(.B) src,dst Adună sursa la destinatie src + dst dst * * * * ADDC(.B) src,dst Adună sursa şi C la destinatie src + dst + C dst * * * * AND(.B) src,dst AND(SI) între sursa şi destinatie src.and. dst dst 0 * * * BIC(.B) src,dst Sterge bitii din destinatie NOTsrc AND dst dst - - - - BIS(.B) src,dst Setează bitii din destinatie src.or. dst dst - - - - BIT(.B) src,dst Testează biti din destinatie src.and. dst 0 * * * BR dst * Ramificare(salt) la destinatie dst PC - - - - CALL dst Apelează (subrutina de la) destinatie PC+2 stack, dst PC - - - - CLR(.B) dst * Sterge destinatia 0 dst - - - - CLRC * Sterge C 0 C - - - 0 CLRN * Sterge N 0 N - 0 - - CLRZ * Sterge Z 0 Z - - 0 - CMP(.B) src,dst Compară sursa cu destinatia dst src * * * * DADC(.B) dst * Adună pe C zecimal la destinatie dst + C dst (decimally) * * * * DADD(.B) src,dst Adună sursa şi pe C zecimal la src + dst + C dst * * * * destinatie. (zecimal) DEC(.B) dst * Decrementează destinatia dst 1 dst * * * * DECD(.B) dst * Dublu decrementează destinatia dst 2 dst * * * * DINT * Dezactivează intreruperile 0 GIE - - - - EINT * Activează întreruperile 1 GIE - - - - INC(.B) dst * Incrementează destinatia dst +1 dst * * * * INCD(.B) dst * Dublu incrementează destinatia dst+2 dst * * * * INV(.B) dst * Inversează destinatia.not.dst dst * * * * JC/JHS eticheta Salt dacă C este setat / Salt dacă mai mare sau egal - - - - JEQ/JZ eticheta Salt dacă egal / Salt dacă Z este setat - - - - JGE eticheta Salt dacă mai mare sau egal - - - - JL eticheta Salt dacă mai mic - - - - JMP eticheta Salt la etichetă PC + 2 x offset PC - - - - JN eticheta Salt dacă N este setat - - - - JNC/JLO eticheta Salt dacă C nu este setat / Salt dacă - - - - mai mic JNE/JNZ eticheta Salt dacă nu este egal / Salt dacă Z - - - - nu este setat MOV(.B) src,dst Copiază sursa în destinatie src dst - - - - NOP * Nici o operatie - - - - POP(.B) dst * Extrage obiect din stivă în destinatie @SP dst, SP+2 SP - - - - PUSH(.B) src Salvează sursa în stivă SP 2 SP, src @SP - - - - RET* * Întoarcere din subrutină @SP PC, SP + 2 SP - - - - RETI Întoarcere din întrerupere * * * * 14

Mnemonică Descriere V N Z C RLA(.B) * Rotire stanga aritmetică * * * * RLC(.B) dst * Rotire stanga prin C * * * * RRA(.B) dst Rotire dreapta aritmetică 0 * * * RRC(.B) dst Rotire dreapta prin C * * * * SBC(.B) dst * Scade not(c) din destinatie dst + 0FFFFh + C dst * * * * SETC * Setare C 1 C - - - 1 SETN * Setare N 1 N - 1 - - SETZ * Setare Z 1 C - - 1 - SUB(.B) src,dst Scade sursa din destinatie dst +.NOT.src + 1 dst * * * * SUBC(.B) src,dst Scade sursa şi not(c) din destinatie dst +.NOT.src + C dst * * * * SWPB dst Permută octetii(bytes) - - - - SXT dst Extindere de semn 0 * * * TST(.B) dst * Testare destinatie dst + 0FFFFh + 1 0 * * 1 XOR(.B) src,dst XOR(SAU EXCLUSIV) între sursă şi destinatie src.xor. dst dst * * * * OBS. 1. Instrucţiunile marcate cu * sunt instrucţiuni emulate. 2. Bitii de stare evoluează astfel: * bitul este afectat - bitul nu este afectat 0 bitul este sters 1 bitul este setat 3. Setul utilizat de operatori logici este:.not. (complement fata de 1),.OR.(sau),.AND.(si),.XOR. (sau exclusiv). 15