1/1/ eindhoven university of technology / faculty of Computer Science 2IC20:Computersystemen Week 4: Inleiding InstructieSetArchitectuur (ISA) datatypen
1/1/ eindhoven university of technology / faculty of Computer Science 2 De InstructieSetArchitectuur (ISA) is de grens tussen soft- en hardware
1/1/ eindhoven university of technology / faculty of Computer Science 3 De ISA is een soort van “contract” Moet exact beschrijven wat hardware kan doen Gezien vanuit optiek van programmaschrijver Liefst op formele manier opschrijven “normatieve” delen: functionele eisen (exact) zoals: “moet” -“mag niet” - “behoort te hebben” -“is implementatie-afhankelijk” “informatieve” delen: voorbeelden en uitleg “Backward compatible”: zelfde ISA, andere hardware (Intel!)
1/1/ eindhoven university of technology / faculty of Computer Science 4 Een ISA bestaat uit verschillende delen Geheugenmodellen Processor registers en “status vlaggen” De uitvoerbare instructies Hardware afhankelijkheden (soms) Vreemd gedrag bij combinatie van instructies Niet-standaard volgorde van uitvoeren “Modi” van uitvoering (soms) “user” / “kernel” mode met verschillend gedrag
1/1/ eindhoven university of technology / faculty of Computer Science 5 Geheugenmodel: “adresruimten” Welke “adresruimten” zijn beschikbaar ? Adresruimte = onafhankelijk adresseerbaar geheugen Harvard architectuur: programma / gegevens Adresruimten kunnen overlappen ! Practicumprocessor: 128 bits in intern data geheugen Hoe zijn die adresruimten ingedeeld ? Aantal bits per cel Aantal cellen per woord en “little/big endian-ness” Aantal woorden in adresruimte
1/1/ eindhoven university of technology / faculty of Computer Science 6 Geheugenmodel: “uitlijning” Bij meer cellen per woord Meerdere adressen in één woord Lezen/schrijven van gegevens kan over woordgrens heen: “niet-uitgelijnde” (“non-aligned”) toegang Is ruimte-efficient maar kost veel extra hardware
1/1/ eindhoven university of technology / faculty of Computer Science 7 Geheugenmodel: “semantiek” Wat gebeurt er met de volgorde van geheugen lees en schrijf operaties in het programma ? Sommige hardware architecturen kunnen deze volgorde veranderen (niet in dit college…) Veel voorkomende optimalisatie: lezen na schrijven van hetzelfde adres niet uitgevoerd (processor houdt zelf bij wat net geschreven is) In normaal geheugen nog niet zo erg, maar onbruikbaar bij invoer/uitvoer ! Moet programma hier maar rekening mee houden ?
1/1/ eindhoven university of technology / faculty of Computer Science 8 Registers in de ISA Algemene registers voor tussenresultaten Soms gespecialiseerd voor datatypen Soms met “bijbaantje”, bijv. teller voor herhalingen ISA kan afspraak over gebruik bevatten Gespecialiseerde registers Veelal adressen in geheugen(s) Programmateller (“Instruction Pointer”) is er één Register(s) met status-bits: “flags register” of “Program Status Word”
1/1/ eindhoven university of technology / faculty of Computer Science 9 Status “vlaggen”: ALU resultaat codes “Zero”: resultaat was 0 (nul) “Carry”: voor optellen (soms ook schuiven) “Borrow” is omgekeerde (NOT) carry voor aftrekken “Negative”: resultaat was negatief (linkse bit) “oVerflow”: resultaat incorrect (2’s complement) “Auxiliary carry”: tussen bit 3 en 4 bij optellen Nodig voor resultaatcorrectie bij decimaal optellen “Parity”: aantal één-bits in resultaat (on)even
1/1/ eindhoven university of technology / faculty of Computer Science 10 Nog meer status vlaggen... Resultaat vergelijkings (“CoMPare”) operaties Soms separate vlaggen, meestal Z, S, C en V vlaggen Instructies om deze te testen en programmaverloop te veranderen naar aanleiding van hun toestand Machine/processor status Onderbreken programma met interrupt toegestaan “Trace” / “single step” aan/uit(fout zoeken) Machine in “user” of “kernel” mode(beveiliging) Soms vlaggen niet veranderbaar in “user” mode
1/1/ eindhoven university of technology / faculty of Computer Science 11 Instructies: de basis Verplaatsen van gegevens “load” en “store”: lezen en schrijven geheugen “move”: copieren gegevens tussen registers Bewerken van gegevens Rekenkundig, logisch (Boole!) en vergelijkingen Besturing van programmaverloop (Conditioneel) laden van programmateller Onthouden adres volgende instructie: “subroutines”
1/1/ eindhoven university of technology / faculty of Computer Science 12 Practicumprocessor adresruimten Programmageheugen: 64 kilobyte Extern gegevensgeheugen: 64 kilobyte Intern gegevensgeheugen: 256 bytes “Special Function Registers” (SFR’s): 128 bytes in- en uitvoer besturing en CPU registers Bit adresseerbaar geheugen: 256 bits 128 in intern gegevensgeheugen bytes 128 in SFR’s met adressen deelbaar door 8
1/1/ eindhoven university of technology / faculty of Computer Science 13 Practicumprocessor CPU registers (1) PC: 16 bits, adresseert 64 kilobyte programma A/ACC: 8 bits, resultaatregister (“Accumulator”) B: 8 bits, voor delen en vermenigvuldigen DPTR: 16 bits, adresseert 64 kilobyte extern gegevens geheugen (“Data PoinTeR”) SP: 8 bits, adresseert “stack” (“stapel”) in intern gegevens geheugen (“Stack Pointer”)
1/1/ eindhoven university of technology / faculty of Computer Science 14 Practicumprocessor CPU registers (2) R0..R7: 8 hulpregisters van 8 bits per stuk 4 sets in bytes van intern gegevens geheugen R0 en R1 kunnen adresseren in gegevens geheugens PSW: 8 bits “Program Status Word” Standaard vlaggen: C, V, A, N, P(P volgt A register) Carry ook gebruikt voor 1 bit Booleaanse operaties 2 bits kiezen set van hulpregisters R0..R7 Alle registers behalve PC en R0..R7 ook SFR !
1/1/ eindhoven university of technology / faculty of Computer Science 15 Datatypen, hardware ondersteund (1) Gehele getallen (“integers”) met vast aantal bits Binair alleen positief of “two’s complement” zie appendix A van boek, hoort bij stof ! Optellen/aftrekken voor allebei hetzelfde, status vlaggen maken verschil (C versus V/N) Soms “Binary Coded Decimal” ondersteuning “Floating point” getallen: “drijvende komma” Zie appendix B van boek - NIET BIJ STOF “Pointers”: adressen in geheugen
1/1/ eindhoven university of technology / faculty of Computer Science 16 Datatypen, hardware ondersteund (2) Booleaanse waarden (“waar”/“niet waar” of 0/1) Meestal met meer bij elkaar in register (“bitmap”) Booleaanse operaties op meer bits tegelijk ! Soms als losse bits bruikbaar (practicumprocessor) Soms met speciale coderingen in register bijv. “nul is niet waar, niet-nul is waar” Karakters: meestal als 8/16 bits gehele getallen Kunt er niet mee rekenen, zelfs vergelijken moeilijk ! Wel bewerkingen op reeksen karakters: “strings”
1/1/ eindhoven university of technology / faculty of Computer Science 17 Datatypen, software ondersteund Complexe datatypen uit eenvoudige opbouwen Direct ondersteunde worden wel “primitief” genoemd Hardware ondersteuning voor uitbreidingen Speciale methoden van geheugenadressering “Decimal Adjust” voor Binary Coded Decimal werk “Add with Carry” / “Subtract with Borrow” Carry ADD ADDC