Microprocesorul Intel 8086 Si Mediul Emu8086
CUPRINS
INTRODUCERE
MICROPROCESORUL INTEL 8086 ȘI MEDIUL EMU8086
1.1 Microprocesorul Intel 8086
1.1.1 Unitatea de execuție (UE
1.1.2 Unitatea de interfața cu bus-urile (UI
1.1.3 Arhitectura microprocesorului Intel 8086
1.1.4 Funcționarea microprocesorului Intel 8086
1.2 Prezentarea generala EMU8086
1.2.1 Introducere în EMU8086
1.2.2 Componența programului EMU8086
1.2.3 Compilarea și asamblarea programelor în limbajul asamblor 8086
1.2.4 Caracteristici cheie ale EMU8086
2. ELABORAREA LUCRARILOR DE LABORATOR PENTRU STUDIEREA
MICROPROCESORULUI INTEL8086 PRIN INTERMEDIUL MEDIULUI EMU8086
2.1 Lucrarea de laborator nr.1: Studiul modului de programare în mediul EMU8086
2.1.1 Scopul lucrarii
2.1.2 Noțiuni teoretice
2.1.3 Sarcina pentru acasă
2.1.4 Sarcina de laborator
2.1.5 Conținutul dării de seamă
2.1.6 Întrebari de control
2.2 Lucrarea de laborator nr.2: Realizarea unui program simplu pentru microprocesorul
Intel 8086
2.2.1 Scopul lucrarii
2.2.2 Noțiuni teoretice
2.2.3 Sarcina pentru acasă
2.2.4 Sarcina de laborator
2.2.5 Coniuținutul dării de seamă
2.2.6 Întrebari de control
2.3 Lucrarea de laborator nr.3
2.3.1 Scopul lucrării
2.3.2 Noțiuni teoretice
2.3.3 Sarcina pentru acasă
2.3.4 Sarcina de laborator
2.3.5 Conținutul dării de seamă
2.3.6 Întrebari de control
2.4 Instrucțiuni de securitate a muncii la calculatoare
3. ARGUMENTAREA ECONOMICĂ
3.1 Xxxxxxxxxxxxxxxxxx
3.2 Xxxxxxxxxxxxxxxxxx
3.3 Xxxxxxxxxxxxxxxxxx
4. CONCLUZII
5. BIBLIOGRAFIE
6. ANEXE
INTRODUCERE
Crearea unui ciclu de lucrări de laborator pentru studierea microprocesorului Intel 8086 prin emulare va face posibilă obținerea unor cunoștințe de către studenți referitor la structura unui microprocesor la general și căpătarea unor deprinderi de lucru în Emu8086.
Microprocesorul este o componentă electronică ce poate procesa două tipuri de informație:date și comenzi. El primește și trimite aceste informații,codate în limbaj binar,prin impulsuri electrice. În ciuda complexității sale,microprocesorul este alcătuit în principal dintr-un singur element de baza: tranzistorul(inventat în 1947).Asamblând milioane de tranzistori,se pot crea comenzi ce analizează starea unor curenți electrici,rezultând în execuția pe plan logic a unei adunări,a unei comparații între două date etc.. Mărimea unui astfel de tranzistor este foarte redusă,de ordinul miilor de atomi. Toate componentele calculatorului,inclusiv procesorul și memoria,sunt sincronizate de impulsurile unui generator de tact.
Când vorbim despre procesoare,ne referim automat la CPU(Central Processing Unit),însa majoritatea componentelor dintr-un calculator sunt dotate cu microprocesoare,acestea controlând placa de sunet,de rețea sau placa grafică(unde este folosită denumirea de GPU-Graphic Processing Unit,procesor ce rivalizează în număr de tranzistori cu un CPU).Circuitele procesoare ale componentelor și perifericelor sunt atât de specializate încât nu pot comunica direct între ele,în schimb ele depun informațiile utile în zone specifice ale memoriei,de unde procesorul le poate extrage,prelucrând și coordonând activitatea acestora. Deoarece toate informațiile tranzitează obligatoriu CPU-ul, putere globală de calcul a calculatorului va depinde de acesta.
MICROPROCESORUL INTEL 8086 ȘI MEDIUL EMU8086
1.1 Microprocesorul Intel 8086
Microprocesorul Intel 8086 care va fi studiat în acest ciclu de lucrări de laborator este o unitate centrală de prelucrare formată din 2 componente:
1.1.1 Unitatea de execuție (UE)
Unitatea de execuție (UE) decodifică instrucțiunile numerice, dă comenzi interne pentru efectuarea calculelor și comenzi externe către cea de-a doua unitate. UE conține 8 locații de memorie internă numite registre de uz general. Registrele oferă o capacitate de memorare mică dar și un acces (citire sau scriere) foarte rapid. Pentru a stoca o cantitate mai mare de date (codurile numerice ale instrucțiunilor și variabilele programelor) este necesară conectarea microprocesorului cu o memorie de capacitate mare, numită memorie principală (MP). Desigur că accesul la MP este mult mai lent.
1.1.2 Unitatea de interfață cu bus-urile(UI)
Unitatea de interfață cu bus-urile (UI) calculează adresele MP și IO, transferă datele între UE si MP sau între UE si I/O, și transferă către UE codurile numerice ale instrucțiunilor citite din MP. Pentru a identifica în mod unic fiecare dintre locațiile MP si IO, este necesară asocierea unor referințe numerice numite adrese. De aceea UI este responsabilă de generarea adreselor către MP.
Execuția unui program într-un sistem cu microprocesor are ca efect (într-o abordare simplificată) repetarea unui ciclu a pașilor următori :
1.Extragerea instrucțiunilor din memorie;
2.Citirea unui operand (dacă se cere);
3.Execuția instrucțiunilor;
4.Scrierea rezultatului;
1.1.3 Arhitectura microprocesorului Intel 8086
Structura microprocesorului Intel 8086 este de tip "pipe-line" (prezintă paralelism temporal) permițând efectuarea în același timp a doua operații diferite de către cele doua unități diferite ale sale – UE decodifică instrucțiunile și efectuează calculele, în timp ce UI calculează adresele și efectuează transferurile.
Astfel, cele doua unități ce compun UCP efectuează autonom secvențe de operații proprii, transferându-și în același timp informații. Secvențele de operații efectuate de cele două unități ale microprocesorului pentru a executa instrucțiunile sunt numite cicluri de instrucțiune, pentru UE și cicluri mașină de bus, pentru UI.
Figura 1.1 Arhitectura microprocesorului Intel 8086[7]
1.1.4 Funcționarea microprocesorului Intel 8086
Transferurile între UE și UI sau între microprocesor și MP sau IO se fac în general sub formă de cuvinte de date de 16 biți. De aceea bus-ul intern prin care comunică UE și UI al microprocesorului Intel 8086 este de 16 biți. Pentru compatibilitatea cu microprocesoarele care lucrează pe 8 biți, și Intel 8086 poate transfera valori sub formă de octeți (date de 8 biți). De aceea locațiile MP și ale IO sunt octeți.
Microprocesorul Intel 8086 poate lucra cu maxim 1 M octeți de MP, adică poate genera cel mult 1 M de adrese distincte. Deoarece 1M=, înseamnă ca adresele microprocesorului Intel 8086 sunt reprezentabile cu 20 de biți.
În figura 1.2 este reprezentată schema bloc a unui sistem cu microprocesor I8086.
Microprocesorul Intel 8086 comunică cu exteriorul (MP și IO) prin 3 bus-uri sau magistrale:
Bus-ul de date (BD), care are 16 biți;
Bus-ul de adrese (BA), care are 20 biți;
Bus-ul de comenzi (BC).
Figura 1.2 Schema bloc a unui sistem cu microprocesor I8086.[1]
Prin emulare se subânțelege proprietatea unui sistem de calcul numeric de a executa programe scrise în limbajul mașină al unui alt sistem și de a obține performanțe similare în privința timpului de calcul. EMU8086 este un emulator pentru microprocesoarele 8086 (compatibil Intel și AMD) având integrat programul de conversie în cod mașină, asamblorul.
1.2 Prezentarea generala EMU 8086
1.2.1 Introducere în Emu8086
Emulatorul EMU8086 folosit pentru emularea microprocesoarelor Intel 8086 rulează programele scrise de către utilizator exact ca un microprocesor real, în modul pas cu pas pentru observarea efectului fiecărei instrucțiuni. Acest lucru este posibil deoarece acest program prezintă conținutul regiștrilor microprocesorului, a memorie, a stivei, valoarea variabilelor precum și starea fanioanelor. Instrucțiunile programului pot fi executate pas cu pas în mod normal dar există posibilitatea de execuție și în sens invers. Pentru a rula în mod real programul realizat, emulatorul poate realiza o dischetă bootabilă creând un mini sistem de operare necesar rulării aplicației de pe dischetă. Acest program include și mai multe dispozitive virtuale externe : robot, motor pas cu pas, afișaj cu leduri etc., ce pot fi utilizate în experimente dar permite și realizarea și utilizarea propriilor dispozitive virtuale.
Realizarea unui program nou impune deschiderea unui fișier nou cu butonul New, care deschide fereastra din care se alege formatul fișierului. Pentru aplicațiile, simple, de laborator in care programul nu depășește 64Kb se bifează .COM (Figura 1.3).
Emulatorul rulează sub Windows și are incluse următoarele unelte pentru ușurarea programării:
1. execuția programului pas cu pas;
2. tabel coduri ASCII;
3. calculator pentru realizarea de calcule în binar, octal, zecimal și hexazecimal;
4. convertor de variabile în bazele de numerație zecimala, hexazecimala, binar;
5. buton de apelare a programelor demonstrative realizate de furnizorul emu8086.
Figura 1.3 Fereastra din care se alege formatul fișierului[5]
În acest mod se pot crea/modifica programe-sursă scrise în limbajul de asamblare al microprocesorului Intel 8086, sau orice alte texte ASCII.
Figura 1.4 Fereastra de editare a programului în asamblor[5]
Ceea ce ține de salvarea fișierului sursa,atunci se permite scrierea pe disc a fișierului aflat în editare. Programul solicită numele sub care va fi salvat fișierul text. Daca nu se introduce extensia în mod explicit, fișierului i se va atribui implicit extensia ASM.
Citirea fișierului sursa se realizează ca la orice editor de text utilizând Open, introducându-l în buffer-ul de editare.
Dacă ne referim la listarea fișierului text,atunci după asamblarea fișierului poate fi vizualizat listingul,din fereastra Assembler status se apasă butonul View și se alege Listing. Permite vizualizarea conținutului unui fișier, octet cu octet, atât în valori hexazecimale cât și în caractere ASCII.
1.2.2 Componența programului EMU8086
La deschidere programul va întreba utilizatorul ce format va avea fișierul final executabil realizat în urma emulării programului: .com, .exe, sau .bin pentru includerea de la început a instrucțiunilor specifice necesare.
Interfața programului este prezentată în imaginea următoare:
Figura 1.5 Interfața programului EMU8086[2]
În fereastra principală (1) se va edita programul utilizând instrucțiunile specific programării în cod mașină. După terminarea editării codului sursă a programului se va da comanda de compilare (2) pentru verificarea corectitudinii programului.Dacă sunt probleme softul va specifica în fereastra de compilare erorile găsite și tipul acestora pentru depanarea lor. În caz de succes se va cere salvarea programului și apoi se poate da în execuție aplicația de emulare cu ajutorul butonului (3) din fereastra programului sau butonul dreapta jos din fereastra de compilare.
La emulare se vor deschide automat două ferestre: fereastra codului programului și fereastra de emulare a codului, astfel încât să se poată urmării pas cu pas efectul fiecărei instrucțiuni.
Figura 1.6 Fereastra codului programului și fereastra de emulare a codului[2]
În fereastra de emulare cu ajutorul butoanelor 1, există posibilitatea de rulare a programului pas cu pas, se execută numai câte o instrucțiune, sau rularea tuturor instrucțiunilor cu un timp de întârziere între ele ce poate fi controlat cu ajutorul cursorului 2.
Figura 1.7 Fereastra ce cuprinde codul mașină dezasamblat[2]
În panoul 3 este prezentat codul mașină dezasamblat pentru a putea fi urmărit în paralel cu cel asamblat din fereastra de cod. În partea stângă a ferestrei de emulare 4, 5, se prezintă conținutul regiștrilor microprocesorului. Dacă se dă dublu click pe căsuță fiecărui registru, există posibilitatea de acces la valorile conținute de acesta, implicit de modificare a lor. Cu ajutorul butoanelor 7 din partea dreaptă jos a ferestrei de emulare, se pot afișa ferestrele ce afișează conținutul stivei, a fanioanelor precum și a unități de calcul a programului este prezentată în imaginea următoare:
Figura 1.5 Interfața programului EMU8086[2]
În fereastra principală (1) se va edita programul utilizând instrucțiunile specific programării în cod mașină. După terminarea editării codului sursă a programului se va da comanda de compilare (2) pentru verificarea corectitudinii programului.Dacă sunt probleme softul va specifica în fereastra de compilare erorile găsite și tipul acestora pentru depanarea lor. În caz de succes se va cere salvarea programului și apoi se poate da în execuție aplicația de emulare cu ajutorul butonului (3) din fereastra programului sau butonul dreapta jos din fereastra de compilare.
La emulare se vor deschide automat două ferestre: fereastra codului programului și fereastra de emulare a codului, astfel încât să se poată urmării pas cu pas efectul fiecărei instrucțiuni.
Figura 1.6 Fereastra codului programului și fereastra de emulare a codului[2]
În fereastra de emulare cu ajutorul butoanelor 1, există posibilitatea de rulare a programului pas cu pas, se execută numai câte o instrucțiune, sau rularea tuturor instrucțiunilor cu un timp de întârziere între ele ce poate fi controlat cu ajutorul cursorului 2.
Figura 1.7 Fereastra ce cuprinde codul mașină dezasamblat[2]
În panoul 3 este prezentat codul mașină dezasamblat pentru a putea fi urmărit în paralel cu cel asamblat din fereastra de cod. În partea stângă a ferestrei de emulare 4, 5, se prezintă conținutul regiștrilor microprocesorului. Dacă se dă dublu click pe căsuță fiecărui registru, există posibilitatea de acces la valorile conținute de acesta, implicit de modificare a lor. Cu ajutorul butoanelor 7 din partea dreaptă jos a ferestrei de emulare, se pot afișa ferestrele ce afișează conținutul stivei, a fanioanelor precum și a unități de calcul aritmetico logic (ALU). Cu ajutorul butonului Load (8), există posibilitatea de a deschide în fereastra de emulare a unui program executabil fără a avea codul sursă a acestuia. În realizarea diferitelor programe ce pot fi experimentate utilizând emulatorul EMU8086, pot fi utilizate și diferite dispozitive virtuale externe, robot, motor pas cu pas, afișaj cu leduri ce pot fi lansate din meniul programului.
Pentru ușurarea realizării diferitelor operații de calcul necesare editării codului sursă a unui program nou, programul include un calculator și un convertor de numere între cele 4 baze de numerație 10, 2, 8 și 16. În plus acest soft include și câteva programe simple ce pot fi utilizate pentru studiul acestuia.
Figura 1.8 Fereastra ce cuprinde programele simple pe care le conține softul[2]
1.2.3 Compilarea si asamblarea programelor în limbajul asamblor 8086
Se scrie programul sursă în aria de text dedicată și se apasă cu mouseul pe butonul Compile sau se apasă tasta F5. Se va deschide fereastra prin care sunteți intrebați calea unde se va salva fisierul compilat si numele lui. După compilare în codul masină toate variabilele sunt înlocuite automat cu offsetul lor. Dacă este încarcat fisierul COM, registrele DS si CS vor avea aceeasi valoare.
Când se salvează un fișier asamblor, compilatorul salvează deasemenea două alte fișiere. Acestea sunt utilizate de emulator pentru a arăta codul sursă original, în timpul execuției programului binar, marcându-se linia în curs de execuție. Foarte des programul original diferă de programul dezasamblat deoarece nu există comentarii, segmente si nici variabile declarate. Directiva de compilare nu produce un program în binar, dar totul este convertit în cod masină pur.
Extensii ale fișierelor salvate pe hard disc:
*.asm – conține codul sursă original, acesta este utilizat pentru a se realiza un fișier executabil;
*.debug –conține codul original care este prezentat în timpul execuției programului, fiind marcată linia în curs de execuție;
*.symbol – conține tabloul de simboluri. Fișierul prezintă fereastra cu variabile, este un fișier text, se poate deschide cu editoare de text (inclusiv în editorul sursă emu8086);
*.binf – acest fișier ASCII conține informații utilizate de emulator pentru salvarea fișierelor BIN la locația specificată și pentru setarea valorilor registrelor care sunt prioritare în execuție; (creat doar daca un executabil este un fișier BIN).
Compilatorul nu este sensibil la modul de scriere, litere mici sau mari.
În lista memoriei, prima linie conține un offset, a doua linie conține o valoare hexazecimală, a treia-o valoare zecimală iar ultima este valoarea ASCII a unui caracter.Dupa compilare se apasă pe butonul Emulate pentru a se încarca fișierul compilat în emulator.
Se poate face rularea directă, cu comanda Run din submeniul Execuție sau cu butonul . Nu se recomandă însa această comandă decât atunci când programul nou creat este suficient de bine pus la punct pentru a nu bloca sistemul. În fazele inițiale ale dezvoltării programului se recomandă testarea și depanarea cu comanda Emulate.
1.2.4 Caracteristici cheie ale EMU8086
Iată câteva caracteristici cheie ale "Emulator microprocesor Emu8086"care pot fi deduse de mai sus:
• Totul pentru a studia arhitectura calculatoarelor și de codificare, în limbaj de asamblare.
• Emulare software-ul complet de microprocesor Intel 8086.
• Depanator interactiv și dezasamblor.
• Pas-cu-pas limbaj de asamblare Tutoriale.
• Integrat 8086 de asamblare.
• Source Editor avansat cu evidențiere Sintaxa.
Studierea microprocesorului prin intermediul emulatorului Emu8086 va permite familiarizarea cu posibilitațile de editare, asamblare și rulare a programelor scrise în limbajul de asamblare ale microprocesoarelor Intel funcționând “în modul real”.
2. ELABORAREA LUCRARILOR DE LABORATOR PENTRU STUDIEREA MICROPROCESORULUI INTEL8086 PRIN INTERMEDIUL MEDIULUI EMU8086
Lucrarea de laborator nr.1
Studiul modului de programare in mediul EMU 8086
Scopul lucrării
Scopul acestei lucrări de laborator este de inițiere a studenților în utilizarea programului EMU 8086 și familiarizarea cu posibilitațile de editare,asamblare și rulare a programelor scrise în limbajul de asamblare ale microprocesoarelor Intel,funcționind “in mod real”.
Noțiuni teoretice
Emu8086 este un emulator al microprocesorului 8086 (compatibil Intel si AMD) cu asamblor 8086 integrat si tutoriale pentru începatori. Emulatorul execută programe ca și microprocesoarele reale in modul pas cu pas. Pe interfața sa se pot vizualiza registrele, memoria, stiva, variabile și flaguri. Toate valorile de memorie pot fi investigate și editate printr-un dublu clic. Instrucțiunile pot fi executate în direcția înainte sau înapoi. Emulatorul poate crea un sistem de operare foarte scurt (tiny) și scrie codul binar pe un floopy disc bootabil.
Acest pachet soft include câteva dispozitive virtuale externe: robot, motor pas cu pas, afișor cu LED-uri si o intersecție luminata. Toată comunicarea dintre microprocesor si dispozitive este trecută prin fișierul c:emu8086.io, emularea instrucțiunilor de intrare/ieșire cere schimbarea octeților corespunzători in acest fișier binar.
După lansarea programului emu8086, pe ecranul calculatorului apare interfața cu meniuri din care se poate alege tipul de fișier: crearea unui proiect nou(opțiunea New),vizualizarea unor exemple deja existente(opțiunea Code examples), urmarirea tutorialului(opțiunea Quick start tutor), Recent files așa cum se poate urmări în figura de mai jos.
Figura 2.1 Fereastra de inceput a EMU8086
Realizarea unui program nou impune deschiderea unui fișier nou cu butonul New, care deschide fereastra din care se alege formatul fișierului. Pentru aplicațiile, simple, de laborator in care programul nu depașește 64Kb se bifeaza .COM .
Figura 2.2 Fereastra în care se alege formatul fișierului
Principalele comenzi de editare sunt aceleași ca la orice editor simplu de text. În acest mod se pot crea/modifica programe sursa scrise în limbajul de asamblare al microprocesorului Intel 8086, sau orice alte texte ASCII.
Figura 2.3 Fereastra de editare a programului
ORG 100h este o directiva a compilatorului. Prin această se va spune compilatorului unde să plaseze codul sursă în memorie. Această directivă este importanta când se lucrează cu variabile. Ea spune compilatorului ca fișierele executabile sa fie incarcate la offset 100h (256 octeti), deci compilatorul trebuie să calculeze adresa corecta pentru toate variabilele, când se inlocuiește numele variabilei cu ofsetul ei. Directivele nu vor fi convertite niciodata în cod masină.
Fișierele executabile sunt incarcate de la adresa 100h deoarece sistemul de operare stocheaza cateva date în primii 256 octeti ai segmentului indicat de CS (segment de cod) ca de exemplu parametrii liniei de comandă și altele. Aceasta este valabila doar pentru fișiere COM, fișierele EXE sunt incarcate la ofset 0000, și în general utilizeaza segmente speciale pentru variabile.
Salvarea fișierului sursă se permite pe discul fișierului aflat in editare. Programul solicită numele sub care va fi salvat fișierul text. Daca nu se introduce extensia în mod explicit, fișierului i se va atribui implicit extensia ASM.
Citirea fișierului sursă se realizeaza ca la orice editor de text utilizând Open, introducându-l în buffer-ul de editare.
După asamblarea fișierului poate fi vizualizat listingul,din fereastra Assembler status se apasă butonul View și se alege Listing. Se permite vizualizarea conținutului unui fișier, octet cu octet, atât în valori hexazecimale cât și în caractere ASCII.
2.1.2.1 Compilarea si asamblarea programelor scrise in limbajul asamblor 8086
Se scrie programul sursă în aria de text dedicată și se apasă cu mouse-ul pe butonul Compile sau se apasă tasta F5. Se va deschide fereastra prin care sunteți intrebați calea unde se va salva fișierul compilat si numele lui. Dupa compilare în codul masină toate variabilele sunt înlocuite automat cu offsetul lor. Dacă este incărcat fișierul COM, registrele DS și CS vor avea aceeași valoare.
Când se salvează un fișier asamblor, compilatorul salvează deasemenea două alte fișiere. Acestea sunt utilizate de emulator pentru a arata codul sursă original, în timpul execuției programului binar, marcându-se linia în curs de execuție. Foarte des programul original diferă de programul dezasamblat deoarece nu există comentarii, segmente și nici variabile declarate. Directiva de compilare nu produce un program în binar, dar totul este convertit în cod mașină pur.
Extensii ale fișierelor salvate pe hard disc:
*.asm – conține codul sursă original, acesta este utilizat pentru a se realiza un fișier executabil;
*.debug – contine codul original care este prezentat în timpul execuției programului, fiind marcată linia în curs de execuție;
*.symbol – conține tabloul de simboluri. Fișierul prezintă fereastra cu variabile, este un fișier text, se poate deschide cu editoare de text (inclusiv în editorul sursă emu8086);
*.binf – acest fișier ASCII conține informații utilizate de emulator pentru salvarea fișierelor BIN la locația specificată și pentru setarea valorile registrelor care sunt prioritare în execuție; (creat doar daca un executabil este un fișier BIN).
ATENTIE!
Compilatorul nu este sensibil la modul de scriere, litere mici sau mari.
În lista memoriei, prima linie conține un offset, a doua linie conține o valoare hexazecimala, a treia o valoare zecimala iar ultima este valoarea ASCII a unui caracter.Dupa compilare se apasa pe butonul Emulate pentru a se încarca fișierul compilat în emulator.
2.1.2.2 Modul de utilizare al emulatorului
Emulatorul poate fi utlizat chiar dacă programul nu este scris în Editor. Din meniul Emulator selectați Show Emulator. Se încarca un fișier executabil apasând pe butonul Load din emulator .Însa odată ce programul a fost încărcat în emulator,va apărea fereastra din figura 2.4 în care se pot urmări în partea de jos,dinspre stînga spre dreapta:în prima subfereastră-regiștrii emulatorului,în următoarea subfereastră-adresa fizică:valoarea ei în hexa,în zecimal și codul ASCII corespunzător,iar în ultima subfereastră-codul sursă al programului în limbaj mașină,înainte de a fi asamblat.
Modurile de execuție ale programelor sunt:
1. [Single Step] – execuția instrucțiunilor pas cu pas. Lucrând în acest mod se pot vizualiza modificarile care sunt realizate în interiorul microprocesorului dupa execuția instrucțiunii.
2. [Run] – execuția instrucțiunilor una dupa alta cu o întârziere între ele setată prin Step delay.
Figura 2.4 Fereastra emulatorului. Sunt indicate: butonul de incarcare a fișierului executabil, .lista memoriei si codul mașina dezasamblat[5]
În fereastra 2.4,dacă se va da dubluclick în caseta corespunzătoare regiștrilor,se va deschide o nouă fereastră Extended value viewer, ce conține valoarea acelui registru convertită în hexa,binar și zecimal.Prin intermediul acestei ferestre,valoarea din registru poate fi modificată direct,în timpul rulării.O operație de dubluclick asupra unei zone de memorie,va lista cuvântul din memorie aflat la locația selectată.
Figura 2.5 Fereastra de vizualizare și modificare a regiștrilor(stânga) sau a unei zone din memorie(dreapta)
Emulatorul rulează programele pe un computer virtual,fapt care blochează accesarea hardware-ului real,precum și driverele hard și memoria.În urma execuției fiecărei instrucțiuni putem urmări modificarea conținutului regiștrilor din CPU. De asemenea,există posibilitatea de a vizualiza conținutul memoriei,al ALU,flag-urile,așa cum se poate urmări în figura 2.6
Figura 2.6 Ferestre de vizualizare a conținutului ALU,flag-urilor al stivei și al variabilelor definite în memorie.
Ecranul emulatorului poate fi folosit pentru datele de ieșire.Acest ecran poate fi obținut tot din meniul View,fereastra din figura 2.7.
Figura 2.7 Fereastra de vizualizare a ecranului
Din meniul Math,se pot deschide ferestrele din figura 2.8,corespunzătoare unui:
-calculator (expression evaluator) ce poate fi folosit pentru operații logice și aritmetice cu valori hexazecimale,octale,binare, și zecimale și respectiv
-convertor(base convertor) ,prin care numerele pot fi convertite dintr-o baza de numerație in alta.
Figura 2.8 Ferestrele calculatorului și convertorului
EMU8086 include și câteva dispozitive virtuale cu ajutorul cărora se pot realiza experimente: acestea includ un termometru, un ecran virtual, un sistem semafor, un motor pas cu pas, un robot, o imprimantă și alte interfețe cum se poate vedea în figura 2.9.
a)b)
c) d)
Figura 2.9 Ferestrele unor dispozitive virtuale existente în emulator: termometru(a),motor pas cu pas(b),sistem semafor(c),imprimanta(d).
2.1.2.3 Modul de lucru in Emulator
Toate modificarile realizate în interiorul microprocesorului în timpul rulării pas cu pas al programului în Emu8086 se pot observa și verifica cu ajutorul acestui emulator.Dati dublu clic pe fereastra registrelor si se va deschide fereastra 'Extended Viewer' cu valori ale registrelor convertite in hexa. Valorile registrelor se pot modifica direct in fereastra. Dublu clic pe lista memoriei deschide 'Extended Viewer' cu valori WORD încarcate din lista memoriei, din locația selectată. Cel mai puțin semnificativ octet este la adresa mai puțin semnificativă. Valorile din locațiile de memorie pot fi modificate direct in fereastra 'Extended Viewer'.Butonul Flags permite vizualizarea și modificarea flagurilor în timpul execuției.
Variabilele sunt locații de memorie. Pentru un programator este mai usor să aibă valori stocate în variabile numite “variabila1” decât prin apel la adresa 5A73:235B, în special când are 10 sau mai multe variabile. Compilatorul suportă 2 tipuri de variabile octet si cuvânt.Variabilele care se regasesc în programul executat pot fi vizualizate selectând Variables din meniul View al emulatorului.
Sintaxa generală:
nume DB valoare
nume DW valoare
Nota: DB-define byte
DW-define worda
Nume poate fi orice combinație de litere sau cifre cu condiția că primul caracter să fie o literă. Valoarea poate fi orice valoare numerică suportată în una din bazele de numerație (hexa, binar, zecimal) sau “?” simbol pentru variabilele neinițializate.
Compilatorul este informat despre tipul datei utilizand unul din prefixele:
byte ptr – pentru octet
word ptr – pentru cuvant.
Exemplu:
byte ptr [BX] ; acces octet
sau
word ptr [BX] ; acces cuvant.
Asamblorul suporta prefixe scurte ca:
b. – pentru byte ptr
w. – pentru word ptr
În anumite cazuri asamblorul poate calcula tipul datei automat.
Constantele sunt la fel ca variabilele, acestea existând însa doar pana programul este compilat (asamblat). Dupa definirea unei constante valoarea ei nu poate fi schimbată. Pentru definirea constantei se utilizeaza directiva EQU.
Sintaxa generală:
nume EQU < orice expresie >
Exemplu:
K equ 2
Mov AX,K
Codul de mai sus este identic cu Mov AX,2.
Figura 2.10 Fereastra de vizualizare a constantelor si variabilelor utilizate într-un program[2]
Variabilele pot fi observate în orice baza de numerație:
HEX – hexazecimal (baza 16).
BIN – binar (baza 2).
OCT – octal (baza 8).
SIGNED – zecimal cu semn (baza 10).
UNSIGNED – zecimal fara semn (baza 10).
CHAR – cod caracter ASCII (sunt 256 simboluri, câteva simboluri sunt invizibile).
1. Numerele pot fi introduse în orice baza de numerație prin sufixul 'h' hexa, 'b' binar, 'o' octal, numerele zecimale nu au nevoie de sufix.
2. Șirurile de caractere pot fi introduse in urmatorul mod: 'hello world', 0 (acest sir se termina prin 0).
3. Matricea poate fi introdusă astfel:1, 2, 3, 4, 5 (Matricea poate fi de octeți sau cuvinte, depinde de modul cum sunt setate variabilele inițiale BYTE sau WORD).
4. Expresiile sunt convertite automat, de exemplu, daca se scrie expresia: 5 + 2 dupa enter va fi convertita in 7 etc.
Sarcina pentru acasă
Să se faca cunostință cu mediul EMU8086 și anume metoda de editare a programului,salvarea fișierului sursă,citirea fișierului sursă,listarea fișierului text.
Să se studieze punctul referitor la compilarea și asamblarea programelor scrise în limbajul asamblor 8086.
Să se studieze modul de utilizare al emulatorului și modul de lucru în emulator.
Să se faca cunoștința cu instrucțiunile microprocesorului Intel8086 din anexă.
Sarcina de laborator
Se deschide un proiect nou în care fișierul să fie de tip com.
Se studiaza interfața programului EMU8086 și fiecare student în parte face cunoștința cu botoanele din toulbarul programului și deduce funcția fiecărui buton.
Din meniu programului,accesând butonul „Samples” studenții,fiecare în parte iarăși sau pe echipe deschid un program simplu,la fiecare diferit și îl studiază și anume folosind instrucțiunile din anexa explică programul,
Se va complila programul,utilizând butonul „Compile” pentru a identifica daca există erori sau atenționari și tipul lor și liniile de program care le produc,apoi se apsă butonul „Close” din fereastra care apare după compilare.
Dupa compilare se execută programul simplu pentru a vedea care modificari se produc,respectiv se apasa butonul „Emulate” și apare fereastra emulatorului care la fel,se studiază.Din fereastra emulatorului se va apasa butonul “Single Step” prin care se executa programul pas cu pas.
La fiecare pas precedent se execută screenshoturi și se indică explicația, care ulterior se vor amplasa în darea de seamă.
Conținutul dării de seamă
Foaia de titlu.
Scopul lucrării.
Rezultatul lucrului pentru acasă.
Rezultatele lucrării de laborator.
Concluzii referitoare la rezultatele îndeplinitii lucrării.
Întrebări de control
Ce este un EMU8086 și care sunt caracteristicile principale ale lui?
Enumerați funția fiecarui buton în parte ce se conține in EMU8086?
Ce instrucțiuni a microprocesorului Intel8086 a-ți studiat în laborator și care sunt funcțiile lor?
Din ce este compus emulatorul și când se poate utiliza el?
Câte tipuri de execuție a programului există în emulator și prin ce se deosebesc ele?
Dați sintaxa de declarare a unei variabile?
Lucrarea de laborator nr.2
Realizarea unui program simplu pentru microprocesorul Intel 8086
Scopul lucrării
În cadrul acestei lucrări de laborator,pe baza cunoștințelor căpătate în cadrul laboratorului precedent,va avea loc studierea în continuare a programului EMU8086 și familiarizarea cu unele instrucțiuni ale microprocesorului Intel8086,precum și editarea unor programe simple,compilarea lor,încarcarea în emulator.După care se va rula programul,fie pas cu pas,fie în mod continuu.
Noțiuni teoretice
Un limbaj de asamblare conține instrucțiuni corespunzătoare unor operații simple care sunt direct interpretate și executate de procesor. Fiecărei instrucțiuni din limbajul de asamblare îi corespunde în mod strict un singur cod executabil. În contrast, unei instrucțiuni dintr-un limbaj de nivel înalt (ex: C, Pascal, etc.) îi corespunde o secvență de coduri (instrucțiuni în cod mașină). Un anumit limbaj de asamblare este specific pentru un anumit procesor sau eventual pentru o familie de procesoare. Instrucțiunile sunt în directă corelație cu structura internă a procesorului. Un programator în limbaj de asamblare trebuie să cunoască această structură precum și tipurile de operații permise de structura respectivă.
Un program în asamblare scris pentru o anumită arhitectură de procesor nu este compatibil cu un alt tip de procesor. Pentru implementarea unei aplicații pe un alt procesor programul trebuie rescris. În schimb programele scrise în limbaj de asamblare sunt în general mai eficiente atât în ceea ce privește timpul de execuție cât și spațiul de memorie ocupat de program. De asemenea, programarea în limbaj de asamblare dă o mai mare flexibilitate și libertate în utilizarea resurselor unui calculator. Cu toate acestea astăzi utilizarea limbajului de asamblare este mai puțin frecventă deoarece eficiența procesului de programare este mai scăzută, există puține structuri de program și de date care să ușureze munca programatorului, iar programatorul trebuie să cunoască structura procesorului pentru care scrie aplicația. În plus programele nu sunt portabile, adică nu rulează și pe alte procesoare.
Un program scris în limbaj de asamblare conține instrucțiuni și directive. Instrucțiunile sunt traduse în coduri executate de procesor; ele se regăsesc în programul executabil generat în urma compilării și a editării de legături. Directivele sunt construcții de limbaj ajutătoare care se utilizează în diferite scopuri (ex: declararea variabilelor, demarcarea segmentelor și a procedurilor, etc.) și au rol în special în fazele de compilare și editare de legături. O directivă nu se traduce printr-un cod executabil și în consecință NU se execută de către procesor.
O instrucțiune ocupă o linie de program și se compune din mai multe câmpuri, după cum urmează (parantezele drepte indică faptul că un anumit câmp poate să lipsească):
[<eticheta>:] [<mnemonica> [<parametru_1>[,<parametru_2>]][;<comentariu>]
<eticheta> – este un nume simbolic (identificator) dat unei locații de memorie care conține instrucțiunea care urmează; scopul unei etichete este de a indica locul în care trebuie să se facă un salt în urma executării unei instrucțiuni de salt; eticheta poate fi o combinație de litere, cifre și anumite semne speciale (ex: _), cu restricția ca prima cifră să fie o literă
<mnemonica> – este o combinație de litere care simbolizează o anumită instrucțiune (ex: add pentru adunare, mov pentru transfer, etc.); denumirile de instrucțiuni sunt cuvinte rezervate și nu pot fi utilizate în alte scopuri
<parametru_1> – este primul operand al unei instrucțiuni și în același timp și destinația rezultatului; primul parametru poate fi un registru, o adresă, sau o expresie care generează o adresă de operand; adresa operandului se poate exprima și printr-un nume simbolic (numele dat unei variabile)
<parametru_2> – este al doilea operand al unei instrucțiuni; acesta poate fi oricare din variantele prezentate la primul operand și în plus poate fi și o constantă
<comentariu> – este un text explicativ care arată intențiile programatorului și efectul scontat în urma execuției instrucțiunii; având în vedere că programele scrise în limbaj de asamblare sunt mai greu de interpretat se impune aproape in mod obligatoriu utilizarea de comentarii; textul comentariului este ignorat de compilator; comentariul se considera până la sfârșitul liniei curente
Într-o linie de program nu toate câmpurile sunt obligatorii: poate să lipsească eticheta, parametrii, comentariul sau chiar instrucțiunea. Unele instrucțiuni nu necesită nici un parametru, altele au nevoie de unul sau doi parametri. În principiu primul parametru este destinația, iar al doilea este sursa.
Constantele numerice care apar în program se pot exprima în zecimal (modul implicit), în hexazecimal (constante terminate cu litera 'h') sau în binar (constante terminate cu litera 'b'). Constantele alfanumerice (coduri ASCII) se exprimă prin litere între apostrof sau text între ghilimele.
În fereastra de editare a programelor,orice text aflat după ” ; ” nu este parte a programului și este ignorat de către simulator.Comentariile se folosesc pentru a explica ce face programul.Un bun programator folosește multe comentarii,iar acestea nu trebuie să repete pur și simplu codul,ci șă furnizeze explicații suplimentare.
Directiva name “nume” este folosită pentru a specifica numele fișierului de tip .com ce se va crea în urma compilării.
MOV este prescurtarea pentru operația de mutare Move.Aritmetica-ADD se folosesște pentru a aduna doi operanzi.O altă versiune este pentru a aduna un număr la un registru.Rezultatul adunării se va depune în operandul destinție.SUB se folosește pentru a scădea conținutul a doi regiștriȘdin operandul din stânga se scade cel din dreapta,rezultatul fiind depus apoi în cel din stânga.Programul de mai jos este un exemplu în care se utilizeaza aceste instrcțiuni:
Name “add-sub”
Org 100h
;___________Calculează 5 plus 10 și minus 1_______________
MOV AL,5; copiază în registru AL valoarea 5=00000101b
MOV BL,10; copiază în registru BL valoarea 10=00001010b
ADD BL,AL; 5+10=15 (000Fh) valoare stocată în BL
SUB BL,1; 15-1=14 (000Eh) valoare stocată în BL
Programul continuă cu instrucțiuni necesare afișării rezultatului în binar,care vor fi ignorate în lucrarea de față.Scopul acestui program este ca studentul sa urmărească modificările care se produc în regiștri la rularea pas cu pas.
Sarcina pentru acasă
Să se studieze materialul de mai sus și să se facă cunoștință cu instrucțiunile microprocesorului,folosind Anexa.
Să se analizeze programul din Noțiuni teoretice în care au loc două operații:adnare și scădere.
Sarcina de laborator
Se deschide un proiect nou în care fișierul să fie de tip com.
Se editează, compilează programul studiat acasă și se încarcă în emulator,apoi executânduse pas cu pas și se observa modificarile care au loc.
Se scrie un program,de sinestătător,care realizează inmulțirea a două numere,folosind instrucțiunea MUL și deasemea executânduse pas cu pas se observa modificările care au loc.
Se editează textul sursă de mai jos,și anume un program care să permită afișarea pe ecranul monitorului a unui text color.După care se vor observa modificările și se vor face concluzii.
Acest program afiseaza mesajul color "Salut POPOR!" prin scrierea directa in memoria video. In memoria VGA: primul octet este codul ASCII al caracterului,
iar urmatorul octet contine atributele caracterului de afisat.Schimbarea octetului de atribut atrage dupa sine schimbarea culorii de fundal si a culorii caracterului de afisat. Atributul de afisare al caracterului este dat de structura: primul nimb (high) de 4 biti defineste culoarea de fond(background), iar nimb-ul al doilea (4 biti) defineste culoarea de scriere a caracterului (foreground) dupa codul de culoare dat de urmatorul tabel:
Tabelul 2.1 Codurile de culoare.
org 100h; .
start: ; Definirea punctului de intrare în program
; jmp start1
; Dacă am fi avut ceva date, aici le introduceam
; ……………………………………….
;start1:
; Setarea modului video
mov ax, 3 ; Modul text 80×25, 16 culori, 8 pagini
; video (ah=0, al=3)
int 10h ; Seteaza efectiv acest mod video!
; Opreste efectul de palpaire (blinking) si permite afisarea
; pentru toate cele 16 culori:
mov ax, 1003h; Opreste efectul de palpaire
mov bx, 0 ; Permite 16 culori de background (BL=0)
int 10h ; Se lanseaza serviciile BIOS pentru display
; Setarea registrului pentru a contine adresa memoriei video, in
; vederea lucrului direct in meooria video:
mov ax, 0b800h
mov ds, ax
; Afisarea mesajului "Salut POPOR!"
; Se utilizeaza o pereche de doi octeti primul (aflat la adresa para),
; va contine codul ASCII al caracterului, iar al doilea octet,
; aflat la adresa impara va contine atributul de afisare care
; consta in codul de culoare (pentru fundal si pentru caracter).
mov ds:[02h], byte ptr 'S' ; In memoria video se intr."S"
mov ds:[04h], byte ptr 'a' ; In memoria video se intr."a"
mov ds:[06h], byte ptr 'l' ; In memoria video se intr."l"
mov ds:[08h], byte ptr 'u' ; In memoria video se intr."u"
mov ds:[0ah], byte ptr 't' ; In memoria video se intr."t"
mov ds:[0ch], byte ptr ' ' ; In memoria video se intr." "
mov ds:[0eh], byte ptr 'P' ; In memoria video se intr."P"
mov ds:[10h], byte ptr 'O' ; In memoria video se intr."O"
mov ds:[12h], byte ptr 'P' ; In memoria video se intr."P"
mov ds:[14h], byte ptr 'O' ; In memoria video se intr."O"
mov ds:[16h], byte ptr 'R' ; In memoria video se intr."R"
mov ds:[18h], byte ptr '!' ; In memoria video se intr."!"
; Se utilizeaza aceiasi culoare pentru toate caracterele:
mov cx, 12 ; Numarul de caractere de afisat.
mov di, 03h ; Incepand cu caracterul "S"
c:
mov ds:[di], byte ptr 10010100b ; Pe fond albastru
; deschis(1001), se scrie cu rosu(0100)
add di, 2 ; Salt la urmatorul cod ASCII din
; memoria video de tip VGA.
loop c ; Executie bucla pana la epuizarea celor
; 12 caractere ale mesajului.
; Asteapta apasarea unei taste:
mov ah, 0 ; Functia de apasare a unei taste
int 16h ; Lansarea functiilor BIOS de tastatura
; ret ; Retur, cand o folosim ca
; procedura apelata
mov ax,4C00h; Terminare program
int 21h ; Lansare efectiva a terminarii
end start ; Definirea punctului de intrare
După editarea programului sursă,compilare și executare în emulator obținem următorul rezultat:
Figura 2.11 Fereastra în care este reprezentat rezultatul programului de mai sus
La fiecare din punctele anterioare se fac screenshoturi și se salvează care mai apoi se vor introduce în darea de seamă.
Conținutul dării de seamă
Foaia de titlu.
Scopul lucrării.
Rezultatul lucrului pentru acasă.
Rezultatele lucrării de laborator.
Concluzii referitor la rezultatele îndeplinirii lucrării.
Întrebări de control
Ce este un limbaj de asamblare?
Ce este o instrucțiune,câte câmpuri conține ea și care sunt ele?
Explicați fiecare câmp în parte ce se conține intr-o instrucțiune?
Dați exemple de intrucțiuni pe care le-ați folosit în cadrul acestei lucrări și definiți funcția lor?
Explicați un program simplu la alegere studiat în lucrarea data?
Lucrarea de laborator nr.3
Instrucțiuni pentru transferul datelor de tip „clasic”
2.3.1 Scopul lucrării
Familiarizarea în continuare cu mediul EMU8086 și studierea instrucțiunilor de transfer ale microprocesorului I8086.
2.3.2 Noțiuni teoretice
Transferul datelor este una dintre cele mai comune sarcini din programarea în limbaj de asamblare. Data poate fi transferată între registre sau între registre și memorie. Datele imediate pot fi încărcate în registre sau memorie. Transferul se poate face pe octet sau pe cuvânt. Cei doi operanzi trebuie să aibă aceeași dimensiune. Instrucțiunile de transfer a datelor nu afectează indicatorii de condiție (cu excepția celor destinate acestui scop). Ele se clasifică în următoarele tipuri:
instrucțiuni de transfer de tip “clasic”
instrucțiuni de transfer pentru adrese
instrucțiuni de transfer pentru indicatori de condiție
instrucțiuni de intrare / ieșire (transfer cu registrele periferice),
însă în această lucrare vom studia doar instrucțiunile de transfer de tip „classic”.
2.3.2.1 Instrucțiuni de transfer de tip “clasic”
Cuprind următoarele instrucțiuni:
MOV <d>, <s>
XCHG <d>, <s>
XLAT
PUSH <s>
POP <d>
Copierea datelor se realizează cu instrucțiunea MOV. Sintaxa acestei instrucțiuni este următoarea:
MOV {registru | memorie}, {registru | memorie | dată imediată}
Această instrucțiune copiază operandul sursă în destinație. Imediat după execuția unei instrucțiuni MOV operandul sursă și cel destinație au aceeași valoare. Vechea valoare a operandului destinație este pierdută.Nu se pot executa direct următoarele copieri: dată imediată în registru segment, locație de memorie în locație de memorie, registru segment în registru segment și copiere în registrul segment CS.
În continuare se prezintă copieri care necesită două instrucțiuni:
Exemplu: ;copiere dată imediată în registru segment
mov ax, 1000h
mov ds, ax
;locație de memorie în locație de memorie
mov ax, mem1
mov mem2, ax
;registru segment în registru segment
mov ax, ds
mov es, ax
Interschimbarea datelor respectiv a operanzilor sursă și destinație se realizează cu instrucțiunea XCHG. Sintaxa acestei instrucțiuni este următoarea:
XCHG {registru | memorie}, {registru | memorie}
Exemplu
xchg ax, bx ;interschimbă ax cu bx
xchg mem16, ax ;interschimbă cuvântul de memorie mem16
;cu registrul ax
xcgh dl, mem8 ;interschimbă octetul de memorie mem8
;cu registrul dl
xcgh ah, cl ;interschimbă ah cu cl
Instrucțiunea XLAT convertește conținutul registrului al utilizând o tabelă a cărei adresă de început este conținută în registrul bx. Conținutul registrului al este interpretat ca adresă relativă în tabel. Rezultatul conversiei este dat de valoarea octetului aflat în tabelă la această adresă. Sintaxa instrucțiunii este următoarea:
XLAT [registru segment : deplasament]
Utilizarea referirii la o adresă în instrucțiunea XLAT este necesară atunci când tabela nu se află în segmentul de date, care este segmentul implicit pentru această instrucțiune. Permite asamblorului să determine registrul de segment ce trebuie să fie utilizat în execuția instrucțiunii.
Se prezintă un exemplu care determină codul ASCII corespunzător unei cifre hexazecimale.
Exemplu:
;conversie hexazecimal ASCII
;intrare : al = cifră hexazecimală
;ieșire : al = codul ASCII corespunzător
convproc near
mov bx, offset tabel
xlat cs:tabel
ret
conv endp
tabel db ‘0123456789ABCDEF’ ;tabel de coduri ASCII
Instrucțiunile PUSH și POP sunt destinate transferului de date în și din stivă.
Stiva este o zonă de memorie destinată memorării temporare a datelor. Generarea adreselor de lucru cu stiva se face automat, prin gestionarea hardware a registrului indicator al vârfului stivei SP, de către instrucțiunile care folosesc stiva. Din această cauză, aceste instrucțiuni permit accesul numai la vârful stivei. Datele introduse se pot accesa în ordinea inversă introducerii lor (sistemul LIFO – Last In First Out). Inițial stiva nu conține nici o dată. Pe măsura introducerii de date, în timpul rulării programului, dimensiunea stivei crește, întinzându-se spre adrese mai mici. Pe măsura extragerii datelor din stivă, dimensiunea ei se micșorează, prin eliberarea succesivă a locațiilor cu adresa cea mai mică.
Instrucțiunile destinate apelului de subrutină CALL, INT precum și cele de revenire din aceste subrutine RET, IRET folosesc în mod automat stiva pentru salvarea și regăsirea adreselor de revenire.
Instrucțiunea PUSH este folosită pentru introducerea în stivă a unui operand pe 2 octeți. Instrucțiunea POP este folosită pentru extragerea din stivă a ultimului operand introdus. Sintaxa acestor instrucțiuni este următoarea :
PUSH {registru | memorie}
POP {registru | memorie}
În cazul introducerii în stivă, prima operație care se realizează este decrementarea indicatorului de stivă SP cu 2, urmată de memorarea operandului conform acestui indicator. În cazul extragerii din stivă prima operație care se realizează este citirea operandului conform indicatorului de stivă urmată de incrementarea cu 2 a indicatorului.
Instrucțiunile PUSH și POP sunt apropare întotdeauna folosite pereche. În mod normal trebuie să se execute același număr de introduceri și de extrageri în și din stivă pentru a readuce stiva la starea inițială. Cuvintele se extrag din stivă în ordinea inversă introducerii.
Exemplu
int proc far
push ds
push ax
push cx
push si
push bp
… …
pop bp
pop si
pop cx
pop ax
pop ds
iret
int endp
Sunt situații în care readucerea stivei la starea sa inițială se face prin adunarea unui număr corespunzător la registrul SP (descărcarea stivei).
Exemplu:
push ax
push bx
push cx
… …
add sp, 6
Valorile care nu sunt în vârful stivei pot fi accesate totuși prin adresare indirectă, folosind registrul BP ca registru de bază:
Exemplu:
push ax
push cx
push dx
mov bp, sp
… …
mov ax, [bp+4]
mov cx, [bp+2]
mov dx, [bp+0]
… …
add sp, 6
2.3.3 Sarcina pentru acasă
Să se studieze materialul teoretic de mai sus și să se analizeze fiecare instrucțiune în parte.
Să se studieze exemplele din noțiunile teoretice și să se aduca alte exemple,din alte surse,în care se folosesc instrucțiunile date.
Sarcina de laborator
Se deschide un proiect nou în care fișierul să fie de tip com.
Se editează pe rînd exemplele studiate acasă,care conțin instrucțiunile clasice de transfer,apoi se compilează și se încarcă în emulator,executânduse mai apoi pas cu pas pentru a vedea care sunt modificările care se produc.
Să se scrie un program care copiază un șir de valori din locații consecutive de memorie în altă locație aflată în alt segment de date decât primul șir.
Să se scrie un program care duplică ultimele două elemente ale stivei fără a folosi instrucțiuni push sau pop, ci doar prin adresarea stivei folosind regiștrii bp și sp.
La fiecare din punctele anterioare se fac screenshoturi și se salvează care mai opoi se vor introduce în darea de seamă.
Conținutul dării de seamă
Foaia de titlu.
Scopul lucrării.
Rezultatul lucrului pentru acasă.
Rezultatele lucrării de laborator.
Concluzii referitor la rezultatele îndeplinirii lucrării.
Întrebări de control
Cum se clasifică instrucțiunile pentru transferul datelor?
Care sunt instrucțiunile de transfer de tip “clasic”?
Explicați care este funcția instrucțiunei MOV și dați sintaxa acestei instrucțiuni?
Explicați care este funcția instrucțiunei XCHG și dați sintaxa acestei instrucțiuni?
Explicați care este funcția instrucțiunei XLAT și dați sintaxa acestei instrucțiuni?
Explicați care sunt funcțiile instrucțiunilor PUSH și POP?
2.4 REGULAMENTUL DE PROTECȚIA MUNCII
ȘI CONDUITĂ SPECIFICE LABORATORUl
Am luat la cunostinta de urmatoarele norme:
Prizele electrice și toate aparatura din laborator sunt alimentate la 220 V, tensiune, care prin electrocutare, pune viata in pericol !;
Nu este voie să se demonteze prizele, prelungitoarele și aparatura electrică și nici să se introducă alte obiecte în ele;
Nu se permite să se schimbe componentele calculatoarelor între ele (mouse, tastatura, monitor, cabluri etc) ;
Nu este voie sa se intre cu lichide în laborator, deoarece prin vărsare peste aparatură, aceasta se poate deteriora producând un scurtcircuit, chiar există risc de electrocutare;
Fiți atenți să nu calcați cablurile electrice cu piciorul scaunului pe care sunteți asezat. Piciorul scaunului este metalic și uneori există riscul să taie cablul prelungitorului ;
Nu se permite alergarea în laborator, deoarece există pericolul impiedicării și lovirii de mese sau de alte obiecte contondente ;
Nu se permite aruncarea obiectelor în laborator deoarece riscați sa loviți alte persoane și sa deteriorați aparatura ;
Nu este voie sa distrugeți și să murdariți aparatura, mesele, scaunele si peretii din laborator ;
Nu este voie sa instalați software și nici să introduceți dispozitive de memorie externa în calculatoare. Totul se face numai cu acordul și sub supravegherea profesorului sau laborantului.
În cazul constatării unei defecțiuni sau neregului la aparatura pe care o utilizați trebuie sa anunțați imediat profesorul sau laborantul fară a intervini cu propria inițiativă la remedierea situației.
Nu se permite să navigați în Internet pe site-uri care promovează violentă explicită, sovinismul, xenofobia, pornografia, drogurile.
La terminarea orelor de laborator, lăsați totul în ordine în locul desfășurării activității.
În cazul nerespectării celor de mai sus, veți suporta consecințele de rigoare care decurg din regulamentului intern al universității.
Bibliografie
Liviu Kreindler,Raducu Giuclea „Bazele Microprocesoarelor”-Bucuresti 1997;
„Proiectare cu Microprocesor”- Bacau;
https://ru.scribd.com/doc/32977084/Microprocesorul;
http://www.tucows.com/preview/325007/Assembler-And-8086-Microprocessor-Emulator;
https://ru.scribd.com/doc/198386570/Teorie-Brut;
https://ru.scribd.com/doc/99527148/Microprocesorul-INTEL-8086;
https://ru.scribd.com/doc/58240155/microprocesoare#download;
http://www.itcsolutions.eu/2010/02/04/tutorial-limbaj-de-asamblare-assembler-intel-8086-%E2%80%93-partea-2-%E2%80%93-prima-aplicatie/
http://www.creeaza.com/referate/informatica/calculatoare/INSTRUCTIUNI-DE-TRANSFER-AL-DA392.php
Bibliografie
Liviu Kreindler,Raducu Giuclea „Bazele Microprocesoarelor”-Bucuresti 1997;
„Proiectare cu Microprocesor”- Bacau;
https://ru.scribd.com/doc/32977084/Microprocesorul;
http://www.tucows.com/preview/325007/Assembler-And-8086-Microprocessor-Emulator;
https://ru.scribd.com/doc/198386570/Teorie-Brut;
https://ru.scribd.com/doc/99527148/Microprocesorul-INTEL-8086;
https://ru.scribd.com/doc/58240155/microprocesoare#download;
http://www.itcsolutions.eu/2010/02/04/tutorial-limbaj-de-asamblare-assembler-intel-8086-%E2%80%93-partea-2-%E2%80%93-prima-aplicatie/
http://www.creeaza.com/referate/informatica/calculatoare/INSTRUCTIUNI-DE-TRANSFER-AL-DA392.php
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Microprocesorul Intel 8086 Si Mediul Emu8086 (ID: 122305)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
