2004_week3_1

advertisement
1/
2IC20:
eindhoven university of technology
Computersystemen
Week 3:
Instructietypen (1)
/
faculty of Computer Science
1/
eindhoven university of technology
Instructietypen: “standaard” indeling
Wij hanteren vandaag die van het boek
 Verplaatsen van gegevens
 “Dyadische” operaties (twee source operanden)
 “Monadische” operaties (een source operand)
 Vergelijkingen en (voorwaardelijke) sprongen
 Aanroep van procedures (subroutines/methods)
 Lusbesturing (herhalingen in een programma)
 Invoer en uitvoer
/
Vele andere indelingen mogelijk !
faculty of Computer Science
2
1/
eindhoven university of technology
Focus op practicumprocessor
 Precies kennen van een bepaalde instructie-set
is geen doel van dit vak !
 Wel in assembleertaal kunnen programmeren…
 Practicumprocessor heeft van alle typen instructies goede
voorbeelden
 Heeft ook onverwachte (maar bruikbare) instructies
 Kennis bruikbaar tijdens practicum
en ook bij latere projecten met practicumprocessor
/
faculty of Computer Science
3
1/
eindhoven university of technology
Verplaatsen (“move”) van gegevens
 Verkeerde term: je maakt een kopie
want de oorspronkelijke waarde verdwijnt niet
 Op gegevens worden geen bewerkingen gedaan
 Kopie dezelfde waarde als origineel
 Meeste processoren veranderen geen statusvlaggen
 Practicumprocessor: P-vlag gekoppeld aan A register
 Hoeveelheid verplaatste gegevens varieert
 Soms maar één keuze (byte, woord), meestal meer
 Soms variabel (extreem: 1 bit..volledig geheugen)
/
faculty of Computer Science
4
1/
eindhoven university of technology
Verplaatsen: classificaties en namen
Classificatie van/naar geheugen/register
 Van register naar register:
“MOVE”
 Van geheugen naar register:
“LOAD”
 Van register naar geheugen:
“STORE”
 Van geheugen naar geheugen ook mogelijk !
In “load/store” machines zijn deze operaties
bijzonder en hebben ze een aparte naam
Meeste machines gooien alles op een hoop...
/
faculty of Computer Science
5
1/
eindhoven university of technology
Practicumprocessor byte MOVe’s
Intern
@R0/R1
< 128: intern geheugen
> 127: SFR (incl. ACC)
Stack
PUSH
POP
MOVC
Direct
A
MOVX
Immediate
/
In intern
geheugen !
Programma
@A+DPTR
Register
R0..R7
Waarde 0: “CLR A”
faculty of Computer Science
Programma
@A+PC
Extern
@DPTR
Extern
@R0/R1
Niet gebruiken !
6
1/
eindhoven university of technology
Practicumprocessor andere MOVe’s
< 128: intern geheugen bytes 32..47
> 127: SFR’s met adres deelbaar door 8
(incl. ACC, B en PSW)
C(arry)
/
Direct
bit
Immediate:
“CLR”  0
“SETB”  1
Immediate
16 bits
DPTR
CLR C
; Carry <- 0b
SETB ACC.6 ; bit 6 van A
;
<- 1b
faculty of Computer Science
7
1/
eindhoven university of technology
Iets speciaals: de “exchange”
 Twee MOVe’s in een: verwisseling van plaats !
 Normaal 3 stappen en extra geheugen nodig
 1:
 2:
 3:
hulp  “A”
“A”  “B”
“B”  hulp (nu “A” verwisseld met “B”)
 De practicumprocessor kan dit…
 Met complete bytes: “XCH”
 Met 4 bits tegelijk: “XCHD” en “SWAP”
/
faculty of Computer Science
8
1/
eindhoven university of technology
Dyadische rekenkundige operaties
 Dyadisch = met TWEE source operanden
 Optellen en aftrekken: “ADD” en “SUB”
 Met “onthouden” / “lenen”: “ADDC” en “SUBB”
 Zonder teken en two’s complement: geen verschil !
…verschil zit ‘m in testen van Carry / oVerflow
 Practicumprocessor kent geen “SUB” 
 Eerst Carry op 0 (“CLR C”), dan “SUBB” gebruiken
 Kan A  A + (immediate / R0..R7 / direct / @R0/1)
/
faculty of Computer Science
9
1/
eindhoven university of technology
Vermenigvuldigen en delen (MUL /DIV)
 Niet altijd beschikbaar !
 Groot verschil zonder teken en 2’s complement
 Problemen met resultaten bij gehele getallen
 MUL: resultaat breder (in bits) dan sources
resultaat breedte = som van source breedten
 DIV: er zijn TWEE resultaten - deling en rest
 Nog meer problemen bij delen
 Sources niet even breed voor grootste bereik ?
 Wat te doen bij deling door nul of overflow ?
/
faculty of Computer Science
10
1/
eindhoven university of technology
Bij practicumprocessor
 Geen “zero” en “negatief” (teken) vlaggen !
 “A = 0” direct testbaar, “ACC.7” test teken-bit van A
 DIV en MUL met 8 bits positieve getallen
 MUL vermenigvuldigt A met B
 Resultaat bits 0..7 komen in A, bits 8..15 komen in B
 Overflow wordt “resultaat B  0”, Carry altijd 0
 DIV deelt A door B
/
 Deelresultaat komt in A, rest van deling komt in B
 Overflow  “oorspronkelijke B = 0”, Carry  0
faculty of Computer Science
11
1/
eindhoven university of technology
Dyadische logische operaties
 16 verschillende twee-operand Boole operaties !
bevatten ook NOT: geen twee-operand operatie
 Vrijwel altijd twee aanwezig: AND, OR
 Meestal ook XOR (eXclusive OR)
 Soms NAND, NOR, XNOR, AND-NOT, OR-NOT
laatste twee: “X AND (NOT Y)”, “X OR (NOT Y)”
 Meestal op hele woorden / bytes tegelijk
 Gelijke operaties op parallel genummerde bits
/
faculty of Computer Science
12
1/
eindhoven university of technology
Maskeren en combineren (verpakken)
AND
OR
011011011 A
111110000 B (“masker”)
011010000 A AND B
Deze bits
komen uit A
/
010010101 C
000001111 D (“masker”)
000000101 C AND D
Deze bits
komen uit C
011010000
000000101
011010101 (A AND B) OR (C AND D)
Uit A
Uit C
faculty of Computer Science
13
1/
eindhoven university of technology
Practicumprocessor: ANL, ORL en XRL
 “ANd Logical”, “OR Logical” en “XoR Logical”
 Naar A, met immediate, direct, R0..R7, @R0/R1
 Ook naar direct, met A of immediate !
 Met één bit tegelijk: bijzonder…
 Gebruikt C(arry) als source en resultaat
 Andere source is direct geadresseerd bit
 AND, OR, AND-NOT en OR-NOT operaties
/
ANL C,bit
ORL C,bit
ANL C,/bit
ORL C,/bit
faculty of Computer Science
14
1/
eindhoven university of technology
Monadische (één source) operaties
 Rekenkundig: NEG (0-A), INC (A+1), DEC (A-1)
 Met bits schuiven is delen / vermenigvuldigen
 Altijd met factor 2N (en afrondingsfouten !)
 Delen zonder teken: naar rechts schuiven met nullen
1101 (13)  0110 (6)
 Delen in 2’s complement: met ‘tekenuitbreiding’
schuift kopieën van meest linkse bit naar binnen
0110 (+6)  0011 (+3)
1100 (-4)  1110 (-2)
 Aantal bits soms variabel: niet echt monadisch
/
faculty of Computer Science
15
1/
eindhoven university of technology
Nog meer monadische operaties
 “Roteren” = schuiven waarbij uitgeschoven bits
terugkomen aan de andere kant van het woord
 Hierbij gaan geen bits verloren !
 Handig om bits één voor één te testen
 Bij roteren en schuiven soms Carry vlag gebruikt
en/of veranderd
 Logische operatie: NOT
 Practicum processor noemt deze “ComPLement”
/
faculty of Computer Science
16
Download