Un set de instrucțiuni (set de instrucțiuni)

SSE, SSE2, și SSE3 folosit în procesoarele AMD moderne.

Setul de instrucțiuni de instruire moderne procesoare x86 încorporează toate generațiile anterioare. Instrucțiunile pot fi împărțite în aplicațiile utilizate de aplicații „utile“ și a sistemelor utilizate de către sistemul de operare pentru a crea un mediu în care rula aplicații. Fig. 7.2 prezintă grupul de procesoare x86 instrucțiuni în ordinea în care apar în diferite generații și modele de procesoare. Prezența subseturi de instrucțiuni incluse în ovaluri, pot fi identificate prin steagurile de extensii arhitecturale, trebuie, pe instrucțiunea CPUID.







Fig. 7.2. Setul de instrucțiuni de procesoare x86 moderne

Instrucțiunile de aplicare pot fi împărțite în mai multe grupuri (în grupul de imagine

liniile punctate combinate).

instructiuni de uz general - instrucțiuni de bază x86 întregi utilizate de aproape toate programele. Aceste instrucțiuni sunt încărcate, stoca și procesa datele aflate în registrele de uz general și memorie. O parte a instrucțiunii este utilizată pentru a modifica secvența de execuție - o declarație de ramuri condiționate și necondiționate, apeluri de proceduri. Instrucțiunile de bază de uz general sunt puse în aplicare în toate (cu excepția unor reglementări bazate pe x86, care pot fi determinate

7.2. Modelul de programare de procesoare x86 moderne

Zambetul prin instrucțiunea CPUID). Modul de instrucțiuni pe 64 de biți (Instrucțiuni pentru modul lung)

a apărut numai în procesoare cu extensii pe 64 de biți, și sunt disponibile numai în modurile respective.

Instrucțiuni cu X87 de lucru în virgulă mobilă cu FPU, acestea sunt utilizate în aplicații mai vechi care necesită calcule precise. Rețineți că aceste instrucțiuni suporta diferite formate de date de la punctul flotant (FP-numere): 80 biți - precizie extinsă de 64 de biți - dublă precizie pe 32 de biți - unică de precizie. Aceasta susține, de asemenea, formatul BCD și convertește formate. 80-bit FP format asigură o precizie maximă și o gamă maximă de numere acoperite. X87 set de instrucțiuni extins treptat, a apărut în instrucțiuni P6 transferuri condiționate care reduc numărul de ramuri ale programului.

64 de biți instrucțiuni Extensiile media funcționează pe date localizate în 64 de biți registre MMX. Ei efectua operații întregi și un calcul în virgulă mobilă în scalare și vectoriale exemple de realizare, aplicațiile media și sunt destinate pentru lucrul cu blocuri de date. instructiuni Vector întregi a apărut în setul original MMX. compoziția lor extins instrucțiuni AMD de extensii MMX și SSE parte de instrucțiuni (introdus Intel). Vector instrucțiuni în virgulă mobilă a apărut în 3DNow. setul lor sa extins în AMD Extensii la 3DNow! Instrucțiuni.

instructiuni media pe 128 de biți operează pe datele localizate în 128 la-lilieci - înregistrează GUVERNAMENTAL XMM. Ei efectua operații întregi și un calcul în virgulă mobilă în scalar (un set de operanzi) și vector (cu mai multe seturi, principiul SIMD) aplicații concrete. Aceste instrucțiuni sunt destinate pentru mass-media high-end și aplicații științifice care lucrează cu blocuri de date. În flux de expansiune SSE definite instrucțiuni cu virgulă mobilă unică de precizie (32 biți) în SSE2 introdus instrucțiune dublă precizie (64 biți) în SSE3 a introdus 13 instrucțiuni suplimentare (144 existente în SSE și SSE2), inclusiv SIMDinstruktsii cu FP numere duble numere întregi de precizie, precum și instrucțiuni de gestionare a memoriei și de cache.

Mai multe instrucțiuni sunt punți între grupele de mai sus. Ele oferă transfer de date între blocuri MMX și XMM registre comune. Un set de instrucțiuni (cum ar fi întreg sau virgulă mobilă) pot efectua ambele blocuri MMX (și FPU) și XMM în blocuri.

întrerupe Event- și excepții







Întrerupere (întrerupere) și excepții (excepție), denumite colectiv la evenimente (eveniment), interfera cu executarea normală a programului pentru procesarea unor evenimente externe sau de semnalizare apariția unor condiții sau erori specifice. Potrivit unui eveniment care stochează procesor registrul de stivă (E) FLAGS cursor și CS: (E) IP pe instrucțiunile care trebuie efectuate după manipularea evenimentului. Această instrucțiune va fi după cea în care a avut loc executarea evenimentului, sau la fel. protector

Capitolul 7. Procesoare

Modul schennom atunci când un număr de excepții în stivă este încă păstrată și codul

eroare. După stocarea acestor valori procesorul trece la executarea codului de tratare a evenimentului, definind un punct de intrare în ea printr-un număr (0-255) a mesei de întrerupere. număr de element din tabelul de vectorul de întrerupere se numește o întrerupere. este determinată de sursa evenimentului. Rutina evenimentului trebuie să se încheie cu o instrucțiune specială de întoarcere IRET, conform căruia indicatorul stivă sunt restaurate CS: IP (E) și steagurile valorice anterioare. Pentru excepții, care sunt stocate și un cod de eroare, handler înainte de instrucțiunea IRET este de a elimina din codul de eroare stivă.

Există patru tipuri de evenimente:

♦ Excepții (întrerupere internă) procesor și un coprocesor, vectorul determinat de tipul unui eveniment trecut.

♦ vector extern nonmaskable întrerupere intrare NMI este fix (01).

♦ băgată sub întrerupere externă INT (sau bus APIC) controlerul vector de intrare de întrerupere este transmis. reacție Procesorul poate fi inhibată (sau mai degrabă întârziate) flag reset IF (procesorul răspunde la o întrerupere în așteptare când steagul IF este setat).

♦ Software-ul a cauzat vectorul de întrerupere este determinată de către echipa.

Excepții (întrerupere internă) ale procesorului sunt generate în cazul unor condiții speciale de execuție a instrucțiunii curente. Cele mai multe dintre ele nu sunt atât de mult asincronă, ca și neașteptat pentru codul de program. numărul de vector este determinată de procesorul în funcție de originea excepției. Excepțiile sunt împărțite în trei tipuri.

♦ Failure (eroare) - o excepție care are loc înainte de executarea de instrucțiuni atunci când procesorul detectează o defecțiune de execuție; starea mașinii nu este schimbat. Pentru eșecuri includ, de exemplu, o încercare de a accesa memoria paginii lipsă (utilizată pentru memoria virtuală).

♦ trap (capcana) - o excepție care rezultă din executarea instrucțiunilor (de exemplu, se împarte la zero), iar starea mașinii în conformitate cu instrucțiunile de acțiune este schimbată.

♦ Failure (abandon) - excepția pentru care este imposibil să se determine cu exactitate a dat naștere la instrucțiunile sale (și imposibil de a corecta acțiunea de a continua). Aceste excepții includ un eșec dublu (cu excepția

7.2. Modelul de programare de procesoare x86 moderne

de excepție de prelucrare) și excluderea mijloacelor de control al mașinii

întrerupere externă Maskable prin procesarea semnalului la intrare INT numai atunci când întrerupere permite pavilion IF.

NMI procesate de procesor independent de stat IF pavilion permisiune de întrerupere. Ele sunt purtate de întrerupere vine pe linia NMI (Non-Maskable de întrerupere), iar pentru procesoarele care acceptă modul de gestionare a sistemului, chiar și pe SMI # linia (Sistem de Management de întrerupere).

Fiecare număr (0-255) corespunde elementului de întrerupere sau excepție în tabelul descriptor de întrerupere (Interrupt Descriptor Table, IDT), care este interpretat în funcție de modul de procesor.

În tabelul mod protejat conține IDT 8 octeți descriptori intrerup.

Se poate stoca de la 32 la 256 de descriptori și localizate oriunde în memoria fizică. Descriptorii pot fi gateway-uri. sau porți (porți), întrerup, trap sau activitate. Gateways întrerupe și capcane sunt utilizate pentru procedurile de procesare a apelurilor plasate în segmentele descrise descriptorii acestora. Aceste gateway-uri oferă protecție pentru transferul controlului: transferurile procesorului controlul sistemului de gestionare numai atunci când anumite rapoarte de privilegii întrerupt cod, handler și codul descriptor privilegiu. Codul de gestionare a întreruperilor nu ar trebui să fie mai puțin privilegiați decât sarcina de cod întrerupt (în caz contrar excepție serviciile de protecție). Dacă întreruperea tratamentului se realizează la un nivel mai mare privilegiu, procesorul trece automat la stiva (e timpul suplimentar petrecut pe accesul de memorie). Întrerupere (inclusiv hardware-ul) este posibil, și de comutare sarcini pentru descriptorul de întrerupere trebuie să fie o problemă de gateway.

În modul pe 64 de biți (modul lung) mânere au o nouă structură de 16-byte, și aici alte reguli ale comutatorului stivă. În plus, această cerere nu îndeplinește sarcini de hardware de comutare.

Sub excludere (întrerupere internă) în procesoare Intel vectori rezervate 31 tabel IDT 0-, dar în partea RS dintre ele se suprapune peste capcane - servicii de BIOS și DOS, precum și întreruperile hardware. Aceste pardoseli sunt deosebit de relevante pentru modul protejat; complică rutine de întrerupere de servicii.

La începutul oricărui tratament (inclusiv software-ul) întrerupe procesorul resetează automat de întrerupere a permite pavilion IF. Procedura de prelucrare este completată de instrucțiuni IRET, pe care stiva este registrele salvate automat sunt restaurate (registru reconstruit în pavilion de întrerupere este permisă), iar procesorul începe execută instrucțiunea următoare celei care se execută după o întrerupere. Desigur, software-ul de la momentul întreruperii serviciilor poate deliberate sau accidentale măsurabilă