13563947 Limbaj de Asamblareivan

  • View
    28

  • Download
    2

Embed Size (px)

Text of 13563947 Limbaj de Asamblareivan

399 Ion IVANPaul POCATILUDoru CAZAN Coordonatori PRACTICA DEZVOLTRII SOFTWARE N LIMBAJE DE ASAMBLARE Editura Economic Bucureti 2002 400 Colectivul de autori Ilie ADRIAN Laureniu ARICIU Doru CAZAN Cristian CODREANU Valentin DRAGOMIR Ion IVAN Laur IVAN Alexandru LEAU Adrian LICURICEANU Zsolt MARK Teodor MIHAI Paul POCATILU Mihai POPESCU Gabriel UTAC Sebastian TCACIUC Daniel VERNI 401 CUPRINS 1 Introducere11 2 Caracteristicile limbajelor de asamblare13 2.1 Prelucrri elementare13 2.2 Caracterul neimplicit al definirilor si prelucrrilor14 2.3 Secvenialitatea instruciunilor16 2.4 Absena prioritilor17 2.5 Contextul dinamic19 2.6 Libera poziionare20 2.7 Adresarea generalizat21 2.8 Necompactitatea construciilor23 2.9 Incluziunea24 2.10 Concluzii25 3 Reprezentarea informaiei27 3.1 Codificarea informaiei27 3.2 Organizarea datelor28 3.3 Reprezentarea informaiei numerice30 3.4 Reprezentri ale irurilor de caractere36 4 Moduri de adresare 39 4.1 Calculul adresei unui operand39 4.2 Modul de adresare imediat41 4.3 Modul de adresare registru43 4.4 Adresarea direct44 4.5 Adresarea indexat45 4.6 Adresarea bazat47 4.7 Adresarea bazat i indexat48 402 4.8 Adresarea indirect49 5 Indicatorii de condiie53 5.1 Registrul FLAGS53 5.2 Operaii cu indicatorii de condiie55 5.3 Poziionarea indicatorilor de condiie la execuie56 5.4 Interaciunea indicatori de condiie - instruciuni56 6 Instruciuni61 6.1 Clasificarea instruciunilor61 6.2 Descrierea instruciunilor63 6.3 Forma extern a instruciunilor65 6.4 Forma intern a instruciunilor71 6.5 Comentariile77 6.6 Efectele execuiei instruciunilor78 7 Definirea structurilor de date81 7.1 Date elementare81 7.2 Masive unidimensionale82 7.3 Masive bidimensionale82 7.4 Articolul84 7.5 Variabile pointer88 7.6 Variabile enumerative89 7.7 Tabele de date90 7.8 Obiecte91 8 Implementarea structurilor fundamentale95 8.1 Programarea structurat95 8.2 Structura liniar95 8.3 Structura alternativ96 8.4 Structura repetitiv standard99 8.5 Structura repetitiv condiionat posterior102 8.6 Structura alternativ multipl103 9 Aritmetici binare107 9.1 Aritmetica binar pe 8 bii107 9.2 Aritmetica binar pe 16 bii109 9.3 Aritmetica binar pe 32 bii112 10 Aritmetici zecimale117 10.1 Ajustri117 10.2 Adunarea i scderea119 10.3 nmulirea i mprirea120 10.4 Proceduri de calcul122 10.5 Determinarea lungimii rezultatului evaluri unei expresii aritmetice129 11 ntreruperi131 11.1 ntreruperi interne i externe131 11.2 Modul de funcionare al ntreruperilor131 11.3 Tipuri de ntreruperi134 11.4 Exemplu de folosire al ntreruperilor138 11.5 Concluzii145 12 Macrodefiniii147 12.1 Structura macrodefiniiei147 40312.2 Macroapelul i macroexpandarea149 12.3 Etichete locale 151 12.4 Variabile locale153 12.5 Macrodefiniii derivate155 12.6 Macrodefiniii recursive156 12.7 Redefinirea macrodefiniiilor157 12.8 Macrodefiniii uzuale157 12.9 Concluzii163 13 Proceduri165 13.1 Reutilizabilitatea165 13.2 Structura unei proceduri166 13.3 Apelarea procedurilor168 13.4 Locul procedurilor172 13.5 Instruciuni specifice lucrului cu proceduri173 14 Prelucrri n virgul mobil179 14.1 Scurt istorie a prelucrrilor n virgul mobil179 14.2 Resurse179 14.3 Setul de instruciuni182 14.4 Sintaxa instruciunilor187 14.5 Forma extern a instruciunilor189 14.6 Exemple190 14.7 Concluzii193 15 Lucrul cu iruri de caractere195 15.1 Caracteristicile instruciunilor de lucru cu iruri de caractere195 15.2 Setul de instruciuni pentru lucrul cu iruri de caractere196 15.3 Lucrul cu iruri de caractere fr a folosi instruciuni specializate198 15.4 Prefixul REP199 15.5 Compararea a dou iruri201 15.6 Poziia unui subir intr-un ir203 15.7 Eliminarea spatiilor204 15.8 Copierea unui ir surs n ir destinaie205 15.9 Stabilirea lungimii unui ir205 15.10 Conversie de la ntreg binar la hexazecimal ca ir de caractere206 15.11 nlocuirea apariiilor unui caracter207 15.12 Concatenarea a dou iruri207 15.13 Iniializarea unui ir209 15.14 Copierea unui ir dintr-o zon de memorie ntr-o alt zon de memorie210 15.15 Numrarea caracterelor identice cu un caracter specificat211 16 Fiiere213 16.1 Fiiere, articole, identificatori213 16.2 Operaii cu fiiere215 16.3 Utilizarea de fiiere pentru calculul fondului de salarii221 16.4 Operaii cu directori si subdirectori231 17 Programarea mixt C- limbaj de asamblare235 17.1 Programul principal este scris n limbaj de asamblare,procedurile apelate sunt scrise n limbajul C 235 404 17.2 Programul principal este scris n limbajul C,procedurile apelate sunt scrise n limbaj de asamblare 242 17.3 Concluzii251 18 Dezvoltarea de aplicaii orientate obiect in limbaj de asamblare253 18.1 Concepte folosite n dezvoltarea programelor orientate obiect253 18.2 Definirea obiectelor prin structuri257 18.3 Definirea obiectelor prin macrodefiniii260 18.4 Folosirea specificaiilor proprii limbajului de asamblare276 18.5 Analiza comparativ a variantelor de implementare a obiectelor 282 19 Structuri de programe289 19.1 Programul ca singur secven (0, 0, 1)289 19.2 Programul din secvene distincte grupate ntr-un segment (1, 1, 1)296 19.3 Proceduri incluse n segmentul programului principal (1, 1, 1)300 19.4 Definiri distincte pentru toate componentele (m, k, n)304 19.5 Structuri liniare de program306 19.6 Structura arborescent307 19.7 Structuri de tip reea316 19.8 Concluzii318 20 Optimizarea programelor319 20.1 Criterii de optim319 20.2 Cicluri main320 20.3 Volumul de operaii323 20.4 Secvene echivalente327 20.5 Alegerea tipului de dat329 20.6 Eliminarea subexpresiilor comune330 20.7 Gestionarea corect a invarianilor331 20.8 Regruparea ciclurilor332 20.9 Eliminarea secvenelor inconsistente334 20.10 Eliminarea secvenelor inactive334 20.11 Reacoperirea segmentelor335 20.12 Alocarea optim a regitrilor336 20.13 Concluzii338 21 Designul limbajelor de asamblare339 21.1 Cerine ale designului339 21.2 Structura instruciunii limbajului de asamblare340 21.3 Designul corectiv pentru limbajele de asamblare342 21.4 Stabilirea numrului de registre344 21.5 Concluzii345 22 Elemente de grafica347 22.1 Istoric al adaptoarelor grafice347 22.2 Rutine BIOS i moduri grafice349 22.3 Lucrul n mod grafic folosind un adaptor VGA351 22.4 Lucrul n mod grafic folosind un adaptor SVGA359 22.5 Concluzii364 23 Programe rezidente365 23.1 Caracteristicile programelor rezidente365 23.2 ntreruperi pentru programe rezidente366 40523.3 Sistemul de operare MS-DOS369 23.4 Resurse ale programelor rezidente370 23.5 Controlul proceselor373 23.6 Probleme specifice n realizarea programelor rezidente378 23.7 Activarea programelor rezidente385 23.8 Program rezident pentru afiarea ceasului388 23.9 Concluzii398 24 Programarea n modul protejat399 24.1 Moduri de operare ale procesorului 80x86399 24.2 Regitrii procesoarelor i386/i486400 24.3 Moduri de gestiune a memoriei407 24.4 Comutarea in modul protejat409 24.5 Implementarea modului de lucru multitasking423 24.6 Concluzii426 25 Programarea aplicaiilor Windows n limbaj de asamblare427 25.1 Interfaa de programare a aplicaiilor Windows427 25.2 Organizarea memoriei in Windows 9x428 25.3 ncrcarea programelor Win32430 25.4 Structura unui program n limbaj de asamblare430 25.5 Programarea sub Windows432 25.6 Asamblarea si editarea de legturi441 25.7 Exemplu de program Win32441 Bibliografie447 Anexe A IArhitectura procesoarelor din familia Intel 80x86 A-1 A IIMnemonicele instruciunilor procesorului 80x86A-5 A IIISetul de instruciuni ale procesoarelor Intel 80x86 A-11 A IVRegitrii coprocesorului 80x87A-69 A VMnemonicele instruciunilor coprocesorului 80x87A-73 A VIPrimul program n limbaj de asamblareA-77 A VIIAnaliza comparat a utilizrii diferitelor tipuri de reprezentriA-89 A VIIICalcul matriceal - studiu de cazA-101 406 2 CARACTERISTICI ALE LIMBAJELOR DE ASAMBLARE 2.1 Prelucrri elementare Limbajelealgoritmicedeprogramare(FORTRAN,COBOL,PL/I, ALGOL)ilimbajeleevoluatedeprogramare(C++,PASCAL)coninconstrucii care realizeaz prelucrri complexe. Compilatoarele lor dezvolt secvene cu multe instruciuninmoduleobiect.nschimb,limbajeledeasamblareconinprelucrri elementare.Instruciunilelorsuntpusencorespondencuoperaiisimple. Instruciunea add O1, O2 realizeazadunareaoperanduluiO2laoperandulO1.Rezultatulestedatde operandul O1. Instruciunea mov O1, O2 efectueaz copierea operandului O2. Dup executarea ei, operandul O1 are acelai coninut cu cel al operandului O2. Instruciunea shl O1,x realizeazmultiplicareaoperanduluiO1cu2xsaudeplasareasprestngaabiilor ce alctuiesc coninutul operandului O1 cu x poziii. Instruciunea xchg O1, O2 realizeazinterschimbuldintreoperanziiO1iO2.Dacnaintedeexecuie operandulO1esteegalcu7iaroperandulO2esteegalcu13,dupexecuia instruciunii xchg, operandul O1 va fi 13, iar operandul O2 va fi 7. 407Seidentificomultitudinedeprelucrrielementare.Fiecreiprelucrri elementareiseasociazoinstruciune.Proiectarealimbajuluideasamblareian considerarerezolvareaoricreiproblemeprinconstruireadealgoritmilanivelul pailor elementari. nseamn c mai jos de acest nivel de detaliere nu se mai poate cobor. Estefoarteimportantdeobservatcdifereneledintrelimbajelede asamblare sunt nesemnificative dac sunt analizate prelucrrile elementare. Dacsestudiazlisteledeinstruciunialelimbajelordeasamblare ASSEMBLER,ASSIRIS,MACRO-11,corespunztoareunorgeneraiimaivechi, cucelealelimbajelordeasamblaredefinitepentrumicroprocesoareledeazise observexistenaaceluiainiveldedetalierencazularitmeticiibinareinaria instruciunilor destinate controlului execuiei. Tabelul 2.1. LimbajulLimbaj asamblare microprocesor Instruciunea ASSEMBLERASSIRISMACRO-11 486PENTIUM II Adunareaddad4, addaddaddadd Scderesubsb4, sbdsubsubsub nmuliremulmp4, mpdmulmulmul mpriredivdv4, dvddivdivdiv Compararecmpcp4, cp1cmpcmpcmp Salt necondiionat jmpbrubrjmpjmp Salt condiionatjz, je, jne,...bcf, bz, ...beq, bne,...jz, je, jne,...jz, je, jne,... 2.2 Caracterul neimplicit al definirilor i prelucrrilor Limbajeledeprogramareevoluateposedimplementrilanivelde compilatoare care realizeaz: -alocriautomate dememorie pentru operanziiutiliza