1/1/ / faculty of Electrical Engineering eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 3(2): Instructietypen (2)
1/1/ / faculty of Electrical Engineering 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) 01 (1) 10 (2) 11 (3) 2’s complement 10 (-2) 11 (-1) 00 (0) 01 (+1) Kleinste Grootste Laagste Hoogste “Above” / “Below” “Less than” / “Greater than”
1/1/ / faculty of Electrical Engineering 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 !
1/1/ / faculty of Electrical Engineering 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
1/1/ / faculty of Electrical Engineering eindhoven university of technology Ook onvoorwaardelijke sprongen ! Pascal: IFA = 5 THENA := 0 ELSEA := B; C: if (A == 5) A = 0; elseA = B; If:CMPA,5 JUMPNotEQ,Else Then:MOVA,0 JUMPAlways,Next Else:MOVA,B Next:...
1/1/ / faculty of Electrical Engineering 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 ! If:CJNEA,#5,Else
1/1/ / faculty of Electrical Engineering eindhoven university of technology Andere methoden conditieafhandeling •“Skippen”: sla volgende instructie over –Standaardvolgorde instructie ophalen blijft intact •“Conditionele executie”: sla deze instructie over CMPA,5; IF SKIPNotEQ; THEN MOVA,0 SKIPEQ; ELSE MOVA,B (ALWAYS) CMP A,5 ; IF (EQ) MOV A,0 ; THEN (NotEQ) MOV A,B ; ELSE IA-64 van Intel !
1/1/ / faculty of Electrical Engineering 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
1/1/ / faculty of Electrical Engineering 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 2 N herhalingen ! •Practicumprocessor: DJNZ instructies –Decrement and Jump if Not Zero –Teller: 8 bit register of direct adres in geheugen/SFR
1/1/ / faculty of Electrical Engineering 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”
1/1/ / faculty of Electrical Engineering eindhoven university of technology Aanroep (call) en terugkeer (return) Call “A” Call “B” Return “A”: Return “B”: Terugkeer-adressen verschillend voor dezelfde “Return” !
1/1/ / faculty of Electrical Engineering 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
1/1/ / faculty of Electrical Engineering eindhoven university of technology Recursieve procedures met stack Call “A” Return “A”: Adres X Adres Y Adres Z Stack 1: X 1 2 2: X Z 3 3: X 4: (leeg) 4 Moet soms NIET uitgevoerd worden 5: Y 6: Y Z 7: Y Z Z 8: Y Z Z Z...
1/1/ / faculty of Electrical Engineering 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”
1/1/ / faculty of Electrical Engineering eindhoven university of technology 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 poorten met speciale IN/OUT instructies om te lezen/schrijven •Practicumprocessor: directe adressen
1/1/ / faculty of Electrical Engineering 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
1/1/ / faculty of Electrical Engineering 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