![Page 1: 256 6 MMIX-Prozessor · 6.5 MMIX Befehle 273 T c) Geben Sie MMIX-Befehle an, die e = 2,718281828 in Register b ablegen.---SETL 9,27 SET buf 7,70000 MUL a, a,buf7 E 270000 DETL buf](https://reader030.vdokument.com/reader030/viewer/2022040211/5e7658a4a26cde41a53e8280/html5/thumbnails/1.jpg)
256 6 MMIX-Prozessor
Nachfolgende Tabelle übersetzt MMIX-Opcodes in diejenigen Zahlen, die im Befehlswort
in den Bits 31...24 abgelegt werden müssen.
! "#$%
!"#"$% &'()*+,-.%(*/%012'(*/%!&'(!)*+*,-(#.*-/!01234/*5!67*8434/*9!:;</!=*8>((!7'3,+4-=*7/*<!?'@*--*!A@*<(*BCBD!!
0x..0 0x..1 0x..2 0x..3 0x..4 0x..5 0x..6 0x..7
TRAP 5ν FCMP ν FUN ν FEQL ν FADD 4ν FIX 4ν FSUB 4ν FIXU 4ν
FMUL 4ν FCMPE 4ν FUNE ν FEQLE 4ν FDIV 40ν FSQRT 40ν FREM 4ν FINT 4ν
SETH ν SETMH ν SETML ν SETL ν INCH ν INCHM ν INCML ν INCL νORH ν ORMH ν ORML ν ORL ν ANDNH ν ANDNMH ν ANDNML ν ANDNL ν
POP 3ν RESUME 5ν SYNC ν SWYM ν GET ν TRIP 5ν0x..8 0x..9 0x..A 0x..B 0x..C 0x..D 0x..E 0x..F
SUB[I] ν
CSNP[I] νZSP[I] ν
SUBU[I] ν16ADDU[I] νNEGU[I] νSRU[I]ν
BOD[B] ν+πBEV[B] ν+πPBOD[B] 3ν-π
CMPU[I] νSLU[I] νBZ[B] ν+πBNZ[B] ν+πPBZ[B] 3ν-π
CSNZ[I] νZSZ[I] ν
ADD[I] ν
CSNN[I] νZSN[I] ν
ADDU[I] ν4ADDU[I] ν
PBNZ[B] 3ν-πCSZ[I] ν
0x0.. 0x0..FLOT[I] 4ν FLOTU[I] 4ν SFLOT[I] 4ν SFLOTU[I] 4ν
PUSHJ[B] ν GETA[B] ν PUT[I] ν[UN]SAVE 20µ+ν
XOR[I] νNXOR[I] νODIF[I] νMXOR[I] ν
STWU[I] µ+νSTOU[I] µ+νSTUNC[I] µ+νPUSHGO[I] 3ν
LDWU[I] µ+νLDOU[I] µ+νLDUNC[I] µ+νGO[I] 3ν
CSOD[I] νPBEV[B] 3ν-π
ZSEV[I] ν
CSEV[I] νZSOD[I] ν
NAND[I] νTDIF[I] νMOR[I] ν
STO[I] µ+νSTCO[I] µ+νSYNCID[I] νNOR[I] ν
LDO[I] µ+νCSWAP[I] 2µ+2νPREGO[I] νSTW[I] µ+ν
PBNP[B] 3ν-πCSP[I] ν
ZSNP[I] νLDW[I] µ+ν
BNP[B] ν+πPBP[B] 3ν-π
8ADDU[I] νNEG[I] νSR[I] νBP[B] ν+π
ORN[I] νANDN[I] νWDIF[I] νSADD[I] ν
STBU[I] µ+νSTTU[I] µ+νSTHT[I] µ+νPREST[I] ν
LDBU[I] µ+νLDTU[I] µ+νLDHT[I] µ+νPRELD[I] ν
ZSNZ[I] ν
BDIF[I] νMUX[I] ν
JMP[B] ν
STSF[I] µ+νSYNCD[I] νOR[I] νAND[I] ν
LDSF[I] µ+νLDVTS[I] νSTB[I] µ+νSTT[I] µ+ν
BNN[B] ν+πPBN[B] 3ν-πPBNN[B] 3ν-πCSN[I] ν
ZSNN[I] νLDB[I] µ+νLDT[I] µ+ν
2ADDU[I] νCMP[I] νSL[I] νBN[B] ν+π
0xC..
0xD..
0xE..
0xF..
0x8..
0x9..
0xA..
0xB..
0xD..
0xE..
0xF..
0x1..
0x2..
0x3..
0x4..
0x5..
0x6..
0x7..
0x9..
0xA..
0xB..
0xC..
0x5..
0x6..
0x7..
0x8..
0x1..
0x2..
0x3..
0x4..
MUL[I] 10ν MULU[I] 10ν DIV[I] 60ν DIVU[I] 60ν
!!!&'(!*<(B*!E;@@-*!0F!);B#G*<B9!/*(!1234/*(!*7B(2<;3,B!/*<!&422*-C*;-*!0H!@;(!IJ95! ;7!/*<!(;3,!/*<!)*#+*,-(34/*!@*+;7/*BD!!!&'(!C:*;B*!E;@@-*!/*(!1234/*(!*<=;@B!(;3,!:;*!+4-=BK!!
−! 6L)!0);B!E<D!"9!/*(!C:*;B*7!E;@@-*(!+! H5!:*77!(;3,!/*<!)*+*,-!;8!4@*<*7!?*;-!/*<!&422*-!"#$"!@*+;7/*B!+! I5!:*77!(;3,!/*<!)*+*,-!;8!M7B*<*7!?*;-!/*<!&422*-!"#$"!@*+;7/*B!!
!−! );B(!$5!I!M7/!H!/*(!C:*;B*7!E;@@-*(!*7B(2<*3,*7!/*<!%&'$("!0H!@;(!%95!;7!/*8!(;3,!/*<!)*+*,-(#34/*!@*+;7/*B!
![I]!@*/*MB*BK!N88*/;'B*#O'<;'7B*!/*(!)*+*,-(!
−! ;88*/;'B*!⇔!&;<*PB42*<'7/!−! ADD $1,$2,$3K!7;3,B!;88*/;'B*5!/'!/*<!"D!12*<'7/!*;7!Q*=;(B*<!;(B!M7/!P*;7*!R',-!−! ADD $1,$2,3K!;88*/;'B*5!/'!'-(!"D!12*<'7/!*;7*!R',-!'7=*=*@*7!;(B!M7/!P*;7!Q*=;(B*<!−! /*<! 1234/*! /*<! ;88*/;'B*#O'<;'7B*! *;7*(! )*+*,-(! ;(B! ;88*<! M8! I! ,S,*<! '-(! /;*! 7;3,B#;88*/;'B*#O'<;'7B*!/*(!)*+*,-(!0(B*,B!;7!/*<!&422*-)&'$("!'-(4!<*3,B(9!
−! *;7*! ;88*/;'B*#O'<;'7B*!/*(!)*+*,-(!:;</!T48!U((*8@-*<!'MB48'B;(3,!'7,'7/!/*(! +*,-*7/*7!&4--'<#R*;3,*7(! 0$9! *<P'77B5! :*(,'-@! ;8! V<4=<'88! 7;3,B! *W2-;C;B!ADDI! =*(3,<;*@*7! :*</*7!8M((!!!
Die Übersetzung erfolgt folgendermaßen:
• Befehl suchen
• Doppelzeile ermitteln, in der der Befehl steht
• An der Seite der Tabelle das obere Nibble (= die oberen 4 Bits) des Opcodes
ablesen, z.B. ADD) 0x2
• Prüfen, ob der Befehl im oberen oder im unteren Teil der Doppelzeile steht
• Steht der Befehl im oberen Teil der Doppelzeile, kann man das untere
Nibble (= die unteren 4 Bits) des Opcodes an der ersten Tabellenzeile
ablesen, z.B. ADD) 0x..0 oder 0x..1
• Steht der Befehl im unteren Teil der Doppelzeile, kann man das
![Page 2: 256 6 MMIX-Prozessor · 6.5 MMIX Befehle 273 T c) Geben Sie MMIX-Befehle an, die e = 2,718281828 in Register b ablegen.---SETL 9,27 SET buf 7,70000 MUL a, a,buf7 E 270000 DETL buf](https://reader030.vdokument.com/reader030/viewer/2022040211/5e7658a4a26cde41a53e8280/html5/thumbnails/2.jpg)
6.4 MMIX-Programme 259
h) Wieviele Takte benötigt der BZ-Befehl, wenn nicht gesprungen wird?
i) Wieviele Takte benötigt der PBZ-Befehl, wenn gesprungen wird?
j) Wieviele Takte benötigt der PBZ-Befehl, wenn nicht gesprungen wird?
k) Geben Sie das 32 Bit breite Befehlswort des Befehls ‘‘SL $1,$2,3’’ an.
T l) Geben Sie das 32 Bit breite Befehlswort des Befehls ‘‘SUB $5,$6,7’’ an.X-
-0×25050607
![Page 3: 256 6 MMIX-Prozessor · 6.5 MMIX Befehle 273 T c) Geben Sie MMIX-Befehle an, die e = 2,718281828 in Register b ablegen.---SETL 9,27 SET buf 7,70000 MUL a, a,buf7 E 270000 DETL buf](https://reader030.vdokument.com/reader030/viewer/2022040211/5e7658a4a26cde41a53e8280/html5/thumbnails/3.jpg)
6.5 MMIX Befehle 273
T c) Geben Sie MMIX-Befehle an, die e = 2,718281828 in Register b ablegen.- -
-
SETL 9,27
SET buf 7,70000
MUL a , a ,buf7 E 270000
DETL buf 217828
ADD 9,9 , bufz F 277828
MUL 9,9,
buf 7 I 2778280000ADD alhcbufz ← 2778287828F LOT bnf7ibhf7
F LOT orca
F DIV a ,aibuf7 ← 2177828,7828F DIV 9,9 , but F 27,78287828
FDIV
1019,70
← 2,778287828
![Page 4: 256 6 MMIX-Prozessor · 6.5 MMIX Befehle 273 T c) Geben Sie MMIX-Befehle an, die e = 2,718281828 in Register b ablegen.---SETL 9,27 SET buf 7,70000 MUL a, a,buf7 E 270000 DETL buf](https://reader030.vdokument.com/reader030/viewer/2022040211/5e7658a4a26cde41a53e8280/html5/thumbnails/4.jpg)
6.5 MMIX Befehle 277
Bits löschen
a) Welche Befehle verwendet man typischerweise um einzelne Bits zu löschen?
b) Geben Sie an, wie Sie mit dem Befehl ANDNML Bit 21 in Register a löschen.
T c) Geben Sie an, wie Sie mit dem Befehl ANDN Bit 21 in Register a löschen.
d) Geben Sie an, wie Sie mit einem NAND und einem AND-Befehl Bit Nr. 21 löschen.
Bits setzen
a) Welche Befehle verwendet man typischerweise um Bits zu setzen?
→-
-
SETL $7,7Elron 2- - Heret
SLU $71517,27← 0+00 .. . ⑨ 7 - nee
ANON 919,87
![Page 5: 256 6 MMIX-Prozessor · 6.5 MMIX Befehle 273 T c) Geben Sie MMIX-Befehle an, die e = 2,718281828 in Register b ablegen.---SETL 9,27 SET buf 7,70000 MUL a, a,buf7 E 270000 DETL buf](https://reader030.vdokument.com/reader030/viewer/2022040211/5e7658a4a26cde41a53e8280/html5/thumbnails/5.jpg)
288 6 MMIX-Prozessor
T r) Nehmen Sie die gezeigte Speicherbelegung an und geben Sie hexadezimal alle 64
Bit des Registers 0 nach Ausführung der folgenden Befehle an:
LDB $0,$254,3:
LDB $0,$254,14:
LDBU $0,$254,15:
LDT $0,$254,14:
LDTU $0,$254,15:
-
0×000 -- - 034
or FF - . . FSA 9 oey FIT - m
-
0×00 -- a BC
@too . . 5678 SABC 5 I£707
-
Oreo - 56789A BC-
76 Steller
Oooo oooo 56789 ABC
![Page 6: 256 6 MMIX-Prozessor · 6.5 MMIX Befehle 273 T c) Geben Sie MMIX-Befehle an, die e = 2,718281828 in Register b ablegen.---SETL 9,27 SET buf 7,70000 MUL a, a,buf7 E 270000 DETL buf](https://reader030.vdokument.com/reader030/viewer/2022040211/5e7658a4a26cde41a53e8280/html5/thumbnails/6.jpg)
6.5 MMIX Befehle 291
In folgendem Programmcode wird XXX XXXXXXXX als Platzhalter für einen einzelnen
Befehl verwendet:
LOC Data_SegmentGREG @
A OCTA #FFFF FFFF FFFF FFFFB TETRA #8765 4321
LOC #100Main LDTU $0,B
XXX XXXXXXXXTRAP 0,Halt,0
c) Geben Sie für das oben gezeigte Programm den Inhalt des 64 Bit breiten Wortes
an, welches durch die Marke A adressiert wird, wenn XXX XXXXXXXX durch folgende
Befehle ersetzt wird:
STB $0,A:
STTU $0,A:
STT $0,$254,6:
T d) Geben Sie für das oben gezeigte Programm den Inhalt des 64 Bit breiten Wortes
an, welches durch die Marke A adressiert wird, wenn XXX XXXXXXXX durch folgende
Befehle ersetzt wird:
STW $0,A:
STWU $0,A:
STT $0,A:
STO $0,A:
STB $0,$254,5:
STW $0,$254,1:
ST0 $0,$254,5:
→
#$254 A Hay-
→
÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷f:÷÷
:÷÷:::::*.
a t 4327 F F F F ..
. F
O x ooo a a a o o 8 7 65 4 I 27
$0 i ex e ooo ooo a 8765
4322g
![Page 7: 256 6 MMIX-Prozessor · 6.5 MMIX Befehle 273 T c) Geben Sie MMIX-Befehle an, die e = 2,718281828 in Register b ablegen.---SETL 9,27 SET buf 7,70000 MUL a, a,buf7 E 270000 DETL buf](https://reader030.vdokument.com/reader030/viewer/2022040211/5e7658a4a26cde41a53e8280/html5/thumbnails/7.jpg)
6.5 MMIX Befehle 301
T e) Geben Sie den MMIX-Code an, der nachfolgenden C-Code implementiert:
C-Code: int a, b;
...
if(a > 0 && b < 0){
a = 1;}else if(a > 0 || b == 0){
a = 2;}else{
a = 3;}
MMIX-Code:€÷.
" " m
Bz , BP →
END
I' BNP a ,
LT
B NN B ,LT
SETL a ,7
Trip END↳ Bp a ,
L2
B Za ,
L2
IETL a,
3
s m p ENDL2 S ETL 912
END . . . -
u-
![Page 8: 256 6 MMIX-Prozessor · 6.5 MMIX Befehle 273 T c) Geben Sie MMIX-Befehle an, die e = 2,718281828 in Register b ablegen.---SETL 9,27 SET buf 7,70000 MUL a, a,buf7 E 270000 DETL buf](https://reader030.vdokument.com/reader030/viewer/2022040211/5e7658a4a26cde41a53e8280/html5/thumbnails/8.jpg)
324 6 MMIX-Prozessor
T o) Geben Sie den Befehl an mit dem Sie für den Stack-Pointer ein globales Register
reservieren und dieses mit 0x4000 00000000 0000 initialisieren.
T p) Warum initialisieren wir den Stack-Pointer mit 0x4000 00000000 0000, d.h. mit
dem Beginn des Poolsegments, und nicht mit dem Ende des Datensegments?
T q) Geben Sie die MMIX-Befehle an, mit denen Sie Register $1 und $2 auf den Stack
schreiben und dann die Funktion fkt aufrufen. Nehmen Sie an, dass Ihr Code im
Namensraum Main: steht und fkt im Namensraum Fkt: unter dem Namen :fktangelegt wurde. Sichern Sie die Rücksprungadresse in Register 0.
→ - -
=⇒ so
SUB : SP, :S 10,2*8
STO $7 , :S PieSte $4 ISP , 7*8
Go $0 , ifkt
![Page 9: 256 6 MMIX-Prozessor · 6.5 MMIX Befehle 273 T c) Geben Sie MMIX-Befehle an, die e = 2,718281828 in Register b ablegen.---SETL 9,27 SET buf 7,70000 MUL a, a,buf7 E 270000 DETL buf](https://reader030.vdokument.com/reader030/viewer/2022040211/5e7658a4a26cde41a53e8280/html5/thumbnails/9.jpg)
7.2 Pipelining-Konflikte 347
Nehmen Sie die folgenden Registerwerte an: $1 = 0x11, $2 = 0x22, $3 = 0x33, $254 =
0x2000000000000000
T f) Tragen Sie in nachfolgende Abbildung den Inhalt der Pipeline-Register für die unter
den Pipeline-Registern angegebenen Befehle ein. Geben Sie für alle irrelevanten
Einträge ‘‘X’’ an. Nehmen Sie an, dass von der ALU-benötigte und noch nicht in
den Registerblock geschriebene Ergebnisse über Forwarding-Pfade an das der
BD-Phase folgende Pipeline-Register geleitet werden.
Reg. Schr.:
Erg. Ausw.:
Sp. Schr.:
Zugr.-Art:
ALU:
Dir. Op.:
$X:
Dir. Op.:
$Y:
$Z:
X:
Reg. Schr.:
Erg. Ausw.:
Sp. Schr.:
Zugr.-Art:
$X:
Erg. ALU:
X:
Reg. Schr.:
Erg. Ausw.:
Lese-Daten:
X:
Erg. ALU:
0x05
SUB $1,$3,$2ADD $3,$254,0 OR $2,$2,36 AND $3,$2,28
1
1
0
X
1
1
0
X
1
1
ADD $3,$254,0
-
Code : AND -
:::÷. A0×770×22 Otoe
cxoe T
0×26 0×26 .
0×02
Direct -y oxen exoz 0×03
- - - - -
#
je5h13 :
Erg
AL
care een .
Ers Alu :
OR eero once 0×22 one 0070
co - a ennoIexzco
¥728"
0777 @ e
a ecooeee