9
256 6 MMIX-Prozessor Nachfolgende Tabelle übersetzt MMIX-Opcodes in diejenigen Zahlen, die im Befehlswort in den Bits 31...24 abgelegt werden müssen. 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ν 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

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

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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