340 likes | 584 Views
Računarstvo i informatika III Lekcija 11 - Hipoteti č ki procesori x86. 886, 8286, 8486 i 8686. U ovoj lekciji. A rhitektura procesora x86. CPU registri - 16 bitova Opšti Specijalizovani AX - Akumulator IP - instruction pointer BX - Bazni registar Registar stanja (Flag)
E N D
Računarstvo i informatika IIILekcija 11 - Hipotetički procesori x86 886, 8286, 8486 i 8686
Arhitektura procesora x86 • CPU registri - 16 bitova • Opšti Specijalizovani • AX - Akumulator IP - instruction pointer • BX - Bazni registar Registar stanja (Flag) • CX - Count • DX - Data • Aritmetičko - logički uređaj (ALU) • Bus interface unit (BIU)
Skup instrukcija x86 • 20 instrukcija • 7 sa 2 argumentaMOV (2 forme), ADD, SUB, CMP, AND, OR • 8 sa jednim NOT, JE, JNE, JB, JBE, JA, JAE, JMP • 5 bez, argumenta BRK, IRET, HALT, GET i PUT • Instrukcija za prenošenje podataka MOV • Aritmetičke i logičke instrukcije • Instrukcije za predaju upravljanja
Instrukcije za prenošenje podataka • MOV reg, reg/mem/imm • MOV mem, reg Konvencije: mem (memory) - argument u memoriji reg (register) - argument u procesorskom registru imm (immediate) - neposredni argument (konstanta)
Aritmetičke i logičke instrukcije • ADD reg, reg/mem/imm • SUB reg, reg/mem/imm • CMP reg, reg/mem/imm • AND reg, reg/mem/imm • OR reg, reg/mem/imm • NOT reg/mem
Instrukcije za predaju upravljanja • JA dest skok ako je prvi veći (Above) • JAE dest skok ako je prvi veći ili jednak (Above or Equal) • JB dest skok ako je prvi manji (Below) • JBE dest skok ako je prvi manji ili jednak (Below or Equal) • JE dest skok ako su jednaki (Equal) • JNE dest skok su različiti (Not Equal) • JMP dest bezuslovni skok • IRET povratak iz interapta (Interrupt RETurn)
Ostale instrukcije • GET čita heksadek. podatak sa ulaza u AX • PUT štampa heksadek. podatak iz AX • HALT završava rad programa • BRK privremeno prekida rad programa
Načini adresiranja • forma zadavanja adrese argumenta • Registarsko • MOV AX,BX • Neposredno • MOV AX,3 • Direktno • MOV AX, [1000] • Indirektno • MOV AX, [BX] • Indeksno • MOV AX, [1000+BX]
Kodiranje instrukcija sa dva argumenta 8 bitova za OPKOD16-bitno polje kod JMP instrukcija ili ako se za memorijski argument koristi neposredno, indirektno ili indeksno adresiranje I I I R R M M M 000 = special 00 = AX 000 = AX 001 = OR 01 = BX 001 = BX 010 = AND 10 = CX 010 = CX 011 = CMP 11 = DX 011 = DX 100 = SUB 100 = [BX] 101 = ADD 101 = [xxxx+BX] 110 = MOV reg, reg/mem/imm 110 = [xxxx] 111 = MOVmem, reg 111 = const
Kodiranje instrukcija sa jednim argumentom 000 + 5 bitova + 16-bitno polje jedino kod JMP instrukcija ili ako se za memorijski argument koristi neposredno, OPKOD indirektno ili indeksno adresiranje I I M M M 00 =bez arg. 000 = AX 01 = JMP 001 = BX 10 = NOT 010 = CX 011 = ilegalna 011 = DX 100 = [BX] 101 = [xxxx+BX] 110 = [xxxx] 111 = const
Kodiranje instrukcija bez argumenata 000 00 + 3 bita za OPKOD 000 = ilegalna 100 = IRET 001 = ilegalna 101 = HALT 010 = ilegalna 110 = GET 011 = BRK 111 = PUT
Kodiranje instrukcija skoka 000 01 + OPKOD 16-bitno polje sadrži adresu na koju će skok predati upravljanje (adresu koja će biti upisana u IP) 000 = JE 001 = JNE 010 = JB 011 = JBE 100 = JA 101 = JAE 110 = JMP 111 = ilegalan
MOV reg, reg/mem/imm K1 - Donošenje bajta sa opkodom instrukcije iz memorije 1 takt K2 - Uvećanje IP da pokazuje na sledeći bajt 1 takt K3 - Dekodiranje instrukcije 1 takt K4 - Ako je potrebno, donošenje 16-bitne const iz memorije 0-2 takta K5 - Ako je potrebno,uvećanje IP da pokazuje na bajt iza argumenta 0-1 takt K6 - Ako je potrebno, izračunavanje memorijske adrese 0-2 takta K7 - Donošenje izvornog argumenta 0-3 takta K8 - Upisivanje donetog argumenta u procesorski registar 1 takt ukupno: 5-11 taktova Izvršavanje instrukcija na 886 procesoru
MOV AX,BX 110 00 001 C1 K1 K2 K3 K7 K8 ukupno 5 taktova MOV AX,xxxx 110 00 111 xxxx C7 xxxx K1 K2 K3 K4 K5 K8 ukupno 6-7 taktova Izvršavanje MOV reg,reg i MOV reg,mem
MOV AX,[BX]110 00 100 C4 K1 K2 K3 K6 K7 K8 ukupno 7-8 taktova MOV AX,[xxxx]110 00 110 xxxx C6 xxxx K1 K2 K3 K4 K5 K7 K8 ukupno 8-10 taktova Izvršavanje MOV reg,[BX] i MOV reg,[xxxx]
MOV AX,[xxxx+BX]110 00 110 xxxx C5 xxxx K1 K2 K3 K4 K5 K6 K7 K8 ukupno 10-12 taktova Izvršavanje MOV reg,[xxxx+BX]
Ubrzanja • preklapanjem koraka izvršavanja • dodavanjem bafera u procesor za čuvanje unapred donetih naredbi - bafer naredbi (prefetch queue) 8286 • korišćenjem tekućih linija (pipelines) 8486 • korišćenjem ugrađenog keša (cache) 8486 • korišćenjem više tekućih linija - superskalaranim izvršavanjem 8686
Preklapanje koraka • #1: K4, K5, K6, K7 (npr. MOV AX,[1000+BX]) K4, K5/6, K7 • #2: K4, K5, K7 (npr. MOV AX,[1000]) K4, K5/7 • #3: K6, K7 (npr. MOV AX,[BX]) K6, K7 • #4: K7 (npr. MOV AX,BX) K7 • K1' - Donošenje bajta instrukcije iz memorije; • K2' - Dekodiranje instrukcije i ažuriranje IP; • K3' - Ako je potrebno, donošenje 16-bitne konstante iz memorije; • K4' - Ako je potrebno, izračunavanje memorijske adrese; • K5' - Donošenje izvornog argumenta i ažuriranje IP; • K6' - Upisivanje donetog argumenta na odredište.
Korišćenje bafera naredbi • Prefetch queue kod realnih procesora • 8086 - 6 bajtova • 80386 - 16 bajtova • 8486 - 32 bajta
Opasnost za podatake (data hazard) Opasnost od mešanja podataka i njeno otklanjanje
Pitanja i zadaci • Opišite arhitekturu hipotetičkih procesora x86. • Koje instrukcije čine skup instrukcija x86? • Koje načine adresiranja koriste procesori x86? • Kako se kodiraju instrukcije sa 2 argumenta, sa jednim argumentom i bez argumenata procesora x86? • Kako se kodiraju instrukcije skoka? • Opišite sekvencijalno izvršavanje instrukcija 886 proceosra. • Kako se može ubrzati izvršavanje instrukcija? • Šta je bafer naredbi (prefetch queue)? • Šta su tekuće linije (pipelines) i koji se problemi javljaju kada se koriste tekuće linije za izvršavanje instrukcija? • Kako se realizuje superskalarno izvršavanje?