Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Struktura a architektura počítačů (BI-SAP) 8 doc. Ing. Hana Kubátová, CSc. Katedra číslicového návrhu Fakulta informačních technologii ČVUT v Praze Hana Kubátová BI-SAP 8, ISA letní semestr 2010-11
BI-SAP 8: osnova Strojový kód ISA architektura souboru instrukcí střadačově, zásobníkově orientovaná, GPR zdroje: přednášky doc. Lórencze o Architektuře počítačů Hana Kubátová BI-SAP 8, ISA 2
Architektura souboru instrukcí, ISA - Instruction Set Architecture Vysoká Architektura počítače vyplývá z ISA Aplikace Úroveň abstrakce Nízká Operační systém Překladač Architektura souboru instrukcí Architektura procesoru I/O Systém Číslicový návrh VLSI obvodový návrh Hana Kubátová BI-SAP 8, ISA 3
Instrukční soubor = kritický interface software instruction set hardware Hana Kubátová BI-SAP 8, ISA 4
Strojový kód Co musí instrukce obsahovat instrukce = příkaz, zakódovaný jako číslo co se má provést s čím se to má provést (operandy) kam se má uložit výsledek kde se má pokračovat Tyto informace jsou obsaženy v instrukci... tzn. explicitně např. počítač SAPO, tzv. 5 adresový Zčásti v instrukci, zčásti dány architekturou počítače, tzn. implicitně (von Neumannova architektura) Hana Kubátová BI-SAP 8, ISA 5
Příklady strojových instrukcí op. znak operand1 operand2 výsledek 3 adresová instrukce op. znak operand1 operand2 2 adresová instrukce výsledek se ukládá na místo prvního operandu, zavedení operace přesun {x} z {x} {y} z = {z} {y} z op. znak operand 1 adresová instrukce zavedení pracovního registru STŘADAČ, ACCUMULATOR {x} S {x} {y} z = {S} {y} S Hana Kubátová BI-SAP 8, ISA {S} z 6
instrukce: operační znak, OZ, opcode operand(y) více střadačů více registrů k obecnému použití Příklad: Motorola 68000 Datové registry D 0, D 1,..., D 7 á 32b Odčítání 32b: D n paměť D n OZ: 9 n 0 B 9 instrukce: OZ <D3> - <18FF20 18FF23> D3 adresa 96B90018FF20 zápis ve strojovém kódu je nepřehledný a špatně se programuje vyšší programovací jazyk VPJ: Pascal, Java, C jazyk symbolických instrukcí JSI... operační znak i adresy (operandy) jsou zapsány symbolicky...asembler Hana Kubátová BI-SAP 8, ISA 7
Příklad kódování instrukce v AVR Symbolický zápis instrukce mov r1, r2 Zdrojový operand Cílový operand Strojový kód instrukce mov, kterou načítá a dekóduje mikropočítač Cílový operand 0 0 1 0 1 1 r d d d d d r r r r Jméno instrukce Příklad Operační znak mov r1, r2 : 0x2C12 Zdrojový operand Hana Kubátová BI-SAP 7, AVR 8
Příklad programu v symbolickém vyjádření a ve strojovém kódu Tuto transformaci provádí program zvaný asembler Adresa v paměti programu Symbolické vyjádření programu ldi r17, 0x55 ldi r18, 0x88 mov r16, r17 mov r17, r18 mov r18, r16 jmp 0 Převod mezi symbolickým vyjádřením a strojovým kódem zajišťuje překladač (asembler) Toto píše programátor 0000: E515 0001: E828 0002: 2F01 0003: 2F12 0004: 2F20 0005: 940C 0006: 0000 Obsah paměti programu Toto je mikropočítačem načítáno a dekódováno jako instrukce Poznámka: mlčky předpokládáme, že strojový kód umísťujeme od adresy 0x0000. Hana Kubátová BI-SAP 7, AVR 9
Technologie tvorby programu v asembleru Zdrojový soubor *.asm Překladač (asembler) Binární soubor (případně HEX soubor) *.bin, *.hex Toto se nahrává do paměti programu mikropočítače Hana Kubátová BI-SAP 7, AVR 10
Architektura souboru instrukcí, ISA - Instruction Set Architecture Zahrnuje Typy a formáty instrukcí, instrukční soubor Datové typy, kódovaní a reprezentace, způsob uložení dat v paměti Módy adresování paměti a přístup do paměti dat a instrukcí Mimořádné stavy Umožňuje Abstrakce (výhoda různé implementace stejné architektury) Definice rozhraní mezi nízko-úrovňovým SW a HW Standardizuje instrukce, bitové vzory strojového jazyka Hana Kubátová BI-SAP 8, ISA 11
Instrukční cyklus Čtení instrukce Dekódování instrukce Načtení operandů Provedení instrukce Uložení výsledku přerušení? Hana Kubátová Formát a kódování instrukcí Jak se instrukce dekóduje? Umístění operandů a výsledku Kolik explicitních operandů je v instrukci pro ALU? Jak jsou operandy umístěny v paměti nebo jinde? Který operand může být v paměti? Typy dat a velikosti operandů Operace v ISA Které jsou podporovány? Výběr další instrukce Skoky, větvení programu, volání podprogramů fetch-decode-execute je implicitní! BI-SAP 8, ISA 12
Adresace operandů - přímá... jen operační znak... konstanta = přímý operand paměť pole registrů... přímá adresa (paměti nebo registru) Hana Kubátová BI-SAP 8, ISA 13
Adresace operandů - nepřímá d) Indirect... nepřímá adresa (pomocí paměti nebo registru) Hana Kubátová BI-SAP 8, ISA 14
Adresace operandů - relativní d) relative Hana Kubátová BI-SAP 8, ISA 15
Adresace operandů - indexová inkrement Hana Kubátová BI-SAP 8, ISA 16
ISA: Základní třídy Střadačově (akumulátorově) orientovaná ISA (1 registr=střadač): 1 operand ADD A acc acc + mem[a] ADD (A + IX) acc acc + mem[a + IX] IX je indexovací registr Zásobníkově orientovaná ISA 0 operandů ADD stack(top-1) stack(top) + stack(top-1) top-- ISA orientovaná na registry pro všeobecné použití (GPR = General Purpose Registers): 2 operandy ADD A B EA(A) EA(A) + EA(B) 3 operandy ADD A B C EA(A) EA(B) + EA(C) EA Efektivní adresa (určuje registr, nebo operand v paměti) Hana Kubátová BI-SAP 8, ISA 17
nejstarší ISA (1949-60) vyvinula se z kalkulaček LOAD A acc mem[a] STORE A ADD A SUB A SHIFT LEFT Střadačově orientovaná ISA s absolutní adresací mem[a] acc acc acc + mem[a] acc acc - mem[a] acc 2 x acc SHIFT RIGHT acc acc / 2 JUMP A PC A JGE A if (0 acc) then PC A LOAD ADDR X načtení adresy operandu X do acc STORE ADDR X uložení adresy operandu X z acc Typicky méně než 24 instrukcí! Hardware byl velmi drahý. Hana Kubátová BI-SAP 8, ISA 18
Střadačově orientovaná ISA - dnes Z indexovacích registrů se vyvinuly speciální registry pro nepřímou adresaci, zvláštním typem je stack pointer SP (ukazatel na vrchol zásobníku). Procesory také zahrnují pracovní registry (tzv. zápisníková paměť). Toto pole snižuje četnost přístupů do paměti. Implicitním operandem ALU je vždy střadač (druhý operand může být v registrech nebo v paměti). Použita v prvních mikroprocesorech: 4004, 8008, 8080, 6502, Dnes použita v některých mikrokontrolérech: 8051, 68HC11, 68HC05, ISA X86 představena jako ISA s více střadači => s nástupem i386 upravena na GPR. Hana Kubátová BI-SAP 8, ISA 19
Výhody : Střadačově orientovaná ISA - shrnutí jednoduchý HW minimální vnitřní stav procesoru rychlé přepínání kontextu krátké instrukce (záleží na typu druhého operandu) jednoduché dekódování instrukcí Nevýhody : častá komunikace s pamětí (dnes problém) omezený paralelismus mezi instrukcemi Není náhodou, že tento typ ISA byl populární v 50. a 70. letech - hardware byl drahý, paměť byla rychlejší než CPU. Hana Kubátová BI-SAP 8, ISA 20
Zásobníkově orientovaná ISA Využití zásobníku při vykonávání programu : Vyhodnocení výrazů Vnořená volání podprogramů - předávání návratové adresy a parametrů - lokální proměnné Známým příkladem byl Burrough B5000, 1960 - počítač navržený k podpoře jazyka ALGOL 60. - vyhodnocení výrazů podporoval hardwarový zásobník Hana Kubátová BI-SAP 8, ISA 21
Zásobníkově orientovaná ISA HW zásobník = sada registrů s ukazatelem na vrchol (uvnitř CPU) Instrukce : PUSH A Stack[++Top] mem[a] POP A mem[a] Stack[Top--] ADD,SUB, Stack[Top-1] Stack[Top] OP Stack[Top-1] Top-- B5000 rovněž podporuje indexovací registry. CPU Main Memory ALU HW Stack Top++, Hana Kubátová BI-SAP 8, ISA 22
Výhody : Zásobníkově orientované ISA... většinou vyhynuly před rokem 1980 jednoduchá a efektivní adresace operandů krátké instrukce vysoká hustota kódu (krátké programy) jednoduché dekódování instrukcí neoptimalizující překladač se dá snadno napsat Nevýhody: nelze náhodně přistupovat k lokálním datům zásobník je sekvenční (omezuje paralelismus) přístupy do paměti je těžké minimalizovat Hana Kubátová BI-SAP 8, ISA 23
Zásobníkově orientované ISA po roce 1980 Inmos Transputers (1985 1996) navrženy k podpoře efektivního paralelního programování pomocí paralelního programovacího jazyka Occam Inmos T800 byl v druhé polovině 80. let nejrychlejší 32-bitový CPU zásobníkově orientovaná ISA zjednodušila implementaci podpora pro rychlé přepínání kontextu Forth machines Forth je zásobníkově orientovaný jazyk používá se v řídicích a kybernetických aplikacích několik výrobců (Rockwell, Patriot Scientific) Intel x87 FPU nepříliš dobře navržený zásobník pro vyhodnocování FP výrazů překonán architekturou SSE2 FP v Pentiu 4 Java Virtual Machine,.NET navržen pro SW emulaci (podobně jako PostScript) Sun PicoJava a další HW implementace Hana Kubátová BI-SAP 8, ISA 24
Vývoj ISA Historický pohled jeden střadač (EDSAC, 1950) střadač + indexovací registry (Manchester Mark I, IBM 700 series, 1953) oddělení programovacího modelu od implementace orientace na vyšší jazyky koncept rodiny (B5000, 1963) (IBM 360, 1964) koncept registrů pro všeobecné použití (GPR) CISC (Vax, Intel 432, 1977-80) Load/Store architektura (CDC 6600, Cray 1, 1963-76) RISC (Mips, Sparc, HP-PA, IBM RS6000,...1987) Hana Kubátová BI-SAP 8, ISA 25
GPR ISA dnes převládá Po roce 1975 používají všechny nové procesory nějakou podobu GPR (registry pro všeobecné použití.. general purpose registers) Výhody GPR ISA Registry - jsou rychlejší než paměť (včetně cache!!) K registrům lze přistupovat náhodně (versus.. zásobník je přísně sekvenční) Registry mohou obsahovat mezivýsledky a lokální proměnné Méně častý přístup do paměti potenciální urychlování Hana Kubátová BI-SAP 8, ISA 26
GPR ISA Nevýhody GPR ISA omezený počet registrů složitější překladač (optimalizace použití registrů) přepnutí kontextu trvá déle registry nemohou obsahovat složitější datové struktury (records ) k objektům v registrech nelze přistupovat přes ukazatele (omezuje alokaci registrů) Hana Kubátová BI-SAP 8, ISA 27
Jednoduchý procesor von Neumannova typu CPU CU Paměť DB AB D7:D0 A7:A0 ALU Registry CB Sběrnice CPU musí obsahovat ALU, CU a registry pro dočasné uchování dat, instrukcí a pomocných proměnných CPU pro běh programu prochází základním cyklem počítače: 1. Instruction Fetch IF načtení instrukce 2. Instruction Decode ID dekódování instrukce 3. Operand Fetch OF načtení operandu(ů) 4. Instruction Execution IE vykonání instrukce 5. Write Back WB zapsání výsledku (také Result Store) IF ID OF IE WB Interrupt? Hana Kubátová BI-SAP 8, ISA 28
Jednoduchý procesor... PC AB Řízení IR IF ID M paměť ALU ACC DB PC Program Counter, prog. čítač, obsahuje adresu instrukce, která bude vykonána v dalším cyklu ACC Accumulator, střadač, obsahuje zpracovávaná data ALU Arithmetic Logic Unit, aritmeticko-logická jednotka, vykonává operace s daty IR Instruction Register, instrukční registr, obsahuje kód aktuálně prováděné Hana instrukce Kubátová pro programátora BI-SAP je skrytý 8, ISA 29 M OF IE WB Interrupt?
Jednoduchý procesor...čtení instrukce IF PC AB Řízení IR ID OF ALU ACC M IE WB DB Interrupt? Procesor pošle adresu instrukce z PC na AB M vystaví obsah paměťového místa instrukce z adresy v PC na DB IR kód instrukce z DB je zapsán do IR Hana Kubátová BI-SAP 8, ISA 30
Jednoduchý procesor...dekódování instrukce PC AB Řízení IR IF ID OF ALU ACC M IE WB k DB Interrupt? IR instrukční kód z IR je dekódován interní logikou (řadičem) a současně jsou generovány řídící signály pro ALU a další interní obvody procesoru. PC programový čítač vystaví hodnotu na AB, ALU zvětší tuto hodnotu o k a zapíše nazpět do PC (když pc je původní obsah PC, pc pc+k), hodnota k je určena dekódováním instrukce, sekvenční zpracování k=1, skok k nějaké celé číslo s omezeného intervalu. Hana Kubátová BI-SAP 8, ISA 31
Jednoduchý procesor... čtení operandů IF PC AB Řízení IR ID OF ALU ACC M IE WB DB Interrupt? IR zapsání adresy operandu, který má být při vykonávání instrukce použit, na AB M paměť vystaví hodnotu operandu na DB, takto je operand připraven pro zpracování buď v ALU nebo v ACC Hana Kubátová BI-SAP 8, ISA 32
Jednoduchý procesor... vykonání instrukce IF PC AB Řízení IR ID OF ALU ACC M IE WB DB Interrupt? IR vystavuje na AB adresu hodnoty operandu, který má být při vykonání instrukce použit ALU operace je vykonána v ALU podle instrukce, jejíž kód je v IR a generuje pomocí interní logiky řídící signály M paměť může mít nadále vystavenou hodnotu operandu na DB ACC slouží jako cílový registr, může být ale také zdrojovým Hana Kubátová BI-SAP 8, ISA 33
Jednoduchý procesor... zápis výsledku ne vždy se provádí PC ALU AB Řízení ACC IR M IF ID OF IE WB Interrupt? IR vystaví hodnotu adresy paměti, kam má být hodnota obsažená v ACC zapsána ACC vystaví hodnotu obsaženou v něm na DB M hodnota z DB je zapsána do paměti Táto fáze základního cyklu může být, nebo nemusí být vykonána. V některých Hana Kubátová BI-SAP 8, ISA 34 procesorech je táto fáze zákl. cyklu vykonávaná jako separátní instrukce. DB
Návrh instrukcí procesoru jaké jak kódované jak dlouhé jaká adresace operandů kolik registrů Hana Kubátová BI-SAP 8, ISA 35
Přesuny dat MOV kam, co kam... registr co... registr (obsah registru) v AVR pouze registr LDI registr, konstanta pro práci s pamětí ST paměť, registr LD registr, paměť PUSH, POP ukládání/výběr ze zásobníku Hana Kubátová BI-SAP 8, ISA 36
Deklarace proměnných pseudoinstrukce vyhrazení místa v paměti (pro výsledek) zadání vstupních dat data: SHORT - jednobytový operand se znaménkem BYTE - jednobytový operand bez znaménka WORD - dvoubytový operand deklarace... DS, DB, DW Hana Kubátová BI-SAP 8, ISA 37
Aritmetické binární ADD ADC SUB SBB CMP, CP porovnání: CMP unární NOT INC DEC jako SUB, ale neuloží výsledek, jen příznaky Hana Kubátová BI-SAP 8, ISA 38
Logické binární AND OR XOR unární NEG Hana Kubátová BI-SAP 8, ISA 39
LABORATOŘ - Mikropočítač AVR Produkt firmy Atmel, které mají na jednom čipu integrován procesor paměť programu paměť dat rozsáhlou sadu periferíí (vstupně-výstupní brány, čítače, časovače, převodníky, komunikační rozhraní apod.) Hana Kubátová BI-SAP 8, ISA 40
AVR Butterfly LCD displej - 6 alfanumerických znaků (po 14 segmentech) Joystick - 5 směrů (nahoru, dolů, doleva, doprava, kolmý stisk (enter)) Čidlo teploty Čidlo osvětlení Krystalový oscilátor 32,768 khz (pro měření času) Elektroakustický měnič (piezo) Napájení z baterie Hana Kubátová BI-SAP 8, ISA 41
Architektura ATMEGA169 Hana Kubátová BI-SAP 8, ISA 42
ATMEGA169 Univerzální registry - 32 osmibitových registrů (R0 až R31) Posledních šest z nich tvoří po dvojicích tři indexregistry (Slouží k adresování přístupu do paměti) Speciální registry Programový čítač - 16bitový (Program Counter - PC) Ukazatel na vrchol zásobníku - 16bitový (Stack Pointer - SP) Registr příznaků - 8bitový (Status Register - SREG) Paměť dat: 1 KB, organizace 1K x 8 bitů, čtení i zápis Paměť programu: 16KB, organizace 8K x 16 bitů, pouze čtení (zápis speciálním způsobem) Periferie např. řadič displeje (LCD) Vnitřní zdroj hodinového kmitočtu Hana Kubátová BI-SAP 8, ISA 43
Paměť programu Data (8 bitů, zápis) Adresa Paměť programu (16kB) Zapiš Čti Instrukce (16 bitů, čtení) Data (8 bitů, čtení) Hana Kubátová BI-SAP 7, AVR 44
Paměť dat Adresa Paměť dat (1kB) Data (8 bitů, zápis) Zapiš Čti Data (8 bitů, čtení) Hana Kubátová BI-SAP 7, AVR 45
Registry Hana Kubátová BI-SAP 8, ISA 46
Stavový registr SREG ( flagy ) C Z N V S H T I - - - - - - - - C: Carry flag Z: Zero flag N: Negative flag V: Two s complement overflow indicator S: N V for signed tests H: Half carry flag T: Transfer bit used by BLD and BST instructions I: Global Interrupt Enable/Disable flag Hana Kubátová BI-SAP 7, AVR 47
Skoky Nepodmíněný skok JMP Podmíněné skoky BRxx (BR namísto J) změna běhu programu bez zapamatování místa odkud se skákalo Na rozdíl od podprogramu, kdy je třeba si zapamatovat, kam se vrátit. Hana Kubátová BI-SAP 8, ISA 48
BRBC: branch if bit in SREG is cleared Syntax: BRBC S,k Operands: 0 s 7, -64 k +63 Operation: If SREG(s) = 0 then PC PC + k + 1 else PC PC + 1 Program counter: PC PC + k + 1 PC PC + 1 if condition is false Podobně BRBS Hana Kubátová BI-SAP 8, ISA 49
Další podmíněné skoky BRCS BRCC... S set, C clear Syntax: BRCS k BREQ... Z=1, BRNE... Z=0, BRGE... N xor V = 0... Procesor umí nastavit či vynulovat příznaky v SREG Hana Kubátová BI-SAP 8, ISA 50
Relace Doplňkový kód Nezáporná čísla < JL JB JLE JBE = JE JE JNE JNE JGE JAE > JG JA E Equal L Less G Greater B Below A Above Podmínka skoku: příslušné příznaky. Např.: JB CF=1 JB=JC JBE CF ZF JE SF OF = 1 JGE SF OF = 0 atd. Hana Kubátová BI-SAP 8, ISA 51
Posuvy SHL, SHR, ASR aritmetický posun vpravo, RRC, RLC Hana Kubátová BI-SAP 8, ISA 52
Posuvy LSL, LSR posuvy logické (SHIFT) ROL, ROR rotace přes Carry ASR aritmetický posuv vpravo (? Vlevo?)... A řada dalších instrukcí, viz web SAP Hana Kubátová BI-SAP 7, AVR 53
Podprogramy Volání... CALL k k je adresa Program counter: PC k Stack: STACK PC + 2 SP SP 2, (2 bytes, 16 bits) post-dekrementace Návrat z podprogramu... RET Při volání se ukládá návratová adresa na zásobník, Při návratu se obnovuje původní obsah PC ze zás. pre-inkrementace Stack: Hana Kubátová BI-SAP 7, AVR SP SP + 2, (2 bytes, 16 bits) 54
Zásobník - stack Operace: PUSH Rr... uložení registru na zásobník Rr STACK Program counter: Stack: PC PC + 1 SP SP 1 POP Rd... nahrání registru ze zásobníku Rd STACK Program counter: PC PC + 1 Hana Kubátová BI-SAP 7, AVR Stack: SP SP + 1 55
Zásobník... Zásobník roste směrem k nižším adresám Obsah SP registru ukazuje na vrchol zásobníku na první prázdnou položku, na kterou se bude zapisovat např. instrukcí PUSH Je simulován v hlavní paměti Hana Kubátová BI-SAP 7, AVR 56
... zásobník 000 8 bitů data data 3FF Hana Kubátová BI-SAP 7, AVR 57