Arhitectura Procesoarelor X86
Total Page:16
File Type:pdf, Size:1020Kb
ARHITECTURA PROCESOARELOR X86. 2016 Setul de instrucţiuni generale UT Press Cluj-Napoca, 2016 ISBN 978-606-737-217-5 Recenzia materialului: Camelia Chira, Şef lucrări - UTCN Copyright © 2016 Editura U.T. PRESS Reproducerea integrală sau parţială a textului sau ilustraţiilor din această carte este posibilă numai cu acordul prealabil scris al editurii U.T.Press sau al autorului. ISBN 978-606-737-217-5 Prefaţă Această carte reprezintă un ghid ce se adresează în mod special studenților de la facultăţile de profil Informatică sau Tehnologia Informaţiilor, dar poate fi un instrument util și altor categorii de persoane; a fost conceput pentru cei care doresc să se acomodeze cu programarea în limbaj de asamblare şi deci cunoaşterea instrucţiunilor generale suportate de procesoare x86. Scopul principal al acestui material îl constituie susținerea procesului de învățare activă, prin studierea și apoi exersarea de exemple (rezolvarea individuală) de exerciţii sau probleme (cu instrucţiunile propuse aici). Materialul a fost structurat în 7 capitole, acoperind o varietate largă de exemple atât pentru procesoare de 16 biţi cât şi pentru procesoare pe 32 biţi. Acolo unde am considerat necesar, am prezentat şi exemple pentru procesoare pe 64 biţi. Execuţia programelor sau secvenţelor de instrucţiuni prezentate aici poate fi realizată în mai multe moduri: folosind un simulator de procesor (de exemplu EMU8086), folosind pachetul TASM sub DosBox sau un alt asamblor pe 32 sau chiar 64 biţi (MASM de exemplu), sau folosind Visual C şi asamblare inline. Cu toate eforturile pe care le-am depus în vederea organizării și prezentării materialului, cu siguranţă că sunt multe îmbunătăţiri care se pot propune; de aceea, aștept cu interes orice propunere, corectură sau pur și simplu comentariu în vederea îmbunătăţirii acestui material la adresa [email protected]. Pe site-ul meu, la adresa http://users.utcluj.ro/~apateana/ la secţiunea materiale didactice mai puteţi consulta şi alte materiale didactice. Anca Apătean "Nimic nu poate înlocui lipsa iubirii, dar iubirea înlocuieşte toate neajunsurile" Părintele Arsenie Boca Dedic acest material mamei mele. Cuprins Capitolul 1. Setul de instrucŃiuni al procesoarelor din familia x86 ............................................................................................................ 3 1.1. Privire de ansamblu asupra setului de instruc ţiuni ISA (Instruction Set Architecture) x86 ................................................................... 3 Capitolul 2. InstrucŃiuni de transfer .............................................................................................................................................................. 9 2.1. InstrucŃiuni de transfer generale ........................................................................................................................................................... 9 2.2. InstrucŃiuni de transfer condiŃionat...................................................................................................................................................... 22 2.3. InstrucŃiuni de transfer pentru conversie format ................................................................................................................................. 28 2.4. InstrucŃiuni de transfer cu stiva ........................................................................................................................................................... 32 2.5. InstrucŃiuni de transfer cu acumulatorul.............................................................................................................................................. 50 2.6. InstrucŃiuni de transfer pentru adrese ................................................................................................................................................. 57 2.7. InstrucŃiuni de transfer pentru flaguri (PSW) ...................................................................................................................................... 65 Capitolul 3. InstrucŃiuni aritmetice ............................................................................................................................................................. 69 3.1. InstrucŃiuni pentru adunare ................................................................................................................................................................. 69 3.2. InstrucŃiuni pentru scădere și negare ................................................................................................................................................. 79 3.3. InstrucŃiuni pentru înmulŃire și împărŃire ............................................................................................................................................. 86 3.3.1. InstrucŃiunile MUL și IMUL............................................................................................................................................................... 87 3.4. InstrucŃiuni pentru comparare ............................................................................................................................................................. 99 3.5. InstrucŃiuni pentru extinderea semnului ACC ................................................................................................................................... 105 3.6. InstrucŃiuni pentru corecŃia ACC ....................................................................................................................................................... 114 ARHITECTURA PROCESOARELOR X86. SETUL DE INSTRUCŢIUNI GENERALE Capitolul 4. InstrucŃiuni pe biŃi .................................................................................................................................................................. 128 4.1. InstrucŃiuni logice .............................................................................................................................................................................. 129 4.2. InstrucŃiuni de testare pe biŃi............................................................................................................................................................. 136 4.3. InstrucŃiuni de deplasare .................................................................................................................................................................. 147 4.4. InstrucŃiuni de rotaŃie ........................................................................................................................................................................ 157 4.5. Alte instrucŃiuni cu GPR, introduse de la procesoare pe 32 biŃi ....................................................................................................... 163 Capitolul 5. InstrucŃiuni de manipulare a șirurilor .................................................................................................................................. 191 5.1. InstrucŃiuni pentru operaŃii primitive .................................................................................................................................................. 191 5.2. InstrucŃiuni cu şiruri pe port .............................................................................................................................................................. 199 Capitolul 6. InstrucŃiuni de salt ................................................................................................................................................................. 202 6.1. InstrucŃiuni de salt (ne)condiŃionat .................................................................................................................................................... 202 6.2. InstrucŃiuni pentru controlul buclelor de program ............................................................................................................................. 205 6.3. Prefixe de repetare .......................................................................................................................................................................... 210 6.4. InstrucŃiuni pentru control indicatori (flags) ....................................................................................................................................... 211 7. Alte instruc ţiuni ...................................................................................................................................................................................... 212 Pag. 3 Anca Apătean Capitolul 1. Setul de instrucţiuni al procesoarelor din familia x86 1.1. Privire de ansamblu asupra setului de instruc ţiuni ISA (Instruction Set Architecture) x86 Procesoarele pe 16b şi apoi cele pe 32 biŃi au format așa numita familie x86 – cele pe 64 biŃi care au urmat - cum ar veni x86 pe 64 biŃi a primit numele de x64 ; totuşi, în domeniul academic-educaŃional încă se foloseşte termenul „x86 pe 64 biŃi” pentru a fi lucrurile mai clare celor care întâlnesc astfel de noŃiuni pentru prima dată. Regiştri cu regim special se consideră: regiştrii segment, [R/E]FLAGS şi [R/E]IP. Registrul [-/E/R] FLAGS este un registru de 16, 32 respectiv 64 biŃi în care microprocesoarele din familia x86 păstrează starea curentă a procesorului. Regiştrii mai mari păstrează compatibilitatea cu predecesorii lor mai mici; biŃii 15…0 ai registrului EFLAGS sunt de fapt biŃii registrului FLAGS; similar, biŃii 31…0 ai RFLAGS sunt de fapt biŃii registrului EFLAGS. Partea