Contacte

Structura programului pe asamblare. Informații de bază despre limba de asamblare. Sub disciplina, "programarea sistemului structura echipei în limba de asamblare conține

1. PC-ul de arhitectură .............................................. ......................... 5.

    1.1. Registre.

    1.1.1 Registre generale.

1.1.2. Registrele segmentului

1.1.3 Registrul de steaguri

1.2. Organizația de memorie.

1.3 Prezentarea datelor.

1.3.1 Tipuri de date

1.3.2 Prezentarea caracterelor și liniilor

2. Operatori de program pe asamblare ............................................

    1. Echipe ale limbajului de asamblare

2.2. Adresarea modurilor și formatelor comenzilor mașinilor

3. Operatorii pseudo .............................................. ....................

3.1 Directivele privind definirea datelor

3.2 Structura programului de asamblare

3.2.1 Segmente software. Directiva presupune

3.2.3 Directiva simplificată de segmentare

4. Asamblarea și aspectul programului ................................

5. Comenzi de transfer de date ............................................. .........

    5.1 comenzi generale

    5.2 Echipe de lucru cu stivă

5.3 comenzi I / O

5.4 Comenzi de transfer de adrese

5.5 Echipe de transport maritim

6. Echipe aritmetice .............................................. ...........

    6.1 Operații aritmetice pe număr întreg binar

6.1.1 Adăugarea și scăderea

6.1.2 Echipe de creștere și reduc receptor pe unitate

6.2 Multiplicare și diviziune

6.3 Schimbarea semnului

7. Operațiuni logice .............................................. ................

8. Schimbări și schimburi ciclice ............................................ ....

9. Operațiuni de șir .............................................. ..................

10. Logica și organizarea programelor ........................................... ..

10.1 tranziții necondiționate

10.2 Tranziții condiționate

10.4 Proceduri în limba de asamblare

10.5 întrerupe int.

10.6 Software-ul sistemului

10.6.1.1 Citiți tastatura.

10.6.1.2 Ieșirea caracterelor pe ecran

10.6.1.3 Finalizarea programelor.

10.6.2.1 Selectarea modului de afișare

11. Memoria discului .............................................. ............................ ..

11.2 Tabel de distribuție a fișierelor

11.3 Operații I / O pe disc

11.3.1 Înregistrați fișierul pe disc

11.3.1.1 Datele în format ASCIZ

11.3.1.2 Numărul fișierului

11.3.1.3 Crearea unui fișier de disc

11.3.2 Citirea fișierului de disc

Introducere

Limba de asamblare este o prezentare simbolică a limbii mașinii. Toate procesele din calculatorul personal (PC) la cel mai mic nivel hardware sunt acționate prin comenzi (instrucțiuni) numai ale limbajului mașinii. Pentru a rezolva cu adevărat problemele asociate echipamentului (sau chiar, în plus, în funcție de echipament, cum ar fi, de exemplu, îmbunătățirea vitezei programului), este imposibilă fără cunoașterea asamblorului.

Asamblatorul este o formă convenabilă de comenzi direct pentru componenta PC și necesită cunoașterea proprietăților și a capacităților cipului integral care conține aceste componente, și anume microprocesorul PC-ului. Astfel, limba de asamblare este asociată direct cu organizarea internă a PC-ului. Și nu este întâmplător ca aproape toți compilatoarele de limbi de nivel înalt să sprijine accesul la nivelul de programare asamblor.

Un element de programator de formare profesională este necesar pentru a studia asamblorul. Acest lucru se datorează faptului că programarea asamblorilor necesită cunoașterea arhitecturii PC, care vă permite să creați programe mai eficiente în alte limbi și să le combinați cu programele de asamblare.

Manualul abordează problemele de programare în limba de asamblare pentru computerele bazate pe Microducesors Intel.

Acest tutorial este adresat tuturor celor interesați de arhitectura procesorului și de elementele de bază ale programului în asamblare, în special dezvoltatorii produsului software.

    Arhitectura PC.

Arhitectura calculatorului este o reprezentare abstractă a unui computer care reflectă organizația structurală, de circuite și logică.

Toate computerele moderne au unele proprietăți generale și individuale ale arhitecturii. Proprietățile individuale sunt inerente numai pe un anumit model de calculator.

Conceptul unei arhitecturi a computerului include:

    o schemă structurală a computerelor;

    mijloace și metode de acces la elemente ale schemei structurale EMM;

    set și disponibilitate de registre;

    organizarea și modalitățile de abordare;

    metoda de reprezentare și formatare a datelor informatice;

    set de comenzi de mașină;

    formate de mașini;

    Întreruperile de procesare.

Elementele principale ale hardware-ului computerului sunt: \u200b\u200bo unitate de sistem, tastatură, dispozitive de afișare, unități, dispozitive de imprimare (imprimantă) și diverse mijloace de comunicare. Unitatea de sistem constă dintr-o placă de bază, o sursă de alimentare și de extensie pentru plăci suplimentare. Placa de sistem conține un microprocesor, o memorie permanentă (ROM), RAM (RAM) și coprocesor.

      Registre.

În interiorul microprocesorului, informațiile sunt conținute într-un grup de 32 de registre (16 utilizator, 16 sistem), într-un fel sau care sunt disponibile programatorului disponibil. Deoarece manualul este dedicat programului pentru microprocesorul 8088-i486, atunci logica pentru a începe acest subiect din discuția registrelor interne ale microprocesorului disponibile pentru utilizator.

Registrele personalizate sunt utilizate de un programator pentru a scrie programe. Aceste registre includ:

    opt registre pe 32 de biți (registre generale) EAX / AX / AH / AL, EBX / BX / BH / BL, ECX / CX / CL / CL, EDX / DX / DLH / DL, EDX / BP, ESI / SI, EDI / DI, ESP / SP;

    Șase 16 - registre de biți: CS, DS, SS, ES, FS, GS;

    registrele de stare și management: Registrul Eflags / Steaguri, și registrul de comandă al comenzii EIP / IP.

Prin linia înclinată există părți dintr-un registru pe 32 de biți. Prefixul E (extins) denotă utilizarea unui registru de 32 de blocuri. Pentru a lucra cu octeți, se utilizează, de exemplu, registrele cu prefixe L (scăzut) și H (înălțime), CH - denotă octeți mai tineri și superiori ai părților din 16 biți ale registrelor.

        Registrele de uz general.

EAX / AX / AH / AL (Registrul acumulatorului) - baterie. Utilizate atunci când se multiplică și diviziune, în operații I / O și în unele operații pe linii.

EBX / BX / BH / BL - registrul de bază (Registrul de bază), utilizat adesea atunci când se adresează datelor în memorie.

ECX / CX / CH / CI - tejghea (Registrul numărului), este utilizat ca număr de repetări al ciclului.

EDX / DX / DH / DL - registrul de date (Registrul de date), utilizat pentru stocarea datelor intermediare. În unele echipe, utilizați-o este necesară.

Toate registrele acestui grup vă permit să vă întoarceți la părțile dvs. "mai tinere". Utilizați pentru auto-adresarea, puteți doar o parte mai mică de 16 și 8 biți din aceste registre. Cele mai vechi 16 biți ale acestor registre ca obiecte independente nu sunt disponibile.

Pentru a susține comenzile de prelucrare a rândurilor care permit prelucrarea secvențială a lanțurilor de elemente de a avea o lungime 32, 16 sau 8 biți se utilizează:

ESI / SI (Registrul Indexului sursă) - index sursă. Conține adresa elementului sursă curentă.

EDI / DI (Registrul indexului de distilare) - index receptor (Destinatar). Conține adresa curentă în șirul receptorului.

În arhitectura Microprcesorului, structura de date este acceptată pe software-ul și nivelul hardware-stivă. Pentru a lucra cu un stack există echipe speciale și registre speciale. Trebuie remarcat faptul că stiva este umplută în direcția adreselor mai mici.

ESP / SP (Registrul pointerului Stack) - inregistreaza-te pointer. grămadă. Conține vârful stivei în segmentul curent de stivă.

EBP / BP (Registrul pointerului de bază) - stack Base Pointer Register. Concepute pentru a organiza accesul arbitrar la datele din interiorul stack-ului.

1.1.2. Registrele segmentului

În modelul de software microprocesor există șase registrele segmentului: CS, SS, DS, ES, GS, FS. Existența lor se datorează specificațiilor organizării și utilizării microprocesoarelor Intel. Microprocesor Hardware-ul suportă organizarea structurală a unui program constând din segmente. Pentru a specifica segmentele în acest moment, se intenționează în prezent registrele de segmente. Microprocesorul acceptă următoarele tipuri de segmente:

    Segment de cod.Conține comenzile programului pentru a accesa acest segment, este servit registrul CS (registrul de cod de cod) - codul de segment Înregistrare. Acesta conține adresa segmentului cu comenzile mașinii la care are acces microprocesorul.

    Segment de date. Conține programul fiind procesat. Pentru accesul la acest segment, este servit registrul DS (registru de date) - registrul datelor segmentuluicare stochează adresa segmentului de date al programului actual.

    Segment de stivă. Acest segment este o zonă de memorie numită stivă. Microprocesorul organizează stiva conform principiului - primul "a venit", primul "stânga". Pentru a accesa stiva servește ca înregistrare SS (Registru de Stack) - stația de înregistrare a segmentuluiconținând adresa segmentului de stivă.

    Segment suplimentar de date. Datele prelucrate pot fi încă în trei segmente suplimentare de date. În mod implicit, se presupune că datele se află în segmentul de date. Atunci când se utilizează segmente suplimentare de date, adresa lor trebuie să fie specificată în mod explicit cu ajutorul prefixelor speciale ale segmentului RedeFix în comandă. Adresele de segmente suplimentare de date ar trebui să fie conținute în registrele ES, GS, FS (registrele de date de prelungire).

        Gestionarea și starea înregistrării

Microprocesorul conține mai multe registre care conțin informațiile de stare ca microprocesorul în sine și programele ale căror comenzi sunt încărcate în prezent în transportor. Aceasta:

Registrul de pointer de comandă EIP / IP;

    eFLAGS / Steaguri Registrul Steagurilor.

Folosind aceste registre, puteți obține informații despre rezultatele executării comenzilor și puteți afecta starea microprocesorului în sine.

EIP / IP (Registrul pointerului de instrucțiuni) - pointer. comenzi. Registrul EIP / IP are un pic de 32 sau 16 biți și conține o schimbare a următoarei comenzi la conținutul referitor la conținutul segmentului CS în segmentul curent de comandă. Acest registru este direct indisponibil, dar schimbarea este făcută de comenzile de tranziție.

Eflags / Steaguri (Registrul pavilionului) - inregistreaza-te steaguri. Betty 32/16 biți. Picturile separate ale acestui registru au un anumit scop funcțional și se numesc steaguri. Steagul este un pic care ia valoarea de 1 ("steag") dacă o anumită condiție este satisfăcută, iar valoarea lui 0 ("steagul este resetată") altfel. Cea mai tânără parte a acestui registru este complet similară cu registrul de pavilioane pentru i8086.

1.1.3 Registrul de steaguri

Registrul de pavilion este de 32 de biți, are numele EFLAGS (figura 1). Bițele de înregistrare separate au un anumit scop funcțional și se numesc steaguri. Fiecare dintre ele a atribuit un nume specific (ZF, CF etc.). Cele mai mici 16 biți de EFLAGS reprezintă registrul de steaguri pe 16 biți utilizate în implementarea programelor scrise pentru microprocesorul i086 și I286.

Fig.1 Registrul de steaguri

Unele steaguri sunt aprobate de steagurile condițiilor; Se schimbă automat la efectuarea comenzilor și înregistrați aceste sau alte proprietăți ale rezultatului acestora (de exemplu, este zero). Alte steaguri se numesc steaguri de stat; Se schimbă de la program și afectează comportamentul suplimentar al procesorului (de exemplu, întreruperile blocului).

Steaguri Condiții:

CF (Flag Carry) - transport Flag.. Este nevoie de o valoare de 1 dacă, când a apărut unitatea de integrare, a apărut o unitate de transfer, nu "crashing" în ochiurile de descărcare, sau dacă, la scăderea numerelor fără un semn, primul dintre ele a fost mai mic decât al doilea. În comenzile de schimbare din CF, este introdus un bit, eliberat pentru grila de descărcare. CF înregistrează, de asemenea, caracteristicile comenzii de multiplicare.

De (pavilion deverlow) - steagul depășește. Acesta este instalat în 1, dacă la adăugarea sau scăderea numerelor întregi cu semnul sa dovedit a fi rezultatul, modulul este superior valorii admise (a avut loc overflow Mantissa și "a urcat" la un semn de descărcare a semnului).

ZF (Zero Steag) - scratch Steagul.. Setați în 1 dacă rezultatul comenzii sa dovedit a fi egal cu 0.

SF (semnul semnelor) - steag semn. Setați în 1, dacă un rezultat negativ sa dovedit la operații pe numerele de pictograme.

PF (pavilion parității) - steag paritate. Egal cu 1 dacă rezultatul următoarei comenzi conține o cantitate uniformă de unități binare. De obicei, este luată în considerare atunci când operațiile I / O.

Flag auxiliar de transport - steagul de transfer suplimentar. Fixează caracteristicile operațiilor efectuate asupra numerelor zecimale binare.

Steaguri de stare:

DF (steag de direcție) - steagul de direcție. Setează direcția de vizualizare a rândurilor în comenzi de șir: la DF \u003d 0 linii sunt vizualizate "înainte" (de la început până la capăt), cu DF \u003d 1 - în direcția opusă.

IOPL (nivel de intrare / ieșire privilegiu) - nivelul privilegiilor I / O.Folosit în modul protejat al microprocesorului, pentru a controla accesul la comenzile I / O, în funcție de privilegiul sarcinii.

NT (sarcină imbricată) - sarcini de cuibărit.Folosit în modul de funcționare protejat al microprocesorului pentru a remedia faptul că o singură sarcină este încorporată în altul.

Sistemul de sistem:

Dacă (pavilionul întrerup) - Întrerupeți steagul. La dacă \u003d 0, procesorul încetează să răspundă la întreruperea la aceasta, când dacă \u003d 1, blocarea întreruperii este îndepărtată.

Tf (pavilion de capcane) - flagul de urmărire. Când TF \u003d 1, după executarea fiecărei comenzi, procesorul face o întrerupere (cu numărul 1) decât puteți utiliza la depanarea unui program pentru urmele sale.

RF (Flag CV) - steagul de reînnoire. Utilizate atunci când procesarea întreruperilor de la registrele de depanare.

VM (modul virtual 8086) - virtual 8086 Steag. Procesorul 1 funcționează în modul virtual 8086. Procesorul funcționează în modul real sau sigur.

AC (cec de aliniere) - steagul de control al alinierii. Conceput pentru a rezolva controlul alinierii la accesarea memoriei.

      Organizația de memorie.

Memoria fizică la care se numește microprocesorul bERBEC (sau dispozitiv de stocare operațional - BERBEC). RAM este un lanț de octeți care au propria lor adresă unică (numărul său), numită fizic. Gama de valori ale adreselor fizice de la 0 la 4 GB. Mecanismul de control al memoriei este complet hardware.

Microprocesor Hardware acceptă mai multe modele de utilizare a RAM:

    modelul segmentat. În acest model, memoria programelor este împărțită în zone continue de memorie (segmente), iar programul în sine poate face apel numai la datele care se află în aceste segmente;

    model de pagină. În acest caz, RAM este considerat un set de blocuri de dimensiuni fixe de 4 kb. Utilizarea principală a acestui model este asociată cu organizarea memoriei virtuale, care permite utilizarea spațiului de memorie pentru a funcționa mai mult decât cantitatea de memorie fizică. Pentru microprocesorul Pentium, dimensiunea posibilei memorii virtuale poate ajunge la 4 tb.

Utilizarea și implementarea acestor modele depind de modul de funcționare a microprocesorului:

    Modul de adrese reale (modul real). Modul este similar cu procesorul I8086. Suntem necesari pentru funcționarea programelor dezvoltate pentru modelele procesorului timpuriu.

    Mod protejat. Într-un mod sigur, posibilitatea procesării informațiilor multi-tasking, protecția memoriei cu ajutorul unui mecanism de privilegii pe patru niveluri și a organizației sale de pagină.

    Modul virtual 8086. În acest mod, capacitatea de a lucra mai multe programe pentru i8086. În același timp, este posibilă funcționarea programelor de regim real.

Segmentarea este mecanismul de abordare care asigură existența mai multor spații independente vizate. Segmentul este un independent, susținut în nivelul hardware al blocului de memorie.

Fiecare program din cauza generală poate consta în orice număr de segmente, dar acces direct are la trei principale: cod, date și stivă - și de la unul la trei segmente suplimentare de date. Sistemul de operare plasează segmentele programului în memoria RAM la anumite adrese fizice, după care plasează valorile acestor adrese în registrele corespunzătoare. În interiorul segmentului, programul se referă la adresele referitoare la începutul segmentului liniar, care este, pornind de la adresa 0 și terminând cu adresa egală cu dimensiunea segmentului. Adresa relativă sau părtinire,ce microprocesor utilizează pentru a accesa datele din interiorul segmentului, se numește efectiv.

Formarea adresei fizice în modul real

În modul real, gama de schimbări în adresa fizică de la 0 la 1 MB. Dimensiunea maximă a segmentului 64 kb. Când contactați un anumit adresă fizică RAM este determinată de adresa începutului segmentului și de offset în interiorul segmentului. Adresa segmentului segmentului este luată din registrul de segment corespunzător. În același timp, registrul segmentului conține numai 16 biți mai în vârstă de adresă fizică a începutului segmentului. Junior-urile lipsesc patru biți de o adresă de 20 de biți sunt obținuți prin schimbarea valorii registrului segmentului în stânga cu 4 descărcări. Operația de schimbare este efectuată hardware. Valoarea de 20 de biți rezultată este adresa fizică actuală corespunzătoare începutului segmentului. Adică adresa fizică Merită ca un "segment: offset", unde "segmentul" (segment) este primul care este primele biți ale adresei inițiale de memorie la care personalul și "offset" - adresa de 16 biți a acestei celule, numărate de la începutul acestui segment de memorie (segmentul 16 * + offsetul dă adresa celulelor absolute). Dacă, de exemplu, în registrul CS, valoarea de 1234h este stocată, apoi perechea de adresă 1234h: 507h determină adresa absolută egală cu 16 * 1234H + 507H \u003d 12340h + 507H \u003d 12847h. Un astfel de cuplu este înregistrat sub forma unui cuvânt dublu și (precum și pentru numere) în forma "inversată": în primul cuvânt, există o schimbare, iar segmentul este plasat și fiecare dintre aceste cuvinte este prezentată în formularul "inversat". De exemplu, o pereche de 1234h: 5678H va fi înregistrată astfel: 78 | 56 |. 34 | 12 |.

Acest mecanism pentru formarea adresei fizice vă permite să faceți software-ul care urmează să fie mutat, adică adresele de descărcare nespecifice în RAM.

Pe destinație, puteți selecta comenzi (în paranteze sunt exemple de coduri mnemonice de operații ale operațiunilor de asamblare tip PC de tip IBM PC):

l Efectuarea de operații aritmetice (Adăugare și ADC - Adăugare și adăugare cu transferul, sub-și SBB - Reducerea și scăderea cu împrumut, Mul și IMUL - Multiplicare fără semn și cu semn, Div și IDIV - Divizia fără semn și cu semn, CMP - comparații etc.);

am efectuând operațiuni logice (sau, și, nu, xor, testare etc.);

l Transport (MOV - Pentru a trimite, XCHG - Exchange, in - intrați în microprocesor, ieșire din microprocesor etc.);

l Transmisie de control (ramuri de program: JMP - tranziție necondiționată, apel - procedură de apel, returnați de la procedură, J * - Tranziție condiționată, Control ciclu de buclă etc.);

l Procesarea liniei de caractere (movs - transport maritim, CMPS - comparație, loduri - descărcări, SCAS - Scanare. Aceste comenzi sunt de obicei utilizate cu replicația prefixului (repetiție).

l Întreruperea programului (întreruperea programului, întreruperea condiționată atunci când depășirea, Iret - întoarcerea de la întrerupere);

l Controlul microprocesorului (ST * și CL * - Steaguri de instalare și de resetare, HLT - oprire, așteptare - așteptări, nop-ralanti etc.).

Cu o listă completă de comenzi de asamblare, vă puteți familiariza în lucrări.

Comenzi de transfer de date

l Mov DST, SRC - Expediere de date (Move - Trimiteți de la SRC la DST).

Trimite: un octet (dacă SRC și DST au un format octet) sau un cuvânt (dacă SRC și DST au un format cuvânt) între registru sau între înregistrare și memorie, și înregistrează, de asemenea, valoare directă în registru sau în memorie.

Operanzii DST și SRC trebuie să aibă același format - octeți sau cuvânt.

Src poate fi tip: R (Înregistrare) - Înregistrare, m (memorie) - memorie, i (impedanță) - valoare directă. DST poate fi tip r, m. Este imposibil să se folosească operanii într-o singură comandă: RSEGM împreună cu I; Două operand de tip M și două operanzi de tip ISSGM). Operand Pot fi o expresie simplă:

mOV AX, (152 + 101B) / 15

Calculul expresiei se efectuează numai atunci când difuzează. Steagurile nu se schimbă.

l Push Src - Word Covering Stack (împingere - ciupit Înregistrați pe stiva de İSRC). Acesta plasează conținutul SRC în partea superioară a stivei - orice registru pe 16 biți (inclusiv segment) sau două celule de memorie care conține un cuvânt de 16 biți. Steagurile nu se schimbă;

l Pop DST - Extragerea cuvintelor din stivă (Pop - împingere; contorizați din stivă în DST). Îndepărtează cuvântul din partea superioară a stivei și pune-l în DST - orice registru pe 16 biți (inclusiv segment) sau în două celule de memorie. Steagurile nu se schimbă.

Tema 2.5 Bazele de programare a procesorului

Cu o creștere a lungimii programului, devine din ce în ce mai greu de reținut codurile diferitelor operațiuni. Unele asistență în această privință are notație mnemonică.

Limba de codare simbolică a comenzilor este numită asamblare.

Asamblarea limbii - Aceasta este o limbă în care fiecare declarație corespunde exact unei echipe de mașini.

Asamblare Se numește transformarea programului din limba de asamblare, adică pregătirea programului în limba mașinii prin înlocuirea numelor simbolice pentru codurile mașinilor și adresele simbolice - la numerele absolute sau relative, precum și includerea programelor de bibliotecă și Generarea secvențelor de comandă simbolică prin specificarea parametrilor specifici în microcomanduri. Acest program este de obicei plasat în ROM sau introdus în memoria RAM de la un transportator extern.

Limba de asamblare are mai multe caracteristici care o deosebesc de limbilor de nivel înalt:

1. Este o respectare reciprocă între declarațiile și comenzile mașinii de asamblare.

2. Programatorul din limba de asamblare are acces la toate obiectele și comenzile prezente pe mașina țintă.

Ideea de bază de programare a limbilor orientate spre mașină este utilă pentru:



O mai bună înțelegere a arhitecturii PC și a utilizării mai competente a computerelor;

Să dezvolte structuri mai raționale ale algoritmilor pentru rezolvarea sarcinilor aplicate;

Posibilitățile de vizualizare și ajustare a programelor executabile cu extensie.exe și.com compilate din orice limbi de nivel înalt, în cazul pierderii programelor sursă (determinând programele specificate pentru depanarea depanatorului de depanare și decompilarea afișajului în limba de asamblare);

Efectuarea de programe pentru a rezolva cele mai responsabile sarcini (programul compilat pe un limbaj orientat spre mașină este, de obicei, mai eficient - în dobânzi scurte și mai rapide la 30-60 de programe obținute ca urmare a emisiunilor din limbile de nivel înalt)

Punerea în aplicare a procedurilor incluse în programul de bază sub formă de fragmente individuale dacă nu pot fi implementate utilizând un limbaj de nivel înalt, nici utilizarea procedurilor de serviciu de operare.

Programul din limba de asamblare poate lucra numai pe computerul unei familii, iar programul scris în limba la nivel înalt poate funcționa cu potențial pe diferite mașini.

Alfabetul limbajului de asamblare este caracterele ASCII.

Numerele doar întregi. Distinge:

Numere binare, se termină în scrisoarea din;

Numere zecimale care se termină cu litera D;

Numere hexazecimale, se termină cu litera N.

RAM, registre, prezentare de date

Pentru o serie specifică MP, se utilizează un program individual - limba de asamblare.

Limba de asamblare ocupă o poziție intermediară între codurile mașinilor și limbile la nivel înalt. Programul din această limbă este mai ușor. Programul de limbă al asamblorului utilizează mai rațional capabilitățile unei anumite mașini (mai precis MP) decât un program de nivel înalt (care este mai simplu pentru un programator decât asamblatorul). Principiile de bază ale programării limbilor orientate spre mașină vor privi exemplul limbii de asamblare pentru MP KR580BM80. Pentru programarea în limba utilizează o tehnică generală. Tehnicile specifice ale înregistrărilor programului sunt asociate cu caracteristicile arhitecturii și ale sistemului echipelor din deputatul țintă.

Sistem de microprocesor model software bazat pe MP KR580VM80

Model de software MPS în conformitate cu figura 1

MP de memorie porturi

S. Z. AC. P. C.

Imaginea 1.

Din punct de vedere al programatorului, MP KR580BM80 are următoarele registre de software și accesibile.

DAR- Baterie de înregistrare pe 8 biți. Este registrul principal al deputatului. Orice operație efectuată în Allu presupune plasarea unuia dintre operanții care urmează să fie procesată în baterie. Rezultatul operațiunii în allu este, de asemenea, stocat de obicei în A.

B, C, D, E, H, L - Registrele de uz general pe 8 biți (RON). Memorie internă MP. Concepute pentru a stoca informații prelucrate, precum și rezultatele operațiunii. La prelucrarea cuvintelor pe 16 biți din registre, perechile BC, DE, HL sunt formate, iar registrul dual se numește prima literă - B, D, H. În perechea de registru, primul registru este primul registru. Proprietățile speciale au registrele H, L utilizate atât pentru stocarea datelor, cât și pentru depozitarea adreselor pe 16 biți ale celulelor RAM.

Fl.- Registrul Steagurilor (semnul semnelor) Registrul pe 8 biți, în care sunt păstrate cinci semne ale rezultatelor operațiilor aritmetice și logice în MP. FL format în conformitate cu desenul

Descărcarea cu (Cy-Carry) - Transferul este setată la 1 dacă a existat un transfer de la octetul de descărcare mai mare atunci când efectuează operații aritmetice.

Descărcarea P (paritatea) este paritate, este setată la 1 dacă numărul de unități din descărcarea rezultatului este chiar.

Cantitatea AC este un transfer suplimentar, conceput pentru a stoca valoarea de transfer de la cel mai mic rezultat tetrad.

Descărcarea Z (zero) este setată la 1 dacă rezultatul operației este 0.

Descărcarea S (semnul) este setată la 1, dacă rezultatul este negativ și în 0, dacă rezultatul este pozitiv.

Sp.- indicatorul de stivă, înregistrarea pe 16 biți, este conceput pentru a stoca adresa celulei de memorie, unde a fost înregistrată ultima dată în stack-ul octetului.

PC. - Contor de software (Counter comandă), Înregistrare pe 16 biți, concepută pentru a stoca adresa următoarei executabili de comandă. Conținutul contorului de comandă crește automat cu 1 imediat după eșantionul următorului octet de comandă.

În zona de memorie inițială a adresei 0000N - 07FF, sunt localizate programele de control și programele demonstrative. Aceasta este regiunea ROM.

0800 - 0af - Zona de adrese pentru a înregistra programele studiate. (BERBEC).

0V00 - 0VV0 - Adrese de zonă pentru înregistrarea datelor. (BERBEC).

0v0 - adresa inițială a stivei. (BERBEC).

Stack-ul este o zonă special organizată de RAM, destinată stocării temporare a datelor sau a adreselor. Numărul înregistrat pe stivă este preluat mai întâi de la acesta. Stack Pointer stochează adresa ultimei celule a stivei, în care sunt înregistrate informații. Când apelați o subrutină, adresa adresei de retur este salvată automat în stivă. De regulă, la începutul fiecărui subprogram, conținutul tuturor registrelor implicate în execuția sa sunt depozitate în stivă, iar la sfârșitul subrutina le restaurează de la stivă.

Formatul de date și asamblarea structurii lingvistice

Memoria MP KR580BM80 este o serie de cuvinte de 8 persoane, numite octeți, fiecare octet are propria adresă pe 16 biți care determină poziția sa în secvența de celule de memorie. MP poate adresa 65536 octeți de memorie, care poate conține atât ROM cât și RAM.

Formatul de date

Datele sunt stocate în memorie ca cuvinte de 8 biți:

D7 D6 D5 D4 D3 D2 D1 D0

Bitul mai mic este un pic 0, cel mai mare - bitul 7.

Echipa este caracterizată printr-un format, adică numărul de descărcări alocate pentru acesta, care sunt împărțite în anumite câmpuri funcționale.

Formatul echipei

Comenzile MP KR580VM8 au un format, doi sau trei ani. Comenzile multibale trebuie plasate în YAP-urile vecine. Formatul echipei depinde de caracteristicile operațiunii efectuate.

Primul octet de comandă conține un cod de operare înregistrat în formă mnemonică.

Acesta definește formatul comenzii și acțiunile pe care MP trebuie să le facă pe date în timpul executării acestuia și metoda de abordare și pot conține, de asemenea, informații despre găsirea datelor.

În al doilea și al treilea octet pot exista date despre operațiunile sau adresele indică amplasarea datelor. Datele privind acțiunile sunt numite operanzi.

Formatul unei comenzi cu o singură cale în conformitate cu figura 2

Figura 4.

În comenzile din limba de asamblare, codul de operare are o formă abreviată de scriere a cuvintelor în limba engleză - desemnarea mnemonică. Mnemonica (de la mnemonia greacă - arta memorizării) face mai ușor să ne amintim comenzile pentru scopul lor funcțional.

Înainte de execuție, programul sursă este tradus folosind un program de difuzare numit Assembler, la limba combinațiilor de cod - limba mașinii, în acest formular este plasată în memoria MP și apoi utilizată la executarea comenzii.


Metode de abordare

Toate codurile operand (intrări și ieșire) trebuie să fie amplasate undeva. Ele pot fi în registrele interne ale deputatului (cea mai convenabilă și mai rapidă opțiune). Acestea pot fi amplasate în memoria sistemului (cea mai comună opțiune). În cele din urmă, ele pot fi în dispozitive I / O (cel mai rar caz). Definiția poziției operandului se face prin codul de comandă. Există metode diferite cu care codul de comandă poate determina unde să ia operandul de intrare și unde să plasați operandul de ieșire. Aceste metode se numesc metode de abordare.

Pentru MP KR580VM80, există următoarele metode de abordare:

Direct;

Inregistreaza-te;

Indirect;

Colorat.

Imediat adresarea presupune că operandul (Input) este în memorie direct la codul de comandă. Operand este, de obicei, o constantă care trebuie trimisă undeva, la ceva de adăugat etc. Datele sunt conținute în al doilea sau în al doilea și al treilea octet al comenzii, iar Byte-ul de date mai tânăr este în a doua jumătate a echipei , și cel mai mare - în cele trei echipe plătite.

Drept (Este absolut) Adresarea presupune că operandul (intrarea sau ieșirea) este în memorie la adresa, codul căruia se află în interiorul programului imediat la codul de comandă. Utilizate în comenzi tripite.

Inregistreaza-te adresarea sugerează că operand (intrare sau ieșire) se află în Registrul intern al MP. Utilizate în comenzile cu un singur octet

Indirect (Implicit) Adresarea sugerează că în registrul intern deputatul nu este operandul în sine și adresa sa în memorie.

Staine. adresarea sugerează că comanda nu conține adresa. Abordarea la celulele de memorie pe conținutul SP 16-bit SP (Stack Pointer).

Sistem de echipă

Sistemul de comandă MP este o listă completă a acțiunilor elementare care pot produce MP. MP controlat de aceste comenzi efectuează acțiuni simple, cum ar fi operațiile aritmetice și logice elementare, transferul de date, compararea a două valori etc. Numărul comenzilor MP KR580BM80 - 78 (luând în considerare modificările 244).

Distinge următoarele grupuri de echipe:

Transmisia de date;

Aritmetic;

Joc de inteligență;

Comenzi de tranziție;

Comenzile, controlul și stiva I / O.


Simboluri și abrevieri utilizate în descrierea comenzilor și programelor de programare

Simbol Abreviere
Addr. Adresă pe 16 biți
Date. Datele pe 8 biți
DATE 16. Date pe 16 biți
Port. Adresa pe 8 biți a UVV (dispozitive I / O)
Byte 2. A doua echipă de octeți
Byte 3. A treia echipă de octeți
R1, R2. Unul dintre registre: A, B, C, D, E, H, L
Rp. Unul dintre perechile de registru: B - Specifică o pereche de soare; D - Specifică o pereche de DE; H - Specifică o pereche de HL
RH. Înregistrarea primei perechi
Rl Al doilea registru al cuptorului
Λ Multiplicare logică
V. Adăugare logică
Adăugarea modulului doi
M. Celula de memorie, a căror adresă stabilește conținutul perechii de înregistrare HL, adică M \u003d (HL)

Munca de curs

Sub Programarea sistemului de disciplină "

Subiect №4: "Rezolvarea sarcinilor pentru proceduri"

Opțiunea 2.

East Siberian State University

Tehnologie și management

____________________________________________________________________

Colegiul Tehnologic

SARCINA

pentru cursuri

Disciplina:
Subiect: Rezolvarea sarcinilor pentru proceduri
Artist: Glavinskaya Arina Aleksandrovna
Lider: Dambaevaseegma Viktorovna
Rezumatul muncii: Studiul subprogramilor în limba de asamblare,
Rezolvarea sarcinilor folosind subrutine
1. Partea teoretică: Informații de bază despre limba de asamblare (set
Echipe etc.), Organizare de subprograme, metode de transmitere a drogurilor
în subrutine
2. Partea practică: Elaborarea a două subprograme, dintre care unul convertește orice scrisoare dată titlului (inclusiv literele ruse), iar celălalt convertește scrisoarea către linie.
Convertește orice literă dată la titlu, iar celălalt convertește litera către linie.
Convertește litera la linie.
Termeni de execuție a proiectului la program:
1. Partea teoretică este de 30% cu 7 săptămâni.
2. Partea practică - 70% cu 11 săptămâni.
3. Protecție - 100% până la 14 săptămâni.
Cerințe pentru înregistrare:
1. Calculul și nota explicativă a proiectului de schimb ar trebui prezentată în
copii electronice și solide.
2. Raportul raportului trebuie să fie cel puțin 20 de pagini scrise fără aplicații contabile.
3. RPZ este emis în conformitate cu GOST 7.32-91 și semnat de manager.

Administrator __________________

Artist __________________

Data emiterii " 26 " septembrie 2017 G.


Introducere 2.

1.1 Informații de bază despre limba de asamblare. 3.

1.1.1 Set de comenzi. patru.

1.2 Organizarea subrutinelor în limba de asamblare. patru.

1.3 Metode de transferare a parametrilor în subrutine. 6.

1.3.1 Transferul parametrilor prin intermediul registrelor .. 6

1.3.2 Transferarea parametrilor prin stivă. 7.

2 secțiunea practică .. 9

2.1 Setarea problemei. nouă

2.2 Descrierea problemei problemei. nouă

2.3 Testarea programului. 7

Concluzie. opt

Referințe .. 9.


Introducere

Este bine cunoscut faptul că este dificil să se programeze pe asamblare. După cum știți, există multe limbi diferite. nivel inaltcare vă permit să cheltuiți mult mai puțin efort atunci când scrieți programe. Bineînțeles, se pune întrebarea atunci când programulmanul ar putea fi necesar să utilizeze asamblorul atunci când scrie programe. În prezent, puteți specifica două domenii în care utilizarea limbajului de asamblare este justificată și adesea necesară.

În primul rând, acestea sunt așa-numitele programe de sistem dependent de mașină, de obicei gestionează diverse dispozitive de calculator (astfel de programe sunt numite drivere). Aceste programe de sistem utilizează comenzi speciale de mașini care nu trebuie să se aplice în mod obișnuit (sau după cum se spune aplicat) Programe. Aceste comenzi sunt imposibile sau foarte dificil de stabilit în limba de nivel înalt.

A doua zonă de aplicare a asamblorului este asociată cu optimizarea executării programului. Foarte des, traducătorii de programe (compilatoare) cu limbi de nivel înalt oferă un program foarte ineficient în mașină. Acest lucru se referă, de obicei, la un program computațional, în care cea mai mare parte este efectuată foarte mică (aproximativ 3-5%) a programului (ciclul principal). Pentru a rezolva această problemă, pot fi utilizate așa-numitele sisteme de programare multilingve care vă permit să înregistrați părți ale programului în diferite limbi. În mod obișnuit, partea principală a programului este înregistrată în limba de programare la nivel înalt (Fartran, Pascal, C, etc.), iar timpul de execuție critică al programului este pe asamblare. Viteza întregului program poate crește semnificativ. Adesea, aceasta este singura modalitate de a face programul să ducă rezultatul pentru un timp acceptabil.

Scopul acestei lucrări de curs este de a obține abilități practice pentru a lucra programarea în limba de asamblare.

Sarcini de lucru:

1. Pentru a studia informațiile de bază despre limba de asamblare (structura și componentele programului de asamblare, formatul echipei, organizarea subrutinelor etc.);

2. Examinați tipurile de operațiuni de biți, formatul și logica funcționării comenzilor de asamblare logică;

3. Rezolvați sarcina individuală de aplicare a subrotinelor la asamblare;

4 Formulați concluzia despre munca făcută.

1 secțiune teoretică

Informații de bază despre asamblare

Asamblerul este un limbaj de programare la nivel scăzut, care este un format pentru înregistrarea comenzilor mașinii, convenabil pentru percepția umană.

Comenzile lingvistice de asamblare sunt una într-una care corespund echipelor de procesoare și, de fapt, sunt o formă simbolică convenabilă de înregistrare (Mnemokode) de comenzi și argumentele lor. De asemenea, limba de asamblare oferă abstracții software de bază: legarea părților programului și a datelor după etichete cu nume simbolice și directivă.

Directivele Assembler vă permit să includeți blocuri de date în program (descrise în mod explicit sau citiți din fișier); repetați un anumit fragment al numărului specificat de ori; compilați un fragment cu condiție; Setați adresa de execuție a fragmentului, modificați valorile etichetelor în timpul procesului de compilare; Utilizați definițiile macro cu parametrii și altele.

Avantaje și dezavantaje

· Cantitatea minimă de cod redundant (utilizarea unui număr mai mic de comenzi și referințe la memorie). Ca rezultat, viteza mare și dimensiunea programului mai mic;

· Volumele de coduri mari, un număr mare de sarcini minore suplimentare;

· Codul de lizibilitate slabă, dificultatea de sprijin (depanarea, adăugarea de caracteristici);

· Dificultatea implementării paradigmelor de programare și a oricăror alte convenții complexe, complexitatea dezvoltării comune;

· Cantități mai mici de biblioteci disponibile, compatibilitatea lor mică;

· Acces imediat la echipamente: porturi I / O, registre de procesoare speciale;

· Maximum "Fit" pentru platforma dorită (utilizarea instrucțiunilor speciale, caracteristicile tehnice ale "fierului");

· Infecții la alte platforme (cu excepția compatibile binare).

În plus față de instrucțiuni, programul poate conține directive: comenzi care nu sunt trimise direct la instrucțiunile mașinilor și managerii compilatorului. Setul și sintaxa vor diferi în mod semnificativ și depinde de nu de platforma hardware, ci de la compilatorul utilizat (generând dialecte de limbi într-o singură familie de arhitecturi). Ca un set, pot fi alocate directive:

· Determinarea datelor (constante și variabile);

· Gestionarea programului programului în memorie și parametrii fișierului de ieșire;

· Setarea modului compilatorului;

· Tot felul de abstractizare (adică elemente ale limbilor la nivel înalt) - din procedurile și funcțiile de înregistrare (pentru a simplifica punerea în aplicare a paradigmei programării procedurale) la structurile și ciclurile condiționate (pentru structura programării structurale);

· Macrocomenzi.

Set de comenzi

Comenzile tipice ale limbajului de asamblare sunt:

· Comenzi de transfer de date (MOV etc.)

· Echipele aritmetice (adăugați, sub, imul etc.)

· Operații logice și loturi (sau, și, xor, sh, etc.)

· Echipe de gestionare a executării programului (JMP, buclă, ret etc.)

· Întrerupeți comenzi de apel (uneori se referă la comenzile de control): int

· Comenzi I / O în porturi (în, afară)

Pentru microcontrolere și microcomputerele sunt, de asemenea, caracterizate prin verificarea și tranziția comenzilor, de exemplu:

· JNE - Du-te dacă nu este egal;

· JGE - Du-te, dacă este mai mult sau egal.



Ți-a plăcut articolul? Împărtășește-l