Prefixul înainte de codul de operare
comanda începe de fapt cu Opcode. Dar prefixul poate fi pentru echipa. Chiar și mai multe prefixe. Fiecare prefix - acesta este un octet.
De fapt, prefixele înainte de echipele nu sunt comune. Pentru a vedea acest lucru, doar uita-te la orice program de listare sub formă de instrucțiuni mașină, cum ar fi rezultatele disassembler. Chiar mai rare, pentru a vedea doar două prefix consecutiv.
Atunci când partea din față a prefixele codurilor de operare sunt plasate, sub rezerva următoarelor două reguli:
Dacă o echipă are mai mult de un prefix, prefixele trebuie să fie plasate în ordinea în care acestea sunt prezentate în tabelele de mai sus.
Aceeași echipă nu poate sta doar două prefix al unui grup (doar două echipe ca prefix imediat sau două segmente de prefix de înlocuire).
Se observă că procesoarele sunt de obicei tolerante față de încălcarea acestor norme. Cu toate acestea, ar trebui să fie considerate în continuare că rezultatul unor astfel de încălcări pot fi imprevizibile.
Prefixul este valabil numai în cadrul acelei echipe, înainte de care a fost în picioare.
Codul de prefix poate fi diferit de codul de funcționare al oricărei echipe. Acest lucru se vede clar din tabelul opcodes Origine octet. Acest tabel arată, de asemenea, prefixele și codurile.
echipa prefixe
„Comanda Prefixele“ - numele pentru primul grup de prefixe. Doar spun că nu este un nume bun, din moment ce alte prefixe cu alte nume, de asemenea, sunt prefixele pentru echipa.
Echipele prefixe au propriile lor nume în limbaj de asamblare. Și, în plus, unele asamblorii arată aceste comenzi într-o singură linie. Prin urmare, atunci când programează în asamblare aceste prefixe comenzi pot fi percepute ca o echipă separată. (Acest lucru arată din nou că gândirea în limbaj de asamblare poate fi foarte diferit de gândire în limbaj mașină comenzi).
Cod F0 - autobuz de blocare prefix, comanda LOCK ( "blocare" - blocare). Acest prefix este utilizat numai cu acele comenzi care susțin acest lucru - capacitatea de a bloca anvelopei.
coduri F2. F3 - un prefix de repetare, echipa REP ( „repeta“ - repetare) și celelalte echipe din acest grup. Aceste prefixe sunt utilizate numai cu echipe de lanț. REP prefixele grupuri permit organizarea echipei lanț de execuție ciclică. A se vedea pagina nlănțuită comenzi.
Cod F1 - nu există nici un prefix și nu există nici o astfel de comandă. Aici trebuie remarcat faptul că aceasta este doar codul pentru primul octet de comandă, care este încă liber. apare Involuntar ideea existenței unor caracteristici nedocumentate.
acțiune prefix depinde de comandă specială.
Operand modificări dimensiune prefix
În cazul în care modul de execuție global program este „32 de biți“, pentru comanda la care prefixul este de 66, setați atributul dimensiunea operand de biți de „16“.
În cazul în care modul de execuție global program este „16 biți“, pentru comanda la care prefixul este de 66, setați atributul dimensiunea operand de biți de „32“.
acțiune prefix depinde de comandă specială.
Prefixele segment de înlocuire
Cod 26 - segmentul implicit se înlocuiește cu segmentul ES.
cod 2E - segmentul implicit se înlocuiește cu segmentul CS.
Cod 36 - segmentul implicit se înlocuiește cu segmentul SS.
Codul 3E - segmentul implicit se înlocuiește cu segmentul DS.
64 cod - segmentul implicit se înlocuiește cu segmentul FS.
Cod 65 - segmentul implicit se înlocuiește cu segmentul de GS.
opcode
După toate prefixele (în cazul în care echipa are un prefix) începe instruirea efectivă a mașinii. Și instrucțiunea mașinii începe cu Opcode.
Câmpul Opcode este mereu prezent în orice comandă mașină. Este evident că echipa trebuie să aibă cel puțin un octet. Și atunci acest singur octet pur și simplu va opcode.
Codul de operare (abreviat - CPC) poate consta dintr-un octet sau doi octeți. În cazul în care primul bitilor cod de operare au o valoare 0F. în acest cod de operație există, de asemenea, al doilea octet.
Când se discută despre sistemul de comandă este convenabil de a folosi conceptul de „octet de bază“ opcode. În cazul în care CPC-ul este compus dintr-un octet, atunci octetul este octetul de bază. Dacă CPC-ul este format din doi octeți, principalele fi considerat al doilea octet al Opcode.
În acest director, există echipe din tabel în care echipa clasate în ordinea Opcodes: primul Opcodes octet al doilea octet cod de operație
Tabelele director în „Format“ condiționată cod de operație octet de bază este prezentat ca minusuri opt, opt biți octeților primare corespunzătoare.
O astfel de desemnare octeți de bază este, pentru fiecare echipă, deoarece fiecare echipă are un cod de operație.
Pentru mai multe echipe au, în general, biți speciale octet sau bit-câmpuri. Astfel de locuri sunt afișate în litere octet pe fundalul cratimele.
De exemplu, notația (------- w) arată că zero (cel mai puțin semnificativ) octet de evacuare principal există un pic special (w). litera „w“ înseamnă „cuvânt“ - „cuvânt“. Și acest lucru înseamnă că comanda are două opțiuni care diferă în mărimea operandului.
Să ne gândim caz particular. Să fie ADD codurile 04 și 05, care efectuează operația de adăugare. Codul binar pentru aceste operații este după cum urmează: 00000100 și 00000101, singura diferență este în LSB.
Există ADD cod opțiune comandă 04 (w = 0) efectuează operația plus pentru octet (dimensiunea operand de 8 biți) și codul versiunea 05 (w = 1) realizează aceeași operație pentru cuvântul (16 biți).
Dar, la fel cum a fost pentru procesoarele pe 16 biți. Odată cu apariția situației pe 32 de biți complicate. Acum, aceeași echipă poate realiza funcționarea acestuia pentru octet (8 biți), cuvânt (16 biți), cuvânt dublu (32 de biți). Opțiunea echipa cu (w = 0) au rămas aceleași, întotdeauna funcționează numai pentru octet (8 biți). Dar echipa de lucru cu varianta (w = 1) va depinde de atributul dimensiune operanzi specificat pentru un cuvânt (16 biți) sau cuvânt dublu (32 de biți). A se vedea mai sus despre prefixul modifică dimensiunea operand - cod 66, ceea ce face ca un astfel de comutator într-o singură comandă.
Denumire (----- reg) indică faptul că, în esență, drept registru octet opcode este setat astfel încât se efectuează această operațiune.
Și acest lucru înseamnă că pentru această echipă, există opt versiuni diferite, cu diferite coduri de operații. Exemple ale acestor comenzi pot fi comanda un singur octet INC DEC (incrementare și decrementare).
Puteti vedea de cealaltă parte, din instrucțiunile de asamblare. În cazul în care INC comandă este setat ca un operand al oricărui registru, cum ar fi EAX și EBX, operandul vor fi specificate în mod direct în operațiunea de cod mașină de instrucțiuni.
Lista completă a denumirilor de biți și bytes de câmpuri de biți principale specifice afișate pe pagina Note la masa principală.
Byte MRM - (mod, reg, r / m)
Numele complet arată în acest fel - "bytes (mod, reg, r / m)". Un nume scurt în diverse cărți arată diferit. În directorul nostru a folosit abrevierea pentru „bytes MRM“.
Octet MRM nu este disponibil pentru toate echipele. Acest lucru este determinat de codul de operare special, (și, mai precis, „un cod de operațiune majoră“), dacă MRM octet este o parte a instrucțiunii de mașină sau nu este inclusă.
Este important să rețineți că nu este vorba despre o echipă cu punctul limbaj de asamblare de vedere, dar comanda mașinii cu un anumit cod de operații de bază. De exemplu, ADD adăugare de instrucțiuni are patru versiuni diferite, cu octetul MRM, patru variante cu octet „redus“, a MRM, care, în directorul nostru indicat ca NNN, și cele două versiuni nu octet MRM. Un total se pare zece coduri de chirurgie diferite, zece variante diferite ale unei comenzi mașină. A se vedea. Page de bază de comenzi aritmetice.
MRM bytes este împărțit în trei câmpuri de biți: un câmp de doi biți (mod). câmp de trei biți (reg). câmp de trei biți (r / m).
Câmpul (reg) specifică primul operand, receptor operanzi (destinație). Câmp (r / m) definește al doilea operand, operandul sursă (sursa). De obicei, este între roluri (reg) si (r / m). care va fi sursa operanzilor, și care receptorul. Dar se întâmplă și invers, aceasta depinde de comandă specială.
Field (REG) specifică un registru de uz general. Trei biți - cele opt variante, opt registre diferite.
desemnarea NNN
Comenzile de sistem x86 sunt comenzi astfel încât MRM octet este folosit oarecum diferit decât cel descris mai sus. Diferența în modul în care este tratată câmpul (reg).
Faptul că codul de operare principal (un octet sau doi octeți) nu sunt întotdeauna în mod clar ceea ce definește o echipă. Pentru anumite valori ale Opcode primar la Opcode conține trei biți suplimentare ale câmpului (reg) bytes MRM. Și apoi acest cod de operație rassshirenny specifică o comandă.
Ca un exemplu de un astfel de caz, puteți apela echipa de la primul cod de operare octet egal cu 80. 81. 82. 83. A se vedea. Page Opcodes primul octet.
Tabelele din acest manual pentru astfel de echipe plasate denumirea NNN în „format“, mai degrabă decât se referă la MRM. Doar a trebuit să identifice într-un fel separat caz special. Acest lucru sa transformat „bytes NNN“, mai degrabă decât „octet MRM“.
Instrucțiunea de sistem x86 există cazuri în care MRM Octeți utilizați în formă prescurtată numai datorită faptului că nu este necesară pentru această echipă specială bytes MRM întrebat doi operanzi, pentru că această echipă are nevoie doar de un singur operand. În acest caz, câmpul (reg) bytes MRM pur și simplu nu este folosit și este specificată în documentația care trebuie să fie întotdeauna (reg = 0).
Astfel de cazuri sunt destul de un pic:- Codurile de instrucțiuni MOV C6 și C7
- Echipa POP, cod 8F
- Comenzile SET Group (cond), coduri de la 90 la 0F 0F 9F
Pentru aceste cazuri, de asemenea, în directorul tabele este pus desemnarea NNN.
Byte SIB - (scara, index, bază)
SIB octet disponibil în echipa numai în modul pe 32 de biți și numai atunci când echipa este deja octet MRM (în formă completă sau sub formă condensată NNN).
În mod similar octet MRM, SIB octet este împărțit în trei câmpuri de biți:
Acestea sunt două cazuri diferite în diferite moduri reflectate în tabelele de referință în „Format“.
operand imediat
Formate multe comenzi oferă posibilitatea de a seta o constantă direct în interiorul echipei. limbaj de asamblare, acest lucru corespunde cu instrucțiunile pentru operandul o anumită valoare numerică în loc de un nume de variabilă.
Tabelele director în „formatul“ al existenței unui operand directe prezinta „date (..)“ denumire. în cazul în care, în paranteze indică numărul de octeți.
Golf Operandul imediată nu este în toate comenzile mașinii.
În cazul în care formatul de comandă este un câmp pentru a specifica un operand imediat, câmpul ca o echipa va fi mereu ultima.
Toate paginile de manual
Cele mai recente pagini noi sunt adăugate la directorul poate să lipsească în această listă. Dar, evident toate noile pagini este listată pe pagina principală.