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