Care sunt diferențele fundamentale dintre limbajul de asamblare de limbaje de programare de nivel înalt, care este

limbaj de asamblare - limbaj de programare „nivel scăzut“. Spre deosebire de limbajul de cod mașină vă permite să utilizați mai convenabil pentru mnemonic (caractere) comenzi de desemnare umane. În acest caz, pentru a traduce limbajul de asamblare în cod mașină de înțeles de către procesorul necesită un program special, de asemenea, denumit de asamblare.







Assembler - limba maternă a computerului. Putem spune că computerul „crede“ în limbaj de asamblare. Prin urmare, programele scrise în alte limbi, cum ar fi C, trebuie mai întâi să fie tradus în asamblor pentru a înțelege computerul lor și a fost capabil să-și îndeplinească.

Când vorbim despre un computer pe care rulează un program, apoi în primul rând ne referim la inima lui - procesor - un cip care execută comenzi, de multe ori numite instrucțiuni, și stochează rezultatele muncii lor în registre speciale. De exemplu, executarea instrucțiunilor procesorului

conduce la faptul că, în registrul EAX este numărul 5. Primul EAX de instrucțiuni mov, 2 trimite un număr de registru EAX 2. Al doilea ghid adăuga EAX, 3, realizată după prima, adaugă conținutul registrului EAX numărul 3.

(Engl. byte-code) bytecode sau bytecodes, uneori, de asemenea, utilizate pe termen pseudocod - codul de low-level-mașină independent generat de compilator și interpret executabil. Cele mai multe instrucțiuni bytecode sunt echivalente cu una sau mai multe comenzi de asamblare. Codul de octet Broadcast ocupă o poziție intermediară între elaborarea codului nativ și interpretare.

În același timp, este posibil pentru a crea procesoare pentru care codul de octet este direct cod mașină (există astfel de procesoare, cum ar fi pentru Java și Forth).

4. Dați exemple de formate de fișiere executabile, și le descrie pe scurt. Format Detalii ELF.

format de fișier executabil:

· .COM.
(. comandă în limba engleză) Extinderea fișierelor .COM a fost folosit în unele sisteme de operare pe calculator în diferite sisteme de tselyah.V DOS și în 8-biți CP / M, fișierul COM - un simplu tip de fișier executabil, care nu poate depăși 64 KB-256 octeți ( 65280 = 216 - 28 octeți).

· .EXE
.EXE (executabil abbr English - Programul ..) - extinderea fișierul executabil utilizat în sistemele DOS, Microsoft Windows, Symbian, OS / 2, iar în altele. În plus față de codul obiect, pot conține diferite metadate (pictogramă, semnătura digitală).

· a.out
a.out (de ieșire de asamblare limba engleză.) - un format de fișiere executabile în unele versiuni UNIX (vechi). Formatul fișierului executabil a.out este utilizat în principal în Linux. Versiunea Racshirennaya a grupului a.outb formatul utilizat BSD-compatibile sistemele de operare (NetBSD, FreeBSD și OpenBSD). NASM compilator poate genera fișierele de ambele formate, dacă specificați -f aout cheie pentru Linux sau aoutb -f pentru BSD. compilator implicit CCG produce fișierul a.out, cu excepția cazului când utilizați opțiunea -o.







o Programul Tabelul Header, descriind zero sau mai multe segmente

o secțiunea de tabel antet, descriind zero sau mai multe secțiuni

o Datele menționate în registrele de tabele menționate

Segmentele conțin datele necesare pentru executarea fișierului și secțiuni conțin informații pentru conectarea și procesul de relocare. Fiecare octet din dosar nu se poate aplica la mai mult de o secțiune.

· MZ (format)
MZ - format standard de 16-biți fișiere executabile cu extensia .EXE pentru DOS. .EXE și dll pentru Windows începând cu MZ ciot într-un format care este atunci când încercați să executați un fișier în DOS afișează mesajul Acest program nu poate fi rulat în modul DOS. ( „Acest program nu poate fi rulat în modul DOS“).

· Portabil executabilă
Portabil executabilă - (PE) - un format de fișiere executabile, cod obiect și biblioteci dinamice utilizate în versiunile pe 32 de biți și pe 64 de biți ale sistemului de operare Microsoft Windows. Formatul PE este o structură de date care conține toate informațiile necesare pentru a proiecta PE fișier de încărcare în memorie.

5. Care sunt etapele este crearea unui program executabil de la codul sursă? Descrie esența lor. Pentru limbile C ++, Java și Python, lista pașii implicați în crearea de programe care au loc în realitate și ce indică faptul că se întâmplă la ce ora. programul poate fi creat pentru orice medii de execuție?

Prima etapă - care modifică codul sursă, înainte de compilare, în conformitate cu comenzile Preprocessor conținute în program. În conformitate cu aceste echipe de substituție efectuate text simplu. Al doilea - compilator real pe care procesează codul sursă și îl convertește într-un cod în limbaj de asamblare. A treia etapă - asamblor care generează cod obiect. Și, în sfârșit, a patra etapă - linker-ul care colectează fișierul executabil din fișierele cod obiect.

Programul inițial pregătit pe IS ca un fișier text, prelucrarea trece 3 etape:

1) transformarea preprocesarea textului;

3) un aranjament (sau legături de editare de asamblare).

Programele Java sunt traduse în bytecode executat de către o mașină virtuală Java (JVM) - un program care procesează un cod de octet și să transmită instrucțiuni pentru hardware-ul ca interpret. Broadcast în codul de octet de execuție crește viteza și scade dimensiunea programelor Java.

Avantajul acestei metode de livrare programului - independența deplină a bytecode din sistemul de operare și hardware care permite aplicațiilor bazate pe Java de pe orice dispozitiv pentru care există o mașină virtuală corespunzătoare. O altă caracteristică importantă a tehnologiei Java este un sistem de securitate flexibil, datorită faptului că execuția programului este controlat în totalitate de către mașina virtuală. Operații care depășesc puterile programului stabilit (de exemplu, o încercare neautorizată de a accesa datele sau o conexiune la un alt calculator) cauza o întrerupere imediată.

De multe ori în detrimentul conceptului de mașină virtuală include faptul că execuția mașinii virtuale bytecode poate reduce performanța programelor și algoritmilor implementate în Java. Această afirmație a fost valabil pentru primele versiuni ale mașinii virtuale Java, dar în ultimii ani și-a pierdut aproape relevanța. Acesta a fost promovat de o serie de îmbunătățiri:

utilizarea tehnologiei de difuzare § bytecode în cod mașină la programul run-time (JIT-tehnologie) pentru a stoca versiuni ale unei clase în cod mașină,

§ utilizarea pe scară largă a orientate spre platforma de cod (-cod nativ) în biblioteca standard,

hardware § furnizarea bytecode de procesare accelerată (de exemplu, tehnologia Jazelle susținută de unele procesor ARM companie).