Grundläggande datorteknik

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
DE→ U
DE→ 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 = Cind7 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
=AR
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 (NV) = 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
A15A14
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
yz
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
R0 → 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
R0 → 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
R0 → 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
R0 → 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
R0 → 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
R0 → 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
R0 → 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
R0 → 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
R0 → 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
R0 → 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
R0 → 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
R0 → 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
R0 → 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
=AR
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.