manual1 complet

Upload: mihai-matei

Post on 08-Apr-2018

269 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/7/2019 Manual1 complet

    1/1351

    SISTEMUL CU

    MICROPROCESOR PE 32 DE

    BII (modul Z3/EV)

    Volumul 1/4 Teorie iexerciii

  • 8/7/2019 Manual1 complet

    2/1352

    INDEXINDEX................................ ................................ ................................ ................................ ........................... 2

    LECIA 1: MICROCOMPUTERUL I MICROPROCESORUL................................ ................................ ................ 3

    LECIA2: INTRODUCERE N PROGRAMARE................................ ................................ ............................... 177

    LECIA 3: PROGRAMARE NCOD MAIN................................ ................................ ............................... 255

    LECIA 4: PROGRAMARE N LIMBAJDEASAMBLARE................................ ................................ ................. 322

    LECIA5: MICROPROCESORUL DE 32DE BII 80386 ................................ ................................ .................. 49

    LECIA 6: MICROPROCESORUL 80368EX ................................ ................................ .............................. 61

    LECIA 7: MODULUL DE LABORATOR MOD Z3/EV................................ ................................ ...................... 76

    LECIA 8: PROGRAMAREAVANSAT................................ ................................ ................................ .......... 90

    LECIA 9: MANAGEMENTUL NTRERUPERILOR................................ ................................ ........................... 98

    LECIA 10: MEMORIAEPROM IINTERFAAREACU MICROCONTROLERUL ................................ .............. 104

    LECIA 11: MEMORIARAM IINTERFAAREACU MICROCONTROLERUL ................................ .................. 111

    LECIA 12: INTERFAA PARALEL................................ ................................ ................................ ............. 120

  • 8/7/2019 Manual1 complet

    3/135

    3

    LECIA 1: MICROCOMPUTERUL I MICROPROCESORUL

    OBIECTIVE

    y Tipuri de calculatoare: mainframe, minicomputer, personal computer, microcomputery Analiza structurii microcomputeruluiy Dezvoltarea i tipul microprocesoarelory Familia Intel x86y Arhitectura intern a microprocesorului 8086

    MATERIALE

    y Unitatea de baz pentru sistemele IPES (sursa mod.PS1-PSU/EV, suport pentru modulmod.MU/EV, unitate de management individual mod. SIS1/SIS2/SI3)

    y Modul experimental mod. Z3/EV

    TIPURI de COMPUTERE

    Computerele sunt disponibile astzi ntr-o varietate de dimensiuni i performane.Ele pot fi clasificate n urmtorul mod:y Mainframeuriy Minicomputerey Calculatoare personaley Microcomputere

    MainFrameurile

    Acestea sunt cele mai mari i cele mai puternice computere; ele pot avea dimensiunea uneicamere. De obicei folosesc mai multe procesoare n paralel i au memorii de dimensiuniuriae.

    Exemple de acest timp sunt IBM 4381, Cray Y-MP/832.

    Minicomputerele

    Acestea sunt mai puin puternice i de dimensiuni mai mici dect mainframurile.De obicei sunt ncadrate ntr-un singur rack.Au cuvinte de dat de 64 bii i memorie mai puin dect mainframurile.Sunt utilizate att pentru managementul datelor ct i ca staii de prelucrare grafic.Exemple de acest tip: VAX ofDigital

    Calculatoare personale

    Aceste calculatoare sunt folosite cel mai des. Ele folosesc procesoare cu dimensiuneacuvntului de date de 64 de bii (Pentium), unitate central de prelucrare de ordinul a zeci deMB i memorie extern de civa GB.

    Microcomputerele

    Acestea sunt cele mai mici computere, n general sunt folosite pentru aplicaii industriale.Structura lor conine pe un singur soclu microprocesorul, memoria EPROM i RAM icomponentele de I/O.Folosesc cuvinte de date de 8, 16, 32 bii lungime i memorii de zeci KB.EV/Z3 este un exemplu de microcomputer.

  • 8/7/2019 Manual1 complet

    4/135

    4

    STRUCTURA UNUI MICROCOMPUTER

    Structura unui microcomputer este prezentata in figura 1:

    Figur 1

    Se poate observa:y Unitatea central de prelucrarey Memoriile (RAM i EPROM)y Porturile de intrare/ieirey Magistrale (de date, adrese, control)

    Mulimea conexiunilor (liniilor electrice) care interconecteazU

    CP cu sistemul de memoriesi cu sistemul I/O se numeste magistral sistem. Aceasta are rolul de a permite schimbul deinformaii (date) ntre UCP si restul sistemului precum si de a transmite comenzile UCP ctrecelelalte componente ale sistemului.Exist trei componente ale magistralei sistem: magistrala de adrese, magistrala de date imagistrala de comenzi.

    Figur 2

    Magistrala de adrese permite transmiterea adresei generate de UCP ctre sistemul dememorie sau ctre sistemul I/O n ciclurile de transfer de informaii de la sau ctre UCP.Numrul de linii ale magistralei de adrese este chiar numrul de bii din care este format oadres, ce indic spaiul maxim adresabil al UCP. Dac avem adrese pe 16 bii, de exemplu,spaiul maxim adresabil este de 216 adic 64K.

  • 8/7/2019 Manual1 complet

    5/135

    5

    Atenie, nu 64KB si nici 64Kb; spaiul de adrese nu indic cantitatea maxim de memorie cidoar o plaj de numere sau adrese, cantitatea maxim de memorie depinde de lungimeacuvntului de date!D

    ac vorbim de maini cu lungimea cuvntului de date de 8 bii, de exemplu, atunci putemspune c sistemul suport maxim 64KB de memorie.Exist cazuri cnd ntre magistrala deadrese intern (aflat n interiorul UCP) i magistrala de adrese extern (numrul de pini aicircuitului n care se afl UCP alocai pentru magistrala de adrese) apar unele diferene.

    Este posibil ca magistrala extern s conin mai puine linii dect cea intern. De exemplu,magistrala extern s fie pe jumtate magistrala intern, adresele generndu-se n doi timpi,mai nti partea LOW (prima jumtate de adrese) i apoi partea HIGH (cea de a douajumtate). n acest caz este necesar existena unor latchuri externe de stocare a primeijumtate a adresei pentru formarea complet a acesteia.

    Poate exista si cazul n care numrul de linii de adres externe s fie mai mare dect numrul

    de linii interne. Acest caz presupune mrirea artificial a spaiului de adrese de ctrearhitectul sistemului prin alocarea suplimentar a unor linii de uz general pentru magistrala deadrese. UCP nu-i va mri spaiul maxim adresabil dar prin utilizarea liniilor suplimentareputem comuta software ntre mai multe zone de memorie aflate la aceleasi adrese (tehnicdenumit bank switching).

    Magistrala de date permite efectiv transferul de date ntre UCP si restul componentelor dinsistem (memorie, porturi I/O). Numrul de linii al magistralei de date indic dimensiuneaextern a cuvntului de date (8 bii, 16 bii). Aceast dimensiune poate fi mai mic dectdimensiunea intern a cuvntului de date. Cu alte cuvinte, o UCP care are o arhitectur bazatpe un cuvnt de date de 16 bii poate avea magistrala extern de date format doar din 8 linii.n acest caz, la fel ca i n cazul magistralei de adrese, transferul de informaii se face n doi

    pai.

    Unul dintre parametrii importani ai magistralei de date este rata de transfer (bus bandwidth)care indic cantitatea de informaie transferat pe unitatea de timp (de obicei bytes persecond). Aceasta se calculeaz n funcie de dimensiunea magistralei i durata transferuluiunui cuvnt.Dac magistrala suport transferul unui cuvnt ntr-o microsecund i avem o dimensiune amagistralei de 8 bii, de exemplu, putem spune c magistrala are o rat de transfer de 1MB pesecund.

    Magistrala de comenzi este format dintr-o colecie de linii electrice care permit generareaunor semnale de control utilizate n cazul diverselor cicluri magistral.Prin ciclu magistral nelegem o operaie elementar iniiat de UCP pentru transferul deinformaii n sistem. O astfel de operaie presupune sincronizarea tuturor semnalelor implicate(magistral de adrese, magistral de date,magistral de comenzi).

  • 8/7/2019 Manual1 complet

    6/135

    6

    Implementarea semnalelor ce alctuite magistrala de comenzi se face prin existena unor piniindividuali la nivelul circuitului electric n care se gseste UCP. Exemple de linii dinmagistrala de comenzi:/RD DataRead, utilizat n ciclurile de citire;/WR Data Write, utilizat n ciclurile de scriere; prin intermediul acestor dou semnale se

    face diferenierea ntre ciclurile magistral de scriere si citire;ALE Address Latch Enable, comand de stocarea adresei n latch-urile intermediare ncazul n care magistralele de date i de adrese sunt multiplexate;/PSEN Program Store Enable, comand care solicit aducerea de informaii din memoria

    program extern (n cazul sistemelor cu memorie program separat de memoria de date);/M/IO Memory/InputOutput,semnal care face diferenierea ntre un ciclul de lucru cumemoria i un ciclu de lucru cu porturile I/O. Toate aceste exemple sunt orientative, nfuncie de fiecare circuit n parte aceste semnale pot exista sau nu, de asemenea pot exista altetipuri de semnale de comand n funcie de complexitatea fiecrui circuit n parte.

    UNITATEA CENTRALA DE PRELUCRARE(UCP)

    UCP controleaz operaiile microcomputerului i e parte component a microprocesorului.Preia instruciunile n format binar de la memorii i le transform ntr-o serie de aciuni ce sesucced secvenial.

    Memoria (RAM i EPROM)Memoria este alctuit n general din o colecie de memorii RAM i EPROM (sau ROM).Memoria EPROM conine codul binar al secvenei de instruciuni ce trebuie procesat dectre microprocesor.Memoria RAM conine date care sunt elaborate n timpul executrii programului (aceastmemorie poate fi att citit ct i scris).

    Porturile de Intrare/Ieire(I/O)

    Porturile de intrare / ieire permit calculatorului s ia date de la componentele din exterior is trimit date ctre componentele din exterior.Dispozitivele folosite de computer pentru a se conecta la dispozitive externe se numesc

    porturi.Un port de intrare permite citirea datelor de la tastatur sau de la un convertor analogic-numeric.Un port de ieire permite trimiterea de date la un terminal, printr-un convertor numeric-analogic.

    Magistrala (de adrese, date, control)

    Magistrala este format din linii de semnal dispuse paralel n numr de 8, 16, 20, 32 carepermit comunicarea ntre microprocesor i toate celelalte elemente din interiorulmicrocomputerului.

    Magistrala de adreseEste folosit de UCP pentru a indica adresa de locaie de memorie care urmeaz a fi citit sauscris.Numrul de locaii de memorie pe care UCP-ul este capabil de a le localiza depinde denumrul de linii de adres.De exemplu:

    Linii de adres Locaii de memorie16 64KB20 1MB

  • 8/7/2019 Manual1 complet

    7/135

    7

    24 16MB

    Magistrala de adrese este unidirecional: iese din microprocesori merge spre dispozitivele de memorie i porturi I / O.

    Magistrala de dateEste folosit de UCP pentru a citi i scrie date din memorie i de la porturile I / O.Este format din 8, 16, 32 de linii n paralel.

    Toate dispozitivele de memorie i I / O au ieirile conectate la magistrala de date, dar numaiunul dintre ele poate avea ieirea activat la un anumit moment de timp.Dispozitivele care au ieirea activat trebuie s fie n stare de tri-state.

    Magistrala de controlConst ntr-un numr de 4 i 12 linii prin care s permit microprocesorului s trimit ctrememorie i periferice operaiile curente.Semnalele tipice de control sunt: citete din memorie, scrie n memorie, citete de la porturileI/O, scrie catre porturile I/O.

    EVOLUIA I TIPURILE DE MICROPROCESOARE

    Am vzut pn acum cum microprocesorul integreaz UCP a unui microcalculator.Exist mai multe microprocesoare disponibile n prezent, cu diferite caracteristici. Acestea auevoluat n timp, avnd o cretere progresiv a performanelor.Urmtorul tabel arat unele dintre aceste microprocesoare cu principalele salecaracteristici:

    Microprocessorul Caracteristici4004 Acesta a fost primul microprocesor disponibil pe pia n 1971. A fost un microprocesor

    de 4 bii de la Intel.8008 Evoluia pe 8 bii a microprocesorului anterior.(1972)8080 Microprocesor Intel pe 8 bii (1974). Acesta a fost nceputul de microprocesoare din a

    doua generaie.6800 Microprocesor Motorola pe 8 bii.

    6502 Microprocesor pe 8 bii utilizat n primul calculatorApple.Z80 Microprocesor Zilog pe 8 bii.6809 Microprocesor Motorola pe 8 bii cu instruciuni de 16 bii.8088 Microprocesor Intel avnd magistrala intern pe 16 bii i magistrala extern pe 8 bii

    ( n primul PC de la IBM)8086 Microprocesor Intel pe 16 bii.80286 Microprocesor Intel pe 16 bii cu capacitate avansat de adresare i sistem de gestiune a

    memoriei.80386 Microprocesor Intel pe 32 bii68020 Microprocesor Motorola pe 32 bii32032 Microprocesor National pe 32 bii80486 Microprocesor Intel pe 32 bii cu performane mbuntite (coprocesor matematic).

    Pentium Microprocesor Intel pe 64 bii

    Familia Intel x86

    n tabelul de mai sus au fost prezentate cteva microprocesoare Intel al crui nume se termincu numrul 86. Acestea fac parte din familia de microprocesoare numite x86.n continuare, vom descrie n detaliu componentele familiei cu principalele lor caracteristici.

  • 8/7/2019 Manual1 complet

    8/135

    8

    8086Este un microprocesor pe 16 bii. Unitatea aritmetic logic, registrele i instruciunile suntrealizate s opereze cu cuvinte de 16 bii.Acest procesor are o magistral de date extern de 16 bii.De asemenea are o magistral de adrese de 20 bii, capabil s adreseze 1.048.576 locaii dememorie (1 MB).

    8088Este la fel ca procesorul precedent, cu singura diferen c are magistrala de dateextern de 8 bii.

    80186Este o versiune mai puternic a microprocesorului 8086.Acesta are integrat unele periferice care sunt n mod normal externe. Setul de instruciuni esteun superset al procesorului 8086 cu scopul de a menine compatibilitatea software cu acestprocesor.

    80286Este un microprocesor pe 16 bii proiectat pentru a fi utilizat pentru sisteme multi-utilizator iaplicaii multitasking.A

    tunci cnd funcioneaz n moduladres real se comport ca un 8086, dar este mai rapid.Atunci cnd funcioneaz n moduladres virtual permite pstrarea mai multor programe nmemorie, separate i protejate ntre ele.

    80386Este un microprocesor pe 32 de bii, care se poate adresa direct pn la 32 GB de memorie.Este compus din 32 de linii de date i de 32 de linii de adres.Permite operarea n moduladres real, comportndu-se ca un 8086, dar maiputernic.

    80486Este o mbuntire a versiunii 386 care pstreaz toate caracteristicile acestei versiuni, dar lacare a fost adugat un coprocesor matematic i o memorie cache integrat.

    80386EXEste o versiune particular a procesorului 386 care utilizeaz aceleai nuclee interne, avndadugate unele periferice integrate.Aceast versiune se numete Embedded i este n special folosit n mediul industrial.

    Microprocesoarele 8086, 80286, 80386, 80486 nu mai sunt utilizate pentru PC-uri (acestea aufost nlocuite de Pentium) i, astfel, nu mai sunt disponibile pe pia.Ele continu s fie disponibile n versiunile lor industriale, cum ar fi 386EX.

    Arhitectura intern a microprocesorului 8086

    Microprocesrul 8086 este procesul de baz al familiei x86. Este important s i cunoatemstructura intern deoarece reprezint un model simplificat cu o structur similar celorlaltemicroprocesoare.Structura intern este reprezentat n figura 3.Se poate observa cum este mprit diagrama bloc n dou pri funcionale independente.

    Unitatea de comand a magistralei (BIU - Bus Interface Unit)

    Comand adresele externe, preia instruciunile de la memorie, scrie i citete date n memoriesau de la dispozitivele de intrare/ieire.

  • 8/7/2019 Manual1 complet

    9/135

    9

    Unitatea de execuie (EU - Execution Unit)

    Transform instruciunile preluate de la unitatea de comand a magistralei ntr-oserie de aciuni.

    Figur 3

    Unitatea de execuieConine urmtoarele dispozitive:

    Controlul de sistem

    Se ocup de controlul i execuia tuturor operaiilor interne.

    Unitatea aritmetic logic

    Realizeaz operaii de tip: sum, scdere, I, SAU, SAU EXCLUSIV, incrementare,decrementare.

    Regitrii indicatori de condiii

    Conine indicatorii de condiii modificai prin execuia instruciunilor i controlul anumitoroperaii de ctre unitatea de execuie.Este un registru de 16 bii avnd 9 indicatoare de condiii active (Figura 4) 6 dintre ei (CF,PF, AF, ZF, SF, OF) sunt folosii pentru a indica rezultatele instruciunilor care efectueazoperaii.Ceilali 3 indicatori (TF, IF, DF) sunt folosii pentru controlul i determinarea operaiilor lanivel de procesor.

  • 8/7/2019 Manual1 complet

    10/135

    10

    Figur 4

    Regitrii de uz general

    Unitatea de execuie conine 8 regitrii de uz general, care pot fi mprii ca n Figura 5:

    Figur 5

    Primii 4 regitrii de uz general de cte 16 bii fiecare sunt:AX = Acumulator principalBX = Acumulator i registru de bazCX = Acumulator i numrtorDX = Acumulator i registru de adrese intrare/ieire

    Fiecare registru poate fi privit n mod alternativ ca o grupare de 2 regitrii de 8 bii fiecare(1 octet). Octetul cel mai din stnga (cel mai semnificativ) al gruprii poart denumirea deMSB(Most Significant Byte), iar cel mai din dreapta (cel mai puin semnificativ) LSB(LeastSignificant Byte).

    RegistrulAX

    poate la rndul lui fi mprit n 2 regitrii :A

    H ca MSB iA

    L ca LSB.Registrul BX se mparte n BH si BL, etc.

    Exist doi regitrii index folosii pentru iruri de caractere, fiecare avnd dimensiuneade 16 bii. Acetia sunt SI(source index indexul sursei) i DI (destination index registruldestinaie) i sunt des utilizai pentru a localiza iruri de caractere n memorie.

    Acetia pot fi utilizai i ca regitrii de uz general pe 16 bii.

    Registrul SP(stack pointer pointer de stiv) este utilizat pentru implementarea stivei nmemorie (descrierea stivei va fi analizat mai trziu).

  • 8/7/2019 Manual1 complet

    11/135

    11

    Poate fi substituit prin registrul BP(base pointer pointer de baz) care de asemeneapoate fi utilizat ca registru general pe 16 bii.

    Unitatea de comand a magistralei (BIU Bus Interface Unit)

    Conine urmtoarele componente:

    Coadan timp ce unitatea de execuie urmrete o instruciune, nu este nevoie de utilizareamagistralei, BIU preia din memorie pn la 6 octei de instruciune, pentru urmtoareleinstruciuni.BIU memoreaz aceti octei ntr-un registru FIFO numit coad. Atunci cnd unitatea deexecuie este pregtit pentru a prelua o nou instruciune, preia octetul instruciunii direct dincoad.Acest proces, numit pipelining, permite urmrirea instruciunilor ntr-un mod rapid.

    Regitrii de segment

    Cei patru regitrii de segment(CS, DS, SS, ES) sunt regitrii speciali conectai la adresele dedate ale memoriei externe.n general, microprocesoarele preiau achiziiile de date din memorie, utiliznd un cuvnt deadres de 16 bii. Deoarece adresa are 16 bii lungime, numrul maxim de adrese este 65536,sau 64K.Microprocesorul 8086 permite adresarea a 1024KB (1MB) de memorie.Utilizeaz un cuvnt de adrese de 16 bii, dar permite adresarea unui MB prin segmentareaadresei de memorie (memory address segmentation).

    Figur 6

    Pentru a adresa 1MB este nevoie s se reprezinte numerele ntre 0 (00000H) i 1048576(FFFFFH).Aceast operaie are nevoie de 20 bii.Setul complet de 1048576 adrese diferite este un spaiu de adrese dat de 1MB.Din punct de vedere al utilizatorului memoria este adresat n blocuri numite segmente.Fiecare segment poate conine pn la 64 KB de date, astfel se permite utilizarea adresrii pe16 bii n cadrul unui segment.

  • 8/7/2019 Manual1 complet

    12/135

    12

    Figur 7

    Un segment poate fi iniiat la fiecare bloc de 16 octei (numit PARAGRAF) n cadrulspaiului de adres de 1MB.

    Acest lucru se poate observa n figura din stnga.

    Este de notat faptul c sunt cte 64KB adrese de nceput pentru segmente diferite, fiecaredintre ele avnd cei mai puini 4 semnificativi bii 0.

    Este de reinut faptul ca segmentele nu au ne-aprat 64KB de date (acesta este maximulposibil).

    Un segment poate conine unul, o sut sau o mie de octei.

    n plus, segmentele pot fi suprapuse; un octet de date putnd fi accesibil de la mai mult de oadres a nceputului de segment.

    Diagrama de segmentare este folosit de ctre microprocesor pentru calcularea adreseiefective ca n figura 7:

    Figur 8

    De fiecare dat cnd procesorul acceseaz memoria, selecteaz unul din cei 4 regitrii desegmente utilizai prin adresa de nceput de segment.Aceast valoare este shiftat cu 4 bii la stnga i adugat la adresa relativ(offset) pentru aforma cei 20 de bii ai adresei fizice.n figura 8 este reprezentat fiecare dintre cei 4 regitrii de segmente, artnd pentru fiecarecnd poate fi selectat de procesor pentru calcularea adresei.

  • 8/7/2019 Manual1 complet

    13/135

    13

    Figur 9

    Registrul CS(Code Segment segmentul de cod) definete ntotdeauna segmentul de coadcurent, ce conine instruciunile ce trebuiesc urmrite de ctre procesor (program). RegistrulIP de 16 bii indic instruciunea ce trebuie prelucrat.De fapt, cnd procesorul detecteaz instruciunile, combin adresa din registrul IP cu captulde segment localizat n registrul CS.

    Registrul DS (Data Segment registrul de date) definete nceputul segmentului de date cepoate fi utilizat pentru memorarea de date de uz general, ca de exemplu datele obinute nurma instruciunilor ce opereaz pe stringuri.

    Registrul SS (Stack Segment segmentul de stiv) definete nceputul segmentului de stivutilizat pentru toate operaiile ce implic stiva.

    Registrul ES (Extra Segment segmentul adiional) definete segmentul adiional ce poatefi utilizat ca alternativ pentru datele de uz general.Segmentul adiional este de asemenea utilizat ca registru destinaie pentru operaiile pestringuri.

    Regitrii de segmente permit programatorului s acceseze simultan pn la 4 adrese dememorie diferite, fiecare putnd ajunge pn la 64K octei de date (vezi Figura 9).

    Figur 10

    In partea A a figurii, regitrii de segment au fost programai s permit accesul simultan lacapacitatea maxim de memorie.

  • 8/7/2019 Manual1 complet

    14/135

    14

    Aceast configuraie permite utilizarea a 64 KB pentru instruciuni, 64 KB alocai pentrustiv i dou blocuri de 64KB pentru date.

    In partea B a figurii este prezentat o situaie mai realist.n acest caz avem un program de 8K(2000H) ncrcat n segmentul de stiv, ce face referinla 2K(800H) n segmentul de date i poate utiliza 256 octei de stiv.

    Deoarece cerinele pentru memorarea de date sunt minime, un segment adiional independentnu-i are rostul. Registrul ES este astfel programat nct permite segmentului adiional s sesuprapun peste segmentul de date.

    IP (Instruction Pointer pointerul de instruciune)Pointerul de instruciune (IP) conine o adres de 16 bii sau o adres relativ a urmtoruluioctet din segmentul de cod curent.Modul n care adresa efectiv de 20 de bii este obinut a fost prezentat maisus.Un mod obinuit de a reprezenta o adres fizic pe 20 de bii este urmtorul:

    Segment: Offset

    Exemplu:CS:IP

    348A

    :4367

  • 8/7/2019 Manual1 complet

    15/135

    15

    QUIZ

    Q1 Cum sunt numite sistemele de microprocesoare utilizate n moduzualnaplicaiile industriale?

    SETA B

    1 4 Mainframe-uri

    2 1 Minicomputere3 3 PC-uri4 2 Microcomputere

    Q2 Unde sunt reinute datele pe care le genereaz microprocesoruln timpulfuncionrii?

    SETA B

    1 2 Memorie EPROM2 1 Memorie RAM3 4 Porturile de intrare/ieire4 3 Magistrala

    Q3 Care este diferena fundamental ntre microprocesorul8088 i microprocesorul8086?

    SETA B

    1 2 Regitrii microprocesorului 8088 sunt pe 8 bii, iar cei aimicroprocesorului 8086 sunt pe 16 bii

    2 4 8086 adreseaz o cantitate de memorie superioar microprocesorului8088.

    3 1 8088 are magistrala extern de date de 8 bii, 8086 are de 16 bii4 3 8086 are un numr mai mare de regitrii dect 8088

    Q4 Care din urmtorii regitrii nu fac parte din regitrii utilizai de unitatea deexecuie a microprocesorului 8086 ?

    SETA B

    1 3 Registrul IP2 1 Registrul SP3 4 RegistrulAX4 5 Registrul SI5 2 Registrul BP

    Q5 Cti bii din cei ai adresei fizice utilizeaz procesorul8086pentru accesullamemorie?

    SETA B

    1 2 8 bii2 1 16 bii3 5 20 bii4 3 24 bii5 4 32 bii

  • 8/7/2019 Manual1 complet

    16/135

    16

    Q6 ntr-o adres de memorie specificat astfel4AC2:6768, valoarea 4AC2reprezint ?

    SETA B

    1 5 Offset-ul2 4 RegistrulAX3 2 Registrul de segment4 3 Registrul acumulator

    5 1A

    dresa fizic

    Q7 Numele AL reprezint?

    SETA B

    1 3 Registrul acumulator2 4 Cei mai semnificativi 8 bii ai registrului acumulator3 1 Cei mai puin semnificativi 8 bii ai registrului acumulator4 2 Registrul de segment asociat acumulatorului

    Q8 Care dintre urmtoarele adrese fizice nupoate fi adresa de nceput a unuisegment?SETA B

    1 2 0000H2 5 0001H3 1 0010H4 2 0100H5 3 1000H

  • 8/7/2019 Manual1 complet

    17/135

    17

    LECIA 2: INTRODUCERE N PROGRAMARE

    OBIECTIVE:

    y Limbaje de programarey Moduri de adresarey

    A

    dresare imediaty Adresare prin registruy Adresare directy Instruciunile microprocesorului

    MATERIALE:

    y unitatea de baz pentru sistemele IPES (surs de curent mod.PS1-PSU/EV, prizmod.MU/EV, unitate de management individual mod.SIS1/SIS2/SIS3

    y modul experimental mod.Z3/EV

    LIMBAJE DE PROGRAMARE

    Dup ce am analizat procesorul 8086 vom analiza n aceast lecie modul n care l putemprograma.Exist 3 nivele de programare, care pot fi utilizate:y Cod mainy Limbaj de asamblarey Limbaj de nivel nalt

    Cod main

    Programele pot fi scrise n mod simplu prin scrierea codurilor binare ale instruciunilor caretrebuiesc prelucrate de ctre microprocesor.De exemplu (operaiile efectuate de ctre microprocesor sunt indicate ntre paranteze,

    numerele sunt scrise in format hexazecimal):B0 24 (ncarc numrul 24 n registrulAL)E6 2F (pune coninutul regstrului AL pe portul de adrese 2F)

    Acest mod de operare nu este foarte eficient deoarece programatorul trebuie s cunoascmiile de coduri de instruciuni ale microprocesorului 8086.

    Limbajul de asamblare

    Pentru a putea programa mai uor, programatorii utilizeaz limbajul de asamblare, pe careapoi l transform n cod main pentru a-l ncrca n memorie i a-l executa.Limbajul de asamblare utilizeaz dou, trei sau patru litere mnemonice pentru a reprezenta

    fiecare liter a instruciunii.Fiecare instruciune simpl este scris ntr-o form standard ce conine pnla patru cmpuri ca n figur.

    Cmpul detitlu

    Codul deoperaie

    Cmpul de parametrii aioperaiei

    Cmpul decomentarii

    PRG: MOV AL,2FH ;ncarc 2FH n AL

  • 8/7/2019 Manual1 complet

    18/135

    18

    Cele dou instruciuni precedente pot fi scrise:

    PRG: MOV AL,24H ;ncarc n AL numrul 24HOUT 2FH,AL ;trimite coninul din AL portului cu numrul 2FH

    Limbaje de nivel nalt

    O alt modalitate de scriere a programelor pentru microprocesor este prin folosirealimbajelor de nivel nalt precum Pascal, COBOL sau C.A

    cest tip de programare este deobicei folosit de ctre PC-uri.Limbajul C, foarte apropiat de limbajul de asamblare, este adeseori folosit i pentrumicrocomputere.Cu ajutorul unui compilator codul scris n limbajul C este transformat n cod main, pentru afi putea fi citit de ctre microprocesor.

    MODURILE DE ADRESARE

    nainte de a ncepe programarea propriu-zis a microprocesorului este necesar s se analizezemodul n care microprocesorul poate accesa datele pe care trebuie s le prelucreze.

    Modurile n care se pot accesa datele sunt diferite i poart numele de moduri de adresare.Dac considerm, de exemplu, instruciunea MOV, aceasta va avea urmtorul format:

    MOV destinaie, surs

    Atunci cnd este executat, copiaz un word(16 bii) sau un octet(8 bii) de la surs ladestinaie.Sursa poate fi un numr, un registru sau o adres de memorie specificat prin utilizarea unuiadin cele 24 de moduri de adresare.Destinaia poate fi un registru sau o adres de memorie specificat prin unul din cele 24 demoduri de adresare.

    ADRESARE IMEDIATAdresarea imediat se folosete atunci cnd datele ce doresc a fi prelucrate reprezint unnumrn specificat direct n instruciune.Exemplu:

    MOV AX,043FH ;ncarc numrul 043F n AX

    Numrul 043F ce urmeaz a fi ncrcat n registru este reinut n dou locaii de memorie,dup care se execut codul instruciunii MOV.

    MODUL DE ADRESARE PRIN REGISTRU

    Modul de adresare prin registru este modul n care se utilizeaz un registru almicroprocesorului ca surs pentru instruciune.

    Exemplu:

    MOV AX, BX; copiaz coninutul registrului BX n registrul AX

    Instruciunea copiaz coninutul registrului BX n registrul AX. Registrul BX rmneneschimbat.

  • 8/7/2019 Manual1 complet

    19/135

    19

    Instruciunea conine codul pentru identificarea registrului surs BX i registrul destinaieAX.

    ADRESAREA DIRECT A MEMORIE

    Exist mai multe moduri de adresare a memoriei. n cele ce vor urma vom prezenta cel maisimplu dintre ele. Celelalte moduri de adresare vor fi prezentate ulterior.

    Adresarea direct a memoriei se face prin indicarea adresei efective sub forma unuinumr de 16 bii direct n instruciune.

    Exemplu:

    MOV AX,[0421H] ;ncarc n AXdatele de la adresa 0421

    Parantezele ptrate indic: coninutul adresei de memorie este shiftat fa registrul de bazcu 0421H octei.

    Atunci cnd este executat instruciunea, microprocesorul execut urmtoarele operaii:y preia valoarea din registrulDS (Segmentul de date), ex:1234y shifteaz cei 4 bii la stnga cu o poziie: 12340y adaug valoarea adresei efective: 0421y rezultatul sumei: 12761y aceasta este adresa fizic de memorie de 20 de biiy preia datele de la adresa 12761 i le salveaz n registrul ALy preia datele de la adresa 12762 i le salveaz n registrul AH

    n instruciunea precedent adresa direct specific sursa instruciunii.n mod similar, destinaia poate fi specificat astfel:

    MOV [0421H],AX ;ncarc registrulAXla adresa 0421

    Observaii: la toate modurile de adresare se poate utiliza un registru de segment explicit, nfelul urmtor:mov bx, ds:[bp+7] ; adresare bazatmov ax, cs:[si][bx+3] ; adresare bazat i indexat

    mov ax, ss:[bx] ; adresare indirect

    INSTRUCIUNILE MICROPROCESORULUI

    Dup ce au fost introduse modurile n care microprocesorul identific datele pe care urmeazs le prelucreze, vom vedea care sunt operaiile pe care microprocesorul este capabil s leexecute.Putem spune c operaiile microprocesorului corespund instruciunilor lui.

    Vor fi prezentate n continuare un tabel cu instruciunile microprocesorului 8086.Multe dintre ele vor fi utilizate i analizate n urmtoarele lecii.Este important s v facei o idee asupra lor pentru a putea nelege putereamicroprocesorului.

  • 8/7/2019 Manual1 complet

    20/135

    20

    INSTRUCIUNI DE TRANSFER DE DATE

    MOV Copiaz un octet sau un word din surs n destinaiePUSH Copiaz pe stiv un word specificatPOP Copiaz un word din stiv la adresa specificatPUSHA Copiaz toi regitrii pe stiv (80186,..)POPA Reconstruiete regitrii cu datele din stiv (80186, ..)XCHG Interschimb octei sau date de tip wordXLAT Transform un octet n AL utiliznd o tabel n memorie

    IN Copiaz un octet/word de la porturile I/O la registrul acumulatorOUT Copiaz un octet/word de la registrul acumulator la porturile de I/OLEA ncarc adresa efectiv a operaiei n registrul specificatLDS ncarc din memorie registrul DS i ceilali regitrii specificaiLES ncarc din memorie registrul ES i ceilali regitrii specificaiLAHF ncarc AH cu cel mai semnificativ octet al registrului de indicatori de condiiiSAHF Memoreaz AH n cel mai semnificativ octet al registrului de indicatori de condiiiPUSHF Copiaz registrul de indicatori de condiii pe stivPOPF Copiaz un word din stiv n registrul de indicatori

    INSTRUCIUNI ARITMETICE

    ADD Adun octetul/wordul specificat n alt octet/wordADC Adun innd cont i de valoarea indicatorului de transportINC Incrementeaz octetul/wordul specificat cu valoarea 1AAA Ajustarea codului ASCII dup efectuarea adunriiDAA Ajustare decimal dup efectuarea adunriiSUB Scade un octet/word din alt octet/wordSBB Scade innd cont i de valoarea indicatorului de transportDEC Decrementeaz octetul/wordul cu valoarea 1NEG Calculeaz complementului fa de 2 a octetului/worduluiCMP Compar doi octei/dou worduriAAS Ajustarea codului ASCII dup efectuarea scderii

    DASA

    justare decimal dup efectuarea scderiiMUL nmulete octei/worduri fr semnIMUL nmulete octei/worduri cu semnAAM Ajusteaz la codul ASCII dup efectuarea nmuliriiDIV mparte un word fr semn cu un octet sau un word dublu fr semn cu un wordIDIV mparte un word cu semn cu un octet sau un word dublu cu semn cu un wordAAD Ajustare la codul ASCII nainte de mprireCBW Umple octetul superior al unui word cu copia bitului de semn al octetului inferiorCWD Umple wordul superior al unui double word cu copia bitului de semn al wordului

    inferior

    INSTRUCIUNI LA NIVEL DE BIT

    NOT Neag fiecare bit al unui octet sau wordAND Realizeaz operaia I dintre fiecare bit al unui octet sau al unui word cu bitul

    corespondent al unui alt octet/wordOR Realizeaz operaia SAU dintre fiecare bit al unui octet sau al unui word cu bitul

    corespondent al unui alt octet/wordXOR Realizeaz operaia SAU EXCLUSIV dintre fiecare bit al unui octet/ word cu

    bitul corespondent al altui octet/wordTEST Urmrete aceleai operaii ca i n cazul instruciuniiAND dar nu modific

    valoarea operanzilor

  • 8/7/2019 Manual1 complet

    21/135

    21

    SHL/SAL Shifteaz la stnga biii unui octet/word i pune 0 n MSB(bitul cel maisemnificativ)

    SHR Shifteaz la dreapta biii unui octet/word i pune 0 n MSB(bitul cel maisemnificativ)

    SAR Shifteaz la dreapta biii unui octet/word i pune vechiulMSB (bitul cel maisemnificativ)n locul celui nou

    ROL Rotete la stnga biii unui octet/word i pune MSB n locul LSF(cel mai puin

    semnificativ bit) i CF

    ROR Rotete la dreapta biii unui octet/word i pune MSB n locul LSF(cel mai puinsemnificativ bit) i CF

    RCL Rotete la stnga biii unui octet/word i pune MSB n locul CF i CF n loculLSB

    RCR Rotete la dreapta biii unui octet/word i pune MSB n locul CF i CF n loculLSB

    INSTRUCIUNI PE STRINGUTI(IURI DE CARACTERE)

    Un string este un grup de octei/worduri aflat n locaii succesive ale memoriei.n mod normal este format din caractere ASCII.REP Prefixul instruciunii. Repet instruciunea indicat pn cnd CX=0

    REPEREPZ

    Prefixul instruciunii. Repet instruciunea pn cnd CX = 0 sau indicatorul decondiii zero(ZF) este1

    REPNEREPNZ

    Prefixul instruciunii. Repet instruciunea pn cnd CX = 0 sau indicatorul decondiii zero(ZF) este1

    MOVSMOVSBMOVSW

    Mut un octet sau un word de la un string la altul

    COMPSCOMPSBCOMPSW

    Compar dou stringuri de un octet sau dou stringuri de un word.

    INS

    INSBINSW

    Preia datele de la un port dat printr-un string de un octet sau un word (80186, ..)

    OUTSOUTSBOUTSW

    Trimitele datele ctre un port dat printr-un string de un octet sau word (80186,..)

    SCASSCASBSCASW

    Scaneaz un string.Compar un string de un octet cu octetul din AL sau un string de worduri cu unword din AX

    LODSLODSBLODSW

    ncarc un octet al unui string n AL sau un word al unui string n AX

    STOS

    STOSBSTOSW

    Memoreaz un octet din AL sau un word din AX ntr-un string

    INSTRUCIUNI DE SALT i CALL

    CALL Apeleaz un subprogram, salveaz adresa pe stivRET Revine dintr-un subprogram la programul apelatJMP Sare toate adresele specificate pentru a executa instruciuneaJA/JNBE Sare dac e mai mare/Sare dac nu e mai mic sau egalJAE/JNB Sare dac e mai mare sau egal/ Sare dac nu e mai mic

  • 8/7/2019 Manual1 complet

    22/135

    22

    JBE/JNA Sare dac e mai mic sau egal/ Sare dac nu e mai micJC Sare dac indicatorul de carry(Carry Flag) CF=1JE/JZ Sare dac e egal/Sare dac indicatorul de zero ZF=1JG/JNLE Sare dac e mai mare/Sare dac e mai mic sau egalJGE/JNL Sare dac e mai mare sau egal/Sare dac nu e mai micJL/JNGE Sare dac e mai mic/Sare dac nu e mai mare sau egalJLE/JNG Sare dac e mai mic sau egal/Sare dac nu e mai mareJNC Sare dac indicatorul de transport(Carry Flag) CF=0

    JNE/JNZ Sare dac nu este egal/Sare dac nu e zero (ZF 1)JNO Sare dac nu exist depaire (overflow flag OF=0)JNP/JPO Sare dac exist imparitate/Sare dac e impar(PF=0)JNS Sare dac nu exist semn (flag of sign SF=0)JO Sare dac exist depire OF=1JP/JPE Sare dac exist paritate (PF = 1)JS Sare dac exist semn (SF=1)LOOP Urmrete o secven de instruciuni pn cnd CX=0LOOPELOOPZ

    Urmrete o secven de instruciuni atta timp ct ZF=1 i CX0

    LOOPNELOOPNZ

    Urmrete o secven de instruciuni atta timp ct ZF=0 i CX0

    JCXZ Sare la adresa specificat dac CX=0INT ntrerupe execuia programului i cheam o procedur de serviciuINTO ntrerupe execuia programului dac OF = 1IRET Revine dintr-o procedur de serviciu

    INSTRUCIUNI DE CONTROL ale PROCESORULUI

    STC Seteaz bitul de carry (CF = 1)CLC Reseteaz bitul de carry (CF = 0)CMC Complementeaz starea indicatorului de carrySTD Seteaz bitul de direcie (direction flag DF = 1)CLD Reseteaz bitul de direcie(direction flag DF = 0)

    STI Seteaz indicatorul de condiie de activare a ntreruperilorCLI Reseteaz indicatorul de condiie de activare a ntreruperilorHLT Oprete procesorul pn la apariia unei ntreruperiWAIT Ateapt pn cnd semnalul pe pinul TEST devine LOWESC Revine de la coprocesorul extern (8087 or 8089)LOCK Instruciune prefix. Blocheaz posibilele procesoare externeNOP Nicio operaie

  • 8/7/2019 Manual1 complet

    23/135

    23

    QUIZ

    Q1 Instruciunea: MOV AL,33Heste o instruciune a microprocesorului scris n?

    SET

    A B

    1 3 Cod main2 1 Limbaj de asamblare

    3 2 Limbaj de nivel nalt

    Q2 Indicai care din urmtoarele nu corespunde unei posibile destinaii pentruinstruciunea MOV?

    SET

    A B

    1 2 Un numr

    2 3 Un registru

    3 1 O adres de memorie

    Q3 Care din urmtoarele este sursa de date n modulde adresare imediat?

    SET

    A B

    1 2 Un numr

    2 3U

    n registru3 1 O adres de memorie

    Q4 Ce rezultat are expresia [1024H] n modulde adresare direct la memorie(instruciunea MOV AL,[1024H] )?

    SET

    A B

    1 4 Adresa efectiv a locaiei de unde s fie extrase datele

    2 3 Adresa absolut a locaiei de unde s fie extrase datele

    3 1 Coninutul locaiei ctre adresa efectiv 1024H

    4 2 Schimbare n ceea ce privete segmentul de date DS

  • 8/7/2019 Manual1 complet

    24/135

    24

    Q5 Din care adres fizic a memoriei suntpreluate datele dup executareainstruciunii MOV AL,0410H, inndcontde coninutulregistrului DSca fiind1200?

    SET

    A B

    1 2 1610H

    2 3 0530H3 4 0410H

    4 1 12410H

    Q6 Care din urmtoarele nu este definit ca o instruciune pentru

    Microprocesorul8086?

    SET

    A B

    1 6 Instruciuni de transfer de date

    2 4 Instruciuni aritmetice

    3 5 Instruciuni la nivel de bit

    4 3 Instruciuni de cercetare

    5 2 Instruciuni de salt i CALL

    6 1 Instruciuni de control ale procesorului

  • 8/7/2019 Manual1 complet

    25/135

    25

    LECIA 3: PROGRAMARE N COD MAIN

    OBIECTIVE:

    y Modelele de instruciuniy Codificarea unei instrciuni simpley Exemple de codificare a mai multor instruciuni MOVy Codificarea unui program ntreg

    MATERIALE

    y Unitatea de baz pentru sistemele IPES (surs de curent mod.PS1-PSU/, prizmod.MU/EV, unitate de management individual mod.SIS1/SIS2/SIS3)

    y Modul experimental mod.Z3/EV

    n aceast lecie vi se va prezenta modalitatea de a construi codurile binare pentruinstruciunile microprocesorului.

    Un program de asamblare se ocup n mod normal de codificarea operaiilor, totui, esteimportant s nelegei principiile pentru a fi n stare s realizai ntr-un mod ct mai rapidprograme pentru modulul Z3.

    MODELELE de INSTRUCIUNI

    Pentru un microprocesor capabil de efectuarea unui numr mic de instruciuni, codificarea ncod main se realizeaz utiliznd un tabel n care sunt trecute toate instruciunile, cu diferitemoduri de adresare i codificarea corespunztoare.

    n cazul microprocesorului Intel x86 numrul de instruciuni mpreun cu multitudinea demoduri de adresare ajunge la cteva mii, ceea ce face imposibil ncadrarea lor ntr-un tabel.

    Din aceast cauz, sunt utilizate modele pentru fiecare instruciune de baz i exist biispeciali care sunt utilizai pentru a indica modul de adresare, tipurile de date, etc.

    Setul de instruciuni pentru microprocesorul 386 mpreun cu modelele folosite pentru fiecareinstruciune de baz pot fi gsite in appendix B.

    CODIFICAREA unei INSTRUCIUNI SIMPLE

    Considerm o instruciune simpl de ncrcare a unui registru prin adresare imediat:

    MOV AL,0F2H

    Modelul instruciunii aa cum o putem vedea n Appendix B arat astfel:

    1 0 1 1 w reg

    Date imediate

    Considerm doar regitrii de 16 bii:W = 0 pentru octet

  • 8/7/2019 Manual1 complet

    26/135

  • 8/7/2019 Manual1 complet

    27/135

    27

    y Bitul D din primul octet al instruciunii identific dac datele sunt mutate n registrulidentificat de cmpul REG (D=0) sau de registrul nsui (D=1) (D = direcia dedeplasare a datelor).

    y Bitul W din primul octet identific tipul de transfer (dac se transfer un octet atunciW=0, dac se transfer un word W=1).

    y Cei trei bii ai celui de-al doilea octet (REG) identific registrul folosit ca prim operantn instruciune.

    Figur 4

    Cei doi bii (MOD) i cei trei bii (R/M) n al doilea octet al instruciunii sunt folosii pentru aspecifica MODUL DE ADRESARE a celei de-a doua operaie a instruciunii.n figura 11 este prezentat un tabel cu combinaiile de MOD i R/M pentru fiecare din cele 32de posibile moduri de adresare.

    Se poate observa c:y

    Dac cellalt operand a instruciunii este de asemenea un registru, atunci este de ajunsa seta biii de MOD 11 i codul registrului de 3 bii n R/M.

    y Dac cellalt operand al instruciunii este o adres de memorie, exist 24 de moduripentru a specifica adresa efectiv a operaiei din memorie.

    y Biii cmpului MOD sunt utilizai pentru a indica dac adresa conine deplasament saunu, iar cmpul R/M reine registrul ce conine adresa efectiv.

    y Se utilizeaz MOD=00 dac adresa nu conine vreun deplasament. De exemplu pentruinstruciunea MOV AX,[SI] este necesar s se seteze MOD=00 i R/M=100. n acestcaz de adresare direct MOVAX,[124FH] este necesar s se seteze MOD=00,R/M=110, bitul cel mai puin semnificativ al adresei din al treilea octet al instruciuniii bitul cel mai semnificativ al adresei din al patrulea octet al instruciunii.

    y Se utilizeaz MOD=01 dac adresa instruciunii conine un deplasament mai mic

    dect 256. De exemplu, n cazul instruciunii MOV AX, 12H[BX] e necesar s seseteze MOD=01, R/M=111 i deplasamentul 12H este adugat in al treilea octet alinstruciunii.

    y Se utilizeaz MOD=10 daca adresa instruciunii conine un deplasament mai maredect 256. De exemplu, n cazul instruciunii MOV AX,2A12H[BX] e necesar s seseteze MOD=10, R/M=111 i deplasamentul 2A12H este adugat n al treilea i alpatrulea octet al instruciunii (12H n al treilea i 2AH n al patrulea).

  • 8/7/2019 Manual1 complet

    28/135

    28

    Exemple de codificare ale instruciunii MOV:

    MOV SP, BX

    Aceast instruciune copiaz un word din registrul AX n registrul SP.y Codul operaiei de 6 bii este: 100010.y Bitul W=1 deoarece este un word.y Bitul D=1 i cmpul REG=100 atta timp ct identific registrul destinaie SP.y Cmpul MOD=11 pentru a reprezenta modul de ADRESARE PRIN REGISTRU.y Cmpul R/M=011 pentru a reprezenta cellalt registru BX.

    Rezultatul este prezentat n figura 12.

    Figur 5

    MOV CL,[BX]

    Instruciunea copiaz un octet din memorie, la adresa efectiv data de registrul BX, nregistrul CL.Codul operiei pe 6 bii este: 100010.Bitul W=0 pentru c e un octet.Bitul D=1 pentru direcia de transport a datelor se face ctre registrul CL.Cmpul REG=001 pentru a identifica regiatrul destinaie CL.Cmpul MOD=00 pentru a reprezenta modul de ADRESARE FRDEPLASAMENT.Cmpul R/M=111 pentru a desemna folosirea registrului BX ca i registru ce conine adresade memorie.Rezultatul este reprezentat n figura 13 .

    Figur 6

    MOV CX,[1240H]

    Aceast instruciune copiaz un word n registrul CX pe care l preia din memorie de la

    adresele 1240H i 1241H.Codul opeaiei de 6 bii este: 100010.Bitul W=0 deoarece este un octet.Bitul D=1 deoarece datele au fost mutate ctre registrul CX.Cmpul REG=001 pentru a desemna registrul destinaie ca fiind registrul CX.Cmpul MOD=00 pentru a reprezenta modul de ADRESARE DIRECT.Cmpul R/M=110 pentru a indica folosirea adresei directe n instruciune pentru a identificaadresa de memorie.Bitul cel mai puin semnificativ al adresei (40H) este introdus n al treilea octet alinstruciunii, n timp ce bitul cel mai semnificativ (12H) este introdus in al patrulea octet.

  • 8/7/2019 Manual1 complet

    29/135

    29

    Rezultatul este reprezentat n figura 14 .

    Figur 7

    MOV CS:[BX],DL

    Aceast instruciune copiaz un octet din registrul DL ntr-o adres de memorie.

    Adresa efectiv a locaiei de memorie este coninut in registrul BX.n mod normal adresa efectiv este adaugat la registrulDS pentru a forma adresa fizic amemoriei. n acest caz notaia CS:[BX] indic faptul ca registrul CS este folosit n loculregistrului DS.CS reprezint prefixul de suprascriere a segmentului.Atunci cnd o instruciune conine un prefix de suprascriere a segmentului este necesar de aaduga un cod de 8 bii naintea instruciunii. Acest cod trebuie s aib formatul 001XX110unde XX reprezint codul registrului segment utilizat.n cazul de faa CS=01 i prefixul de suprascriere a segmentului devine 00101110.Ceilali bii respect procedura folosit pn acum.

    Rezultatul este reprezentat n figura 15.

    Figur 8

  • 8/7/2019 Manual1 complet

    30/135

  • 8/7/2019 Manual1 complet

    31/135

    31

    Q2 Care din urmtoarele expresii codific corect instruciuneaMOV AL,55H(TabelE-1, Sheet1)?

    SET

    A B

    1 4 10110000 01010101

    2 3 10111000 010101013 2 01010101

    4 1 10110000 00000000 01010101

    Q3 Care din urmtoarele expresii codific corect instruciuneaOUTDX,AL (TabelE-1, Sheet2) ?

    SET

    A B

    1 3 11100110 00010000 00000011

    2 4 111011113 2 11101110

    4 1 11101110 0110000

    Q4 Care din urmtoarele expresii codific corect instruciuneaINT 07H (TabelE-1, Sheet14) ?

    SET

    A B

    1 2 11001101 000001112 4 11001100

    3 1 11001101

    4 3 00000111 11001101

  • 8/7/2019 Manual1 complet

    32/135

    32

    LECIA 4: PROGRAMARE N LIMBAJ DE ASAMBLARE

    OBIECTIVE

    y Formatul programelor n limbaj de asamblarey Tipuri de numere folositey

    Instruciunile limbajului de asamblarey Fazele de lucru: asamblare, linkery Realizarea unor programe simple

    MATERIALE

    y Unitatea de baz pentru sistemele IPES (surs de curent mod.PS1-PSU/, prizmod.MU/EV, unitate de management individual mod.SIS1/SIS2/SIS3)

    y Modul experimental mod.Z3/EV

    n aceast lecie vei nva s realizai programe pentru microprocesorul pe 32 de biiutiliznd limbajul de asamblare.Folosind acest limbaj se elimin necesitatea trasformrii instruciunilor n cod main, aacum a fost prezentat n cadrul leciei anterioare.

    Exist mai multe limbaje de asamblare existente pe pia. Toate exemplele ce apar n acest

    manualse vor referi la limbajulde asamblare MASMde la MicrosoftCorp.

    FORMATUL UNUI PROGRAM N LIMBAJ DE ASAMBLARE

    Penrtru a ilustra formatul instruciunilor n limbaj de asamblare s ne referim la exemplulPRG_05 prezentat mai jos.Acest program realizeaz suma a dou numere prezente n dou locaii de memorie, iarrezultatul este pus n a treia locaie de memorie.

    Urmtoarele caracteristici pot fi uor deduse:y Caracterele ce sunt precedate de semnul ; sunt considerate comentarii (adugarea

    comentariilor n interiorul programului este o modalitate bun pentru a mbuntaieligibilitatea codului).

    y Instruciunile respect sintaxa instruciunilor microprocesorului Intel din seria x86prezentat n leciile precedente.

    y n afar de aceste instruciuni, exist alte iruri de caractere ce nu au legtur cuinstruciunile microprocesorului, ci servesc asamblorului; acestea poart numele dedirective.

    y Numerele din interiorul programului pot fi exprimate n diferite forme: zecimal (2, 45,..), hexazecimal (12H,..), etc.

    Toate aceste caracteristici vor fi analizate n cadrul acestei lecii.

  • 8/7/2019 Manual1 complet

    33/135

    33

    ;----------------------------- PRG_05 -------------------------;acest program face suma a doi octei prezeni n dou locaii de memorie diferite i;pune rezultatul n cel de-al treilea;adresa de memorie de un octet (presupunem ca rezultatul nu;depete numrul 255)

    IMONITOR EQU 07H;---------------------------------------- CODE;programul este ncrcat la adresa 0200:0000HPROG SEGMENTASSUME CS:PROG, DS:PROGSTART: MOV AX,0200H ;ncarc registru de segmentDS

    MOV DS,AXMOV AL,DATA_1 ;ncarc n AL primul octetMOV BL,DATA_2 ; ncarc n BL al doilea octetADDAL,BL ;realizeaz sumaMOV ADDITION,ALINT IMONITOR ;revine la Monitor;------------------------- date

    DATA

    _1D

    B 04H ;primul octe (04H)DATA_2 DB 12H ;al doilea octet (12H)ADDITION DB 00000000B ;rezultat

    PROG ENDSEND START

    TIPURILE DE NUMERE UTILIZATE

    n acest program sunt utilizate mai multe moduri de a reprezenta datele. Modurile posibilesunt urmtoarele:

    BINAR

    Adugnd un B la irul de 1 i 0 indic faptul c numrul e scris n form binar.Exemplu:

    01010101B111111110000000B

    ZECIMAL

    Numerele zecimale sunt indicate fr niciun semn suplimentar.Exemplu:

    MOV AL,15

    MOV AH,110

    Dac numrul este negativ, atunci asamblorul transform acest numr n numrulcorespunztor complementului fa de 2.

  • 8/7/2019 Manual1 complet

    34/135

  • 8/7/2019 Manual1 complet

    35/135

    35

    Directivele DB, DW, DD sunt folosite pentru a asigna nume variabilelor din program.Exemplu:DATA_1 DB 04H

    Utiliznd aceast sintax se declar o variabil de tip octet (DB), creia i se asigneaz numeleDATA_1 i este iniializat cu valoarea 04H.

    S analizm apoi instruciunea:

    MOV AL,DATA_1

    Valoarea variabilei cu numele DATA_1 este ncrcat n registrul AL.DATA_1 nu este nici mai mult nici mai puin dect o locaie de memorie unde este memoratoctetul. Asamblorul calculeaz aceast adres n funcie de segmentul unde a fost declarat.Directivele DW iDD sunt asemntoare cu directiva DB, doar c ele definesc variabile detip Word, respectiv Double Word.

    DIRECTIVA ASSUME

    Directiva ASSUME informeaz asamblorul asupra segmentului logic ce trebuie folosit pentru

    fiecare segment fizic al microprocesorului (segment de cod, segment de date, segment destiv, segment extra).

    n exemplul de mai jos:

    ASSUME CS:PROG, DS:PROG

    informeaz asamblorul c segmentul logic PROG va trebui folosit ca i segment de cod isegment de date.Toate adresele aferente codului i datelor vor fi calculate relativ la acest segment.Directiva ASSUME servete doar ca referin a asamblorului, ci nu schimb valoarearegitrilor de segment. Modificarea valorilor regitrilor de segment cu valorile dorite intr n

    atribuiile programatorului.Programul de mai jos ncarc segmentul de date DS cu valoarea 0200H, prin intermediulcelor dou instruciuni.

    START: MOV AX,0200H ;ncarc registrul DSMOV DS,AX

    Fr a se utiliza aceste instruciuni, registrul DS nu ar putea fi modificat i datele vor fipreluate din locaii de memorie greite.Registrul CS este ncrcat la nceputul rulrii programului.

    Directiva END

    Directiva EN

    Dinformeaz asamblorul c programul s-a ncheiat.

    Exist mai multe directive ale asamblorului, care n modnormalnu sunt generale, cispecifice asamblorului folosit.

    Aceste directive vor fi prezentate n leciile ce urmeaz, unde va fi necesar folosirea lor.

  • 8/7/2019 Manual1 complet

    36/135

    36

    FAZA DE LUCRU pentru REALIZAREA PROGRAMELOR nLIMBAJ DE ASAMBLARE

    Pentru realizarea programelor n limbajul de asamblare pentru utilizarea ntr-un sistemprecum Mod. Z3/EV este nevoie de mai multe faze de lucru.Aceste faze de lucru, ce rmn identice pentru orice sistem, sunt ilustrate mai jos, precum iinstrumentele ce vor fi folosite n fiecare dintre ele.

    Scrierea programelor (Editor)

    Un editor este un program care permite crearea unui fiier ce conine instruciunile scrise nlimbajul de asamblare corespunztoare programului.Pot fi utilizate programe precum NotePad-ul din Windows.Pentru programarea sistemului Module Z3/EV se va utiliza editorul integrat din MODZ3/EV.

    Asamblarea programelor (Asamblare)

    Programul de asamblare este utilizat pentru transformarea instruciunilor ,n limbaj deasamblare, corespunztor codului main.Asamblorul citete codul surs (format .ASM) ce conine programul i genereaz doufiiere:

    y (.OBJ) conine codurile binare ale instruciunilor i informaiile referitoare la adreseleinstruciunilor.

    y (.LST) conine lista complet a instruciunilor i a codurilor generate.

    Linker

    Este un program utilizat pentru gruparea mai multor fisiere OBJ ntr-un singur fiier.Fiierul generat de ctre linker are extensia .EXE i poate fi utilizat n mod direct de subsistemul de operare MS-DOS.

    n cazul folosirii n cadrul sistemului Module Z3/EV, programul trebuie modificat itransformat n cod binar.

    Transformarea n cod binar pur (EXE2BIN)

    Sistemul de operare MS-DOS conine un program ce transform un fiier .EXE ntr-un fiiercu cod binar pur ce conine numai codurile operaiilor.Acest program se numete EXE2BIN.Este utilizat pentru transformarea fiierului .EXE ntr-un fiier .BIN ce conine doar codurilebinare.

    ncrcarea programului n sistemul Module Z3/EV (MODZ3)

    Programul MODZ3, ataat modulului Z3/EV, realizeaz copierea programului din fiierul.BIN n memoria RAM a modulului Z3. Acest transfer se poate realiza fie prin intermediulinterfeei seriale sau interfeei paralele.

    Verificarea funcionrii programului (Debugging)

    Verificarea funcionrii programului se realizeaz n mod direct n modulul Z3/EV.n timpul acestei etape se execut ntregul program cap-coad sau linie cu linie sau se poateopri la anumit linie prin utilizarea breakpoint-urilor. La fiecare pas sunt prezentateconinutul registrelor i a memoriei sistemului Z3/EV.

    Toate aceste etape vor fi revizuite n leciile urmtoare.

  • 8/7/2019 Manual1 complet

    37/135

    37

    Structura standard, chiar daca nu este strict obligatorie, a unui program assembler este

    Directivele din aceasta structura sunt descrise prin prisma exemplului urmator:

    Program in limbaj de asamblare ce calculeaza valoarea expresiei e = a + b in care variabileleau valori fixe:

    Descriere program:

    .model small : Liniile care incep cu .reprezinta instructiuni speciale care indicaprogramului assembler anumite informatii, descrise de cuvintele cheie ce urmeaza, cu privirela programul de construit. in aceasta situatie model indica faptul ca urmeaza a se indica

    modelul de memorie (si cantitatea de memorie) utilizat de program.Acest program necesita un spatiu redus de memorie, fapt indicat prin small. Un model de

    memorie specifica modul in care codul si datele sunt adresate, ori sunt in acelasi segmentfizic ori in mai multe segmente. Cnd toate datele (sau tot codul) se afla in acelasi segmentatunci elementele sunt adresate prin adrese near date de deplasarea lor (offset) fata de adresade inceput a segmentului.

  • 8/7/2019 Manual1 complet

    38/135

    38

    Daca se utilizeaza mai multe segmente atunci elementele sunt adresate prin adrese far date deadresa segmentului si offset. Tipuri standard de modele sunt: SMALL, MEDIUM,COMPACT si LARGE.

    Forma simplificat de definire a segmentelor

    Aceast modalitate de definire a segmentelor respect acelai format ca i la programeledezvoltate n limbaje de nivel nalt.

    .MODELtip_modelPrin aceast directiv se specific dimensiunea i modul de dispunere a segmentelor nmemorie.Modelul de memorie poate fi:

    - tiny - toate segmentele (date, cod, stiv) formeaz un singur segment de cel mult 64KB.Apelurile de procedur i salturile sunt de tip NEAR i se folosesc adrese efective (offset)pentru accesarea datelor;- small - datele i stiva formeaz un segment i codul un alt segment. Fiecare din acestea vaavea dimensiunea maxima de 64KB. Apelurile de procedur i salturile sunt de tip NEAR ise folosesc adrese efective (offset) pentru accesarea datelor;- medium - datele i stiva sunt grupate ntr-un singur segment (cel mult egal cu 64KB), dar

    codul poate fi n mai multe segmente, deci poate depi 64KB. Apelurile de procedur isalturile sunt implicit de tip FAR i se folosesc adrese efective (offset) pentru accesareadatelor;- compact - codul generat ocup cel mult 64KB, dar datele i stiva pot fi n mai multesegmente (pot depi 64KB). Apelurile de procedur i salturile sunt de tip NEAR i sefolosesc adrese complete (segment i offset) pentru accesarea datelor aflate n alte segmente;- large - att datele ct i codul generat pot depi 64KB. Apelurile de procedur i salturilesunt implicit de tip FAR i se folosesc adrese complete (segment i offset) pentru accesareadatelor aflate n alte segmente;- huge - este asemntor modelului large, dar structurile de date pot depi 64KB.

    La modelele compacti large, o structur compact de date (de tip tablou) nu poate depi

    limitele unui segment fizic (64KB); la modelul huge, aceast restricie dispare.

    .STACK [dimensiune]Aceast directiv aloc o zon de memorie de dimensiune specificat pentru segmentul destiv. Dac nu se specific parametrul dimensiune, aceasta va fi implicit de 1KB.

    .CODE [nume]Aceast directiv precede segmentul de cod. ncrcarea adresei acestui segment n registrulCS se face automat de ctre sistemul de operare, la ncrcarea segmentului pentru execuie.Opional se pot asocial nume (maxim 6 caractere) pentru segmentele de cod.

    .DATAAceast directiv precede segmentul de date. Utilizatorul trebuie s iniializeze, n modexplicit, registrul de segment DS, cu adresa segmentului de date. Simbolul @data primeteadresa segmentului de date dup linkeditare.

    .END : marcheaza sfrsitul fisierului sursa.

    ATENTIE: Daca se specifica numele unei etichete definita anterior (de obicei inainte deprima instructiune) atunci aceasta reprezinta adresa din CS la care porneste executiaprogramului.

  • 8/7/2019 Manual1 complet

    39/135

    39

    De exemplu programul....code

    movAX,@datamovDS,AX

    Start:movAL,aadd AL,bmov e,AL

    ...end Start

    ruleaza incepnd cu instructiunea mov AL,a.

    Etichete

    Etichetele identific cod executabil, formnd operanzi pentru CALL, JMP sau salturicondiionate. O etichet poate fi definit: prin numele etichetei urmat de caracterul : - se definete astfel o etichet de tip near

    nume_etichet:Ex.: eticheta: mov ax, bx prin directiva LABEL, cu forma general

    nume label tipDac ceea ce urmeaz reprezint instruciuni (cod), tipul etichetei va fi NEAR sauFAR i eticheta va fi folosit ca punct int n instruciuni de tip JMP/CALL. Dacaceea ce urmeaz reprezint definiii de date, tipul etichetei va fi BYTE, WORD,DWORD, etc.

    De exemplu, n urma definiiei:alfab label bytealfaw dw 1234H

    o instruciune de forma mov al, alfab va pune n AL octetul mai puin semnificativ alcuvntului (34H).

    prin directiva PROC, numele procedurii fiind interpretat ca o etichet cu tipul derivat dintipul procedurii (NEAR sau FAR). Forma general a unei proceduri este:

    nume_proc proc tip

    nume_proc endp

    Instruciuni de apel de procedur i de salt

    Forma general pentru definirea unei proceduri este:nume_proc PROC [FAR | NEAR]RETnume_proc ENDP

    unde nume_proc este numele procedurii, iar parametrii opionali FAR sau NEAR indic tipulprocedurii.

  • 8/7/2019 Manual1 complet

    40/135

    40

    Procedurile sunt de dou tipuri: FAR i NEAR. O procedur FAR poate fi apelat i din altesegmente de cod dect cel n care este definit, pe cnd o procedur NEAR poate fi apelatnumai din segmentul de cod n care este definit. Dac se omit parametrii FAR sau NEAR,tipul procedurii este dedus din directivele simplificate de definire a segmentelor (modelul dememorie folosit).

    De exemplu , modelul LARGE presupune c toate procedurile sunt implicit de tip FAR.n mod corespunztor, exist apeluri de tip FAR, respectiv NEAR, precum i instruciuni derevenire de tip FAR, respectiv NEAR. Instruciunea RET (Return) provoac revenirea nprogramul apelant; tipul instruciunii este dedus din tipul procedurii (NEAR sau FAR). Putemfolosi o instruciune de revenire explicit: RETN (Return Near) sau RETF (Return Far).

    Apelul procedurilor i revenirea din proceduri

    Instruciunea CALL (Apel de procedur)

    CALL nume_procCALL FAR PTR nume_procCALL NEAR PTR nume_proc

    n primul caz, tipul apelului este dedus din tipul procedurii, iarn celelalte este specificatexplicit (FAR sau NEAR). Tipul apelului trebuie s coincid cu tipul procedurii i cu tipulinstruciunilor Return din interiorul procedurii, altfel se ajunge la funcionri defectuoase aleprogramului. n cazul unui apel de procedur de tip NEAR, se salveaz n stiv coninutulregistrului IP, care reprezint adresa de revenire, iar apoi n IP se ncarc adresa primeiinstruciuni din procedur. n cazul unui apel de tip FAR, se salveaz n stiv CS:IP,adresa complet de revenire (pe 32 de bii), iar apoi n CS:IP se ncarc adresa primeiinstruciuni din procedur.

    Instruciunea RET (Return - Revenire din procedur)

    RET

    RETFRETN

    n primul caz, tipul tipul instruciunii este dedus din tipul procedurii. n cazul unei reveniri detip NEAR, se reface registrul IP din stiv, astfel se transfer controlul la instruciunea careurmeaz instruciunii CALL care a provocat apelul procedurii. n cazul unei reveniri de tipFAR, se reface din stiv perechea de register CS:IP.

    Instruciunea JMP (Jump - Salt)

    JMP tintaJMP SHORT PTR tinta

    JMP NEAR PTR tintaJMP FAR PTR tinta

    n primul caz, tipul saltului este dedus din atributele expresiei care precizeaz inta. intaspecific adresa de salt i poate fi o etichet sau o expresie. Exist trei tipuri de instruciuni desalt:

    SHORT - adresa int se afl la o adres n domeniul [-127, +127] fa de adresainstruciunii de salt; NEAR - adresa int este n acelai segment de cod cu instruciunea de salt;

  • 8/7/2019 Manual1 complet

    41/135

    41

    FAR - adresa int poate fi n alt segment de cod fa de instruciunea de salt.

    Tipuri de salt/apel

    JMP/CALL direct

    Operandul care se afl n formatul instruciunii este o etichet care identific adresa int.Poate fi de dou tipuri:

    salt/apel direct intrasegment (NEAR) - eticheta este n acelai segment de cod cuinstruciunea JMP/CALL; salt/apel direct intersegment (FAR) - eticheta poate fi definit i n alt segment decod dect cel care conine instruciunea JMP/CALL.

    JMP/CALL indirect

    Operandul care apare n formatul instruciunii reprezint o adres de memorie. Poate fi dedou tipuri:

    salt/apel indirect intrasegment (NEAR), cu forma general JMP/CALL expr

    n care exprprecizeaz adresa efectiv a intei i poate fi un registru, o variabil de tipWORD, sau un cuvnt din memorie; salt/apel indirect intersegment (FAR), cu forma general JMP/CALL exprn care exprprecizeaz adresa complet a intei i poate fi o variabil de tip DWORD,sau un dublucuvnt din memorie.

  • 8/7/2019 Manual1 complet

    42/135

    42

    Exemple de programe

    ;----------------------------- PRGR_EXEMPLU -------------------------; acest exempliu verifica daca un string este un palindrom

    #make_COM#

    ORG 100h;deplasament de memorie; programul este incarcat la adresa CS:0100h

    jmp start

    s DB 'aaabbbaaa's_size DW 9

    start:

    LEADI, sMOV SI, DI

    ADD SI, s_sizeDEC SI ; indica catre locatia de memorie a ultimului caracter

    MOV CX, s_sizeSHR CX, 1 ; divide cu 2!

    next_char:MOV AL, [DI]MOV BL, [SI]CMP AL, BLJNE not_PalindromeINC DIDEC SI

    LOOP next_char

    is_Palindrome:; Set AX to 0FFFFh stringul este "Palindrom!"MOV AX, 0FFFFh

    JMP stop

    not_Palindrome:; Set AX to 0ABCDh - stringul nu este palindrom!"

    MOVAX

    , 0A

    BCD

    hstop:

    RET

  • 8/7/2019 Manual1 complet

    43/135

    43

    ;----------------------------- PROGR_EXEMPLU -------------------------;; acest exemplu arata folosirea unei intreruperi de temporizare; (INT 15h / 86h); prin afisarea unor caractere cu delayul de o secunda

    #make_COM#

    ORG 100h

    ; setarea registrilor de segment;MOV AX, CSMOV DS, AX

    next_char:

    CMP count, 0JZ stop

    ; afisare caracterMOV AL, c1MOV AH, 0EhINT 10h

    ; urmatorul caracterINC c1DEC count

    ; intervalul (1 million; de microsecunde - 1 secunda):

    MOV CX, 0FhMOV DX, 4240hMOV AH, 86hINT 15h

    ; oprire la orice eroareJC stop

    JMP next_char

    stop:RET

    count DB 10c1 DB 'A'

    END

  • 8/7/2019 Manual1 complet

    44/135

    44

    ;----------------------------- PRG_PRIM -------------------------;; program care primeste un numar de la tastatura si verifica daca e prim

    #make_COM#ORG 100h

    ;***************************************************************; AFISEAZAUN SIRDE CARACTERE CARE SE TERMINA PRIN ZERO;***************************************************************

    JMP skip_proc_print_string

    PRINT_STRING PROC NEARPUSH AX ; SALVARE CONTEXTPUSH SI ;

    next_char:

    MOVA

    L, [SI]CMP AL, 0JZ printedINC SIMOV AH, 0Eh ;INT 10hJMP next_char

    printed:

    POP SI ; REFACERE CONTEXTPOP AX ;

    RETPRINT_STRING ENDP

    skip_proc_print_string:;***************************************************************; CITESTE UN STRING PANA LA ENTER (13,10) IN CODASCII;***************************************************************

    JMP skip_proc_read_string

    READ_STRING PROC NEARPUSH AX ; SALVARE CONTEXT

    PUSH SI ;

    wait_for_key:

    ; VERIFICADACA S-AAPASAT O TASTA; AFECTEAZAFLAGUL ZF

    MOV AH, 1INT 16hJNZ wait_for_key

  • 8/7/2019 Manual1 complet

    45/135

    45

    ; IA TASATADIN BUFFER SI O PUNE IN AL:;MOV AH, 0INT 16h

    ; print the key:MOV AH, 0EhINT 10h; APASA 'ENTER'13,10 PENTRUA MARCA SFARSITUL DE SIR:CMP AL, 0DhJZ exit

    ; SALVAREA CODULUI ASCII AL CARACTERULUI:MOV [SI], ALINC SI

    JMP wait_for_keyexit:

    MOV [SI], 0POP SI ; REFACERE CONTEXTPOP AX ;

    RETREAD_STRING ENDP

    skip_proc_read_string:;***************************************************************; CONVERTESTE UN SIRDE CARACTERE LAUN INTREG;************************************************************** *

    JMP skip_proc_strtoint

    STRTOINT PROC NEARPUSH CX ; SALVARE CONTEXTPUSH SI ;

    MOV AX, 0MOV BX, 0

    NEXT_DIGIT:CMP [SI], 0

    JZ ENDSTRMOV BL, [SI]ADD BL, -48MOV CL, 10MUL CLADD AX, BXINC SI

    JMP NEXT_DIGIT

  • 8/7/2019 Manual1 complet

    46/135

    46

    ENDSTR:

    POP SI ; REFACERE CONTEXTPOP CX ;

    RETSTRTOINT ENDP

    skip_proc_strtoint:;***************************************************************; CONVERTESTE UN STRING LAUN INTREG STOCAT IN AX;*********************************************************** ****

    JMP skip_proc_prime

    PRIME PROC NEARPUSH DX ; SALVARE CONTEXTPUSH AX ;

    CMP AX,2

    JE ISNOTPRIMEMOV SI,AXMOV CL,2DIV CLMOV BL,ALMOV DL,2

    bucla:CMP DL,BLJA ISPRIMEMOV CL,DL

    MOV AX,SIDIV CLCMP AH,0JE ISNOTPRIMEADDDL,1JMP bucla

    ISPRIME:LEA SI, msg_PrimCALL print_stringJMP endprime

    ISNOTPRIME:LEA SI, msg_noPrimCALL print_stringJMP endprime

    ENDPRIME:

    POP AX ; REFACERE CONTEXT

  • 8/7/2019 Manual1 complet

    47/135

    47

    POP DX ;

    RETPRIME ENDPskip_proc_prime:;***************************************************************

    ; SECTIUNEA PRINCIPALAA PROGRAMULUILEA SI, msg1CALL print_string

    CALL read_string

    CALL strtoint

    CALL prime

    LEA SI, msg_done

    CA

    LL print_string

    RET

    ; DEFINIRE SIRURI

    msg_done DB 13, 10, 'GATA.', 13, 10, 0msg_Prim DB 13, 10, 'E PRIM.', 13, 10, 0msg_noPrim DB 13, 10, 'NU E PRIM.', 13, 10, 0

    msg1 DB 'n= ', 0

    END

  • 8/7/2019 Manual1 complet

    48/135

    48

    QUIZ

    Dorim s realizm un program, similar cu cel prezentat n partea de teorie, care:y s utilizeze dou tipuri de segmente pentru cod i pentru datey realizeaz suma a dou word-uri de valori 0120H respectiv 0241Hy pune rezultatul n memorie ntr-un al treilea word

    O variant incomplet a programului este prezentat mai jos.ntrebrile ce vor urma se vor referi la instruciunile i directivele ce lipsesc din program.

    ;----------------------------- PRG_07 -------------------------;acest program realizeaz suma a dou worduri prezente n memorie;avnd valorile 0120H i 0241H i pune rezultatul n al treilea;word n memorie (se presupune c rezultatul nu va depi 16 bii

    IMONITOR EQU 07HDS_SEG 0080H;----------------------------------------DATADATA xxxxxxxxxxxx

    DATA_1 xxxxxxxxxxxxDATA_2 xxxxxxxxxxxxxxxxxxxx ENDS;---------------------------------------- CODE;the program is charged to the address 0200:0000HPROG SEGMENTASSUME xxxxxxxxxxxxxxxxxxxSTART: MOV AX,xxxxx ; ncarc DS cu segemneul de date

    MOVDS,AXMOV xx,DATA_1 ; ncarc prima voloareMOV BX,DATA_2 ; ncarc a doua valoareADDAX,BX ;nsumeaz cele dou valori

    MOV SUMS,AXINT IMONITOR ;revenire la monitor

    PROG ENDSEND START

    Q1 Cu care din urmtoarele expresii trebuie substituit xxxxxxxxxx din linia:DATA xxxxxxxxxx ?

    SET

    A B

    1 2 ASSUME2 5 SEGMENT

    3 4 ENDS

    4 1 0120H

    5 2 0241H

  • 8/7/2019 Manual1 complet

    49/135

    49

    Q2 Cu care din urmtoarele expresii trebuie substituit xxxxxxxxxx din linia:DATA 1 xxxxxxxxxx ?

    SET

    A B

    1 5 ASSUME

    2 1 DD 0120H

    3 4 DB 0120H

    4 2 DW

    5 3 0120H

    Q3 Cu care din urmtoarele expresii trebuie substituit xxxxxxxxxx din linia:DATA 2 xxxxxxxxxx ?

    SET

    A B1 4 ASSUME

    2 1 DW 0120H

    3 5 DW 0241H

    4 3 DD 0120H

    5 2 DD 0241H

    Q4 Cu care din urmtoarele expresii trebuie substituit xxxxxxxxxx din linia:xxxxxxxx ENDS?

    SET

    A B

    1 2 ASSUME

    2 5 SEGMENT

    3 4 ENDS

    4 3 DATA

    5 1 0241H

  • 8/7/2019 Manual1 complet

    50/135

  • 8/7/2019 Manual1 complet

    51/135

    51

    LECIA 5: MICROPROCESORUL DE 32 DE BII 80386

    OBIECTIVE:

    y Evoluie de la 8086 la 80386y Structura intern a microprocesorului 80386y Regitriiy Lista de instruciuniy Modurile de funcionare

    MATERIALE:

    y Unitatea de baz pentru sistemele IPES (surs de curent mod.PS1-PSU/, prizmod.MU/EV, unitate de management individual mod.SIS1/SIS2/SIS3)

    y Modul experimental mod.Z3/EV

    n aceast lecie va fi descris microprocesorul 80386.Pn acum s-a folosit doar microprocesorul 8086 deoarece este cel mai simplu microprocesordin familia Intel, i deci e cel mai bun pentru nceput.Microprocesorul 80386 este compatibil cu 8086, dar are potenial mai mare datorit structuriipe 32 de bii.

    EVOLUIA de la 8086 la 386

    Urmtorul microprocesor dupa 8086, lsnd la o parte 186 este 80286.Aceasta este un upgrade la 16 bii a microprocesorului 8086, avnd n plus i un sistem demanagement a memoriei virtuale, circuite de protecie, i posibilitatea adresrii a 16 MB dememorie.Este primul microprocesor al familiei ce a fost proiectat pentru utilizare n sisteme multi-usersau multi-tasking.

    Microprocesorul 80386 este un microprocesor pe 32 de bii cu magistrala de adrese de 32 debii.

    UAL de 32 de bii permite microprocesorului 386 s prelucreze datele ntr-un mod rapid, iaradresarea pe 32 de bii permite adresarea a pn la 4GB de memorie.

    Este n mod special utilizat n cadrul sistemelor multi-tasking, avnd un management almemoriei i un circuit de protecie mbuntait.n plus, microprocesorul 386 este compatibil cu mai multe sisteme de operare actuale.

    Structura intern

    Diagrama bloc a microprocesorului 80386 este prezentat mai jos n figura 16.

  • 8/7/2019 Manual1 complet

    52/135

    52

    Figur 9

    80386 este format din:y unitatea central de prelucrarey unitate de management a memorieiy magistral de date

    Unitatea central de prelucrare (UCP) este format din unitatea de execuie i unitatea deinstruciuni.Unitatea de execuie conine 8 regitrii de uz general de 32 de bii mpreun cu UAL.Unitatea de instruciuni decodific codurile operaiilor intruciunilor i le salveaz ntr-ocoad pentru a fi preluate de unitatea de execuie.

    Unitatea de management a memoriei(UMM) este format dintr-o unitate de segmentare i unade editare. Memoria este organizat n unul sau mai multe segmente, fiecare dintre ele putndavea pn la 4GB. Unitatea de segmentare are 4 nivele de protecie pentru a izola i protejaaplicaiile ntre ele.

    Unitatea de interfaare se ocup de conexiunile ntre semnalele microprocesorului iperiferice: memorie, device-uri, dispozitive de I/O, etc.

    80386 are dou moduri de funcionare:y Mod real: 386 lucreaz ca un 8086 mai rapid, cu extensiile de 32 de biiy Mod protected: 386 beneficiaz de un sistem de management al memoriei sofisticat ce

    permite multi-tasking.

    n cadrul modulului de laborator se utilizeaz modul real.Aadar modulul protected nu va fi prezentat n detaliu.

  • 8/7/2019 Manual1 complet

    53/135

    53

    Regitrii

    80386 are 32 de regitrii ce se mpart n mai multe categorii:y Regitrii de uz generaly Regitrii de selecie a segmentelory Regitrii indicatori de stiv i regitrii indicatori de condiiiy Regitrii de controly Regitrii de sistemy Regitrii de debuggingy Regitrii de test

    Aceti regitrii sunt un superset al regitrilor microprocesorului 8086, astfel nct toi regitriimicroprocesorului 8086 sunt inclui in 386.

    n figura 17 este prezentat arhitectura de baz a regitrilor lui 386, mprit n:y Regitrii generali de date i de adresey Regitrii de selecie a segmentelor

    y Regitrii indicatori de stiv i regitrii indicatori de condiii

    Figur 10

    Regitrii de uz general

    Cei 8 regitrii de uz general de 32 de bii pot memora date sau adrese.Aceti regitrii, figura 18, suport operatori de 1, 8, 16, 32 sau 64 de bii, i cmpuri de datede la 1 la 32 de bii. De asemenea suport adrese de 16 sau 32 de bii.Regitrii: EAX, EBX, ECX, ESI, EDI, EBP i ESP.

  • 8/7/2019 Manual1 complet

    54/135

    54

    Figur 11

    Se pot accesa doar cei mai puin semnificativi 16 bii ai registrului.Acest lucru se poate face folosind notaiile: AX, BX, CX, DX, SI, DI, BP i SP.Accesnd doar cei mai puin semnificativi16 bii ai registrului, ceilali bii rmn nefolosii inemodificai.Operaiile pe 8 bii acceseaz doar cel mai puin semnificativ octet (biii 0-7) i cel maisemnificativ octet (biii 8-15) ai regitrilorAX, BX, CX i DX. Cel mai puin semnificativoctet se noteaz astfel: AL, BL, CL sau DL, n timp ce octetul cel mai semnificativ se noteazcu AH, BH, CH sau DH.

    Indicatorul de stiv

    Indicatorul de stiv este un registru pe 32 de bii numit EIP. Acesta conine deplasamentulinstruciunii ce urmeaz a fi prelucrat. Acest deplasement se refer ntotdeauna la registrulde segment (CS).Biii 0-15 ai registrului EIP sunt biii registrului IP (instruction pointer indicator de stiv),ce se utilizeaz n modul de adresare pe 16 bii.

    Regitrul indicatori de condiii

    Acest registru este un registru pe 32 de bii ce poart numele de EFLAGS. Semnificaiabiilor este prezentat n figura 19 .Biii 0-15 ai registrului EFLAGS sunt biii registrului FLAGS utilizat pentru compatibilitateacu instruciunile lui 8086.

    Figur 12

    Se poate observa faptul c cei mai puin semnificativi 12 bii(0-11) sunt aceeai cu aimicroprocesorului 8086.Ceilali bii au urmtoarea semnificaie:

  • 8/7/2019 Manual1 complet

    55/135

    55

    VM: Virtual Mode(mod virtual). Seteaz funcionalitatea n modul virtual almicroprocesorului 8086 n cadrul modului protected.RF: Resume Flag(indicator de revenire). Se folosete mpreun cu regitrii de ntrerupere.NT: Nested Task(task-uri imbricate). Se folosete n modul protected i indic dac taskul nexecuie este inclus n interiorul altor taskuri.IOPL: Input/Output Privilege Level (bits 12-13) (Nivelul de privilegiu al I/O). Se foloseten modul protected i indic nivelul de privilegiu al operaiilor de I/O.

    Regitrii de segmentCei 6 regitrii de segment de cte 16 bii fiecare conin valorile segmentelor ce corespund:- Codului: registrul CS- Stivei: registrul SS- Datelor: regitrii DS, ES, FS, GS.

    n modul protected, fiecare segment i poate modifica dimensiunea de la un octet la ntregulspaiu de memorie, 4GB(2^32 octei).n modul real, dimensiunea maxim a unui segment este de 64KB(2^16 octei).

    Regitrii descriptori de segment

    Aceti regitrii nu sunt vizibili programatorului.Ei sunt asociai fiecrui registru de segment i conin o adres de baz de 32 de bii i o limitde segment tot de 32 de bii.Tocmai din acest lucru este posibil o dimensionare a segmentelor pn la 4GB, utilizndregitrii de segment de cte 16 bii.

    Regitrii de control

    80386 dispune de 3 regitrii de control de cte 32 de bii fiecare: CR0, CR1 i CR2, ce conininformaii despre starea microprocesorului. Aceti regitrii se folosesc n modul protected, aac nu vor fi analizai aici.

    Regitrii adreselor de sistemPentru managementul tabelelor/segmentelor din modul protected se utilizeaz 4 regitriispecifici:GDT: Global Descriptor Table (Tabelul de descriptori globali)IDT: Interrupt Descriptor Table (Tabelul de descriptori de ntrerupere)LDT: Local Descriptor Table (Tabelul de descriptori locali)TSS: Task State Segment (Segmentul de stare al task-ului)

    Aceti regitrii sunt specifici modului protected, aa c nu vor fi analizai.

    Regitrii de test i de debug

    80386 folosete 6 regitrii de debug i 3 regitrii de test pentru operaii specifice detest/debug, care de asemenea nu vor fi analizate.

    Setul de instruciuni

    Setul complet de instruciuni al microprocesorului 80386 este mpri n 9 categorii:y Instruciuni de transfer de datey Instruciuni aritmeticey Instruciuni de shiftare/rotaiey Instruciuni de manipulare a irurilor de caractere

  • 8/7/2019 Manual1 complet

    56/135

    56

    y Instruciuni de manipulare la nivel de bity Instruciuni de controly Instruciuni de suport pentru limbaje de nivel nalty Instruciuni de suport pentru sisteme de operarey Instruciuni de control al procesorului

    Toate instruciunile au 0,1,2 sau 3 operanzi fiecare dintre ei poate fi gsit fie ntr-un registru,direct n instruciune sau n memorie.

    Operanzii pot avea dimensiunea de 8, 16 sau 32 de octei. Ca regul general, la scriereacodului pentru 80386(cod pe 32 de bii) operanzii sunt fie de 8, fie de 32 de de bii.Atunci cnd se urmrete compatibilitatea cu 8086 (cod de 32 de bii), atunci operanzii potavea 8 sau 16 bii.Pentru a modifica dimensiunile standard pot fi adugate prefixuri pentru toate instruciunile.Valoarea medie a dimensiunii instruciunilor este de 3.2 octei. Deoarece 80386 are o coadde instruciuni de 16 octei, acest lucru permite reinerea n coad de pn la 5 instruciunigata decodificate.

    n continuare vor fi prezentate toate instruciunile microprocesorului 80386.Putei compara acest tabelcu instruciunile microprocesorului 8086din lecia 2.

    Instruciuni de transfer de dateDe uz general

    MOV Mut un operandPUSH Copiaz un operand pe stivPOP Preia un operand de pe stivPUSHA Copiaz toi regitrii pe stivPOPA Preia toi regitrii de pe stivXCHG Interschimb operanzi, regitriiXLAT Transform operandul

    De conversieMOVZX Mut un octet, word, Dword cu extensia 0

    MOVSX Mut un octet, word, Dword cu extensie de semnCBW Transform un octet ntr-un word sau un word n DwordCWD Transform un word n Dword (folosind regitrii DX:AX)CWDE Transform un word n Dword (folosind registrul EAX)CDQ Transform unDword n Qword

    Intrare/IeireIN Preia operandul de la I/OOUT Trimire operandul ctre I/O

    De adresLEA ncarc adresa efectivLDS ncarc un pointer n registrul DSLES ncarc un pointer n registrul ESLFS ncarc un pointer n registrul FSLGS ncarc un pointer n registrul GSLSS ncarc un pointer n registrul de segment al stivei

    Manipulare a indicatorilor de condiiiLAHS Preia din stiv registrul ASAHS Reine n stiv registrul APUSHF Copiaz registrul FLAGS pe stivPOPF Preia din stiv registrul FLAGSPUSHFD Copiaz registrul EFLAGS pe stiv

  • 8/7/2019 Manual1 complet

    57/135

    57

    POPFD Preia din stiv registrul EFLAGSCLC Reseteaz bitul de carryCLD Reseteaz bitul de direcieCMC Scrie bitul de carrySTC Seteaz indicatorul de carrySTD Seteaz indicatorul de direcie

    Instruciuni aritmetice

    AdunareADD Adun operanziiADC Adun cu transportINC Incrementeaz cu 1 operandulAAA Ajustare ASCII pentru adunareDAA Ajustare zecimal pentru adunare

    ScdereSUB Scaderea operanziiSBB Scadere innd cont i de transportD

    ECD

    ecrementeaz cu 1 operandulNEG Negarea biilor operanduluiCMP Compar operanziiAAS Ajustare ASCII dup scdereDAS Ajustare zecimal dup scdere

    nmulireMUL nmulire cu precizie simpl/dublIMUL nmulireAAM Ajustare ASCII dup nmulire

    mprireDIV mprire fr semnIDIV mprire

    AAD Ajustare ASCII nainte de mprire

    Instruciuni pe iruri de caractere

    MOVS Mut stringuri de octei, word sau DwordINS Preia un string de la un port I/O

    OUTS Trimite un string ctre un port I/OCOMPS Compar dou iruri de caractere de un octet, Word sau DwordSCAS Scaneaz un string de un octet, Word sau DwordLODS ncarc un string de un octet, Word sau DwordSTOS Memoreaz un string de un octet, Word sau DwordREP Repetiie

    REPEREPZ

    Repet o intruciune pn cnd CX=0 sau ZF 1

    REPNEREPNZ

    Repet o intruciune pn cnd CX=0 sau ZF =1

  • 8/7/2019 Manual1 complet

    58/135

    58

    Instruciuni logice

    LogiceNOT NOT pe operanziAND I pe operanziOR SAU pe operanziXOR SAU EXCLUSIV pe operanziTEST Testeaz operanzii

    De shiftare

    SHL/SHR Shiftare logic la stnga/dreaptaSAL/SAR Shiftare aritmetic la stnga/dreapta

    SHLD/SHRD Shiftare dubl la stnga/dreaptaDe rotaie

    ROL/ROR Rotete la stnga/dreaptaRCL/RCR Rotete la stnga/dreapta cu carry

    Instruciuni de manipulare la nivel de bit

    Instruciuni de un singur bitBT Testeaz un bit

    BTS Testeaz i seteaz un bit

    BTR Testeaz i reseteaz un bitBTC Testeaz i complementez un bitBSF Scanare direct a unui bitBSR Scanare invers a unui bit

    Instruciuni de control al programului

    Transfer condiionatSETCC Seteaz un octet egal cu codul condiiei

    JA/JNBE Sare dac e mai mare/ Sare dac nu e mai mic sau egalJAE/JNB Sare dac e mai mare sau egal/ Sare dac nu e mai mic

    JB/JNAE Sare dac e mai mic/ Sare dac nu e nici mai mare i nici egalJBE/JNA Sare dac e mai mic sau egal/ Sare dac nu e mai mare

    JC Sare dac CF=1JE/JZ Sare dac e egal/ Sare dac ZF=1

    JG/JNLE Sare dac e mai mare/ Sare dac nu e mai mic sau egalJGE/JNL Sare dac e mai mare sau egal/ Sare dac nu e mai micJL/JNGE Sare dac e mai mic/ Sare dac nu e 0 (ZF1)JLE/JNG Sare dac e mai mic sau egal/ Sare dac nu e mai mare dect

    JNC Sare dac CF=0JNE/JNZ Sare dac nu e egal/ Sare dac nu e 0 (ZF0)

    JNO Sare dac nu e depire (OF=0)

    JNP/JPO Sare dac nu e paritate/ Sare dac e imparitate (PF=0)JNS Sare dac nu exist semn (SF=0)JO Sare dac este depire OF=1

    JP/JPE Sare dac e paritate (PF=1)JS Sare dac exist semn (SF=1)

    Transfer necondiionatCALL Apelare de procedur sau taskRET Revenire din procedurJMP Salt

  • 8/7/2019 Manual1 complet

    59/135

    59

    Control al interaciuniiLOOP Urmeaz o secven de instruciuni pn cnd CX0

    LOOPELOOPZ

    Urmeaz o secven de instruciuni pn cnd ZF=0 i CX0

    LOOPNELOOPNZ

    Urmeaz o secven de instruciuni pn cnd ZF=1 i CX0

    JCXZ Sare la adresa specificat dac CX=0

    ntreruperiINT ntrerupereINTO ntrerupe execuia programului dac OF=1IRET Revine dintr-o ntrerupereCLI Dezactiveaz o ntrerupereSTI Activez o ntrerupere

    Instruciuni de nivel nalt

    BOUND Verific limitele unui vectorENTER Seteaz paramatrii unei proceduriLEAVE Iese dintr-o procedur

    nstruciuni din modul protected

    SGDT Memoreaz tabela de descriptori globaliSIDT Memoreaz tabela de descriptori de ntrerupereSTR Memoreaz registrul de taskuri

    SLDT Memoreaz tabela de descriptori localiLGDT ncarc tabela de descriptori globaliLIDT ncarc tabela de descriptori de ntrerupereLTR ncarc registrul de taskuri

    LLDT ncarc tabela de descriptori localiARPL Nivelul de privilegiu Aggiusta RethesedLAR ncarc drepturile de accesLSL ncarc limita de segment

    VERR/VERW Verific segmentul pentru scriere sau citireLMSW ncarc wordul ce conine starea mainiiSMSW Memoreaz wordul ce conine starea mainii

    Instruciuni de control al procesorului

    HLT HaltWAIT Ateapt pn cnd BUSY# este refuzatESC EscapeLOCK Blocarea magistralei

    Adresarea pe 16 i 32 de biiPentru a pstra compatibilitatea cu 8086, microprocesorul 80386 poate prelucra instruciunide 16 bii n modul real sau protected.Microprocesorul determin mrimea instruciunii care este aflat prin examinarea bituluiD aldescriptorului de segment CS.Dac D este 0, atunci adresrile sunt considerate a fi pe 16 bii, altfel, dac bitul este 1,adresrile sunt considerate a fi pe 32 de bii.n modul real se consider implicit adresarea pe 16 bii.

  • 8/7/2019 Manual1 complet

    60/135

    60

    Independent de mrimea operanzilor adreselor, 80386 este capabil s prelucreze instruciunilede 16 sau 32 de bii. Acest lucru se poate realiza prin adugarea unui prefix n cadrulinstruciunii.Se pot folosi dou tipuri de prefixe, unul care indic dimensiunea operandului i altul careindic dimensiunea adresei.Prefixele sunt introduse automat n codul programului de asamblare.

    Funcionalitatea n modul real

    Atunci cnd 8086 este pornit sau resetat este iniializat implicit modul real.Modul real are aceeai funcionalitate de baz a microprocesorului 8086, dar permite accesulla regitrii de 32 de bii ai lui 80386.Modul de adresare, dimensiunea memoriei, managementul ntreruperilor sunt identice cu celeale microprocesorului 8086.Exceptnd instruciunile din modul protected, toate instruciunile sunt disponibile.Dimensiunea implicit a operanzilor este de 16 bii.Pentru a putea folosi regitrii i instruciunile pe 16 bii trebuiesc utilizate prefixe.Dimensiunea maxim a unui segment este de 64 KB.

    Dimensiunea maxim a memoriei este de 1MB, fiind active liniile A2-A19.Exist dou zone fixe de memorie rezervate n modul real:

    y Locaiile de la 00000H la 003FFH sunt utilizate pentru vectorii de ntrerupere.y Locaiile de la FFFFFFFF0H la FFFFFFFFFH sunt rezervate pentru iniializare.

    Funcionare n modul protected

    Microprocesorul 80386 lucreaz la capacitate maxim doar cnd este n modul protected.n acest mod este disponibil o dimensiune a memoriei pn la 4 GB (32 bii) i permiteexecuia de programe virtuale de orice dimensiune.Se pot executa i programe pentru 8086, avnd un sistem de management al memorieisofisticat.Modul protected permite instruciuni suplimentare, care sunt particularizate pentru operaiimulti-tasking la nivel de sistem de operare.

    Modulprotectednu va fi analizat aici, datorit resurselorlimitate disponibile de placa deachiziie Module Z3/EV.

  • 8/7/2019 Manual1 complet

    61/135

    61

    QUIZ

    Q1 Care dintre urmtoarele afirmaii, referitoare la microprocesorul80386, nu esteadevarat?

    SET

    A B

    1 2 Magistrala de adrese este de 32 de bii

    2 1 Magistrala de date este de 32 de bii

    3 5 Regitrii interni au o dimensiune de 32 de bii

    4 3 Adreseaz pn la 2GB de memorie

    5 4 Poate fi folosit n sisteme multi-user.

    Q2 Care dintre urmtoarele afirmaii, referitoare la microprocesorul80386, nu esteadevarat?

    SETA B

    1 5 Registrul EAX este pe 32 de bii

    2 4 Registrul CS este pe 32 de bii

    3 2 RegistrulAX este pe 16 de bii

    4 3 RegistrulAL este pe 8 de bii

    5 1 RegistrulDS este pe 16 de bii

    Q3 Regitrii de segment ai microprocesorului 80386 suntpe 16 bii.Totui, acestmicroprocesor este capabils adreseze segmente de pn la 4GB.Cum este posibilacestlucru?

    SET

    A B

    1 4 Utiliznd regitrii descriptori de segment

    2 3 Utiliznd regitrii adreselor de sistem

    3 1 Utiliznd multiplicarea liniilor de adrese

    4 2 Prin segmentarea dubl a memoriei

  • 8/7/2019 Manual1 complet

    62/135

    62

    Q4 Instruciunile specifice microprocesorului 80386utilizeaz operanzi de:

    SET

    A B

    1 5 8, 16, 32 de bii

    2 4 8, 16 bii

    3 2 16, 32 de bii

    4 3 8, 32 de bii

    5 1 32 de bii

    Q5 n ce m