1/ 2IC20: eindhoven university of technology Computersystemen Week 3: Instructietypen (2) / faculty of Computer Science 1/ eindhoven university of technology Vergelijkingen Waarden moeten vergeleken kunnen worden gelijk, niet gelijk, groter, kleiner, kleiner of gelijk….. Fors verschil: zonder teken / 2’s complement Zonder teken 00 (0) Laagste 01 (1) 10 (2) 11 (3) Hoogste / “Above” / “Below” 2’s complement 10 (-2) Kleinste 11 (-1) 00 (0) 01 (+1) Grootste “Less than” / “Greater than” faculty of Computer Science 2 1/ eindhoven university of technology De “CoMPare” (CMP) operatie Aftrekken van te vergelijken waarden zonder het resultaat op te slaan Wel worden Carry, Overflow, Negative, Zero vlaggen gezet als bij normale “SUB”-tract / Bij aftrekken A - B: A gelijk aan B: Zero = 1 A lager dan B (zonder teken): Carry = 1 A kleiner dan B (2’s compl.): Negative XOR Overflow = 1 Overflow is hier geen fout ! faculty of Computer Science 3 1/ eindhoven university of technology 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 faculty of Computer Science 4 1/ eindhoven university of technology Ook onvoorwaardelijke sprongen ! Pascal: IF A = 5 THEN A := 0 ELSE A := B; C: if (A == 5) A = 0; else A = B; / If: CMP JUMP Then: MOV JUMP Else: MOV Next: ... A,#5 NotEQ,Else A,#0 Always,Next A,B faculty of Computer Science 5 1/ eindhoven university of technology 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 ! / faculty of Computer Science If: CJNE A,#5,Else 6 1/ eindhoven university of technology Andere methoden conditieafhandeling “Skippen”: sla volgende instructie over Standaardvolgorde instructie ophalen blijft intact “Conditionele executie”: sla deze instructie over CMP SKIP MOV SKIP MOV / A,#5 ; IF NotEQ ; THEN A,#0 EQ ; ELSE A,B (ALWAYS) CMP A,#5 ; IF (EQ) MOV A,#0 ; THEN (NotEQ) MOV A,B ; ELSE IA-64 van Intel ! faculty of Computer Science 7 1/ eindhoven university of technology 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 / faculty of Computer Science 8 1/ eindhoven university of technology 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 / faculty of Computer Science 9 1/ eindhoven university of technology 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” faculty of Computer Science 10 1/ eindhoven university of technology Aanroep (call) en terugkeer (return) Call “A” “A”: “B”: Call “B” Call “A” / faculty of Computer Science Return Return Terugkeer-adressen verschillend voor dezelfde “Return” ! 11 1/ eindhoven university of technology 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 faculty of Computer Science 12 1/ eindhoven university of technology Recursieve procedures met stack Call “A” Adres X Call “A” Adres Y / Stack “A”: 1: X 1 2: X Z 2 3: X Call “A” 4: (leeg) 4 Adres Z 5: Y 3 6: Y Z Return 7: Y Z Z 8: Y Z Z Moet soms NIET Z ... uitgevoerd worden faculty of Computer Science 13 1/ eindhoven university of technology Invoer en uitvoer: de basis Invoer: waarde uit buitenwereld via bus lezen Neemt een “monster” van die waarde alleen waarde tijdens het lezen telt Uitvoer: waarde via bus naar buitenwereld Moet vastgehouden worden in register waarde alleen tijdens schrijven stabiel: te kort ! Erg handig om dit register ook te kunnen lezen kun je laatst geschreven waarde veranderen Monsternemer en register heten “poorten” / faculty of Computer Science 14 1/ eindhoven university of technology Geprogrammeerde invoer / uitvoer Besturing poorten direct door programma Veranderen van invoerwaarden 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 poorten met speciale IN/OUT instructies om te lezen/schrijven Practicumprocessor: directe adressen 128..255 / faculty of Computer Science 15 1/ eindhoven university of technology 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 / faculty of Computer Science 16 1/ eindhoven university of technology 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 / faculty of Computer Science 17