1 / 18

5 JJ2 0: Computerarchitectuur 2M200: Inleiding Computersystemen

5 JJ2 0: Computerarchitectuur 2M200: Inleiding Computersystemen. Sessie 2(2): Instructieformaten adressering assembleertalen (zelfstudie !). Instructieformaten: opcode + adres(sen). Adressen bepalen waar gegevens staan/komen De op eratie- code geeft aan welke instructie het is

tate
Télécharger la présentation

5 JJ2 0: Computerarchitectuur 2M200: Inleiding Computersystemen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 5JJ20: Computerarchitectuur2M200: Inleiding Computersystemen Sessie 2(2):Instructieformatenadresseringassembleertalen (zelfstudie !)

  2. Instructieformaten: opcode + adres(sen) • Adressen bepalen waar gegevens staan/komen • De operatie-code geeft aan welke instructie het is • Eigenlijke bewerking + aantal en codering adressen • Aantal adressen belangrijk criterium • 0: gegevens op vaste plaats (“implied”, “stack”) • 1: één vast register nodig ACCU  ACCU + “a” • 2: veel flexibeler “a”  “a” + “b” • 3: superflexibel “a”  “b” + “c” • Meer adressen: complexere instructies en hardware !

  3. Instructielengte: afwegingen... • Vaste lengte: makkelijk ophalen en decoderen (?) • Aanpassen aan langste: verspilling geheugenruimte • Korter: woekeren met bits, eenvoudige instructies • Variabele lengte: efficienter • Instructie en adressen nemen plaats in die nodig is • Veel complexer ophalen en decoderen

  4. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Opcode Adres 1 Adres 2 Adres 3 Expanderende opcodes • Vast aantal bits variabel gebruiken, bijvoorbeeld • Opcode = 0..13: alle drie adressen bruikbaar • Opcode = 14: adres 1 wordt ‘opcode’ + 2 adressen (2,3) • Opcode = 15: adres 1+2 worden ‘opcode’ + 1 adres (3) • Vele verdelingen mogelijk, soms zeer complex ! • Optimale verdeling: Huffman algoritme (niet bij stof)

  5. Instructieformaten practicumprocessor • Variabele lengte: 1, 2 of 3 bytes • Opcode altijd in eerste byte • Kiezen tussen R0..R7 gebruikt 3 bits in eerste byte • Kiezen tussen R0 / R1 gebruikt 1 bit in eerste byte • Bij twee instructies 3 bits in eerste byte voor adres • Ongeveer 112 verschillende instructies • Meeste instructies 0, 1 of 2 adressen • 2 instructies klassificeerbaar als 3-adres instructies

  6. Adresseringsmodi • (Resultaat) waarden: “Operanden” • Opgesplitst in “sources” en “destinations”: “bronnen” en “bestemmingen” • Direct adres in geheugen specificeren is duur • Veel bits nodig (daarom niet altijd 3 adres machine !) • Bovendien weinig flexibel… • Ingewikkelde adresmodi voor hogere talen • Veel modi mogelijk, maar geeft complexe processor

  7. Assembleertalen • Hoofdstuk 7 (t/m 7.1.4) van boek: zelfstudie ! • Assembleertaal:Taal om met symbolische namen de instructies en adressen van een processor te beschrijven. • Laagste niveau bruikbare programmeertaal • Per tekstregel één instructie • “Assembler” vertaalt assembleertaal in bitcodes • “Pseudo-instructies” besturen assembler zelf • Practicumprocessor: ASM504 assembler

  8. De ASM504 assembler • Zo simpel mogelijk (maar wel snel...) • Geen “macro’s”, geen “linker” • Wijze van opschrijven: Intel Pentium vorm • Siemens SAB-C504 afgeleid van Intel 8051 processor • Destination volgt direct na opcode naam ; commentaar volgt na een puntkommaLus: ; dit is een ‘label’ ADD A,Temp ; tel waarde in Temp op bij A ORG 00FFh ; ‘ORiGin’ forceert adres van:Temp: DS 1 ; ‘Define Storage’, 1 byte

  9. “Immediate” adressering • Nederlandse term “onmiddelijk” (bah !) • GEEN ECHT ADRES: waarde in instructie zelf • Waarde moet dus een constante zijn ! • Aantal bits varieert afhankelijk van destination • Aangeven in assembleertaal met getal of berekening die constante waarde geeft • Bij practicumprocessor een # ervoor zetten: ADD A,#41 ; tel constante 41 bij A register op

  10. Directe adressering • Volledig adres van operand staat in instructie • Adres is dus constant ! • Waarde van operand is variabel, de plaats is vast • Hogere programmeertalen: “globale variabelen” • Assembleertaal notatievorm varieert nogal… • Bij practicumprocessor: getal of berekening die constant getal geeft zonder een # ervoor: ADD A,41 ; tel waarde in adres 41 op bij A ; adressen 0 ..127: intern geheugen ; adressen 128..255: SFR’s

  11. Register adressering • Operand in register met symbolische naam • Registers binnen CPU: snel, daarom veel gebruikt • “load/store”: berekeningen alleen tussen registers • Beschikbare registers gegeven in ISA • Beperkingen in gebruik van registers ! • Bij practicumprocessor belangrijk: A en R0..R7 MOV R1,A ; “MOVe” copieer waarde in A naar R1MOV R2,R3 ; dit is NIET toegestaan !

  12. Registerindirecte adressering • Operand in geheugen, adres hiervan in register • Lekker flexibel: adres niet vast, kan berekend worden • Weinig bits om adres in geheugen te specificeren ! • Soms enige mogelijkheid om geheugen te adresseren • Assembleertaal notatievormen verschillen… • Meestal geheugenadressering met haken: (R1) • Bij practicumprocessor met @ (‘at’): ADD A,@R1 ; tel waarde in intern geheugen (op ; adres in R1) op bij A register

  13. Geïndexeerde adressering • Operand in geheugen op adres aangewezen met de som van de waarde in een register en een constante (“offset”) waarde • Aantal bits in offset varieert met bedoeling • Weinig bits: register is hoofdbepaler van adres “struct” in C, “record” in Pascal • Veel bits: register varieert (“indexeerd”) het adres “array” in zowel C als Pascal

  14. Basisgeïndexeerde adressering • Operand in geheugen op adres aangewezen met de som van TWEE registers en (eventueel) een constante offset waarde • Het eerste register bevat (variabel) “basis” adres • Het tweede register varieert (“indexeerd”) dit adres • De offset kan het adres nog (een beetje) verschuiven • De practicumprocessor kan dit, zonder offset: MOVC A,@A+DPTR ; “MOVe Code”: laad A register ; met waarde in programmageheugen ; op adres dat som is van A+DPTR

  15. Het kan NOG gekker (niet bij stof) • “Auto increment” en “auto decrement”: • Waarde in index register automatisch verhogen of verlagen bij iedere lees/schrijf actie • “post”: NA de actie, “pre”: VOOR de actie • “Scaled index”: • Waarde in index register wordt niet direct gebruikt, maar eerst vermenigvuldigd met een constante • Voor directe ondersteuning van “arrays”

  16. Stack (“stapel”) adressering (1) • De stack is een “Last-In-First-Out” geheugen • “push” operatie plaatst nieuwe waarde in stackbovenop alle al aanwezige waarden • “pop” operatie verwijderd “bovenste” waarde uit stackdat is dus de laatst ge“push”te waarde ! • De bovenste waarde op de stack is de “top of stack” • Implementatie meestal in normaal geheugen • Met “stack pointer” (“SP”) register wijzend naar de top • Practicumprocessor: SP adresseert laatst ge“push”te waarde, stack “groeit” naar hogere adressen

  17. Stack (“stapel”) adressering (2) • Stack is handig • Uitstekend geschikt voor tijdelijke opslag • Precies adres niet nodig en toch weten waar alles is • Stack is belangrijk • Centrale rol bij uitvoeren hogere programmeertalen • Bij sommige machines vervanging van registers Het boek gaat hier nog veel verder op in: zelfstudie.Het postfix-infix conversie-algoritme hoort niet bij de stof !

  18. Adresseermodi voor “sprongen” • PC wijst steeds naar volgende instructie • Laden PC met nieuwe waarde: sprong in programma • “PC-relatief” is geïndexeerd met PC als register • Practicumprocessor als voorbeeld • PC-relatief, direct en basisgeïndexeerd (A+DPTR) • NIEUW: “paged” sprong (“AJMP”) • Geheugen verdeeld in 2 kilobyte grote blokken (“pages”) • Alleen springen binnen blok waar PC al in adresseert • Slechts 11 bits nodig voor adres (2 byte instructie)

More Related