Wojskowa Akademia Techniczna
im. Jarosława Dąbrowskiego
Architektury i organizacji komputerów I
Prowadzący mgr inż. Artur Miktus
Sprawozdanie z ćwiczenia laboratoryjnego
nr 3
Temat ćwiczenia: Mikroprogram pobrania rozkazu. Pobieranie rozkazów w formacie zwykłym dla adresowania pośredniego.
Wykonał: Konrad Bosiek
Grupa: I0X3S1
Data wykonania ćwiczenia: 21.12.2010r.
Podczas wykonywania symulacji pracy procesora na komputerze laboratoryjnym wykonano cztery pobrania rozkazów.
1. Pamięć operacyjna
WYDRUK PAMIĘCI OPERACYJNEJ ZAWARTY NA STRONIE
W komórkach 0-4, 24, 34, 159 i 255 pamięci operacyjnej znajdują się dane o odpowiednich wartościach dziesiętnych wg kolejności: 230, 14, 24, 3, 2, 1, 4, 19148, 103.
Natomiast w komórkach 154-158 znajdują się rozkazy w formacie zwykłym.
Nr komórki | Operacja | Kod operacji | Tryb adresowania | Rezultat wykonania rozkazu |
---|---|---|---|---|
154 | MUL | 3 | Pośrednie | Mnożenie zawartości akumulatora przez zawartość komórki pamięci operacyjnej o adresie określonym w rejestrze adresu efektywnego. Najbardziej znaczące bity zostaną umieszczone w akumulatorze, mniej znaczące w rejestrze mnożnika |
155 | BXP | 18 | Względne | jeśli rejestr indeksowy jest dodatni to sterowanie zostanie przekazane do komórki pamięci operacyjnej o adresie zawartym w rejestrze adresu efektywnego |
156 | BXN | 20 | Modyfikacja | jeśli rejestr indeksowy jest ujemny to sterowanie zostanie przekazane do komórki pamięci operacyjnej o adresie zawartym w rejestrze adresu efektywnego |
157 | BAZ | 23 | niedozwolone | jeśli akumulator ma wartość zero to sterowanie zostanie przekazane do komórki pamięci operacyjnej o adresie zawartym w rejestrze adresu efektywnego |
158 | LDX | 9 | względne | Rejestr indeksowy jest ładowany zawartością komórki operacyjnej o adresie zawartym w rejestrze adresu efektywnego |
Stan początkowy rejestrów
A 4
LR 144
RI 10
Stan pamięci operacyjnej
Adres | Zawartość(bin) | Hex | Wartość |
---|---|---|---|
0 | 0000000011100110b | 00E6h | 230 |
1 | 0000000000001110b | 000Eh | 14 |
2 | 0000000000011000b | 0018h | 24 |
3 | 0000000000000011b | 0003h | 3 |
4 | 0000000000000010b | 0002h | 2 |
14 | 0000000000000001b | 0001h | 1 |
24 | 0000000000000100b | 0004h | 4 |
149 | 0100101011001100b | CDABh | -12885 |
255 | 0000000001100111b | 0067h | 103 |
Pola o adresach 154-158 zawierają rozkazy w formacie zwykłym.
Adres | Zawartość(bin) | hex | OP | X | S | I | DA |
---|---|---|---|---|---|---|---|
144 | 0001100100000000b | 1900h | 3 | 0 | 1 | 0 | 0 |
145 | 1001001100000000b | 9300h | 18 | 0 | 1 | 1 | 0 |
146 | 1010010100000100b | A504h | 20 | 1 | 0 | 1 | 4 |
147 | 1011111000000100b | BE04h | 23 | 1 | 1 | 0 | 4 |
148 | 0100101011001100b | 4ACCh | 9 | 0 | 1 | 0 | 204 |
Gdzie:
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
Pozostałe komórki PAO są wyzerowane.
Rozkaz pierwszy (Adres 154):
Nazwa mnemoniczna: MUL
Pełna nazwa: Mnożenie
Tryb adresowania: Adresowanie pośrednie AE=PAO[DA] 8‑15
Spodziewany rezultat:
A*PAO[RAE] → A║MQ
Rozkaz drugi (Adres 155):
Nazwa mnemoniczna: BXP
Pełna nazwa: Skocz jeśli RI dodatni
Tryb adresowania: Adresowanie względne AE=PAO[LR+DA]8‑15]
Spodziewany rezultat: jeśli RI>0; RAE→LR
Rozkaz trzeci (Adres 156):
Nazwa mnemoniczna: BXN
Pełna nazwa: Skocz jeśli RI ujemny
Tryb adresowania: Modyfikacja AE=PAO[DA+RI]8‑15
Spodziewany rezultat:
jeśli RI<0; RAE→LR
Rozkaz czwarty (Adres 157):
Nazwa mnemoniczna: BAZ
Pełna nazwa: Skocz jeśli A=0
Tryb adresowania: niedozwolone AE=PAO[0]
Spodziewany rezultat:
jeśli A=0; RAE→LR
Rozkaz piąty(Adres 158):
Nazwa mnemoniczna: LDX
Pełna nazwa: Ładuj modyfikator RI
Tryb adresowania: Adresowanie względne AE=[LR+DA]
Spodziewany rezultat:
PAO[RAE] → RI
PM
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
Mikroprogram pobrania rozkazu rozpoczyna się pobraniem i wykonaniem mikrorozkazu z komórki o adresie 0 w PM, która zawiera mikrooperacje testu TINT. Następnie przechodzimy do komórki o adresie 48. Tam znajduję się mikrorozkaz, którego mikrooperacje powodują zainicjowanie cyklu odczytu z pamięci, załadowanie rejestru buforowego RBP zawartością adresowanej komórki. Zawartość RBP przesyłana jest do rejestru rozkazów. W komórce 49 pamięci, do rejestru pomocniczego LK przesyłana jest część pola DA rozkazu zwykłego. Następnie obliczany jest adres efektywny argumentu, uwzględniająca stan bitów X i S oraz pola DA rozkazu. Wynik tego działania, wysyłany jest do RAE. Później LR jest zwiększany o 1. Jeśli mamy do czynienia z adresowaniem pośrednim, test TIND przekazuje sterowanie do mikrorozkazu o adresie 50. Wtedy RAE jest adresem argumentu. W kolejnym mikrorozkazach zawartość rejestru pomocniczego przesyłana jest do RAE. Kod operacji jest dekodowany. TIND przekazuje tez sterowanie do 50 komórki dla rozkazów rozszerzonych.
Log z wykonanego ćwiczenia laboratoryjnego.
Log zapisano we Wtorek, 2010-12-21
TAKT=6 TAKT=7
Test ___ TINT ___ Brak przerwania
RAPS:=0030h\ 48
-------------------- 48 --------------------
TAKT=0 RBPS:=5006C4000000
TAKT=1
S1 ___ OLR ___ LR -> BUS BUS:=0090h\ 144
D1 ___ IRAP ___ BUS -> RAP RAP:=0090h\ 144
C1 ___ RRC ___ Rozpoczęcie RRC
MAV=0 TAKT=2 TAKT=5 TAKT=6 IA=1 RBP:=1900h\ 6400
IA=0 IA=0 TAKT=7
S3 ___ ORBP ___ RBP -> BUS BUS:=1900h\ 6400
D3 ___ IRR ___ BUS -> RR RR:=1900h\ 6400
RAPS:=0031h\ 49
-------------------- 49 --------------------
TAKT=0 RBPS:=68C801830032
TAKT=1
S1 ___ ORR ___ RR -> BUS BUS:=1900h\ 6400
D1 ___ ILK ___ BUS -> LK LK:=0000h\ 0
C2 ___ CEA ___ Oblicz adres efektywny
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:=0091h\ 145
IA=0 TAKT=7
Test ___ TIND ___ Adresowanie pośrednie
RAPS:=0032h\ 50
-------------------- 50 --------------------
TAKT=0 MAV=1 RBPS:=900624000000
TAKT=1
S1 ___ ORAE ___ RAE -> BUS BUS:=0000h\ 0
D1 ___ IRAP ___ BUS -> RAP RAP:=0000h\ 0
C1 ___ RRC ___ Rozpoczęcie RRC
MAV=0 TAKT=2 TAKT=5 TAKT=6 IA=1 RBP:=00E6h\ 230
IA=0 IA=0 TAKT=7
S3 ___ ORBP ___ RBP -> BUS BUS:=00E6h\ 230
D3 ___ IX ___ BUS -> X X:=00E6h\ 230
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:=00E6h\ 230
D2 ___ IBI ___ BUS -> RAE RAE:=00E6h\ 230
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:=0091h\ 145
D1 ___ IRAP ___ BUS -> RAP RAP:=0091h\ 145
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:=0091h\ 145 aa:=0091h\ 145
TAKT=2 TAKT=5 TAKT=6
S2 ___ IRAE ___ SUMA -> RAE RAE:=0091h\ 145
D2 ___ NSI ___ LR+1 -> LR LR:=0092h\ 146
IA=0 TAKT=7
Test ___ TIND ___ Adresowanie pośrednie
RAPS:=0032h\ 50
-------------------- 50 --------------------
TAKT=0 MAV=1 RBPS:=900624000000
TAKT=1
S1 ___ ORAE ___ RAE -> BUS BUS:=0091h\ 145
D1 ___ IRAP ___ BUS -> RAP RAP:=0091h\ 145
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:=0092h\ 146
D1 ___ IRAP ___ BUS -> RAP RAP:=0092h\ 146
C1 ___ RRC ___ Rozpoczęcie RRC
MAV=0 TAKT=2 TAKT=5 TAKT=6 IA=1 RBP:=A504h\ -23292
IA=0 IA=0 TAKT=7
S3 ___ ORBP ___ RBP -> BUS BUS:=A504h\ -23292
D3 ___ IRR ___ BUS -> RR RR:=A504h\ -23292
RAPS:=0031h\ 49
-------------------- 49 --------------------
TAKT=0 RBPS:=68C801830032
TAKT=1
S1 ___ ORR ___ RR -> BUS BUS:=A504h\ -23292
D1 ___ ILK ___ BUS -> LK LK:=0004h\ 4
C2 ___ CEA ___ Oblicz adres efektywny
l:=0004h\ 4 r:=000Ah\ 10 aa:=000Eh\ 14
TAKT=2 TAKT=5 TAKT=6
S2 ___ IRAE ___ SUMA -> RAE RAE:=000Eh\ 14
D2 ___ NSI ___ LR+1 -> LR LR:=0093h\ 147
IA=0 TAKT=7
Test ___ TIND ___ Adresowanie pośrednie
RAPS:=0032h\ 50
-------------------- 50 --------------------
TAKT=0 MAV=1 RBPS:=900624000000
TAKT=1
S1 ___ ORAE ___ RAE -> BUS BUS:=000Eh\ 14
D1 ___ IRAP ___ BUS -> RAP RAP:=000Eh\ 14
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:=0093h\ 147
D1 ___ IRAP ___ BUS -> RAP RAP:=0093h\ 147
C1 ___ RRC ___ Rozpoczęcie RRC
MAV=0 TAKT=2 TAKT=5 TAKT=6 IA=1 RBP:=BE04h\ -16892
IA=0 IA=0 TAKT=7
S3 ___ ORBP ___ RBP -> BUS BUS:=BE04h\ -16892
D3 ___ IRR ___ BUS -> RR RR:=BE04h\ -16892
RAPS:=0031h\ 49
-------------------- 49 --------------------
TAKT=0 RBPS:=68C801830032
TAKT=1
S1 ___ ORR ___ RR -> BUS BUS:=BE04h\ -16892
D1 ___ ILK ___ BUS -> LK LK:=0004h\ 4
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:=0094h\ 148
IA=0 TAKT=7
Test ___ TIND ___ Adresowanie pośrednie
RAPS:=0017h\ 23
************************************************************
Symulację zakończono o godzinie 14:21:40.
Ocena końcowa : 0
Ilość błędów : 0
Algorytm obliczania zawartości RAE dla rozkazów w formacie zwykłym:
Opis działania algorytmu
Działanie algorytmu rozpoczyna się od sprawdzenia formatu danego rozkazu. Jeśli OP równa się 00000b, to jest to rozkaz w formacie rozszerzonym. Wtedy na lewe wejście sumatora podajemy zawartość pola N rozkazu, a na prawe 0. Obliczamy sumę i zapisujemy ją w rejestrze adresu efektywnego RAE. W przypadku rozkazu w formacie zwykłym kolejnym krokiem jest sprawdzenie trybu adresowania.
Jeżeli bity X=0 i S=0 to jest to adresowanie, w którym na lewe wejście sumatora podajemy zawartość pola DA rozkazu a na prawe 0.
Jeżeli bity X=1 i S=0 to jest to adresowanie indeksowe, w którym na lewe wejście sumatora podajemy zawartość pola DA, a na prawe zawartość rejestru indeksowego RI.
Jeżeli bity X=0 i S=1 to jest to adresowanie względne, w którym na lewe wejście sumatora podajemy zawartość pola DA rozkazu, a na prawe zawartość licznika rozkazów LR, który zawiera adres bieżącego rozkazu.
We wszystkich tych przypadkach obliczana jest suma wejść sumatora i sprawdzana czy jest to wartość większa od 255. Jeśli tak to suma przyjmuje nową wartość, a mianowicie resztę z dzielenia przez 256. Następuje tu ustawienie flagi XRO na 1.
W przypadku adresowania niedozwolonego, czyli gdy bity X=1 i S=1, na lewe i prawe wejście sumatora adresowego podawana jest wartość 0. Suma wynosi wtedy 0 oraz następuje ustawienie flagi XRO na 1.
Kolejnym krokiem jest zapisanie wyliczonej sumy w rejestrze adresu efektywnego RAE oraz sprawdzenie bitu I adresacji pośredniej. Jeśli bit I=1 następuje odczyt zawartości z komórki pamięci o adresie w RAE do rejestru X, przypisanie rejestrowi RAE zawartości rejestru X oraz zakończenie algorytmu. W przypadku gdy bit I=0 to jest to adresowanie bezpośrednie, czyli zawartość RAE jest ostateczna i następuje zakończenie wykonywania się algorytmu.
1 rozkaz: MUL OP=3 X=0 S=0 I=1 DA=0 |
---|
|
|
2 rozkaz: BXP OP=18 X=0 S=1 I=1 DA=0 |
|
|
3 rozkaz: BXN OP=20 X=1 S=0 I=1 DA=4 |
---|
|
|
4 rozkaz: BAZ OP=23 X=0 S=0 I=0 DA=4 |
|
|