170 likes | 285 Views
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.
E N D
5JJ20: Computerarchitectuur2M200: 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 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”
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 !
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
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: ...
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
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 !
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
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
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”
“A”: Call “A” “B”: Call “B” Call “A” Return Return Terugkeer-adressen verschillend voor dezelfde “Return” ! Aanroep (call) en terugkeer (return)
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
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 ...
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”
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
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
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