2004_week3_2

advertisement
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
Download