1 / 17

5 JJ2 0: Computerarchitectuur 2M200: Inleiding Computersystemen

5 JJ2 0: Computerarchitectuur 2M200: Inleiding Computersystemen. Sessie 3(2): Instructietypen (2). Vergelijkingen. Waarden moeten vergeleken kunnen worden gelijk, niet gelijk, groter, kleiner, kleiner of gelijk….. Fors verschil: zonder teken / 2’s complement.

mahon
Download Presentation

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 3(2): Instructietypen (2)

  2. Vergelijkingen • Waarden moeten vergeleken kunnen worden • gelijk, niet gelijk, groter, kleiner, kleiner of gelijk….. • Fors verschil: zonder teken / 2’s complement Zonder teken00 (0)01 (1)10 (2)11 (3) 2’s complement10 (-2)11 (-1)00 (0)01 (+1) LaagsteHoogste KleinsteGrootste “Above” / “Below” “Less than” / “Greater than”

  3. De “CoMPare” (CMP) operatie • Aftrekken van te vergelijken waardenzonder het resultaat op te slaan • Wel worden Carry, Overflow, Negative, Zerovlaggen gezet als bij normale “SUB”-tract • Bij aftrekken A - B:A gelijk aan B: Zero = 1A lager dan B (zonder teken): Carry = 1A kleiner dan B (2’s compl.): Negative XOR Overflow = 1 • Overflow is hier geen fout !

  4. Voorwaardelijke sprongen • Instructie test “iets” met booleaans resultaat • Resultaat niet waar: ga door met volgende instructie • Resultaat waar: laad PC met gegeven waarde • Basis voor het nemen van beslissingen in programma ! • Dat “iets” kan van alles zijn • Meestal (combinaties van) status vlaggen • Uitkomst van “ingebouwde” vergelijking • Directe test van register / geheugen waarden • Directe test van register / geheugen bit

  5. Ook onvoorwaardelijke sprongen ! Pascal:IF A = 5THEN A := 0ELSE A := B; If: CMP A,5 JUMP NotEQ,Else Then: MOV A,0 JUMP Always,Next Else: MOV A,B C:if (A == 5) A = 0;else A = B; Next: ...

  6. Repertoire van de practicumprocessor • Onvoorwaardelijk: SJMP, AJMP, LJMP • Verschillende sprong- “bereiken” • Assembler rekent en controleert! • Voorwaardelijk: Carry = 1, direct bit = 1, A = 0 • En de omgekeerde tests (NOT …) • Alle voorwaardelijke sprongen zijn PC-relatief • Vergelijken en springen in een CJNE instructie • Compare and Jump if Not Equal, past Carry aan ! If: CJNE A,#5,Else

  7. Andere methoden conditieafhandeling • “Skippen”: sla volgende instructie over • Standaardvolgorde instructie ophalen blijft intact • “Conditionele executie”: sla deze instructie over CMP A,5 ; IFSKIP NotEQ ; THENMOV A,0SKIP EQ ; ELSEMOV A,B (ALWAYS) CMP A,5 ; IF(EQ) MOV A,0 ; THEN(NotEQ) MOV A,B ; ELSE IA-64 van Intel !

  8. Programma-lus besturing • Lussen om herhalingen te introduceren • “Blijf … herhalen tot aan voorwaarde voldaan is” test aan eind en spring conditioneel naar begin terug • “Zolang aan voorwaarde voldaan is, herhaal …”test aan begin, spring aan eind terug • Deze met normale (on) conditionele sprongen ! • “Afgetelde” lus met bekend aantal herhalingen • Teller in register / geheugen initialiseren • Daarna verhogen / verlagen tot eindwaarde

  9. Afgetelde lussen (vervolg) • Oppassen met berekende begin / eind waarden • Omhoog of omlaag tellen ? • Begin = eind: instructies in lus niet uitvoeren ? • Vrij standaard: omlaag tellen tot nul • Teller in register of geheugen (N bits breed) • Beginwaarde nul geeft meestal 2N herhalingen ! • Practicumprocessor: DJNZ instructies • Decrement and Jump if Not Zero • Teller: 8 bit register of direct adres in geheugen/SFR

  10. Procedure / Subroutine / Method • Drie namen voor hetzelfde:een stuk programma (= reeks instructies) dat vanaf verschillende plaatsen in het programma kan worden aangeroepen om een bepaalde functie uit te voeren • Gebruik geeft vele voordelen • Eén keer iets verzinnen en in geheugen zetten • Efficient en minder kans op fouten • Basis van “gestructureerd programmeren”

  11. “A”: Call “A” “B”: Call “B” Call “A” Return Return Terugkeer-adressen verschillend voor dezelfde “Return” ! Aanroep (call) en terugkeer (return)

  12. Onthouden van terugkeeradres • Adres van instructie na de “CALL” opslaan • Bij “RETURN” deze waarde in PC zetten ! • Waar laat je dit adres ? • Eén vast register / geheugenadres: onhandig • Kan maar één procedure tegelijk aktief zijn • Per procedure één register / geheugenadres: beter • Een procedure mag zichzelf niet aanroepen: “recursie” • Op de stack: super ! • Een CALL push’t het terugkeeradres op de stack • Een RETURN pop’t automatisch het goede adres

  13. Stack “A”: 1: X Call “A” 1 2: X Z Adres X 2 3: X Call “A” 4: (leeg) 4 Adres Z 3 Call “A” Return Adres Y Moet soms NIETuitgevoerd worden Recursieve procedures met stack 5: Y6: Y Z7: Y Z Z8: Y Z Z Z ...

  14. Invoer en uitvoer: de basis • Invoer: waarde uit buitenwereld via bus lezen • Neemt een “monster” van die waardealleen waarde tijdens het lezen telt • Uitvoer: waarde via bus naar buitenwereld • Moet vastgehouden worden in registerwaarde alleen tijdens schrijven stabiel: te kort ! • Erg handig om dit register ook te kunnen lezenkun je laatst geschreven waarde veranderen • Monsternemer en register heten “poorten”

  15. Geprogrammeerde invoer / uitvoer • Besturing poorten direct door programma • Veranderen van invoer waarden moet bijgehouden worden: zeer regelmatig lezen dus (“Busy waiting”) • Voor adressering poorten meerdere methoden • Poort heeft adres in geheugen: “memory mapped” • Iedere poort krijgt eigen IN / OUT instructie • Aparte (kleine) adresruimte voor poortenmet speciale IN/OUT instructies om te lezen/schrijven • Practicumprocessor: directe adressen 128..255

  16. Invoer / uitvoer met “interrupts” • Interrupt: automatisch onderbreken van lopend programma bij activiteit in buitenwereld • Buitenwereld hardware geeft één bit aan processor • Processor hardware test dit bit na uitvoeren iedere instructie, vóór het ophalen van de volgende • Bij indicatie van activiteit automatische aanroep van een procedure op een vast adres: “interrupt routine” • Bij RETURN van interrupt routine doorgaan met volgende instructie (alsof er niets gebeurd is) • Tijdens interrupt routine geprogrammeerde I/O

  17. I /O met “Direct Memory Access” (DMA) • Interrupts gebruiken processor-tijd: traag ! • Geef device controller zelf toegang tot geheugen • Alleen voor eigenlijke lees / schrijf acties processor van bus “afduwen” is veel sneller: “cycle stealing” • Controller geeft pas interrupt als ‘ie klaar is met zijn werk of hulp van de processor nodig heeft • Aparte DMA controller “helpt” device controller • Tellers en adres-registers voor blokken gegevens • Soms speciaal type processor met eigen programma

More Related