Wojskowa Akademia Techniczna
im. Jarosława Dąbrowskiego
Laboratorium
Architektury i Organizacji Komputerów
Prowadzący
mgr. inż. Artur Miktus
Sprawozdanie z ćwiczenia laboratoryjnego
nr 3
Temat: Mikroprogram pobrania rozkazu. Pobieranie rozkazów w trybie
zwykłym dla adresowania pośredniego.
Wykonał : Adrian Kępa
Nr : 14
Grupa : I3X6S1
Data wykonania ćwiczenia : 07.11.2013
[1]
Pamięć operacyjna
Stan początkowy rejestrów
A
14
LR
154
RI
10
Stan pamięci operacyjnej
Adres
Zawartość [DEC]
Zawartość [HEX]
Zawartość[BIN]
0
230
00E6
0000000011100110
1
24
0018
0000000000011000
2
34
0022
0000000000100010
3
3
0003
0000000000000011
4
2
0002
0000000000000010
24
1
0001
0000000000000001
34
4
0004
0000000000000100
255
103
0067
0000000001100111
Lista rozkazów
Adres
Mnemonik
OP
X
S
I
DA
154
MUL
3
0
0
1
2
155
BXP
18
0
1
1
0
156
BXN
20
1
0
1
14
157
BAZ
23
1
1
0
14
158
LDX
9
0
1
0
214
Pozostałe komórki w PAO są wyzerowane.
Objaśnienia:
OP – kod operacji
X – wskaśnik adresowania indeksowego
S – wskaźnik adresacji względnej
I – wskaźnik adresacji pośredniej
DA – 8 bitowe pole adresu bezpośredniego
[1]
[2]
Rozkazy
Rozkaz pierwszy
Adres : 154
Mnemonik : MUL
Pełna nazwa : Mnożenie
Opis działania : A * PAO[RAE] -----> A||MQ
Rozkaz drugi
Adres : 155
Mnemonik : BXP
Pełna nazwa : Skocz jeśli RI dodatni
Opis działania : Jeśli RI > 0; RAE -----> LR
Rozkaz trzeci
Adres : 156
Mnemonik : BXN
Pełna nazwa : Skocz jeśli RI ujemny
Opis działania : Jeśli RI < 0; RAE -----> LR
Rozkaz czwarty
Adres : 157
Mnemonik : BAZ
Pełna nazwa : Skocz jeśli A = 0
Opis działania : Jeśli A = 0; RAE -----> LR
Rozkaz piąty
Adres : 158
Mnemonik : LDX
Pełna nazwa : Ładuj rejestr indeksowy
Opis działania : Ładuj rejestr indeksowy zawartością komórki o adresie w RAE
[2]
[3]
Pamięć mikroprogramu
0
Test
TINT
Brak przerwania
NA
48
48
S1
OLR
LR -----> BUS
D1
IRAP
BUS ----->RAP
S3
ORBP
RBP -----> BUS
D3
IRR
BUS -----> RR
C1
RRC
Rozpoczęcie RRC
49
S1
ORR
RR -----> BUS
D1
ILK
BUS -----> LK
S2
IRAE
SUMA -----> RAE
D2
NSI
LR+1 -----> LR
C2
CEA
Oblicz adres efektywny
Test
TIND
Adresowanie pośrednie
NA
50
50
S1
ORAE
RAE -----> BUS
D1
IRAP
BUS -----> RAP
S3
ORBP
RBP -----> BUS
D3
IX
BUS -----> X
C1
RRC
Rozpoczęcie RRC
51
S2
OX
X -----> BUS
D2
IBI
BUS -----> RAE
C2
OPC
OP /AOP+32/ -> RAPS
[3]
Mikroprogram pobrania rozkazu ma za zadanie pobrać i zdekodować podane w zadaniu rozkazy.
Początkowo przeprowadzona jest mikrooperacja testu TINT w komórce o adresie 0 w PM.
Następnie z komórki o adresie 48 zostaje zainicjowany cykl odczytu z pamięci oraz załadowanie
rejestru buforowego RBP zawartością adresowanej komórki a w następnym kroku zawartość RBP
zostaje przesłana do rejestru rozkazów(RR). W komórce 49 zostaje przeprowadzone przesłanie do
rejestru pomocniczego(LK) mniejsza część pola DA rozkazu zwykłego. Dalej obliczany jest adres
efektywny argumentu, z uwzględnieniem bitów X,S oraz pola DA danego rozkazu. Natępnie wynik
tego działania zostaje przesłany do RAE, a licznik rozkazów(LR) zostaje zwiększony o 1.
W wypadku gdy naszego rozkazu dotyczy adresowanie pośrednie, test TIND przekazuje sterowanie
mikrorozkazowi w komórce o adresie 50. W tym momencie RAE zostaje adresem argumentu a w
kolejnych mikrorozkazach zawartość rejestru pomocniczego jest do niego przesyłana.
Do komórki o adresie 50 sterowanie jest przekazywane także w sytuacji gdy rozkaz jest
rozszerzony.
[4]
Log z wykonanego zadania
Log zapisano w Czwartek, 2013-11-07
-------------------- 0 --------------------
TAKT=0
RBPS:=000000020030
TAKT=1
TAKT=2
TAKT=5
TAKT=6
TAKT=7
Test
___ TINT ___
Brak przerwania
RAPS:=0030h\ 48
-------------------- 48 --------------------
TAKT=0
RBPS:=5006C4000000
TAKT=1
S1
___ OLR ___
LR -> BUS
BUS:=009Ah\ 154
D1
___ IRAP ___
BUS -> RAP
RAP:=009Ah\ 154
C1
___ RRC ___
Rozpoczęcie RRC
MAV=0 TAKT=2
TAKT=5
TAKT=6
IA=1
RBP:=1902h\ 6402
IA=0
IA=0
TAKT=7
S3
___ ORBP ___ RBP -> BUS
BUS:=1902h\ 6402
D3
___ IRR ___
BUS -> RR
RR:=1902h\ 6402
RAPS:=0031h\ 49
-------------------- 49 --------------------
TAKT=0
RBPS:=68C801830032
TAKT=1
S1
___ ORR ___
RR -> BUS
BUS:=1902h\ 6402
D1
___ ILK ___
BUS -> LK
LK:=0002h\ 2
C2
___ CEA ___
Oblicz adres efektywny
l:=0002h\ 2
r:=0000h\ 0
aa:=0002h\ 2
TAKT=2
TAKT=5
TAKT=6
S2
___ IRAE ___
SUMA -> RAE RAE:=0002h\ 2
D2
___ NSI ___
LR+1 -> LR
LR:=009Bh\ 155
IA=0
TAKT=7
Test
___ TIND ___
Adresowanie pośrednie
RAPS:=0032h\ 50
[4]
-------------------- 50 --------------------
TAKT=0
MAV=1 RBPS:=900624000000
TAKT=1
S1
___ ORAE ___ RAE -> BUS
BUS:=0002h\ 2
D1
___ IRAP ___
BUS -> RAP
RAP:=0002h\ 2
C1
___ RRC ___
Rozpoczęcie RRC
MAV=0 TAKT=2
TAKT=5
TAKT=6
IA=1
RBP:=0022h\ 34
IA=0
IA=0
TAKT=7
S3
___ ORBP ___ RBP -> BUS
BUS:=0022h\ 34
D3
___ IX ___
BUS -> X
X:=0022h\ 34
RAPS:=0033h\ 51
-------------------- 51 --------------------
TAKT=0
RBPS:=03A801600000
TAKT=1
C2
___ OPC ___
OP /AOP+32/ -> RAPS TAKT=2
TAKT=5
TAKT=6
S2
___ OX ___
X -> BUS
BUS:=0022h\ 34
D2
___ IBI ___
BUS -> RAE
RAE:=0022h\ 34
IA=0
TAKT=7
RAPS:=0003h\ 3
Zmiana zawartości rejestru RAPS - nowa wartość to 0
-------------------- 0 --------------------
TAKT=0
MAV=1 RBPS:=000000020030
TAKT=1
TAKT=2
TAKT=5
TAKT=6
TAKT=7
Test
___ TINT ___
Brak przerwania
RAPS:=0030h\ 48
-------------------- 48 --------------------
TAKT=0
RBPS:=5006C4000000
TAKT=1
S1
___ OLR ___
LR -> BUS
BUS:=009Bh\ 155
D1
___ IRAP ___
BUS -> RAP
RAP:=009Bh\ 155
C1
___ RRC ___
Rozpoczęcie RRC
MAV=0 TAKT=2
TAKT=5
TAKT=6
IA=1
RBP:=9300h\ -27904
IA=0
IA=0
TAKT=7
S3
___ ORBP ___ RBP -> BUS
BUS:=9300h\ -27904
D3
___ IRR ___
BUS -> RR
RR:=9300h\ -27904
RAPS:=0031h\ 49
-------------------- 49 --------------------
TAKT=0
RBPS:=68C801830032
TAKT=1
S1
___ ORR ___
RR -> BUS
BUS:=9300h\ -27904
D1
___ ILK ___
BUS -> LK
LK:=0000h\ 0
C2
___ CEA ___
Oblicz adres efektywny
l:=0000h\ 0
r:=009Bh\ 155 aa:=009Bh\ 155
TAKT=2
TAKT=5
TAKT=6
S2
___ IRAE ___
SUMA -> RAE RAE:=009Bh\ 155
D2
___ NSI ___
LR+1 -> LR
LR:=009Ch\ 156
IA=0
TAKT=7
Test
___ TIND ___
Adresowanie pośrednie
RAPS:=0032h\ 50
[5]
-------------------- 50 --------------------
TAKT=0
MAV=1 RBPS:=900624000000
TAKT=1
S1
___ ORAE ___ RAE -> BUS
BUS:=009Bh\ 155
D1
___ IRAP ___
BUS -> RAP
RAP:=009Bh\ 155
C1
___ RRC ___
Rozpoczęcie RRC
MAV=0 TAKT=2
TAKT=5
TAKT=6
IA=1
RBP:=9300h\ -27904
IA=0
IA=0
TAKT=7
S3
___ ORBP ___ RBP -> BUS
BUS:=9300h\ -27904
D3
___ IX ___
BUS -> X
X:=9300h\ -27904
RAPS:=0033h\ 51
-------------------- 51 --------------------
TAKT=0
RBPS:=03A801600000
TAKT=1
C2
___ OPC ___
OP /AOP+32/ -> RAPS TAKT=2
TAKT=5
TAKT=6
S2
___ OX ___
X -> BUS
BUS:=9300h\ -27904
D2
___ IBI ___
BUS -> RAE
RAE:=9300h\ -27904
IA=0
TAKT=7
RAPS:=0012h\ 18
Zmiana zawartości rejestru RAPS - nowa wartość to 0
-------------------- 0 --------------------
TAKT=0
MAV=1 RBPS:=000000020030
TAKT=1
TAKT=2
TAKT=5
TAKT=6
TAKT=7
Test
___ TINT ___
Brak przerwania
RAPS:=0030h\ 48
-------------------- 48 --------------------
TAKT=0
RBPS:=5006C4000000
TAKT=1
S1
___ OLR ___
LR -> BUS
BUS:=009Ch\ 156
D1
___ IRAP ___
BUS -> RAP
RAP:=009Ch\ 156
C1
___ RRC ___
Rozpoczęcie RRC
MAV=0 TAKT=2
TAKT=5
TAKT=6
IA=1
RBP:=A50Eh\ -23282
IA=0
IA=0
TAKT=7
S3
___ ORBP ___ RBP -> BUS
BUS:=A50Eh\ -23282
D3
___ IRR ___
BUS -> RR
RR:=A50Eh\ -23282
RAPS:=0031h\ 49
-------------------- 49 --------------------
TAKT=0
RBPS:=68C801830032
TAKT=1
S1
___ ORR ___
RR -> BUS
BUS:=A50Eh\ -23282
D1
___ ILK ___
BUS -> LK
LK:=000Eh\ 14
C2
___ CEA ___
Oblicz adres efektywny
l:=000Eh\ 14 r:=000Ah\ 10 aa:=0018h\ 24
TAKT=2
TAKT=5
TAKT=6
S2
___ IRAE ___
SUMA -> RAE RAE:=0018h\ 24
D2
___ NSI ___
LR+1 -> LR
LR:=009Dh\ 157
IA=0
TAKT=7
Test
___ TIND ___
Adresowanie pośrednie
RAPS:=0032h\ 50
[6]
-------------------- 50 --------------------
TAKT=0
MAV=1 RBPS:=900624000000
TAKT=1
S1
___ ORAE ___ RAE -> BUS
BUS:=0018h\ 24
D1
___ IRAP ___
BUS -> RAP
RAP:=0018h\ 24
C1
___ RRC ___
Rozpoczęcie RRC
MAV=0 TAKT=2
TAKT=5
TAKT=6
IA=1
RBP:=0001h\ 1
IA=0
IA=0
TAKT=7
S3
___ ORBP ___ RBP -> BUS
BUS:=0001h\ 1
D3
___ IX ___
BUS -> X
X:=0001h\ 1
RAPS:=0033h\ 51
-------------------- 51 --------------------
TAKT=0
RBPS:=03A801600000
TAKT=1
C2
___ OPC ___
OP /AOP+32/ -> RAPS TAKT=2
TAKT=5
TAKT=6
S2
___ OX ___
X -> BUS
BUS:=0001h\ 1
D2
___ IBI ___
BUS -> RAE
RAE:=0001h\ 1
IA=0
TAKT=7
RAPS:=0014h\ 20
Zmiana zawartości rejestru RAPS - nowa wartość to 0
-------------------- 0 --------------------
TAKT=0
MAV=1 RBPS:=000000020030
TAKT=1
TAKT=2
TAKT=5
TAKT=6
TAKT=7
Test
___ TINT ___
Brak przerwania
RAPS:=0030h\ 48
-------------------- 48 --------------------
TAKT=0
RBPS:=5006C4000000
TAKT=1
S1
___ OLR ___
LR -> BUS
BUS:=009Dh\ 157
D1
___ IRAP ___
BUS -> RAP
RAP:=009Dh\ 157
C1
___ RRC ___
Rozpoczęcie RRC
MAV=0 TAKT=2
TAKT=5
TAKT=6
IA=1
RBP:=BE0Eh\ -16882
IA=0
IA=0
TAKT=7
S3
___ ORBP ___ RBP -> BUS
BUS:=BE0Eh\ -16882
D3
___ IRR ___
BUS -> RR
RR:=BE0Eh\ -16882
RAPS:=0031h\ 49
-------------------- 49 --------------------
TAKT=0
RBPS:=68C801830032
TAKT=1
S1
___ ORR ___
RR -> BUS
BUS:=BE0Eh\ -16882
D1
___ ILK ___
BUS -> LK
LK:=000Eh\ 14
C2
___ CEA ___
Oblicz adres efektywny
XRO=1
l:=0000h\ 0
r:=0000h\ 0
aa:=0000h\ 0
TAKT=2
TAKT=5
TAKT=6
S2
___ IRAE ___
SUMA -> RAE RAE:=0000h\ 0
D2
___ NSI ___
LR+1 -> LR
LR:=009Eh\ 158
IA=0
TAKT=7
Test
___ TIND ___
Adresowanie pośrednie
RAPS:=0032h\ 50
***** BŁĄD *****
OCENA=5
RAPS:=0017h\ 23
Zmiana zawartości rejestru RAPS - nowa wartość to 0
[7]
-------------------- 0 --------------------
TAKT=0
MAV=1 RBPS:=000000020030
TAKT=1
TAKT=2
TAKT=5
TAKT=6
TAKT=7
Test
___ TINT ___
Brak przerwania
RAPS:=0030h\ 48
-------------------- 48 --------------------
TAKT=0
RBPS:=5006C4000000
TAKT=1
S1
___ OLR ___
LR -> BUS
BUS:=009Eh\ 158
D1
___ IRAP ___
BUS -> RAP
RAP:=009Eh\ 158
C1
___ RRC ___
Rozpoczęcie RRC
MAV=0 TAKT=2
TAKT=5
TAKT=6
IA=1
RBP:=4AD6h\ 19158
IA=0
IA=0
TAKT=7
S3
___ ORBP ___ RBP -> BUS
BUS:=4AD6h\ 19158
D3
___ IRR ___
BUS -> RR
RR:=4AD6h\ 19158
RAPS:=0031h\ 49
-------------------- 49 --------------------
TAKT=0
RBPS:=68C801830032
TAKT=1
S1
___ ORR ___
RR -> BUS
BUS:=4AD6h\ 19158
D1
___ ILK ___
BUS -> LK
LK:=0056h\ 86
C2
___ CEA ___
Oblicz adres efektywny
XRO=1
l:=00D6h\ 214 r:=009Eh\ 158 aa:=0074h\ 116
TAKT=2
TAKT=5
TAKT=6
S2
___ IRAE ___
SUMA -> RAE RAE:=0074h\ 116
D2
___ NSI ___
LR+1 -> LR
LR:=009Fh\ 159
IA=0
TAKT=7
Test
___ TIND ___
Adresowanie pośrednie
RAPS:=0009h\ 9
Zmiana zawartości rejestru RAPS - nowa wartość to 0
************************************************************
Symulację zakończono o godzinie 13:20:43.
Ocena końcowa : 5
Ilość błędów :
1
Podczas wykonywania ćwiczenia laboratoryjnego popełniłem jeden błąd polegający na wpisaniu
błędnej wartości do komórki RAPS. W komórkę RAPS została wpisana błędna wartość 50 która
oznaczałaby przejście do 50 wiersza pamięci mikroprogramu w celu kontynuacji pobierania
rozkazu o adresacji pośredniej (bit I = 1). Kolejne błędy tego typu nie miały miejsca z powodu
zwiększonej ostrożności i odpowiedniej analizy typu adresowania pobieranych rozkazów.
[8]
[5]
Algorytm obliczania RAE
dla rozkazów zwykłych
[9]
[6]
Opis działania algorytmu
Przedstawiony algorytm ma zastosowanie dla rozkazów w trybie zwykłym.
Jeśli bity X = S = 0 to lewe wejście sumatora (LALU) przyjmuje wartość pola DA rozkazu, a prawe
wejście sumatora (RALU) przyjmuje wartość 0.
Gdy bit X = 1 a bit S = 0 to LALU przyjmuje wartość pola DA a RALU wartość rejestru
indeksowego (RI).
W sytuacji gdy bit X = 0 a bit S = 1 LALU przyjmuje również wartość DA a RALU wartość
licznika rozkazów (LR).
Wynik będący sumą powyższych kombinacji musi być mniejszy od 256. Jeżeli tak nie jest, flaga
odpowiadająca za sygnalizację nadmiaru (XRO) zostaje ustawiona na 1 a suma powinna być
modyfikowana tak długo aż uzyska wartość mniejszą od 256.
W przypadku wystąpienia kombinacji bitów X = S = 1 czyli adresowania zabronionego, zarówno
LALU jak i RALU przyjmują wartość 0.
Następnie wartość wyliczonej sumy jest zapisywana w rejestrze adresu efektywnego (RAE).
Sprawdza się również bit I odpowiadający za adresowanie pośrednie. Jeśli I = 1 następuje wtedy
odczytanie zawartości z komórki w PAO której adres znajduje się w RAE. Wartość tej komórki
zostaje wpisana do rejestru X a następnie z niego przypisana do RAE, algorytm zostaje zakończony.
W przypadku gdy bit I = 0 oznacza to adresowanie bezpośrednie, więc końcowa wartość RAE nie
ulegnie zmianie i algorytm zostaje zakończony.
[10]
[7]
Porównanie wyników
teoretycznych z praktycznymi
Rozkaz pierwszy
MUL [Adres = 154] [OP = 3] [X = 0] [S = 0] [I = 1] [DA = 2]
X = S = 0 [PRAWDA]
LALU = DA = 2
RALU = 0
SUMA = 2
SUMA < 256 [PRAWDA]
RAE = SUMA = 2
(...)
l:=0002h\ 2
r:=0000h\ 0
aa:=0002h\ 2
TAKT=2
TAKT=5
TAKT=6
S2
___ IRAE ___
SUMA -> RAE RAE:=0002h\ 2
(...)
Rozkaz drugi
BXP [Adres = 155] [OP = 18] [X = 0] [S = 1] [I = 1] [DA = 0]
X = S = 0 [FAŁSZ]
X = 1 ^ S = 0 [FAŁSZ]
X = 0 ^ S = 1 [PRAWDA]
LALU = DA = 0
RALU = LR = 155
SUMA = 155
SUMA < 256 [PRAWDA]
RAE = SUMA = 155
(...)
l:=0000h\ 0
r:=009Bh\ 155 aa:=009Bh\ 155
TAKT=2
TAKT=5
TAKT=6
S2
___ IRAE ___
SUMA -> RAE RAE:=009Bh\ 155
(...)
Rozkaz trzeci
BXP [Adres = 156] [OP = 20] [X = 1] [S = 0] [I = 1] [DA = 14]
X = S = 0 [FAŁSZ]
X = 1 ^ S = 0 [PRAWDA]
LALU = DA = 14
RALU = RI = 10
SUMA = 24
SUMA < 256 [PRAWDA]
RAE = SUMA = 24
[11]
(...)
l:=000Eh\ 14 r:=000Ah\ 10 aa:=0018h\ 24
TAKT=2
TAKT=5
TAKT=6
S2
___ IRAE ___
SUMA -> RAE RAE:=0018h\ 24
(...)
Rozkaz czwarty
BAZ [Adres = 157] [OP = 23] [X = 1] [S = 1] [I = 0] [DA = 14]
X = S = 0 [FAŁSZ]
X = 1 ^ S = 0 [FAŁSZ]
X = 0 ^ S = 1 [FAŁSZ]
X = 1 ^ S = 1 [PRAWDA]
Tryb zabroniony!
LALU = 0
RALU = 0
SUMA = 0
SUMA < 256
RAE = SUMA = 0
(...)
l:=0000h\ 0
r:=0000h\ 0
aa:=0000h\ 0
TAKT=2
TAKT=5
TAKT=6
S2
___ IRAE ___ SUMA -> RAE RAE:=0000h\ 0
(...)
Rozkaz piąty
LDX [Adres = 158] [OP = 9] [X = 0] [S = 1] [I = 0] [DA = 214]
X = S = 0 [FAŁSZ]
X = 1 ^ S = 0 [FAŁSZ]
X = 0 ^ S = 1 [PRAWDA]
LALU = DA = 214
RALU = LR = 158
SUMA = 372
SUMA < 256 [FAŁSZ]
Nadmiar!
SUMA = 372 – 256 = 116
SUMA < 256 [PRAWDA]
RAE = SUMA = 116
(...)
l:=00D6h\ 214 r:=009Eh\ 158 aa:=0074h\ 116
TAKT=2
TAKT=5
TAKT=6
S2
___ IRAE ___ SUMA -> RAE RAE:=0074h\ 116
(...)
Na podstawie powyższych zapisów stwierdzam że powyższy algorytm obliczania RAE jest
poprawny, wyniki teoretyczne odpowiadają wynikom otrzymanym podczas symulacji
przeprowadzonej na laboratoriach.
[12]