DLX
Wprowadzenie
Wprowadzenie
Artur&Artek
Wprowadenie do WinDLX
2
Grupy rejestrów
rejestry ogólnego przeznaczenia
rejestry ogólnego przeznaczenia
(General-Purpose Registers);
(General-Purpose Registers);
rejestry dla liczb
rejestry dla liczb
zmiennoprzecinkowych (Floating-
zmiennoprzecinkowych (Floating-
Point Registers) pojedynczej i
Point Registers) pojedynczej i
podwójnej precyzji o formacie
podwójnej precyzji o formacie
zgodnym ze standardem IEEE 754;
zgodnym ze standardem IEEE 754;
rejestry pozostałe.
rejestry pozostałe.
Artur&Artek
Wprowadenie do WinDLX
3
Rejestry ogólnego
przeznaczenia
(GPR)
Trzydzieści dwa 32-bitowe rejestry:
Trzydzieści dwa 32-bitowe rejestry:
R0 – R31;
R0 – R31;
R0 zawsze zawiera wartość 0;
R0 zawsze zawiera wartość 0;
R31 zawiera adres powrotu po
R31 zawiera adres powrotu po
wykonaniu skoku ze śladem (JAL,
wykonaniu skoku ze śladem (JAL,
JALR);
JALR);
R1 – R30 – faktycznie pełnią rolę
R1 – R30 – faktycznie pełnią rolę
rejestrów ogólnego przeznaczenia;
rejestrów ogólnego przeznaczenia;
Artur&Artek
Wprowadenie do WinDLX
4
Format GPR
Byte 0
Byte 0
Byte 1
Byte 1
Byte 2
Byte 2
Byte 3
Byte 3
0
7 8
15 16
23 24
31
MSb
LSb
MSB
LSB
BYTE REG.
FULLWORD REG.
HALFWORD REG.
Artur&Artek
Wprowadenie do WinDLX
5
Rejestry
zmiennoprzecinkowe
Trzydzieści dwa 32-bitowe rejestry (F0
Trzydzieści dwa 32-bitowe rejestry (F0
– F31) – liczby o pojedynczej precyzji;
– F31) – liczby o pojedynczej precyzji;
Te same rejestry mogą być
Te same rejestry mogą być
adresowane jako szesnaście 64-
adresowane jako szesnaście 64-
bitowych rejestrów
bitowych rejestrów
([F0,F1] – [F30,F31])
([F0,F1] – [F30,F31])
nazwanych odpowiednio (D0 – D30 ) –
nazwanych odpowiednio (D0 – D30 ) –
liczby o podwójnej precyzji;
liczby o podwójnej precyzji;
format liczb jest zgodny z IEEE 754.
format liczb jest zgodny z IEEE 754.
Artur&Artek
Wprowadenie do WinDLX
6
Kolejność bajtów w liczbie
pojedynczej precyzji
0 7 8 15 16 23 24
0 7 8 15 16 23 24
31
31
Byte 0
Byte 0
Byte 1
Byte 1
Byte 2
Byte 2
Byte 3
Byte 3
Artur&Artek
Wprowadenie do WinDLX
7
Kolejność bajtów w liczbie
podwójnej precyzji
0 7 8 15 16 23 24
0 7 8 15 16 23 24
31
31
Byte 0
Byte 0
Byte 1
Byte 1
Byte 2
Byte 2
Byte 3
Byte 3
32 39 40 47 48 55 56
32 39 40 47 48 55 56
63
63
Byte 4
Byte 4
Byte 5
Byte 5
Byte 6
Byte 6
Byte 7
Byte 7
Artur&Artek
Wprowadenie do WinDLX
8
Rejestry różnego
przeznaczenia
PC (Program Counter) , IR (, IAR
PC (Program Counter) , IR (, IAR
IMAR, DMAR, SDR, SDRHI, LDR,
IMAR, DMAR, SDR, SDRHI, LDR,
LDRHI
LDRHI
A, AHI, B, BHI, ALU, ALUHI
A, AHI, B, BHI, ALU, ALUHI
BTA
BTA
FPSR
FPSR
Artur&Artek
Wprowadenie do WinDLX
9
Format danych
FULLWORD – 32 bity
FULLWORD – 32 bity
HALF WORD – 16 bitów
HALF WORD – 16 bitów
BYTE – 8 bitów
BYTE – 8 bitów
Artur&Artek
Wprowadenie do WinDLX
10
Układ bajtów w pamięci
0 7 8 15 16 23 24
0 7 8 15 16 23 24
31
31
Adres
Adres
słowa
słowa
12
12
13
13
14
14
15
15
N+3
N+3
8
8
9
9
10
10
11
11
N+2
N+2
4
4
5
5
6
6
7
7
N+1
N+1
0
0
1
1
2
2
3
3
N
N
układ bajtów BIG ENDIAN
Artur&Artek
Wprowadenie do WinDLX
11
Adresowanie
pamięć adresowana bajtowo
pamięć adresowana bajtowo
HALFWORD musi posiadać adres
HALFWORD musi posiadać adres
parzysty
parzysty
FULWORD musi posiadać adres
FULWORD musi posiadać adres
podzielny przez 4
podzielny przez 4
U_Adres_efektywny
U_Adres_efektywny
32
32
=
=
=Rejestr
=Rejestr
32
32
+S_OFFSET
+S_OFFSET
16
16
Artur&Artek
Wprowadenie do WinDLX
12
Sytuacje wyjątkowe
nadmiar w wyniku wykonania
nadmiar w wyniku wykonania
rozkazów arytmetycznych:
rozkazów arytmetycznych:
ADD,
ADD,
ADDI, SUB, SUBI
ADDI, SUB, SUBI
rozkaz TRAP
rozkaz TRAP
rozkaz RFE – przywrócenie stanu
rozkaz RFE – przywrócenie stanu
sterowania
sterowania
poprzedzającego sytuację
poprzedzającego sytuację
wyjątkową
wyjątkową
Artur&Artek
Wprowadenie do WinDLX
13
Grupy rozkazów
rozkazy typu load/store
rozkazy typu load/store
rozkazy przesłań
rozkazy przesłań
rozkazy arytmetyczne i logiczne
rozkazy arytmetyczne i logiczne
rozkazy operujące na danych
rozkazy operujące na danych
zmiennoprzecinkowych
zmiennoprzecinkowych
rozkazy skoków i rozgałęzień
rozkazy skoków i rozgałęzień
rozkazy specjalne
rozkazy specjalne
Artur&Artek
Wprowadenie do WinDLX
14
Formaty rozkazów
I – type (immediate)
I – type (immediate)
R – type (register)
R – type (register)
J – type (jump)
J – type (jump)
Artur&Artek
Wprowadenie do WinDLX
15
Format I – type
0 5 6 10 11 15 16
0 5 6 10 11 15 16
31
31
Opcode
Opcode
rs
rs
1
1
rs
rs
2
2
immediate
immediate
6 5 5 16
6 5 5 16
W tym formacie są przedstawiane rozkazy
grupy load/store operujące na: bajtach,
słowach 16b, słowach 32b, danych
natychmiastowych, jak też rozkazy soków
bezwarunkowych (JR) i skoków ze śladem (JAR)
Artur&Artek
Wprowadenie do WinDLX
16
Format R – type
0 5 6 10 11 15 16 20 21 25
0 5 6 10 11 15 16 20 21 25
26 31
26 31
R-R ALU
R-R ALU
rs
rs
1
1
rs
rs
2
2
rd
rd
func
func
6
6
5
5
5
5
5
5
5
5
6
6
0 5 6 10 11 15 16 20 21 26
0 5 6 10 11 15 16 20 21 26
27 31
27 31
R-R FPU
R-R FPU
rs
rs
1
1
rs
rs
2
2
rd
rd
func
func
6
6
5
5
5
5
5
5
6
6
5
5
W tym formacie są przedstawiane rozkazy:
rejestr – rejestr realizowane przez ALU
rozkazy zapisu, odczytu do IAR lub FPRS
przesłań pomiędzy GPR i/lub rejestrami FP
pole opcode i func określają rozkaz do
wykonania
Artur&Artek
Wprowadenie do WinDLX
17
Format J – type
0 5 6
0 5 6
31
31
opcode
opcode
name
name
6
6
26
26
Format zawiera rozkazy:
skoków J (jump), JAL (jump and link)
TRAP
RFE
Artur&Artek
Wprowadenie do WinDLX
18
Rozkazy typu load / store
LB Rd,Adr ; LBU Rd,Adr; LH Rd,Adr; LHU
Rd,Adr;
LW Rd,Adr; LF Fd,Adr; LD Dd,Adr; SB Adr,Rs;
SH Adr,Rs; SW Adr,Rs; SF Adr,Fs; SD Adr,Fs;
MOVI2FP Fd,Rs; MOVI2FP Rd,Fs; MOVF
Fd,Fs;
MOVD Dd,Ds.; MOVI2S SR,Rs; MOVS2I
Rs,SR;
Artur&Artek
Wprowadenie do WinDLX
19
Rozkazy arytmetyczne i
logiczne
ADD Rd,Ra,Rb; ADDI Rd,Ra,Imm; ADDU Rd,Ra,Rb;
ADDUI Rd,Ra,Imm; SUB Rd,Ra,Rb; SUBI Rd,Ra,Imm;
SUBU Rd,Ra,Rb; SUBUI Rd,Ra,Imm; MULT Rd,Ra,Rb;
MULTU Rd,Ra,Rb; DIV Rd,Ra,Rb; DIVU Rd,Ra,Rb;
AND Rd,Ra,Rb; ANDI Rd,Ra,Imm; OR Rd,Ra,Rb;
ORI Rd,Ra,Imm; XOR Rd,Ra,Rb; XORI Rd,Ra,Imm;
LHI Rd,Imm; SLL Rd,Rs,Rc; SRL Rd,Rs,Rc; SRA Rd,Rs,Rc;
SLLI Rd,Rs,Imm; SRLI Rd,Rs,Imm; SRAI Rd,Rs,Imm;
S__ Rd,Ra,Rb : "__" may be EQ, NE, LT, GT, LE or GE;
S__I Rd,Ra,Imm: "__" may be EQ, NE, LT, GT, LE or GE;
S__U Rd,Ra,Rb: "__ "may be EQ, NE, LT, GT, LE or GE
S__UI Rd,Ra,Imm; "_ " may be EQ, NE, LT, GT, LE or GE;
NOP;
Artur&Artek
Wprowadenie do WinDLX
20
Rozkazy sterujące
BEQZ Rt,Dest; BNEZ Rt,Dest; BFPT
Dest;
BFPF Dest;
J Dest; JR Rx; JAL Dest; JALR Rx;
TRAP Imm;
RFE Dest;
Artur&Artek
Wprowadenie do WinDLX
21
Rozkazy na danych w
formacie
zmiennoprzecinkowym
ADDD Dd,Da,Db; ADDF Fd,Fa,Fb; SUBD
Dd,Da,Db; SUBF Fd,Fa,Fb; MULTD Dd,Da,Db;
MULTF Fd,Fa,Fb;
DIVD Dd,Da,Db; DIVF Fd,Fa,Fb; CVTF2D Dd,Fs;
CVTD2F Fd,Ds;
CVTF2I Fd,Fs; CVTD2I Fd,Ds; CVTI2D Dd,Fs;
__D Da,Db: "__" may be EQ, NE, LT, GT, LE or
GE;
__F Fa,Fb: "__„ may be EQ, NE, LT, GT, LE or
GE;
Artur&Artek
Wprowadenie do WinDLX
22
Rozkaz Trap
Trap 0 – używany do kończenia
Trap 0 – używany do kończenia
programu
programu
Trap 1 – otwarcie pliku
Trap 1 – otwarcie pliku
Trap 2 – zamknięcie pliku
Trap 2 – zamknięcie pliku
Trap 3 – odczyt bloku z pliku
Trap 3 – odczyt bloku z pliku
Trap 4 – zapis bloku do pliku
Trap 4 – zapis bloku do pliku
Trap 5 – działanie jak printf w C
Trap 5 – działanie jak printf w C
Artur&Artek
Wprowadenie do WinDLX
23
Program w asemblerze
DLX:
.data
.align
2
n:
.word
6
result:
.word
0
.text
.global
main
main:
;inicjacja danych
addi
r1, r0, 0
addi
r2, r0, 1
lw
r3, n(r0)
lw
r10, n(r0)
Tu:
slei
r11, r10, #1
bnez r11, Exit
add r3, r1, r2
addi r1, r2, #0
addi r2, r3, #0
subi r10, r10, #1
j
Tu
Exit: sw
result(r0), r3
trap 0
Jaki jest efekt wykonania
programu?
Artur&Artek
Wprowadenie do WinDLX
24