170 likes | 309 Views
5 JJ2 0: Computerarchitectuur 2M200: Inleiding Computersystemen. Sessie 2(1): Inleiding I nstructie S et A rchitectuur (ISA) datatypen. De I nstructie S et A rchitectuur (ISA) is de grens tussen soft- en hardware. De ISA is een soort van “contract”.
E N D
5JJ20: Computerarchitectuur2M200: Inleiding Computersystemen Sessie 2(1):Inleiding InstructieSetArchitectuur (ISA)datatypen
De InstructieSetArchitectuur (ISA)is de grens tussen soft- en hardware
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) “moet” - “mag niet” - “behoort te hebben” - “is implementatie-afhankelijk” • “informatieve” delen: voorbeelden en uitleg • “Backward compatible”: zelfde ISA, andere hardware (Intel!)
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
Geheugenmodel: “adresruimten” • Welke “adresruimten” zijn beschikbaar ? • Adresruimte = onafhankelijk adresseerbaar geheugenHarvard 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
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
Geheugenmodel: “semantiek” • Wat gebeurd 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 ?
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 een van • Register(s) met status-bits:“flags register” of “Program Status Word”
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
Nog meer status vlaggen... • Resultaat vergelijkings (“CoMPare”) operaties • Soms separate vlaggen, meestal Z, S, C en V vlaggen • Instructies om deze te testen en programmaverloopte 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
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”
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 32..47 • 128 in SFR’s met adressen deelbaar door 8
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”)
Practicumprocessor CPU registers (2) • R0..R7: 8 hulpregisters van 8 bits per stuk • 4 sets in bytes 0..31 van intern gegevens geheugen • R0 en R1 kunnen adresseren in gegevens geheugens • PSW: 8 bits “Program Status Word” • Standaard vlaggen: C, V, A, 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 !
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
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”
ADDC ADD Carry 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”