Grundläggande datorteknik - exempelsamling Grundläggande datorteknik - exempelsamling Institutionen för Data och Informationsteknik Chalmers tekniska högskola Göteborg VT-2014 1 Grundläggande datorteknik - exempelsamling 1 Talsystem och binära koder 1.1 Utför följande talomvandlingar: a) b) c) d) e) 1.2 Utför följande talomvandlingar: a) b) c) d) 1.3 CHALMERS tekniska HOGSKOLA Skriv följande tal som NBCD-kod a) b) 1.7 (3F)16 (49)10 (101011)2 Skriv följande ASCII-kodade textsträngar som en sekvens av hexadecimala kodord. a) b) c) 1.6 (110100.1011100)2 (110110.1011110)2 (110110.1011101)2 (110110.1011100)2 (110010. 1011100)2 Ange ASCII-tecknet för följande tal: a) b) c) 1.5 (93)10 = (?)2 (93)10 = (?)NBCD (93)10 = (?)16 (93)10 = (?)EXCESS-3 Vilket, av följande alternativ är talet (54,72)10 på naturlig binär form avrundat till 7 bråksiffror . a) b) c) d) e) 1.4 (8)10 = (?)2 (8)10 = (?)16 (8)10 = (?)NBCD (8)10 = (?)EXCESS-3 (8)10 = (?)GRAY(4) (528,31)10 (407,96)10 Antag 7 bitars binära tal (naturlig binärkod), där den mest signifikanta positionen är en paritetsbit. Ange de binära talen med jämn paritet (bitmönstren) för följande tal. a) b) c) (1100)2 (32)10 (16)16 2 Grundläggande datorteknik - exempelsamling 1.8 Antag 7 bitars binära tal (naturlig binärkod), där den mest signifikanta positionen är en paritetsbit. Ange de binära talen med udda paritet (bitmönstren) för följande tal. a) b) c) 1.9 (1100)2 (32)10 (16)16 Omvandla följande tal (naturlig binär kod) till decimal form: a) b) c) d) e) f) (101011)2 (1100111)2 (111100)2 (101.011)2 (.111)2 (1000.01)2 1.10 Omvandla följande hexadecimala tal till decimal form: a) b) c) d) e) f) (AB)16 (11)16 (80)16 (C.4)16 (0.68)16 (B3.D4)16 1.11 Omvandla följande tal till naturlig binär kod. Bråken avkortas till 6 st. bråksiffror. a) b) c) d) e) f) g) h) (45)10 (33)10 (87,65)10 (122,18)10 (45)16 (33)16 (4.8)16 (10.6)16 1.12 Omvandla följande tal till hexadecimal form. Bråken avkortas till 2 st. bråksiffror. a) b) c) d) e) f) g) h) (255)10 (330)10 (19,37)10 (132,43)10 (1111110)2 (100100001010)2 (1111.1111)2 (1010.0011)2 1.13 En axels vridningsvinkel [0-359] ska kodas med Gray-kod. Hur många bitar måste kodorden minst ha för att ge upplösningen: a) b) 1 2 3 Grundläggande datorteknik - exempelsamling 2 Switchnätalgebra 2.1 Åskådliggör följande booleska uttryck med hjälp av grindsymboler (NOT, AND, OR): a) b) c) 2.2 f ( x, y, z ) xy xz f ( x, y, z, e) e( x y z) f ( x, y) x y xy Ange det booleska uttrycket för följande logiknät: a) x y & y 1 ≥1 & z b) c) d) 2.3 f(x,y,z) x y ≥1 z 1 x y z & x y z ≥1 ≥1 f(x,y,z) ≥1 f(x,y,z) & f(x,y,z) Vilket (eller vilka) av följande booleska uttryck anger korrekt utsignalen f för nedanstående logiknät? a) b) c) d) f ( x, y, z ) x ( y z yz ) x( yz yz ) f ( x, y, z ) x( y z ) x ( y z ) f ( x, y, z ) x y z f ( x, y, z ) x y z 1 y z x 2.4 & =1 1 ≥1 & Antag att xy xy z och visa att xz xz y 4 f ( x, y, z ) Grundläggande datorteknik - exempelsamling 2.5 Avgör för vart och ett av följande fall om uttrycket är sant, dvs. om VL = HL: a) b) c) d) e) 2.6 2.7 ( x y)( x z) xz xy yz ( x y )( x z) xz xyz xyz ( x x y) 1 ( xx )( x x y y ) 0 xyz xyz xyz ( x x )( x y)( x z ) Bestäm A och B i följande logikkoppling: x y & A B & ≥1 Visa hur följande logikgrindar kan ersättas med enbart 2-ingångars NAND-grindar. a) 2.8 f ( x) x x 1 b) x y ≥1 f ( x, y) x y c) x y & f ( x, y) xy Visa hur följande logikgrindar kan ersättas med enbart 2-ingångars NOR-grindar. a) 2.9 f ( x, y) x y x y f ( x) x x 1 b) x y ≥1 f ( x, y) x y c) x y & f ( x, y) xy Realisera följande booleska funktioner med hjälp av 2-ingångars NAND-grindar. a) b) c) f ( x, y) x y f ( x, y, z ) x yz f ( x, y, z, w) ( x y) z yw 2.10 Realisera följande booleska funktioner med hjälp av 2-ingångars NOR-grindar. a) b) c) f ( x, y) x y f ( x, y, z) x yz f ( x, y, z, w) ( y w)( z x y) 5 Grundläggande datorteknik - exempelsamling 2.11 Skriv följande funktioner på disjunktiv normal form. Bestäm mintermerna med hjälp av funktionstabell och binär evaluering. a) b) c) d) f ( x, y, z ) xy xz f ( x, y, z ) ( x yz )( y z ) f ( x, y, z, w) xw yz f ( x, y, z, w) ( xy z w)( x w x z ) 2.12 Vilket av följande alternativ utgör den disjunktiva normalformen av den booleska funktionen: f ( x, y, z ) ( x y)( x z) ? a) b) c) d) e) xz xy yz x yz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz xyz 2.13 Vilket av följande alternativ utgör den disjunktiva normalformen av den booleska funktionen: f ( x, y, z, w) ( x y )(wz ) ? a) b) c) d) e) xyzw xyzw xyzw xyzw xyzw xyzw xyzw xyzw xyzw xyzw xyzw xyzw xyzw xyzw xyzw 2.14 Skriv följande funktioner på konjunktiv normal form. Bestäm maxtermerna med hjälp av funktionstabell och binär evaluering. a) b) c) d) f ( x, y, z) xy xz yz f ( x, y, z ) xy xz f ( x, y, z, w) x y z w yz f ( x, y, z, w) x yz w z w 2.15 Vilket av följande alternativ utgör den konjunktiva normalformen av den booleska funktionen: f ( x, y, z ) ( x y)( x z) ? a) f ( x, y, z) ( x y z )( x y z )( x y z)( x y z ) b) f ( x, y, z) ( x y z)( x y z )( x y z)( x y z) c) f ( x, y, z) ( x y z)( x y z )( x y z)( x y z ) d) f ( x, y, z ) ( x y z )( x y z)( x y z ) e) f ( x, y, z) ( x y z)( x y z )( x y z)( x y z) 6 Grundläggande datorteknik - exempelsamling 2.16 Tag fram en minimal disjunktiv form till var och en av funktionerna beskrivna av följande Karnaughdiagram: a) f yz 0 f b) 00 01 11 10 0 0 0 0 x 0 1 f 1 0 zw 00 01 11 10 00 0 0 0 0 01 0 1 1 0 10 0 1 0 0 1 1 0 1 1 0 zw 00 01 11 10 00 1 0 0 1 01 0 1 1 0 11 0 0 1 0 11 0 1 1 0 10 0 0 0 0 10 1 0 0 1 f zw f f) 00 01 11 10 00 0 0 0 0 01 0 0 0 0 zw 00 01 11 10 00 0 0 0 0 01 - 1 1 1 xy 11 1 1 1 1 11 0 0 1 0 10 - 1 1 - 10 0 0 0 0 f zw f h) 00 01 11 10 00 1 1 0 0 01 0 1 1 0 xy i) 11 xy xy g) 01 f d) xy e) 00 x 1 c) yz zw 00 01 11 10 00 1 0 1 0 01 0 1 0 1 xy 11 1 0 1 1 11 - 0 - 0 10 0 0 0 0 10 1 0 1 0 f zw f j) 00 01 11 10 00 1 0 0 1 01 - 0 1 0 xy zw 00 01 11 10 00 0 0 0 1 01 0 0 1 0 xy 11 - 0 0 1 11 0 1 0 0 10 1 0 1 0 10 1 0 0 0 7 Grundläggande datorteknik - exempelsamling 2.17 Tag fram en minimal konjunktiv form till var och en av funktionerna beskrivna av följande Karnaughdiagram: a) f yz 0 f b) 00 01 11 10 0 0 0 0 x 0 1 f 1 0 zw 00 01 11 10 00 0 0 0 0 01 0 1 1 0 10 0 1 0 0 1 1 0 1 1 0 zw 00 01 11 10 00 1 0 0 1 01 0 1 1 0 11 0 0 1 0 11 0 1 1 0 10 0 0 0 0 10 1 0 0 1 f zw f f) 00 01 11 10 00 0 0 0 0 01 0 0 0 0 zw 00 01 11 10 00 0 0 0 0 01 - 1 1 1 xy 11 1 1 1 1 11 0 0 1 0 10 - 1 1 - 10 0 0 0 0 f zw f h) 00 01 11 10 00 1 1 0 0 01 0 1 1 0 xy i) 11 xy xy g) 01 f d) xy e) 00 x 1 c) yz zw 00 01 11 10 00 1 0 1 0 01 0 1 0 1 xy 11 1 0 1 1 11 - 0 - 0 10 0 0 0 0 10 1 0 1 0 f zw f j) 00 01 11 10 00 1 0 0 1 01 - 0 1 0 xy zw 00 01 11 10 00 0 0 0 1 01 0 0 1 0 xy 11 - 0 0 1 11 0 1 0 0 10 1 0 1 0 10 1 0 0 0 8 Grundläggande datorteknik - exempelsamling 3 Aritmetik 3.1 Ange decimala motsvarigheten till följande 8-bitars tal givna på binärform. a) b) c) d) 3.2 Ange decimala motsvarigheten till följande 8-bitars tal givna på tvåkomplementsform. a) b) c) d) 3.3 X X X X X = = = = = 00100100 10111100 10000001 01001010 01001010 Y= Y= Y= Y= Y= 01001010 01000100 10000001 00110101 01001010 Utför (visa med papper och penna) följande additioner (R=X+Y) av 8-bitars tal givna på tvåkomplementsform. Ange X,Y och R på decimal form, ange dessutom hur flaggorna N, V och Z påverkas av operationerna. a) b) c) d) e) 3.6 -10 -38 -42 -56 Utför (visa med papper och penna) följande additioner (R=X+Y) av 8-bitars tal givna på binärform. Ange X,Y och R på decimal form, ange dessutom hur flaggorna C och Z påverkas av operationerna. a) b) c) d) e) 3.5 01010101 00111100 10101010 11000011 Ange följande decimala tal som 8-bitars binära tal på tvåkomplementsform. (Ledning, bestäm först binär form av talet utan minustecken, tvåkomplementera därefter) a) b) c) d) 3.4 01010101 00111100 10101010 11000011 X X X X X = = = = = 00100100 10111100 10000001 01001010 01001010 Y Y Y Y Y = = = = = 01001010 01000100 10000001 00110101 01001010 Utför (visa med papper och penna) följande subtraktioner (R=X-Y) av 8-bitars tal givna på binärform. Ange X,Y och R på decimal form, ange dessutom hur flaggorna C och Z påverkas av operationerna. Flaggan C förutsätts vid denna operation representera en lånesiffra (”borrow”) till den mest signifikanta positionen. a) b) c) d) X X X X = = = = 01111110 01010000 11011110 00100010 Y Y Y Y = = = = 01010000 01111110 00100010 11011110 9 Grundläggande datorteknik - exempelsamling 3.7 Utför (visa med papper och penna) följande subtraktioner (R=X-Y) av 8-bitars tal givna på binärform. Subtraktionerna ska utföras som addition av 2-komplement, dvs. R = X + (2~Y). Ange X,Y och R på decimal form, ange dessutom hur flaggorna C och Z påverkas av operationerna. Eftersom subtraktionen utförs som addition av 2-komplement förutsätts flaggan C vid denna operation representera inversen av en lånesiffra (”borrow”) till den mest signifikanta positionen. a) b) c) d) 3.8 X X X X = = = = 01111110 01010000 11011110 00100010 Y Y Y Y = = = = 01010000 01111110 00100010 11011110 Utför (visa med papper och penna) följande subtraktioner (R=X-Y) av 8-bitars tal givna på tvåkomplementsform. Subtraktionerna ska utföras som addition av 2-komplement, dvs. R = X + (2~Y). Ange X,Y och R på decimal form, ange dessutom hur flaggorna N, V och Z påverkas av operationerna. a) b) c) d) e) X X X X X = = = = = 01111110 01010000 11011110 00100010 01000000 Y Y Y Y Y = = = = = 01010000 01111110 00100010 11011110 10111111 10 Grundläggande datorteknik - exempelsamling 4 Kombinatoriska nät 4.1 Konstruera ett minimalt kombinatoriskt nät ”BCD-7”, som konverterar ett binärt kodat decimaltal till så kallad ”Sju-segment kod” enligt följande tabell: decimal siffra 0 1 2 3 4 5 6 7 8 9 4.2 A B C D a b c d e f g 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 - 1 1 1 1 1 0 0 1 1 1 - 1 1 0 1 1 1 1 1 1 1 - 1 0 1 1 0 1 1 0 1 0 - 1 0 1 0 0 0 1 0 1 0 - 1 0 0 0 1 1 1 0 1 1 - 0 0 1 1 1 1 1 0 1 1 - a A B C D f f b g ”BCD-7” e c d En sju-segments indikator har segmenten fördelade enligt följande figur: f e d a c g b a) Ställ upp en funktionstabell för utsignalerna a-g. b) Konstruera ett minimalt kombinatoriskt nät för översättning från de decimala siffrorna 0-9, från BCD-form till indikatorn. 4.3 Konstruera ett kombinatoriskt nät ”Increment” som adderar 1 till ett 4-bitars tal. Nätet består av 4 insignaler x3, x2, x1 och x0 samt 4 utsignaler u3, u2, u1 och u0. f x3, x2, x1 x0 ”Increment” u3, u2, u1 u0 Ställ upp funktionstabell för utsignalerna och realisera ett minimalt kombinatoriskt nät. Använd AND/OR-logik och förutsätt att även insignalernas inverser finns tillgängliga. 4.4 Ett kombinatoriskt nät ”Decrement”, som subtraherar 1 från ett 4-bitars tal (tvåkomplementsform) ska konstrueras. Nätet består av 4 insignaler x3, x2, x1 och x0 samt 4 utsignaler u3, u2, u1 och u0. f x3, x2, x1 x0 ”Decrement” u3, u2, u1 u0 Ställ upp funktionstabell för utsignalerna och realisera ett minimalt kombinatoriskt nät. Använd AND/OR-logik och förutsätt att även insignalernas inverser finns tillgängliga. 11 Grundläggande datorteknik - exempelsamling 4.5 Ett kombinatoriskt nät för olika typer av skiftoperationer av ett 8–bitars tal ska konstrueras. Nätets funktion beror av bitarna f1 och f0 enligt följande: f1 0 0 1 1 f0 0 1 0 1 funktion Ingen operation Skift vänster Skift höger Aritmetiskt skift höger Insignaler: x7,x6,x5,x4,x3,x2,x1,x0 SI Utsignaler: u7,u6,u5,u4,u3,u2,u1,u0 SO x3, x2, x1, x0,SI 8-bitars ord bit som skiftas in i vakant position 8-bitars skiftat ord bit som skiftats ut f ”1-bitshift” u3, u2, u1, u0, SO f1 f0 a) Ställ upp en funktionstabell där alla utsignaler uttrycks som insignaler eller konstanter. b) Realisera det kombinatoriska nätet med hjälp av ”1 av 4 väljare”. 4.6 Ett logiknät som skiftar bitar flera positioner under en klockcykel kallas för ”Barrel-shifter”. Konstruera ett sådant kombinatoriskt nät för högerskift. Du har tillgång till 4 st. ”1 av 4 väljare”. Insignaler: x3,x2,x1,x0 är det ord som skall skiftas. s1 , s0 selektor, anger antal skift enligt: 00 →1 skift 01 →2 skift 10 →3 skift 11 →4 skift Utsignaler: u3,u2,u1,u0 är resultatet, dvs. det skiftade ordet x3, x2, x1 x0 f ”Barrelshift” u3, u2, u1 u0 s1 s0 a) Konstruera ett kombinatoriskt nät som utför högerskift av ett 4-bitars ord. Mest signifikanta inskiftade bitar är alltid 0. Utskiftade bitar ignoreras. b) Konstruera ett kombinatoriskt nät som utför höger rotation av ett 4-bitars ord. Den minst signifikanta biten skiftas här till den mest signifikanta positionen. c) Konstruera ett kombinatoriskt nät som utför aritmetiskt högerskift av ett 4-bitars ord. Mest signifikanta inskiftade bitar är alltid 0. Utskiftade bitar ignoreras. 4.7 Funktionen . ska implementeras med hjälp av en 1 av 2 väljare. Detta kan göras på tre olika sätt. Visa den lösning som använder minimalt antal grindar utöver väljaren. 4.8 **Härled uttryck för ett kombinatoriskt nät som realiserar “inkrement”-funktion för ett 8-bitars register. Varje utsignal ska uttryckas explicit. 4.9 **Härled uttryck för ett kombinatoriskt nät som realiserar “dekrement”-funktion för ett 8-bitars register. Varje utsignal ska uttryckas explicit. 12 Grundläggande datorteknik - exempelsamling 5 Sekvensnät 5.1 I figuren visas en SR-latch jämte tidsdiagram för S-, och R- signalerna. Komplettera tidsdiagrammet med q, då q =0 från början. S S S q R R q R q 5.2 I figuren visas en SR-vippa jämte tidsdiagram för S-, R- och CP-signalerna. Komplettera tidsdiagrammet med q, då q =0 från början. S S R CP CP R q 1S C1 1R q q 5.3 I figuren visas en flanktriggad JK-vippa jämte tidsdiagram för J-, K- och CP-signalerna. Komplettera tidsdiagrammet med q, då q =0 från början. J J K CP C K 1J q C1 1K q q 5.4 I figuren visas en D-vippa jämte tidsdiagram för D- och CP-signalerna. Komplettera tidsdiagrammet med q, då q =0 från början. D D CP C 1D q C1 q q 13 Grundläggande datorteknik - exempelsamling 5.5 I figuren visas en T-vippa jämte tidsdiagram för T- och CP-signalerna. Komplettera tidsdiagrammet med q, då q =0 från början. T T CP C q 1T C1 q q 5.6 Ställ upp funktionstabell, rita tillståndsgraf och pulsdiagram för den autonoma räknaren. Pulsdiagrammet skall utgå från tillståndet Q = (q1q0)2 = 0 ³1 q1 1T CP C1 q0 1T CP C1 q1 q0 C q1 q0 5.7 Ställ upp funktionstabell, rita tillståndsgraf och pulsdiagram för den autonoma räknaren nedan. Pulsdiagrammet skall utgå från tillståndet Q = (q2q1q0)2 = 0 & 1T CP q2 C1 1T CP q1 C1 q2 q2 q1 q0 14 1T CP q1 C & q0 C1 q0 Grundläggande datorteknik - exempelsamling 5.8 Ställ upp funktionstabell och rita tillståndsgrafen för följande räknare med räknevillkoret x. x X=0 & 1 CP 1T & q 0 q0 ³1 q1 1T C1 q2 1T q2q1q0 C1 CP C1 CP q0 q0 q2 q1 & & 1 5.9 ³1 X=1 Ställ upp funktionstabell och rita tillståndsgrafen för följande räknare med räknevillkoret x. & ³1 x ³1 & q0 1D x ³1 C1 CP X=0 & ³1 & q1 1D CP q1q0 C1 q0 q1 X=1 5.10 Analysera räknaren nedan. Utgå från initialtillståndet 0, vilken räknesekvens motsvarar räknarens tillståndsgraf? Tillstånden kodas som binärt tal: q2 q1 q0. & ³1 & 1T CP q2 ³1 & C1 & & 1T CP q2 a) b) c) q1 & C1 q1 0,1,2,3,4,5,6,7,0... 0,2,4,6,7,1,3,5,0... 0,2,4,7,6,1,3,5,0... 15 ³1 1T CP q0 C1 q0 Grundläggande datorteknik - exempelsamling 5.11 Analysera räknaren nedan. Visa dess fullständiga tillståndsgraf. Tillstånden kodas som binärt tal: q2 q1 q0. q3 q2 q1 q0 & q2 q1 q0 & & q1 q0 & q2 q0 & q3 q2 q1 q3 q2 q1 q3 1T CP q3 q1 q0 q3 q0 ³1 C1 q3 q3 q2 q0 & q3 q2 q1 & q3 q1 q0 & ³1 1T CP C1 q2 q2 q1 ³1 & q1 1T CP C1 q2 q0 q1 =1 & ³1 & q3 q1 & CP q3 q2 q1 q0 & 1T C1 q0 q0 & 5.12 En 2-bitars tillståndsmaskin illustreras av följande tillståndsgraf: 00 q1q0 x=1 11 01 x=0 Konstruera en synkron räknare som realiserar tillståndsgrafen. Använd T-vippor, AND-, ORoch INVERTERAR-grindar. 5.13 Konstruera en räknare med styrsignal x, som realiserar följande tillståndsgraf. Använd D-vippor, och grindarna AND, OR och INVERTERARE. Förutsätt att räknaren alltid startar i tillstånd 001. X=0 X=0 001 X=1 X=1 101 010 X=0 X=1 100 q2q1q0 X=1 X=0 011 X=1 16 X=0 Grundläggande datorteknik - exempelsamling 5.14 Konstruera en autonom synkron modulo-6 räknare med räknesekvens: q2 q1 q0 = 000, 001, 101, 111, 011, 010, 000 och vipptyp enligt nedan. Dessutom får AND-, OR- och INVERTERAR-grindar användas. a) b) Vipptyp: D. Vipptyp: T. D CP 1D q C1 T CP q 1T C1 q q 5.15 Konstruera en synkron räknare med en styrsignal x, som bestämmer räknarens funktion på följande sätt x = 0 Räknaren räknar enligt sekvensen q1q0 = 00, 01, 11, 10, 00 x = 1 Räknaren räknar enligt sekvensen q1q0 = 00, 10, 11, 01, 00 Av de två sekvenserna ovan framgår att räknaren är reversibel dvs. den kan räkna en bestämd sekvens framåt eller bakåt. Använd T-vippor och valfria grindar. 5.16 Konstruera en synkron, reversibel räknare med en styrsignal x, vilken bestämmer räknarens funktion enligt: x = 0: Sekvensen 000,001,011,010,110,111,101,100,000 (Gray-kod) x = 1: Sekvensen 000,100,101,111,110,010,011,001,000 (Gray-kod baklänges) T-vippor och valfria grindar får användas. 5.17 Konstruera en synkron räknare med styrsignaler x och y som bestämmer räknarens funktion på följande sätt: y = 1: Räknaren försätts i tillstånd 000. y = 0: x = 0: Räknaren räknar enligt sekvensen q2 q1q0 = 000,001,010,011,100,101,110,111,000... x = 1: Räknaren försätts i tillstånd 011. D-vippor och valfria grindar får användas. Rita också en tillståndsgraf som beskriver räknaren. 5.18 Konstruera ett 4-bitars synkront skiftregister (q3q2q1q0) med Dvippor enligt figuren till höger och valfria komponenter för den kombinatoriska delen. Kretsen ska ha en styrsignal e (enable): e = 0: skiftregister kvarstannar i befintligt tillstånd e = 1: ett aritmetiskt högerskift utförs. Utskiftad bit q0 ignoreras. 5.19 Konstruera ett 4-bitars synkront skiftregister (q3q2q1q0) med D-vippor och valfria kombinatoriska komponenter. Kretsen ska ha två styrsignaler e (enable) och d (direction): 2D CP 1C2 G1 2D CP 1C2 e = 0: skiftregister kvarstannar i befintligt tillstånd G1 e = 1: ett skift utförs. d = 0: “vänsterskift” d = 1: “högerskift” Utskiftade bitar (q3 vid vänsterskift och q0 vid högerskift) placeras i en D-vippa med beteckningen c. Inskiftade bitar (q0 vid vänsterskift och q3 vid högerskift) tas från D-vippa c. 17 Grundläggande datorteknik - exempelsamling 6 Dataväg ALU och minne För uppgifter i detta kapitel där ALU'n ingår gäller ALU-funktioner enligt följande tabell. funktion f3 f2 f1 f0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 operation RTN 0→ U FD16 → U FE16 → U FF16 → U E→ U D1k +Cin → U D˅E→ U DE→ U DE→ U D+Cin→ U D+FF16→ U D+E+Cin → U D+(E+Cin) 2k → U D<<1 (Cin)→ U (Cin) 1>>D→ U (d7)1>>D→ U u7 0 1 1 1 e7 u6 0 1 1 1 e6 u5 0 1 1 1 e5 u4 0 1 1 1 e4 utsignaler u3 u2 0 0 1 1 1 1 1 1 e3 e2 d7 e7 d6 e6 d5 e5 d4 e 4 d3 e3 d 7 e 7 d 6 e 6 d5 e 5 d 4 e 4 d3 e 3 d7 e 7 d6 e 6 d6 Cin d7 d5 d7 d7 d 5 e5 d4 d6 d6 d 4 e 4 d 3 e3 d3 d5 d5 d2 d4 d4 u1 0 0 1 1 e1 u0 N 0 0 1 1 0 1 1 1 e0 u7 u7 d 2 e 2 d e d 0 e 0 u7 d2 e 2 d1 e1 d0 e 0 u7 d e d e d e u7 u7 u7 u7 u7 d1 d0 Cin u7 d3 d2 d1 u7 d3 d2 d1 u7 1 2 2 1 1 1 0 0 Z 1 0 0 0 (1) V 0 0 0 0 0 C 0 0 0 0 0 (1) (8) (7) (1) (1) (1) 0 0 0 0 0 0 (1) (2) (3) (1) (2) (3) (1) (2) (3) (1) (2) (3) (1) 0 (4) (1) (6) (5) (1) 0 (5) Anm: D1k = 1-komplement D = D' (E+Cin)2k = 2-komplement E+Cin = 0-E-Cin (1) Z u 7 u 6 u 5 u 4 u 3 u 2 u1 u 0 , dvs. Z=1 (2) V (u 7 d 7 e7 ) (u 7 d 7 e7 ) , dvs. V-flaggan sätts enligt reglerna för tvåkomplementsaritmetik. (3) (4) (5) (6) (7) (8) då samtliga bitar i register U är 0, Z=0 annars. C = c8, dvs. carry ut från additionen av de mest signifikanta siffrorna. C = utskiftad bit, dvs. bit d7 före vänsterskiftet. C = utskiftad bit, dvs. bit d0 före högerskiftet. V = Cind7 före skift, dvs. sätts till 1 om skiftet föranleder teckenbyte. C ettställs om D=0, C nollställs annars. V ettställs om D=(10000000)2, V nollställs annars. 6.1 Styrsignaler för registeröverföringar: Använd figurens dataväg och ange styrsignalssekvenser för följande registeröverföringar beskrivna enligt RTN. Operation (RTN) a) b) c) Aktiva styrsignaler T→A T → A,R R → T, A→R T→A =AR 18 Grundläggande datorteknik - exempelsamling 6.2 Enkla unära operationer: Använd figurens dataväg och ange styrsignalssekvenser för följande operationer. a) b) c) d) Nollställ innehållet i register A. Addera 1 till innehållet i register A. Bitkomplementera innehållet i register A. Negera (tvåkomplementera) innehållet i register A. Ge svaren i en tabellform enligt följande: Cykel 1 2 … Använd figurens dataväg och ange en styrsignalssekvens enligt följande RTN-beskrivning: Cykel 1 2 3 4 5 6 6.4 Aktiva styrsignaler Operation (RTN) Aktiva styrsignaler 2016 A A-1 R R A F016 T A⊕T R R A Enkla minnesoperationer: Använd figurens dataväg och ange styrsignalssekvenser för följande operationer. A CP LDT f3 f2 f1 f0 a) Kopiera innehållet på adress (10)16 till register A. 0 1 C C b) Kopiera innehållet indirekt från adress (10)16 till register A. c) Utgå från att register A innehåller en adress och kopiera innehållet från den adressen till register A. T CP LDA b3 b2 b1 b0 6.3 Operation (RTN) Source OES ALU(N) ALU(Z) ALU(V) ALU(C) ALU 0 1 2 3 g1 g 0 R CP LDR g9 g7 g5 g3 g8 g6 g4 g2 (N) (Z) (V) (C) N Z V C 0 1 2 3 1 0 0 0 0 CP TA LDTA Adress OEA 1 OER 1 CP CC CP LDCC MW d) Kopiera innehållet från register A till adress (10)16. OECC 19 1 MR Minne I/O Data Grundläggande datorteknik - exempelsamling 6.5 Register/minne addition. Använd figurens dataväg och ange styrsignalssekvenser för operationen: A CP Cykel Operation (RTN) 6.6 LDT f3 f2 f1 f0 Aktiva styrsignaler 1 2 3 4 5 6 … T CP LDA Ge svaret i tabellform enligt följande: b3 b2 b1 b0 A+M(1416)→A 0 1 C C OES ALU(N) ALU(Z) ALU(V) ALU(C) ALU 0 1 2 3 g1 g 0 g9 g7 g5 g3 R CP LDR g8 g6 g4 g2 (N) (Z) (V) (C) N Z V C 1 0 0 0 0 TA CP 0 1 2 3 LDTA Adress 1 OEA CP 1 OER CC CP Minne I/O LDCC MW MR 1 OECC Data Minnesaddition. Använd figurens dataväg och ange styrsignalssekvenser för operationen: A CP Cykel Operation (RTN) LDT f3 f2 f1 f0 Aktiva styrsignaler 1 2 3 4 5 6 … T CP LDA Ge svaret i tabellform enligt följande: b3 b2 b1 b0 M(1216)+M(1316)→M(1416) 0 1 C C Source 1 OES ALU(N) ALU(Z) ALU(V) ALU(C) ALU 0 1 2 3 g1 g 0 g9 g7 g5 g3 R CP LDR g8 g6 g4 g2 (N) (Z) (V) (C) N Z V C 0 0 0 0 TA CP 0 1 2 3 LDTA Adress 1 OEA CP 1 OER CC CP LDCC MW MR 1 OECC Minne I/O Data 8/16 bitars addition. Använd figurens dataväg och ange styrsignalssekvenser för operationen: A+M(1216):M(1316)→M(2016) : M(2116) Cykel Operation (RTN) A CP Ge svaret i tabellform enligt följande: LDT f3 f2 f1 f0 Aktiva styrsignaler 1 2 3 4 5 6 … T CP LDA b3 b2 b1 b0 6.7 Source 0 1 C C Source OES ALU(N) ALU(Z) ALU(V) ALU(C) ALU 0 1 2 3 g1 g 0 R CP LDR g9 g7 g5 g3 g8 g6 g4 g2 (N) (Z) (V) (C) N Z V C 0 1 2 3 1 0 0 0 0 CP TA LDTA Adress OEA 1 OER 1 CP CC CP LDCC MW OECC 20 1 MR Minne I/O Data Grundläggande datorteknik - exempelsamling 7 Styrenheten 7.1 I följande tabell visas RTN-beskrivningen för EXECUTE-sekvensen för en av FLIS-processorns instruktioner. Tillstånd a) b) 7.2 M(SP)→Y; Q5 SP+1→SP; I följande tabell visas RTN-beskrivningen för EXECUTE-sekvensen för en av FLIS-processorns instruktioner. a) b) SP-1→SP; Q5 Y→M(SP); Aktiva styrsignaler (=1) Ange för varje tillstånd de styrsignaler som är aktiva. Vad är instruktionens namn (med assemblerspråk)? I följande tabell visas RTN-beskrivningen för EXECUTE-sekvensen för en av FLIS-processorns instruktioner. a) b) RTN-beskrivning Q4 n→T; PC+1→PC Q5 Y→M(T+X); Aktiva styrsignaler (=1) Ange för varje tillstånd de styrsignaler som är aktiva. Vad är instruktionens namn (med assemblerspråk)? I följande tabell visas RTN-beskrivningen för EXECUTE-sekvensen för en av FLIS-processorns instruktioner. Tillstånd a) b) 7.5 RTN-beskrivning Q4 Tillstånd 7.4 Aktiva styrsignaler (=1) Ange för varje tillstånd de styrsignaler som är aktiva. Vad är instruktionens namn (med assemblerspråk)? Tillstånd 7.3 RTN-beskrivning Q4 RTN-beskrivning Q4 n→T; Q5 T+X→R; Q6 R→PC; Aktiva styrsignaler (=1) Ange för varje tillstånd de styrsignaler som är aktiva. Vad är instruktionens namn (med assemblerspråk)? I följande tabell visas RTN-beskrivningen för EXECUTE-sekvensen för en av FLIS-processorns instruktioner. Tillstånd Q4 RTN-beskrivning Aktiva styrsignaler (=1) A’→R; ALU(N,Z) →CC(n,Z); 0→V; Q5 a) b) R→A; Ange för varje tillstånd de styrsignaler som är aktiva. Vad är instruktionens namn (med assemblerspråk)? 21 Grundläggande datorteknik - exempelsamling 7.6 I följande tabell visas RTN-beskrivningen för EXECUTE-sekvensen för en av FLIS-processorns instruktioner. Tillstånd RTN-beskrivning Q4 (d7)A>>1→R; Q5 R→A; a) b) 7.7 Ange för varje tillstånd de styrsignaler som är aktiva. Vad är instruktionens namn (med assemblerspråk)? I följande tabell visas RTN-beskrivningen för EXECUTE-sekvensen för en av FLIS-processorns instruktioner. Tillstånd A→T Q5 (C)(M(A+Y))>>1→R; Q6 R→ M(A+Y); Aktiva styrsignaler (=1) Ange för varje tillstånd de styrsignaler som är aktiva. Vad är instruktionens namn (med assemblerspråk). I följande tabell visas RTN-beskrivningen för EXECUTE-sekvensen för en av FLIS-processorns instruktioner. Tillstånd RTN-beskrivning Q4 PC→TA,T; Q5 M(TA)+1→R; PC+1→PC; Q6 if(N=1) R→ PC; a) b) 7.9 RTN-beskrivning Q4 a) b) 7.8 Aktiva styrsignaler (=1) Aktiva styrsignaler (=1) Ange för varje tillstånd de styrsignaler som är aktiva. Vad är instruktionens namn (med assemblerspråk)? I följande tabell visas RTN-beskrivningen för EXECUTE-sekvensen för en av FLIS-processorns instruktioner. Tillstånd RTN-beskrivning Q4 PC→TA,T; Q5 M(TA)+1→R; PC+1→PC; Q6 if(C+Z=1) R→ PC; a) b) Aktiva styrsignaler (=1) Ange för varje tillstånd de styrsignaler som är aktiva. Vad är instruktionens namn (med assemblerspråk)? 7.10 I instruktionslistan för FLIS-processorn finner vi en maskininstruktion som beskrivs enligt följande: Instruktion Adressering Operation Flaggor COM Variant COM Adr metod OP # ~ N Z V C Absolute 3A 2 4 M(Adr) ' M(Adr) Δ Δ 0 - Visa hur instruktionens EXECUTE-fas implementeras hos en FLIS-processor med fast kopplad logik. Lösningen ska tydligt visa varje tillstånd med RTN beskrivning och angivande av aktiva styrsignaler. 22 Grundläggande datorteknik - exempelsamling 7.11 I instruktionslistan för FLIS-processorn finner vi en maskininstruktion som beskrivs enligt följande: Instruktion Adressering Operation Flaggor JMP Variant metod OP # ~ N Z V C JMP Indexed 63 1 4 A+X PC - - - - A,X Visa hur instruktionens EXECUTE-fas implementeras hos en FLIS-processor med fast kopplad logik. Lösningen ska tydligt visa varje tillstånd med RTN beskrivning och angivande av aktiva styrsignaler. 7.12 I instruktionslistan för FLIS-processorn finner vi en maskininstruktion som beskrivs enligt följande: Instruktion Adressering Operation Flaggor ROL Variant ROL n,SP metod OP # ~ N Z V C Indexed 4D 2 4 M(n+SP)<<1 M(n+SP) Δ Δ Δ Δ Visa hur instruktionens EXECUTE-fas implementeras hos en FLIS-processor med fast kopplad logik. Lösningen ska tydligt visa varje tillstånd med RTN beskrivning och angivande av aktiva styrsignaler. 7.13 I instruktionslistan för FLIS-processorn finner vi en maskininstruktion som beskrivs enligt följande: Instruktion Adressering Operation Flaggor BLT Variant metod OP # ~ N Z V C BLT Relativ 2F 2 4 If (NV) = 1: PC+Offset PC - - - - Adr Visa hur instruktionens EXECUTE-fas implementeras hos en FLIS-processor med fast kopplad logik. Lösningen ska tydligt visa varje tillstånd med RTN beskrivning och angivande av aktiva styrsignaler. 23 Grundläggande datorteknik - exempelsamling 8 Assemblerprogrammering 8.1 Följande figur illustrerar några fragment minne hos en FLISP-dator. I minnet finns en ”branch”instruktion samt dess mål indikerade. Bestäm instruktionens operand, dvs. det värde som finns lagrat på adress 5A. 10 58 BRA Adress 21 59 5A OPERAND A 5B 5C 81 8.2 OPKOD Adress Följande figur illustrerar några fragment minne hos en FLISP -dator. I minnet finns en ”branch”instruktion samt dess mål indikerade. Bestäm instruktionens operand, dvs. det värde som finns lagrat på adress 63. 10 OPKOD Adress 6 121 BRA Adress 62 63 OPERAND 64 65 8.3 För vilka värden på U utförs hoppet nedan? Betrakta U som ett tal 0,255. LDA CMPA B(Villkor) #$85 #U Hopp om den villkorliga instruktionen är a) BHI e) BGT b) BHS f) BGE c) BLS g) BLE d) BLO h) BLT 24 Grundläggande datorteknik - exempelsamling 8.4 Översätt följande sekvens av assemblerdirektiv för FLIS-assemblatorn till maskinkod (assemblera programmet). Komplettera figuren så att det klart framgår hur maskinkod och assemblerkod hör ihop och vilka minnesadresser maskinkoden är placerad på. Adress 8.5 Innehåll Assemblerkod ORG $E0 FCB %10000111 RMB 2 FCB $7A FCB ´a´ FCS ”ABCD” Översätt följande assemblerprogram för FLISP till maskinkod (assemblera programmet). Komplettera figuren så att det klart framgår hur maskinkod och assemblerkod hör ihop och vilka minnesadresser maskinkoden är placerad på. Adress Innehåll Assemblerkod (disassemblering) ORG $30 Start: LDX #$0C Loop: LDA ,X+ STA $FC TSTA Stop: BPL Loop JMP Stop 25 Grundläggande datorteknik - exempelsamling 8.6 Översätt följande assemblerprogram för FLISP till maskinkod (assemblera programmet). Komplettera figuren så att det klart framgår hur maskinkod och assemblerkod hör ihop och vilka minnesadresser maskinkoden är placerad på. Adress Innehåll Assemblerkod (disassemblering) ORG $20 Length: EQU 4 Start: LDX #Table LDA Length STA Count LDA ,X+ STA $FC DEC Count LDA Count BNE Loop Stop Jmp Stop Count RMB 1 Table: FCB $10,%10,10,0 Loop: 8.7 Ur en FLISP-dators minne avläser vi följande minnesinnehåll (hexadecimalt): 90,48,91,94,F5,24,03,EB,21,FA,21,FE Utgå i från att ett program är lagrat här med början på adress 2016. Identifiera instruktionssekvensen, dvs. disassemblera minnesinnehållet. 8.8 Ur en FLISP-dators minne avläser vi följande minnesinnehåll (hexadecimalt): F1,7A,06,0E,A6,C4,A5,C5,24,02,F0,01,21,FE Utgå i från att ett program är lagrat här med början på adress 2016. Identifiera instruktionssekvensen, dvs. disassemblera minnesinnehållet. 26 Grundläggande datorteknik - exempelsamling 8.9 ; 20: 22: 24: 25: 27: 29: Följande program finns lagrat i en FLISP-dators minne: Huvudprogram LDSP #$F0 LDX #$50 PSHX JSR $40 STA $E0 JMP $10 ; Subrutin 1 40: PSHA 41: PSHX 42: PSHC 43: LDX #$E0 45: LDA #$03 47: JSR $60 49: PULC 4A: PULX 4B: PULA 4C: RTS ; Subrutin 2 60: PSHA 61: PSHC 62: PSHX 63: LDX #$15 65: INCA 66: PULX 67: PULC 68: PULA 69: RTS Beskriv stackens utseende, dvs. komplettera följande tabell, då programräknaren PC har följande värden: PC SP (SP) (SP+1) (SP+2) (SP+3) (SP+4) 22 25 - - 45 60 - 49 27 - - 8.10 En 8-bitars strömbrytare, ”DIP_SWITCH” är ansluten till adress FB16 och en displayenhet ”HEXDISPLAY” som visar en byte i form av två hexadecimala siffror är ansluten till adress FC16 i en FLISP dator. Konstruera en subrutin DipHex som läser av strömbrytaren och indikerar den minst signifikanta påslagna biten genom att skriva dess position, räknat från höger, till displayenheten. Om exempelvis bitarna 2 och 4 utgör ettställda strömbrytare ska positionen för bit 2, (dvs. 3) skrivas till displayenheten. Om ingen strömbrytare är ettställd ska siffran 0 skrivas till displayen. Speciellt gäller att symboler ska definieras och användas för absoluta adresser. 27 Grundläggande datorteknik - exempelsamling 8.11 Två strömbrytare är anslutna till inportar med adresser FB16 och FC16 i en FLISP-dator. Dessutom är en ljusdiodramp ansluten till en utport med adress FB16. Konstruera en subrutin DipSwitchOr som bildar logisk ELLER av värdena som läses från strömbrytarna. Subrutinen ska utformas så att avläsningen och indikering görs en gång. Kontinuerlig funktion fås genom att subrutinen, oupphörligt anropas från ett huvudprogram "main". Speciellt gäller att symboler ska definieras och användas för absoluta adresser. 8.12 I simulatorn för FLIS-datorn kan man ansluta strömbrytarmodulen DIPSWITCH till en inport och sifferindikatorn 7-SEGMENT till en utport. Skriv ett program som kontinuerligt läser av två 4-bitars tal från de åtta strömbrytarna på DIPSWITCH via inporten $FB, adderar de två talen och visar summan (4 bitar) som en decimal siffra på sifferindikatorn 7-SEGMENT, ansluten till utport $FC. Från inporten läses två 4-bitars binära tal P och Q samtidigt. P finns på bit 7654 och Q på bit 3210. Summan P+Q skall omvandlas till segmentkod och visas som en siffra 0-9 på sifferindikatorn. Om summan är större än nio skall ett ’E’ (ERROR) visas. Du har tillgång till en tabell med segmentkoder och följande definitioner: Error SegCode EQU FCB $5D xx,yy,zz,etc ; Segmentkod för E (Error) ; Tabell med segmentkoder för [0,9] 8.13 Skriv en subrutin CNTONE i assemblerspråk för FLIS-processorn som räknar antalet ettor i register A. Vid återhopp skall register A innehålla antalet ettor som fanns i registret vid anropet. Om registret innehåller 5 st ettor vid anropet så skall det alltså innehålla talet %00000101 vid återhoppet. Endast register A och CC får vara förändrade vid återhopp från subrutinen. Hur skall programmet ändras om man istället vill räkna antalet nollor? 8.14 Skriv en subrutin ASCBIN i assemblerspråk för FLIS-processorn som översätter ett 7-bitars ASCII-tecken för en hexadecimal siffra (0-9 eller A-F) till motsvarande binära tal %00000000%00001111. Vid anrop av subrutinen innehåller register A ASCII-tecknet i bitarna b6-b0 medan b7 är en checkbit med okänt innehåll. Vid återhopp skall det binära talet finnas i register A. Om innehållet i register A vid anropet ej är ASCII-tecknet för en hexadecimal siffra så skall talet $FF finnas i register A vid återhopp. Endast register A och CC får vara förändrade vid återhopp från subrutinen. 8.15 Skriv en subrutin, CCOUNT, i assemblerspråk för FLIS-processorn, som tar reda på hur många gånger ASCII-tecknet för bokstaven 'C' förekommer i en nollterminerad textsträng. Vid anrop av subrutinen skall startadressen till textsträngen finnas i X-registret och vid återhopp skall antalet C-tecken finnas i A-registret. ASCII-tecknen i textsträngen är lagrade med udda paritet med paritetsbiten som bit nummer 7. Den avslutande nollan har ingen paritets-bit. Endast register A och CC får vara förändrade vid återhopp från subrutinen. 8.16 Skriv en subrutin, AaCNT, i assemblerspråk för FLIS-processorn, som tar reda på hur många gånger ASCII-tecknen för bokstäverna A och a förekommer i en nollterminerad textsträng. Vid anrop av subrutinen skall startadressen till textsträngen finnas i X-registret och vid återhopp skall antalet ASCII-tecken finnas i A-registret. ASCII-tecknen i textsträngen är lagrade med jämn paritet med paritetsbiten som bit nummer 7. Endast register A och CC får vara förändrade vid återhopp från subrutinen. 28 Grundläggande datorteknik - exempelsamling 8.17 Skriv en subrutin SMALLCNT i assemblerspråk för FLIS-processorn som söker igenom en textsträng med 7- bitars ASCII-tecken och räknar alla ASCII-tecken som motsvarar små bokstäver (a-z). Vid anrop av subrutinen skall adressen till textsträngen finnas i X-registret. Textsträngen avslutas med datavärdet 0. Det sökta antalet skall returneras i A-registret. För övrigt får endast CC-registret vara förändrat vid återhopp. Ett ASCII-tecken är lagrat i bit6-bit0 på varje adress i textsträngen. Bit7 i textsträngens dataord har okänt värde. 8.18 I minnet i ett datorsystem med FLIS-processorn finns en nollterminerad sträng med sjubitars ASCII-tecken. Varje ASCII-tecken har kompletterats med en paritetsbit som åttonde bit (bit nr 7). Skriv en subrutin LCOUNT i assemblerspråk för FLIS-processorn som tar reda på hur många av ASCII-tecknen i strängen som motsvarar stora eller små bokstäver A - Z eller a - z. Antalet bokstäver skall finnas i A-registret vid återhopp. Vid anrop av subrutinen skall startadressen till strängen finnas i X-registret. Endast register A och CC får vara förändrade vid återhopp från subrutinen. 8.19 Skriv en subrutin PRINT i assemblerspråk för FLIS-processorn som matar ut ASCII-tecken (7 bitars ASCII lagrade som 8-bitars ord med mest signifikant bit nollställd) till en skrivare enligt följande beskrivning: - ASCII-tecknen som skall matas ut finns lagrade i minnet med första tecknet på adressen som finns i X-registret och följande tecken på ökande adresser. Skrivarens dataingång (8 bitar) är ansluten till utport $FB på FLIS-datorn. Skrivarens statussignal READY är ansluten till bit 7 (mest signifikant) på inport $FC. Om signalen READY har värdet 1 är skrivaren beredd att ta emot ett nytt ASCII-tecken. Utmatning av ett dataord (ASCII-tecken) till skrivarens dataingång medför automatiskt att skrivaren nollställer signalen READY. Utmatning av ASCII-tecken skall fortsätta tills ett dataord med värdet $00 läses från minnet. Dataordet med värdet $00 används som slutmarkering och skall inte matas ut till skrivaren. Återhopp från subrutinen skall göras när utmatningen är färdig. Vid återhoppet skall samtliga interna register (utom PC) ha samma värden som vid inhoppet. Subrutinen skall fungera även om första dataordet som läses från minnet är $00, dvs återhopp skall då ske direkt. 8.20 En ramp med ljusdioder, enligt figuren till höger, är ansluten till adress FC16 i en FLISP-dator. a) Skriv en subrutin BLINK som får samtliga dioder att blinka genom att först tända och sedan släcka dom. Kontrollera funktionen genom att stega igenom subrutinen instruktionsvis. b) Utforma, som en ny subrutin BLINKDELAY, en fördröjning så att dioderna blinkar även då programmet exekveras normalt. c) Beskriv subrutinerna BLINK och BLINKDELAY i form av flödesplaner. d) Skapa ett enkelt huvudprogram main, som kontinueraligt anropar subrutinen BLINK. 8.21 En ramp med ljusdioder, enligt figuren till höger, är ansluten till en utport med adress FC16 i en FLISP-dator. a) Skriv en subrutin RLJUSH som får dioderna att bete sig som ett "rinnande ljus" där dioderna tänds upp en och en från vänster till höger. Kontrollera funktionen genom att stega igenom subrutinen instruktionsvis. b) Använd subrutinen BLINKDELAY, så att man tydligt kan se det rinnande ljuset även då programmet exekveras normalt. c) Beskriv lösningen från b) i form av en flödesplan. 29 Grundläggande datorteknik - exempelsamling 8.22 Två ramper med ljusdioder, enligt figuren till höger, är anslutna till utportarna med adress FB16 och FC16 i en FLISP-dator. Konstruera en subrutin RLJUSH16 som får dioderna att bete sig som ett kontinuerligt "rinnande ljus" där dioderna tänds upp en och en från vänster till höger. Efter det att bit 0 hos diodrampen på adress FB16 släckts ska bit 7 hos diodrampen på adress FC16 tändas. Då dioden för bit 0 på adress FC16 släckts, ska det rinnande ljuset börja om från bit 7 på adress FB16, osv. Använd en given subrutin BLINKDELAY, så att man tydligt kan se det rinnande ljuset även då programmet exekveras normalt. Implementera, dvs. skriv subrutinen i assemblerspråk. 8.23 I simulatorn för FLIS-datorn kan man ansluta strömbrytarmodulen DIPSWITCH till en inport och sifferindikatorn 7-SEGMENT till en utport. Skriv ett program som läser av ett värde på strömbrytarna, visar värdet som en hexadecimal siffra på sifferindikatorn och sedan utför en fördröjning. Därefter skall sifferindikatorn släckas, en ny fördröjning utföras och förloppet upprepas från början. Programmet som skall ha startadressen $20 beskrivs nedan. Det finns en färdig subrutin DELAY1S som utför en fördröjning på 1 s. Programmet skall i tur och ordning: 1. Läsa strömbrytarna på inport $FB. 2. Maska fram bit 3-0 av det inlästa värdet, som motsvarar den önskade fördröjningen i sekunder. 3. Visa detta värde x som tillhör intervallet [0,$F] på sifferindikatorn på utport $FC. 4. Utföra fördröjningen. (Hoppa till DELAY1S x gånger). 5. Släcka sifferindikatorn. 6. Utföra fördröjningen igen. (Hoppa till DELAY1s x gånger). 7. Hoppa tillbaka till 1. Du har tillgång till en tabell med segmentkoder och följande definitioner: SegCode DELAY1S FCB EQU xx,yy,zz,etc Tabell med segmentkoder för [0,F] wwww Startadress för Delay-rutinen som utför 1s fördröjning 8.24 En FLIS-dator skall användas för att styra ett elektroniskt lås. I låsprogrammet skall ingå en subrutin KEYCMP som jämför en sträng med inmatade ASCII-tecken med en annan sträng med 8-bitars ord, som innehåller "nyckeln" till låset. Bit 7 i varje inmatat ASCII-tecken har okänt värde medan motsvarande bit i "nyckel-strängen" är noll. Bägge strängarna är lika långa, relativt korta och noll-terminerade. Skriv en subrutin i assemblerspråk för FLIS-processorn som jämför de två strängarna och returnerar antal fel i A-registret. Vid anrop av subrutinen skall startadressen till den inmatade strängen finnas i X-registret och startadressen till "nyckelsträngen" i Y-registret. Endast register A och CC får vara förändrade vid återhopp från subrutinen. 8.25 En FLIS-processor skall användas i styrenheten för en maskin. Till inport $FC är ett antal givare och switchar anslutna. En operatör skall styra maskinen via switcharna. Huvudprogrammet för maskinstyrningen skall utformas som en evighetsslinga där inporten läses av en gång i början på varje varv. Huvudprogrammet skall inledas med att stackpekaren först sätts till värdet $FA. Sedan skall inporten läsas av och beroende på switcharnas och givarnas värden skall en av fyra 30 Grundläggande datorteknik - exempelsamling olika färdiga subrutiner anropas om motsvarande villkor i tabellen nedan är uppfyllt. Efter återhopp från subrutinerna eller om inget av villkoren i tabellen är uppfyllt skall ett nytt varv i slingan påbörjas. Rita en flödesplan som beskriver huvud-programmet och skriv huvudprogrammet i assemblerspråk för FLIS-processorn. Huvudprogrammets startadress skall vara $20. Subrutinernas startadresser antas vara givna. Villkor 1 2 3 4 7 ? ? ? 0 Inport $FC bitnr 6 5 4 3 2 1 ? ? 1 ? ? ? ? 0 1 ? ? 1 ? ? 0 ? ? 1 0 0 0 1 1 0 Anropa subrutin 0 1 0 ? 0 SUB1 SUB2 SUB3 SUB4 8.26 I en styrenhet för en maskin används FLIS-datorn. Ett avsnitt av styrprogrammet skall läsa av värdet CASE (8 bitar), som finns på inporten $FB, och därefter utföra en av åtta olika subrutiner, SUB0-SUB7. Vilken subrutin som utförs bestäms av värdet på variabeln CASE. Om CASE = 0 utförs SUB0, om CASE = 1 utförs SUB1 osv. Om CASE > 7 skall ingen av subrutinerna utföras. Adresserna till de åtta olika subrutinerna skall finnas lagrade i minnet i en tabell med början på adressen $C0. Vid laddning av programmet i minnet skall också tabellen med subrutinadresserna laddas. Skriv ett huvudprogram i assemblerspråk som först initierar stackpekaren till $20 och sedan läser värdet som finns på inporten $FB (CASE). Därefter anropas en av subrutinerna enligt ovan om CASE < 8. Programmet utformas som en evighetsslinga. Det skall utformas som flerval och inte som upprepade tvåval. Subrutinernas hexadecimala startadresser skall vara 80, 67, 75, 52, 90, B9, AF och E0. 8.27 Styrenheten i en maskin innehåller en FLIS-dator. I en styrsekvens skall styrenheten invänta en negativ flank på en binär signal från en givare, ansluten till bit nr 3 på inport $FC. Skriv en generell subrutin NEDGE i assemblerspråk för FLIS-processorn som detekterar en negativ flank på en av bitarna på inporten $FC. Vid anrop av subrutinen skall register A innehålla numret för den bit på inport $FC som man vill undersöka. Övriga bitar på inporten $FC har okända värden. Återhopp från subrutinen skall göras så snart en negativ flank har upptäckts. Endast register CC får vara förändrat vid återhoppet. Ledning: 1. Tänk på att signalen från början kan ha värdet 0 eller 1. 2. Man kan använda en tabell med bitmasker för de 8 olika fallen (bit 0-7). Visa också hur subrutinanropet ser ut i huvudprogrammet i det aktuella fallet. Hur skall programmet ändras om man istället vill detektera en positiv flank? 8.28 Skriv en subrutin PCNT i assemblerspråk för FLIS-processorn, som söker igenom en sträng med 8-bitars dataord i minnet och räknar alla dataord där den vänstra halvan bildar ett fyrabitars binärt tal som är mindre än 6, dvs bitarna 7654 bildar ett binärt tal < 6. Vid anrop av subrutinen skall adressen till strängen finnas i X-registret. Strängen avslutas med datavärdet $FF. Det sökta antalet skall returneras i A-registret. Endast A-registret och flaggregistret får vara förändrat vid återhopp. 8.29 Skriv en subrutin SWAP för FLIS-processorn, som byter plats på databitarna i ett block i minnet så att bitarna 76543210 ersätts med 32107654 i hela blocket. Vid anrop av subrutinen finns antalet 8-bitars dataord i blocket i A-registret (högst 50 st) och begynnelseadressen i X-registret. Vid återhopp från subrutinen får endast CC-registret vara förändrat. 8.30 Skriv en subrutin EXCHG för FLIS-processorn, som byter plats på minnesinnehållen i två lika stora minnesareor med 8-bitars dataord. Vid anrop av subrutinen finns antalet dataord i vardera 31 Grundläggande datorteknik - exempelsamling minnesarean i A-registret (högst 30 st) och adresserna till de två dataareorna i X-registret och Yregistret. Vid återhopp från subrutinen får endast register CC vara förändrat. 8.31 I minnet i ett datorsystem med FLIS-processorn finns ett antal 8-bitars tal med tecken lagrade i en tabell på adressen DTAB och framåt (ökande adress). Tabellen avslutas med talet 0. Skriv en subrutin ODDCNT i assemblerspråk som tar reda på hur många av de positiva talen i tabellen som är udda. Antalet tal i tabellen som uppfyller detta skall finnas i A-registret vid återhopp. Endast register A och register CC får vara förändrade vid återhopp från subrutinen. Ledning: Man vet här vad bit 0 och 7 skall ha för värden. 8.32 Skriv en subrutin BLKMAN som nollställer bit 7 och inverterar bit 5 i ett block med 16 st 8bitars dataord i minnet. Adressen till dataordet med lägst adress finns i X-registret vid anrop av subrutinen. Vid återhopp från subrutinen får endast CC-registret vara förändrat. Assemblerspråk för FLIS-processorn skall användas. 32 Grundläggande datorteknik - exempelsamling 9 Adressavkodning 9.1 Ett datorsystem med 64 kbyte adressrymd ska konstrueras. Konstruera adressavkodningen för följande: 2 kbyte RWM från adress 0 8 kbyte ROM på de högsta adresserna En I/O-area på 8 byte med start på adress $C5A0 Du har tillgång till 8 kbyte ROM-modul 2 kbyte RWM-modul a) Använd fullständig adressavkodning b) Använd ofullständig adressavkodning 9.2 Ett datorsystem med 64 kbyte adressrymd ska konstrueras. Konstruera adressavkodningen för följande: 4 kbyte RWM från adress 0 8 kbyte ROM på de högsta adresserna En I/O-area på 256 byte med start på adress $6000 Du har tillgång till 8 kbyte ROM-modul 4 kbyte RWM-modul a) Använd fullständig adressavkodning b) Använd ofullständig adressavkodning 9.3 I ett datorsystem, med synkron buss, 64 kbyte adressrymd och med 8 bitars databuss används en 16 kbyte ROM-kapsel för att lagra program och en 2 kbyte RWM-kapsel för att lagra variabler. Dessutom används en 8-bitars "three-state"-buffert som inport och ett 8-bitars register som utport. I nedanstående figur visas hur "chip-select"-avkodningen för dessa är utförd. a) b) Redogör för var i adressrummet processorn kan läsa eller skriva i de olika enheterna. Alla adresser där en enhet kan nås skall redovisas. Konstruktören upptäcker vid provning av systemet att märkliga saker ibland händer vid läsning av indata från inporten. Hjälp konstruktören reda ut vad som händer. A15 A2 A1 A0 R/w VA Indata Utdata A15 A0 OE VA Databuss Databuss Adressbuss (A10 - A0) A15 A13 C Register RWM 2 kbyte CS VA R/w R/w Adressbuss (A13 - A0) A15 A14 A13 VA CS ROM 16 kbyte Databuss Databuss 33 Grundläggande datorteknik - exempelsamling 9.4 Ett datorsystem, med synkron buss, 64 kbyte adressrymd och med 8 bitars databuss ska konstrueras. Centralenheten genererar en VA signal för att indikera att innehållet på adressbussen är giltigt och en R/W-signal för att indikera läsning respektive skrivning. Figuren nedan visar hur adressrummet ska användas (alla adresser anges på hexadecimal form). Systemet skall bestyckas med 1 st. 8 kbyte RWM-kapsel, 1 st. 4 kbyte ROM-kapsel, 4 st. inportar och 4 st. utportar. Modulernas modeller ges också i figuren. Med tanke på framtida utbyggnad skall alla moduler, som ansluts till adressbussen, vara fullständigt avkodade. Startadress Slutadress Adressbuss 0000 CS Adressbuss RWM R/W CS ROM Databuss Databuss C000 Läs-/ skrivminne RWM 8 kByte b7 b0 b0 b7 DFFF E080 F000 I/O area CS E17F OE Läsminne ROM 4 kByte Databuss FFFF a) b) 9.5 CS C Databuss Konstruera “chip select”-logiken för de två minneskapslarna. Konstruera “chip select”-logiken för in- och utportarna så att de ligger på adresserna $E0D0 - $E0D7, med inportar på udda adresser och utportar på jämna. Konstruktionen skall ha en gemensam del som skapar “chip select” för hela I/O arean. En utport där gränssnittet utgörs av endast ett register är normalt inte läsbar. Föreslå hur en ickeläsbar utport på adress $E0D1 skall "byggas om" så att den också blir läsbar. I figuren förutsätts CSW vara en korrekt bildad CS-signal för porten, visa hur CSW bildas. Visa även den kompletta adressavkodningslogiken. CSW Register Databuss 34 Grundläggande datorteknik - exempelsamling 9.6 I ett datorsystem, med synkron buss, 64 kbyte adressrymd och med 8 bitars databuss har minneskretsar kopplats enligt figuren nedan. Primärminnet utgörs av ROM och RWM uppdelat på fyra minneskapslar. a) b) c) d) Vad betyder förkortningarna ROM och RWM? Hur stort är systemets ROM respektive RWM? Vilka adressområden (hexadecimalt) upptar respektive minneskapsel (1 t o m 4)? Vilken roll har användningen av signalen ”VA” vid adresseringen av en minneskapsel? VA A15A14 VA & A14' A13 VA & A13 VA & A14 A14' A13' & A13' A0 - A12 CS 1 CS CS 2 R/W R/W 3 CS 4 R/W D0 - D7 R/W 9.7 Föreställ dig en I/O-modul för vilken RWM-modulen till vänster i figuren nedan har stått modell, dvs. de har samma insignal- och utsignalstruktur mot en processorbuss. I I/O-modulen finns två inportar (ingångs-buffertar) och två utportar (utgångsregister) av den typ som visas till höger i figuren. Den tar upp två adresser, vilket innebär att på varje adress finns en inport och en utport. a) I ett mikrodatorsystem, med synkron buss, 64 kbyte adressrymd och med 8 bitars databuss har I/O-modulen adresserna $B800 och $B801. Visa hur modulen är ansluten till centralenheten. Adressavkodningen är fullständig. Signalerna VA respektive R/W används för att indikera giltig adress respektive läs- eller skriv- /operation. b) Visa hur I/O-modulen principiellt är kopplad internt, dvs. hur de två inportarna och de två utportarna tillsammans med annan logik är ihopkopplade så att modulen kan representeras med en RWM-liknande modul. Adressbuss CS Indata R/w C Register Databuss Databuss OE RWM Databuss 35 Utdata Grundläggande datorteknik - exempelsamling 9.8 I CS-avkodningen för ett datorsystem med 16 bitars adressbuss används två st. ”2 till 4”avkodare enligt figuren. Insignalerna till avkodarna är adressbitar från adressbussen. Utsignalerna (x0 – x7) från avkodarna används för att bilda CS-signalerna. a) b) Analysera kopplingen och bestäm på vilka adresser minnesmodulerna och portarna är placerade. Man vill placera en andra ROM-modul i direkt anslutning till den som redan finns. Visa CS-logiken och adressintervallet för denna modul. 0 x0 A12 0 1 x1 A13 1 2 x2 3 x3 0 x4 A14 0 1 x5 A15 1 2 x6 3 x7 VA X6 x2 x3 & ³1 x7 R/W VA R/W X4 x0 VA & CS’ ROM (8k) & CS’ Inport & CS’ Utport & R/W 9.9 CS’ RWM (16k) Adressrummet för ett givet datorsystem, med synkron buss, 64 kbyte adressrymd och med 8 bitars databuss visas i bilden till vänster i figuren. Centralenheten genererar en VA signal för att indikera att innehållet på adressbussen är giltigt och en R/W-signal för att indikera läsning respektive skrivning. Som läs-/skrivminne används 2 st. RWM-moduler om vardera 8 kbyte och 128 byte. Som läsminne används 1 st. ROM-modul om 8 kbyte. In- och utportar är och kan (vid utökning) placeras i den givna I/O-arean. Modeller av dessa moduler och portar ges också till höger i figuren. Användningen av I/O-arean kan variera från en tillämpning till en annan. Man skall med lätthet kunna byta ut och lägga till portar. Adressavkodningen för enheter i denna area bör därför vara indelad i två steg där det första steget avkodar adresser inom själva I/O-arean och det andra steget dessutom väljer ett specifikt gränssnitt. All avkodning nedan skall vara fullständig och får göras med standardgrindar (INVERTERARE, OCH, ELLER, NAND, NOR, XOR). a) Konstruera adressavkodningslogiken för RWM-modulerna. Startadress 0000H Slutadress BFFFH C000H Läs-/ skrivminne (RWM) b) Konstruera en tvåstegs adressavkodare för inplaceringen av ett gränssnitt ”IE” som upptar adresserna $E0E0 och $E0E1. Adressbuss CS RWM R/W Adressbuss CS ROM 8 kbyte E000H DFFFH Databuss E07FH Indata Utdata C Register Databuss Databuss Databuss RWM 128 byte E080H E200H I/O area E17FH Läsminne (ROM) (8 - 0,5) kbyte 36 OE FFFFH 37 Lösningsförslag Lösningsförslag 39 Lösningsförslag 40 Lösningsförslag 1 Talsystem och binära koder 1.1 a) b) c) d) e) (8)10 = (1000)2 (8)10 = (8)16 (8)10 = (1000)NBCD (8)10 = (1011)EXCESS-3 (8)10 = (1100)GRAY(4) a) b) c) d) (93)10 = (0101 1101)2 (93)10 = (1001 0011)NBCD (93)10 = (5D)16 (93)10 = (0110 0000)EXCESS-3 1.2 1.3 d) 1.4 a) ’?’ b) ’1’ c) ’+’ 1.5 a) 43,48,41,4C,4D,52,53 b) 74,65,6B,6E,69,73,6B,61 c) 48,4F,47,53,4B,4F,4C,41 1.6 a) (0101 0010 1000 . 0011 0001)NBCD b) (0100 0000 0111 . 1001 0110)NBCD 1.7 a) b) c) (1100)2 = (0001100)2 (32)10 = (1100000)2 (16)16 = (1010110)2 a) b) c) (1100)2 (32)10 (16)16 = (1001100)2 = (0100000)2 = (0010110)2 a) b) c) d) e) f) (101011)2 (1100111)2 (111100)2 (101.011)2 (.111)2 (1000.01)2 = (43)10 = (103)10 = (60)10 = (5,375)10 = (0,875)10 = (8,25)10 1.8 1.9 41 Lösningsförslag 1.10 a) b) c) d) e) f) (AB)16 (11)16 (80)16 (C.4)16 (0.68)16 (B3.D4)16 = (171)10 = (17)10 = (128)10 = (12,25)10 = (0,40625)10 = (179,828125)10 a) b) c) d) e) f) g) h) (45)10 (33)10 (87,65)10 (122,18)10 (45)16 (33)16 (4.8)16 (10.6)16 = (101101)2 = (100001)2 = (1010111.101001)2 = (1111010.001011)2 = (1001010)2 = (110011)2 = (100.1)2 = (10000.011)2 a) b) c) d) e) f) g) h) (255)10 (330)10 (19,37)10 (132,43)10 (1111110)2 (100100001010)2 (1111.1111)2 (1010.0011)2 a) b) 512=29 < 360 < 256=28 ger minst 9 bitar 256=28 < 180 < 128=27 ger minst 8 bitar 1.11 1.12 = (FF)16 = (4A)16 = (13.5F)16 = (84.6E)16 = (7E)16 = (90A)16 = (F.F)16 = (A3)16 1.13 42 Lösningsförslag 2 Switchnätalgebra 2.1 a) x y & ≥1 1 & z b) x y z ≥1 f ( x, y, z ) xy xz f ( x, y, z, e) e( x y z) & e c) 1 x & 1 y ≥1 x y f ( x, y) x y xy & 2.2 a) f ( x, y, z ) xy yz b) f ( x, y, z) x y z c) f ( x, y, z ) xy z d) f ( x, y, z ) ( x y) z 2.3 a) och c). 2.4 2.5 a),c) och d) 2.6 A x, B y 2.7 a) & x b) f ( x) ( xx) x & x y & f ( x, y) x y ( x y) x y & f ( x, y) ( xy ) xy & c) x y & 43 Lösningsförslag 2.8 a) f ( x) ( x x) x ≥1 x b) x y ≥1 ≥1 f ( x, y) ( x y) x y c) ≥1 x ≥1 f ( x, y) x y ( xy ) xy ≥1 y 2.9 a) x & y b) y z & f ( x, y) x y x y xy & f ( x, y, z ) x yz x yz x yz & x c) y & & x & z & w y f ( x, y, z, w) ( x y) z yw xyz yw & & 2.10 a) x ≥1 ≥1 y f ( x, y) xy xy x y b) x y ≥1 x z ≥1 x y ≥1 ≥1 f ( x, y, z ) x yz x yz x yz x ( y z ) x y x z ( x y) ( x z ) c) ≥1 z y w ≥1 f ( x, y, z, w) ( y w)( z xy ) ( y w)( z x y ) ( y w) ( z x y ) ( y w) z ( x y ) ≥1 44 Lösningsförslag 2.11 a) x y z xy xz f ( x, y, z ) xy xz m 0 0 0 0 0 1 1 1 0 1 0 0 1 1 1 1 1 0 0 1 0 1 1 1 0 1 1 1 1 1 1 1 Mintermer: ∑m(1,3,6,7)= x yz x yz xy z xyz 1 3 6 7 b) x y z 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 Mintermer: yz x yz yz f ( x, y, z ) ( x yz )( y z ) m 1 1 1 1 1 1 1 1 1 1 1 1 1 5 6 7 1 1 1 1 1 ∑m(1,5,6,7)= x yz x yz xy z xyz c) x y z w 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Mintermer: yz f ( x, y, z, w) xw yz m 1 1 1 1 6 7 1 1 9 1 1 11 1 1 1 13 14 15 xw 1 1 1 1 ∑m(6,7,9,11,13,14,15)= x yz w x yzw x y zw x yzw xy zw xyz w xyzw 45 Lösningsförslag d) x y z w 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Mintermer: xy zw xw xz xy z w xw x z f ( x, y, z, w) ( xy z w)( x w x z ) m 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ∑m(0,4)= x y z w x y z w 2.12 d) 2.13 a) 2.14 a) x y z 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 xy xz yz f ( x, y, z) xy xz yz 0 M 0 7 0 1 1 1 1 1 1 Maxtermer: ∏ M (0,7) = ( x y z)( x y z ) b) x y z 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 xy xz f ( x, y, z) ( xy xz ) 0 0 0 0 0 M 0 1 2 3 4 1 1 1 1 Maxtermer: ∏ M (0,1,2,3,4) = ( x y z)( x y z )( x y z)( x y z )( x y z) 46 Lösningsförslag c) x y z w xy 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 zw yz f ( x, y, z, w) x y z w yz M 0 5 0 0 0 9 10 11 0 12 1 1 1 1 1 1 1 Maxtermer: ∏ M (5,9,10,11,12) = ( x y z w )( x y z w )( x y z w)( x y z w )( x y z w ) d) x y z w 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 x yz zw w f ( x, y, z, w) x yz w z w M 0 6 0 10 0 14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Maxtermer: ∏ M (6,10,14) = ( x y z w)( x y z w)( x y z w) 2.15 e) 2.16 a) f yz 0 b) 00 01 11 10 0 0 0 0 x f yz 00 01 11 10 0 1 0 0 1 1 0 1 1 0 x 1 0 1 1 0 f ( x, y, z) xz f ( x, y, z) xz x z x z 47 Lösningsförslag c) f zw f d) 00 01 11 10 00 0 0 0 0 01 0 1 1 0 xy 00 01 11 10 00 1 0 0 1 01 0 1 1 0 xy 11 0 0 1 0 11 0 1 1 0 10 0 0 0 0 10 1 0 0 1 f ( x, y, z, w) xyw yzw e) zw f f ( x, y, z, w) y w yw y w zw f f) 00 01 11 10 00 0 0 0 0 01 0 0 0 0 xy zw 00 01 11 10 00 0 0 0 0 01 - 1 1 1 xy 11 1 1 1 1 11 0 0 1 0 10 - 1 1 - 10 0 0 0 0 f ( x, y, z, w) x g) f xy f ( x, y, z, w) xy yzw zw h) 00 01 11 10 00 1 1 0 0 01 0 1 1 0 11 1 0 1 1 10 0 0 0 0 f xy zw 00 01 11 10 00 1 0 1 0 01 0 1 0 1 11 - 0 - 0 10 1 0 1 0 f ( x, y, z, w) x y z w x yz w x yzw x yzw xz w xzw f ( x, y, z, w) x y z xyw xyz xyw x( z w) x ( z y w) i) f xy zw j) 00 01 11 10 00 1 0 0 1 01 - 0 1 0 11 - 0 0 1 10 1 0 1 0 f ( x, y, z, w) z w x yzw x yzw xyz w xyzw f xy zw 00 01 11 10 00 0 0 0 1 01 0 0 1 0 11 0 1 0 0 10 1 0 0 0 f ( x, y, z, w) x yzw x yzw xyz w xy z w x z ( y w) xz ( y w) z w z ( x y w) 48 Lösningsförslag 2.17 a) f yz 0 x 1 b) 00 01 11 10 0 0 0 0 0 1 1 f x 0 f ( x, y, z) xz c) f xy yz 00 01 11 10 0 1 0 0 1 1 0 1 1 0 f ( x, y, z) ( x z )( x z) zw d) 00 01 11 10 00 0 0 0 0 01 0 1 1 0 11 0 0 1 0 10 0 0 0 0 f xy zw 00 01 11 10 00 1 0 0 1 01 0 1 1 0 11 0 1 1 0 10 1 0 0 1 f ( x, y, z, w) yw( x z) e) f xy zw f f) 00 01 11 10 00 0 0 0 0 01 0 0 0 0 11 1 1 1 1 10 - 1 1 - xy zw 00 01 11 10 00 0 0 0 0 01 - 1 1 1 11 0 0 1 0 10 0 0 0 0 f ( x, y, z, w) x g) f xy zw h) 00 01 11 10 00 1 1 0 0 01 0 1 1 0 11 1 0 1 1 10 0 0 0 0 f xy 49 zw 00 01 11 10 00 1 0 1 0 01 0 1 0 1 11 - 0 - 0 10 1 0 1 0 Lösningsförslag 3 Aritmetik 3.1 a) b) c) d) %01010101 %00111100 %10101010 %11000011 = = = = ____85 ____60 ___170 ___195 %01010101 %00111100 %10101010 %11000011 = = = = ____85 ____60 ___-86 ___-61 3.2 a) b) c) d) 3.3 a) b) c) d) 3.4 -10 -38 -42 -56 = = = = % % % % -(0000 -(0010 -(0010 -(0011 1010) 0110) 1010) 1000) = = = = 1111 1101 1101 1100 0110 1010 0110 1000 a) Operation Decimalt 0 + = X Y R + 36 68 104 1 0 0 1 0 0 1 0 0 + 0 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 R0 → Z=0 c8=0 → C=0 Operationen innebär X=36, Y= 68, R= 104, (36+68=104) Eftersom talen betraktas på binärform är talområdet (8 bitar) 0-255 och således resultatet korrekt. Detta indikeras också av att C-flaggan är 0. b) Operation + = X Y R Decimalt + 188 68 0 1 1 1 + 0 0 1 0 1 0 1 1 0 0 1 1 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 R=0 → Z=1 c8=1 → C=1 Operationen innebär X=188, Y= 68, R= 0, men 188+68=256 ! Eftersom talen betraktas på binärform är talområdet (8 bitar) 0-255 och således resultatet utanför talområdet. Carryflaggan sätts därför till 1, dessutom blir i detta fall innehållet i registret 0 varför Z-flaggan också sätts till 1. c) Operation Decimalt 1 + = X Y R + 129 129 2 1 1 0 0 0 0 0 0 1 + 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 R0 → Z=0 c8=1 → C=1 Operationen innebär X=129, Y=129, R=2, men 129+129=258! Eftersom talen betraktas på binärform är talområdet (8 bitar) 0-255 och således resultatet utanför talområdet. Carryflaggan sätts därför till 1, resultatet i registret är dock skilt från 0 varför Z-flaggan sätts till 0. d) 50 Lösningsförslag Operation Decimalt 0 + = X Y R + 74 53 127 0 1 0 0 1 0 1 0 + 0 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 R0 → Z=0 c8=0 → C=0 Operationen innebär X=74, Y=53, R=127. Eftersom talen betraktas på binärform är talområdet (8 bitar) 0-255 och således resultatet korrekt. Detta indikeras också av att C-flaggan är 0. e) Operation + = X Y R Decimalt + 74 74 148 0 1 1 1 0 1 0 0 1 0 1 0 + 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 0 R0 → Z=0 c8=0 → C=0 Operationen innebär X=74, Y=74, R=148. Eftersom talen betraktas på binärform är talområdet (8 bitar) 0-255 och således resultatet korrekt. Detta indikeras också av att C-flaggan är 0. 3.5 a) Operation Decimalt 0 + = X Y R + 36 68 104 1 0 0 1 0 0 1 0 0 + 0 1 0 0 0 1 0 0 0 1 1 0 1 0 0 0 R0 → Z=0 N=r7=0 r7’x7y7 + r7x7’y7’=0 → V=0 Operationen innebär X=36, Y= 68, R= 104, (36+68=104). Eftersom talen betraktas på tvåkomplementsform är talområdet (8 bitar) -128- +127 och således resultatet korrekt. Inget spill alltså och av teckenöverläggningen ser vi hur V-flaggan sätts till 0. Resultatet är skilt från 0 och därmed sätts Z-flaggan till 0. b) Operation + = X Y R Decimalt + -68 68 0 1 1 1 + 0 0 1 0 1 0 1 1 0 0 1 1 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 R=0 → Z=1 N=r7=0 r7’x7y7 + r7x7’y7’=0 → V=0 Operationen innebär X=-68, Y= 68, R= 0,(-68+68=0). Eftersom talen betraktas på tvåkomplementsform är talområdet (8 bitar) -128- +127 och således resultatet inom talområdet. Inget spill alltså och av teckenöverläggningen ser vi hur V-flaggan sätts till 0, dessutom blir i detta fall innehållet i registret 0 varför Z-flaggan sätts till 1. 51 Lösningsförslag c) Operation Decimalt 1 + = X Y R + -127 -127 2 1 1 0 0 0 0 0 0 1 + 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 R0 → Z=0 N=r7=0 r7’x7y7 + r7x7’y7’=1 → V=1 Operationen innebär X=-127, Y=-127, R= 2 men -127-127 = -254. Eftersom talen betraktas på tvåkomplementsform är talområdet (8 bitar) -128- +127 och således resultatet utanför talområdet. Av teckenöverläggningen (två negativa tal adderas men resultatet blir positivt) ser vi att V-flaggan sätts till 1 som indikator på spillet. Resultatet är skilt från 0 varför Z-flaggan sätts till 0. d) Operation Decimalt 0 + = X Y R + 74 53 127 0 1 0 0 1 0 1 0 + 0 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 R0 → Z=0 N=r7=0 r7’x7y7 + r7x7’y7’=0 → V=0 Operationen innebär X=74, Y= 53, R= 127, (74+53=127). Eftersom talen betraktas på tvåkomplementsform är talområdet (8 bitar) -128- +127 och således resultatet korrekt. Inget spill alltså och av teckenöverläggningen ser vi hur V-flaggan sätts till 0. Resultatet är skilt från 0 och därmed sätts Z-flaggan till 0. e) Operation + = X Y R Decimalt + 74 74 -108 0 1 1 1 0 1 0 0 1 0 1 0 + 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 0 R0 → Z=0 N=r7=1 r7’x7y7 + r7x7’y7’=1 → V=1 Operationen innebär X=74, Y=74, R= -108, resultatet är alltså fel. Talen betraktas på tvåkomplementsform och talområdet (8 bitar) är -128- +127 och således resultatet inom talområdet. Av teckenöverläggningen (två positiva tal adderas men resultatet blir negativt) ser vi dock att V-flaggan sätts till 1 som indikator på spillet. Resultatet är skilt från 0 varför Z-flaggan sätts till 0. 3.6 a) Operation Decimalt 00 = X Y R - 126 80 46 - 0 1 1 1 1 1 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 1 1 0 C=B=c8=0 Z=0 Operationen innebär X=126, Y=80, R=46. Eftersom talen betraktas på binärform är talområdet (8 bitar) 0-255 och således resultatet korrekt. Detta indikeras också av att C-flaggan är 0, dvs. ingen lånesiffra genereras från position c8. 52 Lösningsförslag b) Operation = X Y R Decimalt - 80 126 210 10 10 10 10 10 10 10 10 0 1 0 1 0 0 0 0 - 0 1 1 1 1 1 1 0 1 1 0 1 0 0 1 0 C=B=c8=1 Z=0 Operationen innebär X=80, Y=126, R=210. Resultatet är uppenbarligen fel eftersom negativa tal inte kan representeras av talområdet. (Eftersom talen betraktas på binärform är talområdet 0-255) . Detta indikeras också av att C-flaggan är 1, dvs. lånesiffra genereras från position c8. c) Operation Decimalt 00 = X Y R - 222 34 188 - 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1 0 1 0 1 1 1 1 0 0 C=B=c8=0 Z=0 Operationen innebär X=222, Y=34, R=188. Eftersom talen betraktas på binärform är talområdet (8 bitar) 0-255 och således resultatet korrekt. Detta indikeras också av att C-flaggan är 0, dvs. ingen lånesiffra genereras från position c 8. d) Operation = X Y R Decimalt - 34 222 68 10 10 10 10 10 10 0 0 1 0 0 0 1 0 - 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0 0 C=B=c8=1 Z=0 Operationen innebär X=34, Y=222, R=68. Resultatet är fel eftersom negativa tal inte kan representeras av talområdet. (Eftersom talen betraktas på binärform är talområdet 0-255) . Detta indikeras också av att C-flaggan är 1, dvs. lånesiffra genereras från position c8. 3.7 a) Operation + = X 2~Y R Decimalt + 126 176 46 1 1 1 1 + 0 1 1 1 1 1 1 0 1 0 1 1 0 0 0 0 0 0 1 0 1 1 1 0 c8=1→ C=B=0 Z=0 Det gäller att X=126, Y=80, korrekt resultat R=46. Operationen innebär X=126, 2~Y=176, R=46 eftersom talen betraktas på binärform med talområdet 0-255 och alltså är resultatet korrekt. Detta indikeras också av att C-flaggan är 0, dvs. minnessiffran i position c8 är 1. b) Operation Decimalt 0 + = X 2~Y R + 80 130 210 + 0 1 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 1 0 1 0 0 1 0 c8=0→ C=B=1 Z=0 Det gäller att X=80, Y=126, korrekt resultat R=-46. Operationen innebär X=80, 2~Y=130, R=210. Resultatet är uppenbarligen fel eftersom negativa tal inte kan representeras av talområdet. (Eftersom talen betraktas på binärform är talområdet 0-255) . Detta indikeras också av att C-flaggan är 1, dvs. minnessiffran i position c8 är 0. 53 Lösningsförslag c) Operation Decimalt X 2~Y R 222 222 188 1 + = + + 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 c8=1→ C=B=0 1 1 1 1 1 1 1 0 1 1 0 1 0 0 Z=0 Det gäller att X=222, Y=34, korrekt resultat R=188. Operationen innebär X=222, 2~Y=222, R=188. Eftersom talen betraktas på binärform är talområdet (8 bitar) 0-255 och således resultatet korrekt. Detta indikeras också av att Cflaggan är 0, dvs. minnessiffran i position c8 är 1. d) Operation Decimalt X 2~Y R 34 34 68 0 + = + + 1 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 C=B=c8=1 Z=0 Det gäller att X=34, Y=222, korrekt resultat R=-188. Operationen innebär X=34, 2~Y=34, R=68. Resultatet är fel eftersom negativa tal inte kan representeras av talområdet. (Eftersom talen betraktas på binärform är talområdet 0255) . Detta indikeras också av att C-flaggan är 1, dvs. minnessiffran i position c8 är 0. 3.8 a) Operation Decimalt X 2~Y R 126 -80 46 1 + = + + 1 0 1 0 1 1 0 0 1 1 1 1 1 1 0 1 1 0 0 0 0 1 0 1 1 1 0 N=r7=0 R0 → Z=0 r7’x7y7 + r7x7’y7’=0 → V=0 Det gäller att X=126, Y=80, korrekt resultat R=46. Operationen innebär X=126, 2~Y=-80, R=46 . Eftersom talen betraktas på tvåkomplementsform är talområdet (8 bitar) -128- +127 och operationens resultat korrekt. Inget spill alltså och av teckenöverläggningen ser vi hur V-flaggan sätts till 0. Resultatet är skilt från 0 och därmed sätts Zflaggan till 0. b) Operation Decimalt 0 + = X 2~Y R + 80 -126 -46 + 0 1 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 1 0 1 0 0 1 0 N=r7=1 R0 → Z=0 r7’x7y7 + r7x7’y7’=0 → V=0 Det gäller att X=80, Y=126, korrekt resultat R=-46. Operationen innebär X=80, 2~Y=-126, R=-46. Operationens resultat är korrekt. Inget spill alltså och av teckenöverläggningen ser vi hur V-flaggan sätts till 0. Resultatet är skilt från 0 och därmed sätts Z-flaggan till 0. 54 Lösningsförslag c) Operation Decimalt X 2~Y R -34 -34 -68 1 + = + + 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 N=r7=1 R0 → Z=0 r7’x7y7 + r7x7’y7’=0 → V=0 Det gäller att X=-34, Y=34, korrekt resultat R=-68. Operationen innebär X=-34, 2~Y=-34, R=-68. Operationens resultat är korrekt. Inget spill alltså och av teckenöverläggningen ser vi hur V-flaggan sätts till 0. Resultatet är skilt från 0 och därmed sätts Z-flaggan till 0. d) Operation Decimalt X 2~Y R 34 34 68 0 + = + + 1 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 R0 → Z=0 N=r7=1 r7’x7y7 + r7x7’y7’=0 → V=0 Det gäller att X=34, Y=-34, korrekt resultat R=68. Operationen innebär X=34, 2~Y=34, R=68. Operationens resultat är korrekt. Inget spill alltså och av teckenöverläggningen ser vi hur V-flaggan sätts till 0. Resultatet är skilt från 0 och därmed sätts Z-flaggan till 0. e) Operation Decimalt 0 + = X 2~Y R + 64 65 -127 + 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 R0 → Z=0 N=r7=1 r7’x7y7 + r7x7’y7’=1 → V=1 Det gäller att X=64, Y=-65, korrekt resultat R=129. Operationen innebär X=64, 2~Y=65, R=-127. Operationens resultat är fel. Av teckenöverläggningen (två positiva tal adderas men resultatet blir negativt) ser vi att V-flaggan sätts till 1 som indikator på spillet. Resultatet är skilt från 0 varför Z-flaggan sätts till 0. 55 Lösningsförslag 4 Kombinatoriska nät 4.1 Skapa funktionerna: a,b,c,d,e,f,g och minimera med Karnaughdiagram: a 00 00 01 10 1 1 1 1 11 - - - - 10 1 1 - - c AB 11 1 01 AB b CD 00 01 11 00 1 1 1 01 1 1 1 - - 10 1 1 - - 11 1 - 10 1 g 1 1 01 1 11 - - - - 10 1 1 - - 11 10 1 1 1 CD 01 1 1 11 - 10 1 - - - - - 01 11 10 00 1 01 1 1 11 - - - - 10 1 1 - - - - - - 11 10 CD 00 AB 1 01 00 1 01 1 1 11 - - - - 10 1 1 - - CD 00 AB 1 10 1 - 1 01 AB 1 11 00 f CD 01 AB 10 00 1 - 00 11 00 - 01 01 10 11 00 00 d CD e AB CD Sammanfattningsvis: 1 1 56 1 Lösningsförslag 4.2 4.3 Funktionstabell för “4-bitars INCREMENT”: x3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 x2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 x1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 u3 x0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 u3 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 u2 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 u1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 u0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 u2 x1x0 00 01 11 10 00 0 0 0 0 x3x2 01 0 0 1 11 1 1 10 1 1 00 01 11 10 00 0 0 1 0 0 x3x2 01 1 1 0 1 0 1 11 1 1 0 1 1 1 10 0 0 1 0 u3 x3 x2 x1 x0 x3 x2 x3 x1 x3 x0 u1 u2 x2 x1 x0 x2 x0 x2 x1 u0 x1x0 00 01 11 10 00 0 1 0 1 x3x2 01 0 1 0 11 0 1 10 0 1 u1 x1 x0 x1 x0 x1x0 x1x0 00 01 11 10 00 1 0 0 1 1 x3x2 01 1 0 0 1 0 1 11 1 0 0 1 0 1 10 1 0 0 1 u0 x0 57 Lösningsförslag 4.4 Funktionstabell för “4-bitars DECREMENT”: x3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 x2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 x1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 u3 x0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 u3 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 u2 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 u1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 u0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 u2 x1x0 00 01 11 10 00 1 0 0 0 x3x2 01 0 0 0 11 1 1 10 0 1 00 01 11 10 00 1 0 0 0 0 x3x2 01 0 1 1 1 1 1 11 0 1 1 1 1 1 10 1 0 0 0 u3 x3 x2 x1 x0 x3 x2 x3 x0 x3 x1 u1 u2 x2 x1 x0 x2 x0 x2 x1 u0 x1x0 00 01 11 10 00 1 0 1 0 x3x2 01 1 0 1 11 1 0 10 1 0 u1 x1 x0 x1 x0 x1x0 x1x0 00 01 11 10 00 1 0 0 1 0 x3x2 01 1 0 0 1 1 0 11 1 0 0 1 1 0 10 1 0 0 1 u0 x0 58 Lösningsförslag 4.5 a) f1 0 0 1 1 b) f0 0 1 0 1 u7 x7 x6 SI x7 u6 x6 x5 x7 x7 x7 x6 SI x7 f1 f0 f1 f0 1 0 2 u5 x5 x4 x6 x6 u4 x4 x3 x5 x5 u3 x3 x2 x4 x4 u2 x2 x1 x3 x3 x6 x5 x7 x7 3 f1 f0 0 1 2 3 u1 x1 x0 x2 x2 u0 x0 SI x1 x1 SO 0 x7 x0 x0 x5 x4 x6 x6 f1 f0 1 0 2 3 x4 x3 x5 x 5 f1 f0 0 1 2 3 u7 u6 u5 u4 x3 x2 x4 x4 x2 x1 x3 x3 x1 x0 x2 x2 x0 SI x1 x1 1 0 2 3 f1 f0 0 1 u3 2 3 f1 f0 1 0 u2 2 3 f1 f0 0 1 u1 2 0 x7 x0 x0 f1 f0 3 0 a) s1 s0 b) s1 s0 c) s1 s0 0 0 0 0 1 2 3 s1 s0 x3 0 0 0 1 2 3 0 s1 s0 x2 x3 0 0 1 3 0 2 x1 x2 x3 0 s1 s0 0 1 2 3 u3 u2 u1 u0 x0 x1 x2 x3 x3 x0 x1 x2 x2 x3 x0 x1 x1 x2 x3 x 0 1 0 2 3 s1 s0 0 1 2 3 s1 s0 1 0 2 3 s1 s0 0 1 2 3 u3 u2 u1 u0 x3 x3 x3 x3 x3 x3 x3 x3 x2 x3 x3 x3 x1 x2 x3 x 3 1 0 2 3 s1 s0 0 u3 1 2 3 s1 s0 1 0 u2 2 3 s1 s0 0 u1 1 2 3 u0 4.7 x är selektorvariabel: y är selektorvariabel: z är selektorvariabel: = z y 0 y 1 f 1 & z 1 1 x 1 y x f y ³1 1 x ³1 0 f 0 & y 1 z Totalt 1 grind Totalt 3 grindar Totalt 5 grindar 59 2 SO u0 4.6 0 1 3 Lösningsförslag 5 Sekvensnät 5.1 S R q 5.2 S R C q 5.3 J K C q 5.4 D C q 5.5 T C q 60 Lösningsförslag 5.6 C 0 2 3 1 q1 q0 5.7 T2 = q0' + q1' T1 = q2 T0 = q1 q2 7 0 4 2 6 3 5 1 C q2 q1 q0 5.8 T 2 = xq 0 q 1 + x 'q 0 'q 1 ' T 1 = xq 0 + x 'q 0 ' T0 = 1 x 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 q2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 q1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 q0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 T2 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 T1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 T0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 q2+ 1 0 0 0 0 1 1 1 0 0 0 1 1 1 1 0 q1+ 1 0 0 1 1 0 0 1 0 1 1 0 0 1 1 0 q0+ 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 X=0 X=0 110 X=0 111 000 X=0 X=1 X=1 X=1 001 X=1 X=1 101 010 X=1 X=1 X=1 X=0 100 X=0 61 X=0 011 X=0 Lösningsförslag 5.9 q 0 + = q 1 'q 0 ' + xq 1 ' + xq 0 ' q 1 + = q 1 q 0 + xq 1 + xq 0 x 0 0 0 0 1 1 1 1 00 q1 q0 q1+ q0+ 0 0 0 1 0 1 0 0 1 0 0 0 1 1 1 0 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 0 01 X=0 X=1 X=0 10 X=1 5.10 Alternativ b). 5.11 0 11 1 2 4 15 12 5 3 6 14 10 7 q0 9 13 8 5.12 x q0 q1 q0 x q1 q1 q0 & ³1 1T CP & x 0 0 0 0 1 1 1 1 q1 C1 q1 & q0 ³1 1T CP & C1 T1 q1q0 0 x q0 1 01 11 10 0 1 0 - 1 T1 0 1 0 0 1 1 T0 q1+ q0+ 1 0 1 0 0 0 0 0 0 1 0 1 0 1 0 1 1 1 1 1 1 0 T0 00 0 q1 q0 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 1 - x q1q0 00 01 11 10 0 1 0 0 - 1 1 0 1 - 62 11 Lösningsförslag 5.13 x q1 q0 & x q1 q0 q2 ³1 & & x q1 & C1 CP & q0 1D C1 q1 1D CP x q1 q1 q2 q1 ³1 q0 ³1 q2 & 1D CP x q2 q0 x q2 C1 q0 & 5.14 a) För D-vippor gäller att nästa tillstånd (q+) är lika med D-värdet före klockningen. Därför skall D-värdet för varje D-vippa väljas till motsvarande q+-värde, vilket också framgår av tillståndstabellen. q1 q2 q3 q1+ q2+ q3+ D1 D2 D3 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 1 0 0 - - - - - - 1 0 1 1 1 1 1 1 1 1 1 0 - - - - - - 1 1 1 0 1 1 0 1 1 q2q3 q1 q2q3 D1 00 01 11 10 0 0 1 0 0 1 - 1 D1 q 2q3 0 - q1 q2q3 D2 00 01 11 10 0 0 0 1 0 1 - 1 1 D2 q1 q 2q3 63 - q1 D3 00 01 11 10 0 1 1 0 0 1 - 1 1 - D3 q1 q 2 Lösningsförslag Realisering med D-vippor: q2 q3 q1 1D D C1 CP q1 q2 q3 q1 q2 ³1 1D CP C1 q3 ³1 1D CP C1 q2 q1 q3 b) q1 q2 q3 q1+ q2+ q3+ T1 T2 T3 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 1 1 0 0 - - - - - - 1 0 1 1 1 1 0 1 0 1 1 0 - - - - - - 1 1 1 0 1 1 1 0 0 q2q3 q1 q2q3 T1 00 01 11 10 0 0 1 0 0 1 - 0 1 - q1 q2q3 T2 00 01 11 10 0 0 0 0 1 1 T1 q1 q 2q3 q1q 2 - 1 0 q1 - T2 q1 q 2 q 2 q 3 T3 00 01 11 10 0 1 0 1 0 1 - 0 0 - T3 q 2 q 3 q1q 2 q 3 Realisering med T-vippor q1 q2 q1 q3 q1 q2 q1 ³1 q1 q2 C1 q1 q2 ³1 1T q2 CP q3 q2 q3 ³1 1T q2 CP C1 q2 64 q3 CP q3 1T C1 q3 Lösningsförslag 5.15 x 0 0 0 0 1 1 1 1 q1 q0 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 T1 0 1 1 0 1 0 0 1 T0 q1+ q0+ 1 0 1 0 1 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 0 1 x q1 =1 q1 =1 q0 1T CP C1 q1 q0 1 1T CP C1 q0 q1q0 x q1q0 T1 00 01 11 10 0 0 1 0 1 1 1 0 1 x 0 T0 00 01 11 10 0 1 0 1 0 1 0 1 0 1 5.16 T2 x q2 q1 q0 T2 T1 T0 q2+ q1+ q0+ 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 1 1 0 0 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 1 0 1 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 1 0 1 1 0 1 0 0 0 1 1 1 0 0 0 0 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 1 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 0 T1 q1q0 00 01 11 00 01 xq2 10 xq2 1 11 01 11 x q1 10 q2 1 11 1 1 =1 =1 1 1T CP 1 & q0 CP q2 q1 1T C1 q1 1 q0 q0 =1 1T CP 65 C1 1 1 1 q2 & q0 1 1 10 1 10 1 01 11 00 1 00 01 01 q1q0 00 00 1 T0 xq2 10 1 11 10 q1q0 C1 q0 Lösningsförslag 5.17 y=1 x=0 y=1 x=0 x=0 000 y=0 001 y=0 x=1 y=1 x=0 010 y=0 x=1 y=1 y=1 x=0 011 y=0 x=0 100 y=0 x=1 y=1 x=0 101 y=0 x=1 110 y=0 x=1 x=1 x y q2 q1 q0 q2+ q1+ q0+ D2 1 0 x x x 0 1 1 0 0 0 1 0 0 1 x x x 0 0 0 1 1 1 0 1 1 1 x x x 0 0 0 D1 00 01 11 10 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 0 1 1 1 1 0 1 1 1 0 0 D0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1 0 1 1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 0 y 1 q1 & 1D 1 & q2 q2 q0 q1 & 1 00 01 11 10 q2 x q2 q1 q0 y x C1 CP ³1 & x=1 00 01 11 10 0 y x 111 y & ³1 1D 1 & x & ³1 q0 C1 CP 1 q1 q0 1D C1 CP q1 q0 & 5.18 Q3 Q2 2D Q1 2D 1C2 2D 1C2 G1 Q0 2D 1C2 G1 1C2 G1 G1 CP e 5.19 d q2 c 0 1 d 2D CP 1C2 q1 q3 0 1 q3 2D CP G1 e d 1C2 q0 q2 0 1 q2 2D CP 1C2 G1 e d c q1 0 1 q1 2D CP G1 e 66 d 1C2 q3 q0 0 1 q0 2D CP G1 e 1C2 G1 e c Lösningsförslag 6 Dataväg ALU och minne 6.1 Operation (RTN) T→A T → A,R R → T, A→R T→A =AR a) b) c) 6.2 Aktiva styrsignaler LDA,OET LDA, LDR, OET 1) OER, LDT 2) OEA, LDR 3) OET, LDA a) Cykel 1 2 eller... 1 Operation (RTN) 0→R R→A Aktiva styrsignaler LDR OER, LDA 0→A Source = 0; OES, LDA Operation (RTN) A+1 → R R→A Aktiva styrsignaler OEA, F(1,0,0,1), Cin, LDR OER, LDA Operation (RTN) Aktiva styrsignaler OEA, F(0,1,0,1), LDR OER, LDA b) Cykel 1 2 c) Cykel 1 2 ~A → R R→A d) Cykel 1 2 Operation (RTN) R→A Aktiva styrsignaler OEA, F(0,1,0,1), Cin, LDR OER, LDA Cykel Operation (RTN) Aktiva styrsignaler 2016 A A-1 R R A F016 T A T R R A Source=20; LDA F(1,0,1,0); OEA; LDR OER; LDA Source=F0; LDT F(1,0,0,0); OEA; LDR OER; LDA Operation (RTN) Aktiva styrsignaler Source = 1016; OES; LDTA MR; LDA 2~A → R 6.3 1 2 3 4 5 6 6.4 a) Cykel 1 2 1016 → TA (TA) →A b) Cykel 1 2 3 Operation (RTN) 1016 → TA (TA) →TA (TA) →A Aktiva styrsignaler Source = (10)16; OES; LDTA MR; LDTA MR; LDA c) Cykel 1 2 Operation (RTN) A → TA (TA) →A Aktiva styrsignaler OEA; LDTA MR; LDA d) Cykel 1 2 Operation (RTN) 1016 → TA A→ (TA) Aktiva styrsignaler Source = 1016; OES; LDTA MW; OEA 67 Lösningsförslag 6.5 Cykel 1 2 3 4 Operation (RTN) Aktiva styrsignaler 1416 TA M(TA) T A+T R R A Src=1416; OES; LDTA MR; LDT OEA; f3; f1; f0; LDR OER; LDA Operation (RTN) Aktiva styrsignaler 1316 TA M(TA) T 1216 TA M(TA)+T R 1416 TA R M(TA) Src=1316; OES; LDTA MR; LDT Src=1216; OES; LDTA MR; f3; f1; f0; LDR Src=1416; OES; LDTA OER; MW Operation (RTN) Aktiva styrsignaler 1316 TA M(TA) T A+T R ALU(N,V,Z,C) CC 2116 TA R M(TA) 1216 TA M(TA)+C R 2016 TA R M(TA) Src=1316; OES; LDTA MR; LDT OEA; f3; f1; f0; LDR; LDCC Src=2116; OES; LDTA OER; MW Src=1216; OES; LDTA MR; f3; f0; g1; LDR Src=2016; OES; LDTA OER; MW 6.6 Cykel 1 2 3 4 5 6 6.7 Cykel 1 2 3 4 5 6 7 8 9 68 Lösningsförslag 7 Styrenheten 7.1 a) Tillstånd b) 7.2 RTN-beskrivning Aktiva styrsignaler (=1) Q4 M(SP)→Y; LDY; g12;MR Q5 SP+1→SP; INCSP; NF Instruktionen är a) Tillstånd b) 7.3 RTN-beskrivning Aktiva styrsignaler (=1) Q4 SP-1→SP; DECSP Q5 Y→M(SP); OEY; g12; MW; NF Instruktionen är RTN-beskrivning Aktiva styrsignaler (=1) Q4 n→T; PC+1→PC MR; LDT; INCPC Q5 Y→M(T+X); OEY; MW; g13; g12; NF b) Instruktionen är RTN-beskrivning Aktiva styrsignaler (=1) Q4 n→T; MR; LDT; Q5 M(T+X)→R; OEX; f3;f1; f0;LDR; Q6 R→PC; OER; LDPC; NF b) Instruktionen är JMP n,X a) Tillstånd Q4 Q5 RTN-beskrivning Aktiva styrsignaler (=1) A’→R; OEA; f2;f0;LDR; ALU(N,Z) →CC(n,Z); 0→V; g5; g3; g2; LDCC R→A; OER; LDA; NF b) Instruktionen är 7.6 STY n,X a) Tillstånd 7.5 PSHY a) Tillstånd 7.4 PULY COMA a) Tillstånd RTN-beskrivning Aktiva styrsignaler (=1) Q4 (d7)A>>1→R; OEA; f3;f2;f1; f0;LDR; LDCC Q5 R→A; OER; LDA; NF b) Instruktionen är ASRA 69 Lösningsförslag 7.7 a) Tillstånd RTN-beskrivning Aktiva styrsignaler (=1) Q4 A→T OEA; LDT Q5 (C)(M(A+Y))>>1→R; MR; g13; f3;f2;f1; g1;LDR; LDCC Q6 R→ M(A+Y); OER; MW; g13; NF b) Instruktionen är 7.8 a) Tillstånd RTN-beskrivning Aktiva styrsignaler (=1) Q4 PC→TA,T; OEPC; LDTA; LDT Q5 M(TA)+1→R; PC+1→PC; MR; f3;f1;f0; g0;LDR; INCPC Q6 if(N=1) R→ PC; OER; LDPC=N; NF b) Instruktionen är 7.9 ROR A,Y BMI Adr a) Tillstånd RTN-beskrivning Aktiva styrsignaler (=1) Q4 PC→TA,T; OEPC; LDTA; LDT Q5 M(TA)+1→R; PC+1→PC; MR; f3;f1;f0; g0;LDR; INCPC Q6 if(C+Z=1) R→ PC; OER; LDPC=C+Z; NF b) Instruktionen är BLS Adr 7.10 Tillstånd RTN-beskrivning Aktiva styrsignaler (=1) Q4 M(PC)→TA; PC+1→PC; MR; LDTA; INCPC; Q5 M(TA)’→R; MR; g14; f2;f0;LDR; ALU(N,Z) →CC(n,Z); 0→V; g5; g3; g2; LDCC R→M(TA); OER; MW; g14; NF Q6 7.11 Tillstånd RTN-beskrivning 0 A→T; Aktiva styrsignaler (=1) OEA; LDT; 1 M(T+X)→R; OEX; f3;f1; f0;LDR; 2 R→PC; OER; LDPC; NF 70 Lösningsförslag 7.12 Tillstånd RTN-beskrivning Aktiva styrsignaler (=1) Q4 n→T; PC+1→PC MR; LDT; INCPC Q5 M(T+SP)>>1(C)→R; MR; g12; f3;f2;f0; g1;LDR; ALU(N,V,Z,C)→CC(N,V,Z,C) LDCC; Q6 R→ M(T+SP); OER; MW; g12; NF Tillstånd RTN-beskrivning Aktiva styrsignaler (=1) Q4 PC→TA,T; OEPC; LDTA;LDT Q5 M(TA)+1→R; PC+1→PC; MR; f3;f1;f0; g0;LDR; INCPC Q6 if(N V=1) R→ PC; OER; LDPC=N Z; NF 7.13 71 Lösningsförslag 8 Assemblerprogrammering 8.1 OPERAND = Adress – (PC+2) = 81 – (59+2) = 26 (Alla adressvärden på hexadecimal form) 8.2 OPERAND = Adress – (PC+2) = 10 – (62+2) = AC (Alla adressvärden på hexadecimal form) 8.3 LDAA CMPA B(Villkor) #$85 #U Hopp ; Talet (85)16 till A ; Bilda (85)16 - U Storleksjämförelse görs alltså mellan (85)16 = (133)10 och U. Alla hoppvillkoren i uppgifter a,b,c och d avser tal utan inbyggt tecken. För 8-bitars tal utan inbyggt tecken gäller: 0 U 255 Om det villkorliga hoppet är: a) BHI (Higher) utförs hoppet om b) BHS (Higher or Same) utförs hoppet om c) BLS (Lower or Same) utförs hoppet om d) BLO (Lower) utförs hoppet om 133 U, dvs U 133 133 ³ U, dvs U 133 133 U, dvs U ³ 133 133 U, dvs U 133 Svar: 0 U 133 Svar: 0 U 133 Svar: 133 U 255 Svar: 133 U 255 Alla hoppvillkoren i uppgifter e,f,g och h avser tal med inbyggt tecken (2-komplementrepresentation). För 8-bitars tal med inbyggt tecken (2-komplementrepresentation) gäller: -128 U +127 Talet (85)16 tolkas som det negativa talet -(100 - 85)16 = -(7B)16 = -(123)10 Om det villkorliga hoppet är: e) BGT (Greater Than) utförs hoppet om -123 U, dvs U -123 U skall alltså tillhöra intervallet [-128, -123) Svar: 128 U 133 f) BGE (Greater or Equal) utförs hoppet om -123 ³ U, dvs U -123 U skall alltså tillhöra intervallet [-128, -123] Svar: 128 U 133 g) BLE (Less or Equal) utförs hoppet om -123 U, dvs U ³ -123 U skall alltså tillhöra intervallet [-123, +127] Svar: 0 U 127 eller h) BLT (Less Than) utförs hoppet om -123 Y, dvs U -123 U skall alltså tillhöra intervallet (-123, +127] Svar: 0 U 127 eller 8.4 Adress Innehåll Assemblerkod (disassemblering) ORG $E0 E0 87 FCB %10000111 E1 ?? RMB 2 E2 ?? E3 7A FCB $7A E4 61 FCB ´a´ E5 41 FCS ”ABCD” E6 42 E7 43 E8 44 72 133 U 255 133 U 255 Lösningsförslag 8.5 Adress Innehåll 30 31 32 33 34 35 36 37 38 39 90 0C F5 E1 FC 09 23 FA 33 38 Adress Innehåll 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 90 32 F1 04 E1 31 F5 E1 FC 38 31 F1 31 25 F7 33 2F ?? 10 02 0A 00 Start: Loop: Stop: Assemblerkod (disassemblering) ORG $30 LDX #$0C LDA STA ,X+ $FC TSTA BPL Loop JMP Stop 8.6 Length: Start: Assemblerkod (disassemblering) ORG $20 EQU 4 LDX #Table LDA Length STA Count LDA STA ,X+ $FC DEC Count LDA Count BNE Loop Stop Jmp Stop Count Table: RMB FCB 1 $10,%10,10,0 Loop: 73 Lösningsförslag 8.7 20: 22: 24: L1: 25: 27: 28: 2A: L2: LDX LDY LDA BEQ STA BRA BRA #start #dest ,X+ L2 ,Y+ L1 L2 LDA NEGA RORA ADDA ADCA BEQ LDA BRA $7A 8.8 20: 22: 23: 24: 26: 28: 2A: 2C: L2: $C4 $C5 L2 #1 L2 8.9 PC SP (SP) (SP+1) (SP+2) (SP+3) (SP+4) 22 F0 - 25 EF 50 - 45 EB 10 50 27 50 - 60 EA 49 10 50 27 50 74 49 EB 10 50 27 50 - 27 EF 50 - Lösningsförslag 8.10 ; Symboliska adresser DipSwitch: EQU $FB HexDisp: EQU $FC ; Subrutin DipHex DipHex: LDA LDX DipHex10: TSTA BEQ LEAX LSRA BCC DipSwitch #0 DipHex20 1,X DipHex10 DipHex20: STX RTS HexDisp 8.11 DipSwitch1: DipSwitch2: LedDisplay: main: EQU EQU EQU JSR BRA DipSwitchOr: LDA ORA STA RTS $FB $FC $FB DipSwitchOr main DipSwitch1 DipSwitch2 LedDisplay 8.12 ; Huvudprogram BOS: EQU INPORT: EQU UTPORT: EQU Error : EQU $20 $FB $FC $5D ; Felkod (E) START : ORG LDX $20 #SegCode ; Segmenttabell för 7-segmentdisplay LOOP: LDA INPORT ; Läs inport $FD STA ANDA STA TEMP #$0F LNIB ; Skapa kopia ; Maska bort bit 4-7 ; Lagra låg nibble i minnet LDA LSRA LSRA LSRA LSRA TEMP ; Hämta tillbaka kopian ; Placera bit7-4 till höger i A-reg ADDA LNIB ; Addera nibblar CMPA BHI #$09 ERROR ; >9? ; Ja! Visa feltecken på display LDA STA BRA A,X UTPORT LOOP ; Nej, visa summasiffra på display LDA STA BRA #Error UTPORT LOOP ; Felkod RMB 1 ; Plats för kopia av A ERROR: TEMP: ; Nästa varv ; Nästa varv 75 Lösningsförslag LNIB: RMB 1 ; Plats för nibblekopia SegCode: FCB $77,$22,$5B,$6B,$2E,$6D,$7D,$23,$7F,$6F ORG FCB $FF START ; RESET-vektor 8.13 ; Subrutin CNTONE CNTONE: CLR COUNT CTLOOP: ; Nolla 1-räknare TSTA BEQ CNTOUT ; Reg A tomt? ; Ja, återvänd LSLA BCC CTLOOP ; Nej, skifta ut bit i carry ; Carry=0? Ja, fortsätt INC BRA COUNT CTLOOP ; Carry= 1, öka 1-räknare ; Fortsätt CNTOUT: LDA RTS COUNT ; Läs av räknare COUNT : RMB 1 ; Plats för 1-räknare 76 Lösningsförslag 8.14 ; Subrutin ASCBIN ASCBIN: ANDA #$7F ASCERR: ASCOK : ;Maska bort bit 7 SUBA BLO #$30 ASCERR ;Justera för siffror 0-9 ;Ej siffra. Fel CMPA BLS #9 ASCOK ;Siffra 0-9? ;Ja, återhopp SUBA CMPA BLO #7 #10 ASCERR ;Nej, justera för siffra A-F ;Siffra A-F? ;Nej. Fel CMPA BLS #15 ASCOK ;Siffra A-F? ;Ja, återhopp LDA RTS #$FF ;Ej siffra, sätt felflagga 8.15 ; Subrutin CCOUNT CCOUNT: PSHX ;Spara register på stack CLR COUNT ;Nollställ "C"-räknare LDA BEQ ,X+ CCEXIT ;Hämta data från textsträng ;Strängslut ANDA #$7F ;Nej, maska bort bit 7 CMPA BNE #'C' CCLOOP ;Testa om "C" ;Nej, fortsätt med nästa INC BRA COUNT CCLOOP ;Ja, öka "C"-räknare ;Fortsätt med nästa CCEXIT: LDA PULX RTS COUNT ;Hämta resultat ;Återställ register COUNT : RMB 1 ;Räknare för "C" COUNT ;Spara register på stack ;Nollställ "Aa"-räknare LDA BEQ ,X+ AaEXIT ;Hämta data från textsträng ;Strängslut ANDA ORA CMPA BNE #$7F #$20 #'a' AaLOOP ;Nej, maska bort bit 7 (paritetsbit) ;Gör om till liten bokstav (ettställ bit 5) ;Testa om "a" ;Nej, fortsätt med nästa INC BRA COUNT AaLOOP ;Ja, öka "Aa"-räknare ;Fortsätt med nästa AaEXIT: LDA PULX RTS COUNT ;Hämta resultat ;Återställ register COUNT : RMB 1 ;Plats för räknare CCLOOP: 8.16 ; Subrutin AaCNT AaCNT : PSHX CLR AaLOOP: 77 Lösningsförslag 8.17 ; Subrutin SMALLCNT SMALLCNT: PSHX ;Spara register på stack CLR COUNT ;Nollställ bokstavsräknare LDA BEQ ,X+ SCEXIT ;Hämta data från textsträng ;Strängslut ANDA #$7F ;Nej, maska bort bit 7 CMPA BLO CMPA BHI #'a' SCLOOP #'z' SCLOOP ;Testa om ;Ej liten ;Testa om ;Ej liten INC BRA COUNT SCLOOP ;Ja, öka bokstavsräknare ;Fortsätt med nästa SCEXIT: LDA PULX RTS COUNT ;Hämta resultat ;Återställ register COUNT : RMB 1 ;Bokstavsräknare SCLOOP: "a" bokstav, fortsätt med nästa "z" bokstav, fortsätt med nästa 8.18 ; Subrutin LCOUNT LCOUNT: PSHX ;Spara register på stack CLR COUNT ;Nollställ bokstavsräknare LDA BEQ ,X+ LEXIT ;Hämta data från textsträng ;Strängslut ANDA ORA CMPA BLO CMPA BHI #$7F #$20 #'a' LLOOP #'z' LLOOP ;Nej, maska bort bit 7 ;Ettställ bit 5. (Stora bokstäver -> små) ;Testa om "a" ;Ej liten bokstav, fortsätt med nästa ;Testa om "z" ;Ej liten bokstav, fortsätt med nästa INC BRA COUNT LLOOP ;Ja, öka bokstavsräknare ;Fortsätt med nästa LEXIT : LDA PULX RTS COUNT ;Hämta resultat ;Återställ register COUNT : RMB 1 ;Plats för bokstavsräknare LLOOP: 8.19 * Subrutin PRINT PRINT: PSHA PSHX ;Spara register på stack PLOOP: LDA BEQ ANDA ,X+ PREXIT #$7F ;Hämta data från textsträng ;Strängslut ;Nej, maska bort ev bit 7 WAIT: TST BPL STA BRA STATUS WAIT UTPORT PLOOP ;Vänta tills skrivaren redo. Bit 7 (N-flaggan=0?) ;Ja, vänta tills N = 1 PREXIT: PULX PULA RTS ;Återställ register 78 Lösningsförslag 8.20 uppgift d) LedDisplay: main: EQU ORG JSR BRA $FC $20 Blink main LDA STA JSR LDA STA JSR BRA #$FF LedDisplay BLINKDELAY #0 LedDisplay BLINKDELAY Blink LDX #$200 LEAX CPX BNE RTS -1,X #0 BLINKDELAY1 ; uppgift a) Blink: ; uppgift b) BLINKDELAY: BLINKDELAY1: ; uppgift c) BLINKDELAY BLINK X ¬20016 FC16 ¬ 11111111 X ¬ X-1 BLINKDELAY FC16 ¬ 00000000 NEJ BLINKDELAY X=0 ? JA RETUR 8.21 a) b) LedDisplay: RLJUSH: RLJUSH1: EQU LDA $FC #$80 STA JSR RORA BCS BRA LedDisplay BLINKDELAY RLJUSH RLJUSH1 c) RLJUSH A ¬ $80 FC16 ¬ (A) BLINKDELAY A ¬ (A)>>1 JA C=1 ? NEJ 79 Lösningsförslag 8.22 ; Subrutin RLJUSH16 LedHigh: EQU LedLow: EQU $FB $FC RLJUSH16: LDA CLR RLJUSH16_1: LDX STX STA JSR RORA ROR BCS BRA #$80 TMP TMP: 1 TMP LedLow LedHigh BLINKDELAY TMP RLJUSH16 RLJUSH16_1 RMB 8.23 ; Huvudprogram BOS: EQU INPORT: EQU UTPORT: EQU $20 $FB $FC ORG LDSP LDX $20 #BOS #SegCode ;Segmenttabell för 7-segmentdisplay LOOP: LDA ANDA STA LDA STA LDA JSR CLR JSR BRA INPORT #$0F COPY A,X UTPORT COPY DELAY UTPORT DELAY LOOP ; ; ; ; ; ; ; ; ; ; COPY: SegCode: RMB FCB FCB FCB START: ORG FCB Läs inport $FB Maska bort bit 4-7 Spara kopia av avläst värde Hämta segmentkod för hexsiffra Visa hexsiffra på 7-segmentdisplay Hämta tillbaka sparad kopia Vänta ett antal sekunder som bestäms av A-reg Släck display Vänta ett antal sekunder som bestäms av A-reg Upprepa 1 ; Plats för kopia $77,$22,$5B,$6B,$2E $6D,$7D,$23,$7F,$6F $3F,$7C,$55,$7A,$5D,$1D $FF START ; RESET-vektor 8.24 ; Subrutin KEYCMP som jämför två strängar och returnerar antal fel KEYCMP: PSHX ;Spara register på stack PSHY CLR ERRNUM ;Nollställ felräknare KLOOP: LDA BEQ ANDA STA LDA CMPA BEQ INC BRA ,X+ KEXIT #$7F TEMP ,Y+ TEMP KLOOP ERRNUM KLOOP ;Hämta data från "User string" ;Strängslut ;Maska bort bit 7 KEXIT: LDA PULY PULX RTS ERRNUM ;Hämta antal fel ;Återställ register TEMP: ERRNUM: RMB RMB 1 1 ;Temporärvariabel ;Variabel för antal fel ;Hämta tecken från nyckelsträng ;Jämför med nyckel ;Data matchar, testa nästa ;Data stämmer ej med nyckel. Öka felräknare ;Testa nästa 80 Lösningsförslag 8.25 BOS: DIPSW: HEXDIS: EQU EQU EQU $20 $FC $FB START : ORG LDSP $20 #BOS LDA STA CMPA BNE JSR BRA DIPSW TEMP #$0C NEXT1 SUB4 LOOP NEXT1 : ANDA CMPA BNE JSR BRA #%00110011 #%00010010 ;??01??10 SUB2 NEXT2 SUB2 LOOP NEXT2 : LDA ANDA CMPA BNE JSR BRA TEMP ;Hämta kopia av A-reg #%00010001 #%00010001 ;???1???1 SUB1 NEXT3 SUB1 LOOP NEXT3: LDA ANDA CMPA BNE JSR BRA TEMP ;Hämta kopia av A-reg #%00010010 #%00000010 ;???0??1? SUB3 NEXT4 SUB3 LOOP NEXT4: CLR BRA HEXDIS LOOP TEMP: RMB 1 LOOP: ;Initiering av stackpekare ;Gör kopia ;00001100 SUB4 ;För kopia av A-reg ;***************************************************************************** SUB1: PSHA LDA #1 STA HEXDIS PULA RTS ;***************************************************************************** SUB2: PSHA LDA #2 STA HEXDIS PULA RTS ;***************************************************************************** SUB3: PSHA LDA #3 STA HEXDIS PULA RTS ;***************************************************************************** SUB4: PSHA LDA #4 STA HEXDIS PULA RTS ;***************************************************************************** ORG $FF FCB START ;RESET-vektor 81 Lösningsförslag 8.26 BOS: DIPSW : HEXDIS: EQU EQU EQU $20 $FB $FB START : LOOP: ORG LDSP LDX $20 #BOS #JTAB ;Initiering av stackpekare LDA CMPA BHI DIPSW #7 ERROR ;Läs inport DIPSW ;Maxvärde ;Ogiltigt. Visa E på HEXDISPLAY LDA STA LDX JSR BRA A,X TEMP TEMP 0,X LOOP ;Ladda adress till subrutin från tabell ERROR : LDA STA BRA #$E HEXDIS LOOP ;Felkod TEMP: RMB 1 JTAB: FCB $80,$67,$75,$52,$90,$B9,$AF,$E0 EQU EQU EQU EQU $20 $FB $FC $FB ;Utför vald subrutin ;Upprepa 8.27 BOS: INNUMB: INEDGE: UTPORT: ORG $20 LDSP #BOS ;Initiering av stackpekare CLR EDGECT ;Nollställ flankräknare CLR UTPORT ;Antal negativa flanker är 0 LOOP: LDA INNUMB ;Läs inport för bitnummer (Avkänn bit nr x) JSR NEDGE ;Vänta på negativ flank på inport INEDGE, bit x INC EDGECT ;Öka flankräknare LDA EDGECT ;Hämta antal flanker STA UTPORT ;Mata ut antal negativa flanker på UTPORT BRA LOOP ;Upprepa ;*********************************************************************************** ; Subrutin som väntar på negativ flank ; Om positiv flank skall registreras skall ; väntelooparna WAIT0 och WAIT1 kastas om. START: NEDGE : PSHA PSHX ;Spara på stack LDX LDA #BMASK A,X WAIT0 : BITA BEQ INEDGE WAIT0 ;Läs givare och maska fram bit med nr enl INNUMB WAIT1 : BITA BNE INEDGE WAIT1 ;Läs givare och maska fram bit med nr enl INNUMB ;Hämta bitmask PULX ;Återställ reg PULA RTS ;*********************************************************************************** EDGECT: RMB 1 ;Flankräknare BMASK : FCB 1,2,4,8,16,32,64,128 ORG FCB $FF START ;Mask för bit 0-7 82 Lösningsförslag 8.28 ; Subrutin PCNT PCNT: PSHX LOOP: PEXIT: ;Spara register CLR HITCNT ;Nollställ träffräknare LDA ,X+ ;Hämta tabellvärde CMPA BEQ #$FF PEXIT ;Slutmarkering? ;Ja ANDA CMPA BHS #$F0 #$60 LOOP ;Maska fram bit 7-4 ;Testa villkor ;Ej träff, testa nästa INC BRA HITCNT LOOP ;Träff, öka räknare ;Testa nästa LDA HITCNT ;Hämta resultat PULX RTS HITCNT: ;Återställ register RMB 1 ORG FCB $FF START ;Träffräknare 8.29 ; Subrutin SWAP som byter ordning på nibblar i en dataarea SWAP: SWLOOP PSHA PSHX STA BEQ SWCOUNT SWEX LDA STA 0,X TEMP LSLA ROL LSLA ROL LSLA ROL LSLA ROL ;Spara register på stack ;Hämta data från dataarea ;Gör kopia av data ;16-bitars skift TEMP TEMP TEMP TEMP ;Nu är TEMP swappad LDA STA TEMP ,X+ ;Skriv tillbaka till dataarea och öka pekare DEC BNE SWCOUNT SWLOOP SWEX: PULX PULA RTS SWCOUNT: TEMP: RMB RMB ;Återställ register 1 1 ;Räknare för antal bytes ;Temp variabel 83 Lösningsförslag 8.30 ; Subrutin EXCHG EXCHG PSHA PSHX PSHY EXLOOP: ;Spara register på stack TSTA BEQ STA BLKEX DCOUNT ;Några dataord att flytta? ;Nej. Färdigt ;Räknare för antal dataord kvar att flytta LDA STA LDA STA LDA STA DEC BNE 0,X TEMP 0,Y ,X+ TEMP ,Y+ DCOUNT EXLOOP ;Hämta dataord från ;Mellanlagra ;Hämta dataord från ;Skriv dataord från ;Hämta dataord från ;Skriv dataord från ;Minska ordräknare ;Färdigt? Nej DATA1 DATA2 DATA2 till DATA1, öka pekare2 DATA1 DATA2 till DATA1, öka pekare2 ; Nu är det färdigt BLKEX: PULY ;Återställ register PULX PULA RTS DCOUNT: TEMP: RMB RMB 1 1 ;Räknare för antal dataord kvar att flytta ;Plats fär mellanlagring av dataord HITCNT ;Spara register på stack ;Nollställ Träffräknare 8.31 ; Subrutin ODDCNT: PSHX CLR ODDLOOP LDA BEQ ANDA CMPA BNE ,X+ ODDEX #%10000001 #%00000001 ODDLOOP ;Hämta data från textsträng. Öka pekare ;Strängslut ;Maska dont't care-bitar ;Testa bitmönster ;Ej träff, testa nästa COUNT : INC BRA HITCNT ODDLOOP ;Träff öka räknare ;Testa nästa ODDEX : LDA PULX RTS HITCNT RMB 1 HITCNT: ;Återställ register ;Träffräknare 8.32 ; Subrutin BLKMAN BLKMAN: PSHA PSHX ;Spara register på stack LDA STA #16 COUNT ;Sätt byteräknare PATLOOP: LDA ANDA EORA STA DEC BNE 0,X #%01111111 #%00100000 ,X+ COUNT PATLOOP ;Hämta data från tabell. Öka pekare ;Maska bort bit 7 ;Invertera bit 5 ;Skriv tillbaka till tabell ;Minska byteräknare ;Nästa ord PATEX: PULX PULA RTS COUNT: RMB ;Färdigt återställ register 1 ;Byteräknare 84 Lösningsförslag 9 Adressavkodning 9.1 a) Modul $0000 RWM $07FF $E000 ROM $FFFF $C5A0 I/O $C5A7 A15 A14 A13 A12 A11 A10 A9 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 1 0 0 0 1 0 A8 0 1 0 1 1 1 A7 0 1 0 1 1 1 Adressbuss A6 A5 0 0 1 1 0 0 1 1 0 1 0 1 A4 0 1 0 1 0 0 A3 0 1 0 1 0 0 A2 0 1 0 1 0 1 A1 0 1 0 1 0 1 A0 0 1 0 1 0 1 Anm. A15 A14 A13 A12 A11 A10 A9 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 1 0 0 0 1 0 A8 0 1 0 1 1 1 A7 0 1 0 1 1 1 Adressbuss A6 A5 0 0 1 1 0 0 1 1 0 1 0 1 A4 0 1 0 1 0 0 A3 0 1 0 1 0 0 A2 0 1 0 1 0 1 A1 0 1 0 1 0 1 A0 0 1 0 1 0 1 Anm. A15 A14 A13 A12 A11 A10 A9 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 0 0 0 0 A8 0 1 0 1 0 0 A7 0 1 0 1 0 1 Adressbuss A6 A5 0 0 1 1 0 0 1 1 0 0 1 1 A4 0 1 0 1 0 1 A3 0 1 0 1 0 1 A2 0 1 0 1 0 1 A1 0 1 0 1 0 1 A0 0 1 0 1 0 1 Anm. A15 A14 A13 A12 A11 A10 A9 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 0 0 0 0 A8 0 1 0 1 0 0 A7 0 1 0 1 0 1 Adressbuss A6 A5 0 0 1 1 0 0 1 1 0 0 1 1 A4 0 1 0 1 0 1 A3 0 1 0 1 0 1 A2 0 1 0 1 0 1 A1 0 1 0 1 0 1 A0 0 1 0 1 0 1 Anm. Adressbuss A6 A5 1 1 0 0 1 1 0 0 A4 1 0 1 0 A3 1 0 1 0 A2 1 0 1 0 A1 1 0 1 0 A0 1 0 1 0 Anm. 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 b) Modul $0000 RWM $07FF $E000 ROM $FFFF $C5A0 I/O $C5A7 9.2 a) Modul $0000 RWM $0FFF $E000 ROM $FFFF $6000 I/O $60FF b) Modul $0000 RWM $0FFF $E000 ROM $FFFF $6000 I/O $60FF 9.3 a) Modulerna tar upp följande adressområden: Modul ROM $FFFF $E000 $BFFF $B800 RWM $87FF $8000 $7FFF utport $0001 $7FFF inport $0007 A15 A14 A13 A12 A11 A10 A9 A8 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 1 1 0 0 0 ................. 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 85 A7 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 Modulen avbildas på totalt åtta intervall alla udda i intervallet alla som slutar på 111 Lösningsförslag b) Vid läsning av inporten på adresserna 0xxx xxxx xxxx x111 så adresseras också utporten eftersom inte R/W-signalen används i dess avkodning. Data som läses från inporten skrivs då också i utporten. 9.4 a) Modul $FFFF ROM $F000 $DFFF RWM $C000 $E0D7 I/O $E0D0 A15 A14 A13 A12 A11 A10 A9 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 A8 1 0 1 0 0 0 A7 1 0 1 0 1 1 Adressbuss A6 A5 1 1 0 0 1 1 0 0 1 0 1 0 A4 1 0 1 0 1 1 A3 1 0 1 0 0 0 A2 1 0 1 0 1 0 A1 1 0 1 0 1 0 A0 1 0 1 0 1 0 Anm. CS-signalerna bildas ur de för respektive modul konstanta adressdelarna, som grindas med VAsignalen. b) För in- och utportarna skapas den gemensamma CS-signalen: : CS-signalerna för respektive port blir nu: utport: inport: 9.5 Placera en ”inport” i form av en buffert, på samma adress, men med en CSR (ChipSelectRead) CSW LE Register Databuss Buffert OE CSR CSR och CSW är aktivt höga: CS $FFFF A15 A14 A13 A12 A11 A10 A9 1 1 1 0 0 0 0 E 0 86 Adressbuss A8 A7 A6 0 1 1 A5 0 D A4 1 A3 A2 0 0 A1 0 1 A0 1 Lösningsförslag 9.6 a) b) c) ROM ( Read Only Memory ) minne som enbart är läsbart. RWM ( Read Write Memory ) minne som är både läsbart och skrivbart. Man ser att varje minneskapsel har 13 adressledningar, A0 - A12, som insignaler. Det innebär att varje kapsel innehåller 213 ord = 8 kbyte. Man ser också att en av kapslarna, nr 1) är av ROM-typ, ty den använder ej R/W-signalen. Datorn har således 8 kbyte ROM och 24 kbyte RWM. Minneskapslarna upptar följande adressområden: Modul $FFFF $E000 $BFFF $A000 $2FFF $2000 $DFFF $C000 $5FFF $4000 $9FFF $8000 $1FFF $0000 1 2 3 4 d) 9.7 A15 A14 A13 A12 A11 A10 A9 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 1 1 1 0 0 1 0 0 0 0 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 0 1 0 0 0 0 0 1 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 Adressbuss A7 A6 A5 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 A8 1 0 1 0 1 0 1 0 1 0 1 0 1 0 A4 1 0 1 0 1 0 1 0 1 0 1 0 1 0 A3 1 0 1 0 1 0 1 0 1 0 1 0 1 0 A2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 A1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 A0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 Anm. Modulen avbildas på två intervall Modulen avbildas på två intervall Modulen avbildas på två intervall VA = 1 (Valid Memory Address) anger att adressbussens värde är stabilt och därför används denna signal för att grinda adresserna till minnet. Då kommer de adresser som finns ut på bussen under tiden som adressledningar håller på att ändras aldrig att nå primärminnet. a) Modul I/O b) $B801 $B800 A15 A14 A13 A12 A11 A10 A9 1 0 1 1 1 0 0 1 0 1 1 1 0 0 A8 0 0 A7 0 0 Adressbuss A6 A5 A4 0 0 0 0 0 0 A3 0 0 A2 0 0 A1 0 0 I/O-modulens interna struktur bör utformas på följande sätt: Indata port A OEA OE Indata port B Utdata port A CLKA C Register OEB OE Utdata port B CLKB Databuss A0 1 A0' R/W’ 1 (R/W’)' R/W’ CS' & läs & skriv 1 (R/W’)' 87 A0' läs & OEA A0' skriv & CLKA A0 läs A0 skriv & OEB & CLKB C Register A0 1 0 Anm. Lösningsförslag 9.8 a) Minnesmodulerna i adressrum M tar upp följande adressområden: Modul $FFFF ROM $E000 $BFFF RWM $8000 $0FFF I/O $0000 A15 A14 A13 A12 A11 A10 A9 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 A8 1 0 1 0 1 0 A7 1 0 1 0 1 1 Adressbuss A6 A5 1 1 0 0 1 1 0 0 1 1 1 0 A4 1 0 1 0 1 1 A3 1 0 1 0 1 0 A2 1 0 1 0 1 0 A1 1 0 1 0 1 0 A0 1 0 1 0 1 0 Anm. b) X0 ³1 X1 x7 & CS’ ROM2 (8k) R/W VA 9.9 Minnesmodulerna och I/O-arean i adressrummet tar upp följande adressområden: Modul $C000 RWM1 $DFFF $E000 RWM2 $E07F $E080 I/O $E17F $E0E0 IE $E0E1 $E200 ROM $FFFF A15 A14 A13 A12 A11 A10 A9 1 1 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 A8 0 1 0 0 0 1 0 0 0 1 a) b) Steg 1: Steg 2: 88 A7 0 1 0 0 1 0 1 1 0 1 Adressbuss A6 A5 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 0 0 1 1 A4 0 1 0 1 0 1 0 0 0 1 A3 0 1 0 1 0 1 0 0 0 1 A2 0 1 0 1 0 1 0 0 0 1 A1 0 1 0 1 0 1 0 0 0 1 A0 0 1 0 1 0 1 0 1 0 1 Anm.
© Copyright 2024