160 likes | 270 Views
5 JJ2 0: Computerarchitectuur 2M200: Inleiding Computersystemen. Sessie 3(1): Instructietypen (1). Instructietypen: “standaard” indeling. Wij hanteren vandaag die van het boek Verplaatsen van gegevens “Dyadische” operaties (twee source operanden) “Monadische” operaties (een source operand)
E N D
5JJ20: Computerarchitectuur2M200: Inleiding Computersystemen Sessie 3(1): Instructietypen (1)
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 !
Focus op practicumprocessor • Precies kennen van een bepaalde instructie-setis geen doel van dit vak ! • Wel in assembleertaal kunnen programmeren… • Practicumprocessor heeft van alle typen instructies goede voorbeelden • Heeft ook onverwachtte (maar bruikbare) instructies • Kennis bruikbaar tijdens practicumen ook bij latere projecten met practicumprocessor
Verplaatsen (“move”) van gegevens • Verkeerde term: je maakt een kopiewant 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)
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...
< 128: intern geheugen> 127: SFR (incl. ACC) Intern @R0/R1 Programma @A+DPTR Stack Programma @A+PC PUSHPOP Direct Extern @DPTR Register R0..R7 Immediate Extern @R0/R1 In interngeheugen ! Waarde 0: “CLR A” Niet gebruiken ! Practicumprocessor byte MOVe’s MOVC A MOVX
< 128: intern geheugen bytes 32..47> 127: SFR’s met adres deelbaar door 8 (incl. ACC, B en PSW) Immediate16 bits Immediate:“CLR” 0“SETB” 1 Practicumprocessor andere MOVe’s Directbit C(arry) DPTR CLR C ; Carry <- 0bSETB ACC.6 ; bit 6 van A ; <- 1b
Iets speciaals: de “exchange” • Twee MOVe’s in een: verwisseling van plaats ! • Normaal 3 stappen en extra geheugen nodig • 1: hulp “A” • 2: “A” “B” • 3: “B” hulp (nu “A” verwisseld met “B”) • De practicumprocessor kan dit… • Met complete bytes: “XCH” • Met 4 bits tegelijk: “XCHD” en “SWAP”
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)
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 sourcesresultaat 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 ?
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
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-NOTlaatste twee: “X AND (NOT Y)”, “X OR (NOT Y)” • Meestal op hele woorden / bytes tegelijk • Gelijke operaties op parallel genummerde bits
010010101 C 000001111 D (“masker”) 011010000 A AND B 000000101 C AND D Deze bitskomen uit A Deze bitskomen uit C 011010000 000000101 011010101 (A AND B) OR (C AND D) Uit A Uit C Maskeren en combineren (verpakken) AND OR 011011011 A 111110000 B (“masker”)
Practicumprocessor: ANL, ORL en XRL • “ANd Logical”, “ORLogical” en “XoRLogical” • 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
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 nullen1101 (13) 0110 (6) • Delen in 2’s complement: met ‘tekenuitbreiding’schuift kopieën van meest linkse bit naar binnen0110 (+6) 0011 (+3)1100 (-4) 1110 (-2) • Aantal bits soms variabel: niet echt monadisch
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”