x86 Assembler Programmierung Flashcards

1
Q

MMX Instruktionen

Was bedeutet MMX?

A

Multi Media Extension

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

MMX Instruktionen

Was ist die Grundidee von MMX?

A

Ermöglichen von mehreren Rechenoperationen mit einem Befehl

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

MMX Instruktionen

Neben der Einführung von 8 neuen 64-Bit Registern kann auch als Vektoraddition durchgeführt werden. Beispiel: paddb mm0, mm2. Erkläre was passiert und wie viele Operationen gleichzeitig durchgeführt werden.

A

Es werden 8 unabhängige Bytes addiert (jeweils 8 Bit) und 8 Operationen gleichzeitig ausgeführt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

SSE Instruktionen

Was bedeutet SSE?

A

Streaming SIMD Extensions

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

SSE Instruktionen

Wie lauten die Erweiterungen?

A

SSE2, SSE3,…

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

SSE Instruktionen

Wie groß ist das Register?

A

Es handelt sich um ein 128-Bit Register

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

SSE Instruktionen

MMX arbeitet mit Integer. Womit arbeitet SIMD?

A

Mit Gleitkommazahlen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

SSE Instruktionen

SISD ist die Single Instruction und Single Data. Welche Architektur wäre ein gutes Beispiel?

A

Die klassische Intel-Architektur

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

SSE Instruktionen

SIMD ist Single Instruction und Multiple Data. Wofür ist es nützlich?

A

Für Vektorberechnungen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

SSE Instruktionen

MISD ist Multiple Instructions und Single Data. Gibt es die überhaupt?

A

Nein, die gibt es nicht

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

SSE Instruktionen

MIMD ist Multiple Instructions und Multiple Data. Was wäre ein gutes Beispiel dafür?

A

Parallelrechner, z.B. Multicore-Chips

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

AMD Prozessoren

Nenne alle AMD Prozessoren aus der Vorlesung

A
  • Athlon
  • Turion
  • Duron
  • Sempron
  • Opteron
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

x86 Registersätze

Das General Purpose Register besteht aus 8 Registern zu je 32 Bit. Was ist die Aufgabe des General Purpose Register?

A

Speichern von Daten, Zähler und Speicheradressen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

x86 Registersätze

Wie wird der Speicher unterteilt?

A

Der Speicher wird in Segmente unterteilt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

x86 Registersätze

Was macht das Flags Register?

A

Es gibt den Zustand der CPU wieder z.B. N und Z Bit oder Carry Bit

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

x86 Registersätze

Was gibt der Instruction Pointer (IP/EIP) / Program Counter (PC) an?

A

Die Adresse des nächsten Maschinensprache-Befehls

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

x86 Registersätze

Woraus besteht das Spezialregister?

A

MMX/SSE

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

x86 Registersätze

Wofür steht das Register ECX und wofür ist es zuständig?

A

Es steht für das Counter Register und ist für Shift/Rotate Instruktionen zuständig

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

x86 Registersätze

Wofür steht das Register EDX und wofür ist es zuständig?

A

Es steht für das Data register und ist für arithmetische Operationen und I/O zuständig

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

x86 Registersätze

Wofür steht das Register ESI?

A

Es steht für das Source Index register

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

x86 Registersätze

Wofür steht das Register EBP und was beinhaltet es?

A

Es steht für den Stack Base Pointer register und beinhaltet die Adresse des Stacks am oberen Ende

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

x86 Registersätze

Wofür steht das Register ESP und was beinhaltet es?

A

Es steht für das Stack Pointer register und beinhaltet die Adresse des Stacks am unteren Ende

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

x86 Registersätze

Wofür steht das Register EAX und wofür ist es zuständig?

A

Es steht für Accumulator register und ist zuständig für arithmetische Operationen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

x86 Registersätze

Wofür steht das Register EDI?

A

Es steht für das Destination Index register

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

x86 Registersätze

Wofür steht das Register EBX und was beinhaltet es?

A

Es steht für das Base register und beinhaltet die Speicheradresse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

x86 Registersätze

Womit beginnen 32-Bit Register?

A

Sie beginnen mit E: EAX, EDX

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

x86 Registersätze

Welche Bits sind adressierbar?

A

Die niederwertigen 16 Bits wie AX, DX und BX

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

x86 Registersätze

Haben die niederwertigen 16 Bits eigene Register?

A

Nein, die haben keine eigenen Register

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

x86 Registersätze

Die 2 * 8 Bit von AX, BX, CX und DX sind adressierbar. Es gibt AH, BH, CH und DH und AL, BL, CL und DL. Welche sind die höherwertigen Bits und welche die niederwertigen Bits?

A
  • AH, BH, CH, DH (die höherwertigen 8 Bit)
  • AL, BL, CL, DL (die niederwertigen 8 Bit)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

x86 Registersätze

Wofür stehen die Segmentregister SS, CS, DS, ES, FS und GS?

A
  • SS: Stack Segment
  • CS: Code Segment
  • DS: Data Segment
  • ES: Extra Segment
  • F: F Segment
  • GS: G Segment
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Segmente bei Intel Pentium CPUs

Woraus besteht ein Pentium Segment-Selektor?

A

Aus dem Index, GDT/LDT und Privilege Level

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Segment bei Intel Pentium CPUs

Wozu dient der Index?

A

Er dient dazu, den spezifischen Segment-Deskriptor innerhalb der Tabelle zu identifizieren

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

Segmente bei Intel Pentium CPUs

Wofür ist GDT/LDT zuständig?

A

Es bestimmt die Segment-Deskriptor-Tabelle

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Segmente bei Intel Pentium CPUs

Welche Rechte hat das Privilige Level?

A

Es hat Zugriffsrechte auf Segment Ebene

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

x86 Registersätze

Warum wird Segmentierung heute nicht mehr genutzt?

A

Da Paging besser ist

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

x86 Registersätze

SS, CS, DS, ES zeigen für einen Prozess alle auf dieselbe Speicheradresse. Wie wird der Speicher dann adressiert?

A

Der Speicher wird komplett linear adressiert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

x86 Registersätze

FS und GS zeigen für einen Prozess nicht auf dieselbe Speicheradresse. Was wird dort gespeichert?

A

TLD = Thread Local Data, d.h. Daten, die für jeden Thread anders sind

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

x86 Registersätze / Flagregister

Welche Flagregister gibt es?

  • CF: ?
  • PF: ?
  • AF: ?
  • ZF: ?
  • SF: ?
  • TF: ?
  • IF: ?
  • DF: ?
  • OF: ?
  • IOPL: ?
  • AC: ?
A
  • CF: Carry Flag
  • PF: Parity Flag
  • AF: Adjust Flag
  • ZF: Zero Flag
  • SF: Sign Flag
  • TF: Trap Flag
  • IF: Interruption Flag
  • DF: Direction Flag
  • OF: Overflow Flag
  • IOPL: I/O Privilige Level field (2 bits)
  • AC: Alignment Check
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

x86 Datenrepräsentation

Bei Little Endian wird das niederwertige Byte zuerst angegeben. Wie wird der Wert 0xA1B2C3D4 im Speicher abgelegt?

A

D4 C3 B2 A1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

Zweierkomplement

Bei dem Zweierkomplement erhält man die negativen Zahlen, indem man alle Bits invertiert und eines addiert. Wie würde 1 = 0001 invertiert aussehen?

A
  • Invertiert = 1110
  • Ein Bit addieren
  • -1 = 1111
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

Adressierungsarten

Wo stehen die Operanden und das Ergebnis bei der Register Adressierung?

A

Die Operanden stehen in den Registern und das Ergebnis ist auch in einem Register

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

Adressierungsarten

Wo wird der Wert und das Ergebnis bei den Konstanten gespeichert?

A

Der Wert ist im Maschinensprachbefehl gespeichert und das Ergebnis in einem Register

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
43
Q

Adressierungsarten

Wo befindet sich der Operand bei der direkten Speicheradressierung?

A

Der Operand befindet sich im Hauptspeicher und wird auch aus dem gelesen

Beispiel auf Folie 22

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
44
Q

Adressierungsarten

Wo wird die Adresse des Operanden bei der direkten Speicheradressierung hineinkodiert?

A

Die Adresse des Operanden ist im Maschinensprachebefehl hineinkodiert

Beispiel auf Folie 22

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
45
Q

Adressierungsarten

Die direkte Speicheradressierung mit Offset ist eigentlich keine Addressierungsart.
Beispiel:

  • byte_tbl db 4, 8, 15, 16, 23, 42
  • mov al, byte_tbl+2

Was ist byte_tbl und die 2 in dem Beispiel?

A

byte_tbl ist eine konstante Adresse im Datensegment und 2 ist eine Konstante

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
46
Q

Adressierungsarten

Die direkte Speicheradressierung mit Offset ist eigentlich keine Addressierungsart.
Beispiel:

  • byte_tbl db 4, 8, 15, 16, 23, 42
  • mov al, byte_tbl+2

Was macht dann der Assembler mit den Konstanten byte_tbl und 2?

A

Der Assembler addiert beide Konstanten und nutzt dann die normale direkte Speicheradressierung

47
Q

Adressierungsarten

Bei dem Register Indirekt sind beide Operanden Register. Was speichert der linke Operand und der rechte Operand?

A

Der linke Operand speichert das Ergebnis und der rechte Operand enthält eine Adresse

Beispiel dazu auf Folie 24

48
Q

Adressierungsarten

Wird beim Register Indirekt auch die Segmentadresse addiert?

A

Ja, die Segmentadresse wird hinzuaddiert

49
Q

Adressierungsarten

Bei der Speicheradressierung mit Basis-Offset hat ein Befehl 3 Operanden. Woraus bestehen die 3 Operanden?

A

Aus 2 Register und einer Konstante

Beispiel zu Folie 25

50
Q

Adressierungsarten

Bei der Speicheradressierung mit Basis und Index hat ein Befehl 3 Operanden. Was sind die 3 Operanden?

A

Sie sind alle Register

Beispiel auf Folie 26

51
Q

Adressierungsarten

Beispiel zur Speicheradressierung mit Basis-Offset:

  • byte_tbl db 4, 8, 15, 16, 23, 42
  • mov ax, byte_tbl [bx]

Was passiert mit BX und der resultierenden Adresse?

A

BX wird aufaddiert und die resultierende Adresse wird ausgelesen

52
Q

Adressierungsarten

Beispiel zur Speicheradressierung mit Basis-Offset:

  • byte_tbl db 4, 8, 15, 16, 23, 42
  • mov ax, byte_tbl [bx]

Womit wird die Basisadresse angegeben?

A

Die Basisadresse ist mit byte_tbl gegeben

53
Q

Adressierungsarten

Beispiel zur Speicheradressierung mit Basis-Offset:

  • byte_tbl db 4, 8, 15, 16, 23, 42
  • mov ax, byte_tbl [bx]

Wo landet das Ergebnis?

A

Das Ergebnis landet im linken Operanden

54
Q

Adressierungsarten

Beispiel zur Speicheradressierung mit Basis und Index:

  • mov ax, [bx + di]

Was passiert mit den Registern BX und DI?

A

Die Register BX und DI werden addiert

55
Q

Addressierungsarten

Beispiel zur Speicheradressierung mit Basis und Index:

  • mov ax, [bx + di]

Was ist das Ergebnis?

A

Das Ergebnis ist eine Speicheradresse und wird ausgelesen

56
Q

Adressierungs

Beispiel zur Speicheradressierung mit Basis und Index:

  • mov ax, [bx + di]

Wo landet das Ergebnis?

A

Das Ergebnis landet im linken Operanden

57
Q

Adressierungsarten

Beispiel zu Register Indirekt:

  • mov ax, [bx]

Wird die Segmentadresse hinzuaddiert?

A

Ja, sie wird hinzuaddiert

58
Q

Adressierungsarten

Beispiel zur direkten Speicheradressierung:

  • mov ax, [102h]

Was passiert in dem Beispiel?

A

Liest den Speicher an der Adresse 102h aus und schreibt das Ergebnis in das Register AX

59
Q

Adressierungsarten

Beispiel zur direkten Speicheradressierung:

  • mov ax, [102h]

Wie wird die Adresse berechnet?

A
  • addr = DS + 102h
  • Die Adresse des Datensegmentregisters wird automatisch aufaddiert
60
Q

Adressierungsarten

Beispiel zu Register Indirekt:

  • mov ax, [bx]

Was enthält das Register BX?

A

Das Register BX enthält eine Adresse

61
Q

Adressierungsarten

Beispiel zu Register Indirekt:

  • mov ax, [bx]

Wie wird die Adresse ausgelesen und wo wird es gespeichert?

A

Die Adresse wird 16-bittig ausgelesen und in AX gespeichert

62
Q

Adressierungsarten

Beispiel zur Register Adressierung:

  • mov ax, bx

Was passiert in dem Beispiel?

A

Es wird bx nach ax kopiert

63
Q

Adressierungsarten

Beispiel zu Konstanten (Immediate):

  • mov ax, 1

Was passiert in dem Beispiel?

A

Der Wert 1 wird nach ax kopiert

64
Q

Adressierungsarten

Bei der Speicheradressierung mit Basis, Index und Offset hat ein Befehl 4 Operanden. Woraus bestehen die 4 Operanden?

A

Die Operanden bestehen aus 3 Register und 1 Konstante

65
Q

Adressierungsarten

Beispiel zur Speicheradressierung mit Basis, Index, Offset:

  • mov ax, [bx + di + 10]
  • mov ax, byte_tbl [bx + di]

Was passiert mit den Registern BX und DI?

A

Die Register BX und DI werden addiert

66
Q

Adressierungsarten

Beispiel zur Speicheradressierung mit Basis, Index, Offset:

  • mov ax, [bx + di + 10]
  • mov ax, byte_tbl [bx + di]

Was ist das Ergebnis und was passiert damit?

A

Das Ergebnis ist eine Speicheradresse und wird ausgelesen

67
Q

Adressierungsarten

Beispiel zur Speicheradressierung mit Basis, Index, Offset:

  • mov ax, [bx + di + 10]
  • mov ax, byte_tbl [bx + di]

Wo landet das Ergebnis?

A

Das Ergebnis landet im linken Operanden

68
Q

Stack

Beim Stack hat jeder Prozess mind. 3 Speicherblöcke. Liste die Speicherblöcke auf.

A
  • Text
  • Data
  • Stack
69
Q

Stack

Was enthält der Text?

A

Statische Daten

70
Q

Stack

Was enthält die Data?

A

Dynamische Daten

71
Q

Stack

Wofür ist der Stack da?

A

Für Funktionsaufrufe

72
Q

Stackoperationen

In welche Richtung wächst der Stack?

A

Der Stack wächst von oben nach unten

73
Q

Stackoperationen

Bei push ax wird der Operand auf dem Stack gespeichert. Um wie viele Bit kann das SP Register verringert werden?

A

Es kann um 1 Bit, 2 Bit, 4 Bit oder 8 Bit verringert werden

74
Q

Stackoperationen

Bei pop ax wird ein Wert vom Stack geholt. Was passiert mit der Adresse die im SP Register steht?

A

Die Adresse, die im SP Register steht, wird ausgelesen

75
Q

Stackoperationen

Um wie viele Bits kann das SP Register erhöht werden?

A

Das Register kann um 1 Bit, 2 Bit, 4 Bit oder 8 Bit erhöht werden

76
Q

Stackoperationen

Beim push ax werden Operanden auf dem Stack gespeichert. Was macht man mit der Adresse die im SP Register steht?

A

Der Operand wird an die neue Adresse geschrieben, auf die das SP Register zeigt

77
Q

Stack Frame

Der Stack Pointer (SP) ist das Ende des Stack Frames. Wohin zeigt er?

A

Er zeigt immer auf das oberste Byte des Stacks

78
Q

Stack Frame

Wohin zeigt der Stack Base Pointer (BP)?

A

Zeigt immer auf den Beginn eines Stack Frames

79
Q

Stack Frame

Jeder Funktionsaufruf hat einen Stack Frame. Was bedingt das Aufrufen einer Funktion?

A

Das Aufrufen erzeugt einen neuen Stack Frame

80
Q

Stack Frame

Wo liegen die lokalen Variablen ab dem BP?

A

Sie liegen in Richtung der niedrigeren Adressen

81
Q

Stack Frame

Wo liegen die Funktionsparameter beim Stack Frame?

A

Sie liegen an höheren Adressen bis zum BP

82
Q

Rekursion vs Iteration

Was macht der Stack eines Assembler bei der Iteration?

A

Der Stack nimmt die lokalen Variablen und die Rücksprungadresse auf

83
Q

Rekursionstiefe

Welche Daten werden bei jedem Rekursionsschritt auf den Stack geschrieben?

A
  • Parameter
  • Base Stack Pointer
  • Rücksprungadresse
84
Q

Rekursionstiefe

Was bestimmt die Stackgröße und was ist das Resultat?

A

Die Stackgröße wird durch die Rekursionstiefe, Parameter, Base Stack Pointer und Stack bestimmt. Das Resultat wäre ein Stack Overflow.

85
Q

Rekursionstiefe

Welche Gründe gibt es für hohe Rekursionstiefe?

A

Meistens Bugs oder manchmal auch naturwissenschaftliche Berechnungen

86
Q

Tail-Recursion

Bei der Tail-Recursion ist der Ort des rekursiven Aufrufs entscheidend. Welches Beispiel hat die Tail-Recursion?

  1. int F(int a, int b) { if (a == 0 || b == 0) return 0; return a + b + F(a * 0.9999, b * 0.9999; }
  2. int F(int a, int b, int c) { if (a == 0 || b == 0) return c; return F(a * 0.9999, b * 0.99999, a + b); }
A

Beispiel 2 hat die Tail Recursion, da der rekursive Aufruf die letzte Instruktion ist.

87
Q

Tail Recursion

Wie sieht bei der iterativen Lösung ohne Stacknutzung die Rücksprungadresse aus?

A

Es ist immer dieselbe, mit Ausnahme der Abbruchbedingung

88
Q

Tail Recursion

Werden lokale Variablen & Parameter noch benötigt?

A

Die werden nicht benötigt, wenn die Rekursion zurück kommt und gibt es teilweise auch nicht

89
Q

Tail Recursion

Wieso muss man das Base Pointer Register nicht sichern?

A

Da nichts auf den Stack kommt

90
Q

Tail Recursion

Was ist die Idee hinter der Tail Recursion?

A

Beliebige Rekursionstiefe ermöglichen

91
Q

Tail Recursion

Was ist der Ansatz?

A

Erkennen, dass es sich um Tail-Recursion handelt und ein Programm iterativ erzeugen

Beispiel auf Folie 50

92
Q

Loop Unrolling

Da bei kleinen Schleifen sich das Springen nicht mehr lohnt macht man eher…?

A

Einfache Wiederholungen da sie schneller sind

93
Q

Inline Funktionen

Das Aufrufen einer Funktion ist immer teuer und der Sprung braucht Zeit. Zu welchen Misses kann es kommen?

A

Es kann zu mehr Cache Misses kommen

94
Q

Sprünge und bedingte Sprünge

Gebe das Beispiel aus der Vorlesung zu bedingten Sprüngen an

A

BNE Else

95
Q

Sprünge und bedingte Sprünge

Gebe das Beispiel aus der Vorlesung zu nicht-bedingten Sprüngen an

A

BR Next

96
Q

Sprünge und bedingte Sprünge

Übersetze den folgenden Code:
~~~

If (i == 0)
k = 1;
Else
k = 2;

~~~

A
If:
CMP i, 0
BNE Else
Then:
MOV k, 1
BR Next
Else:
MOV k, 2
Next:
FOO x,y
97
Q

Nicht-bedingte Sprünge

Unit S2 der Pipeline untersucht gerade den Befehl “BR Next”. Eigentlich geht es dann mit “FOO x,y” weiter.
Während dessen (PARALLEL DAZU) holt Unit S1 den nächsten Befehl. Unit S1 holt den Befehl “MOV k,2” aus dem Speicher.
Jetzt hat die CPU den Falschen Befehl im Speicher.
Was könnte der Grund sein?

A

Die CPU muss den vermeintlich nächsten Befehl holen bevor sie merkt, dass sie springen muss

98
Q

Unit S2 der Pipeline untersucht gerade den Befehl “BR Next”. Eigentlich geht es dann mit “FOO x,y” weiter.
Während dessen (PARALLEL DAZU) holt Unit S1 den nächsten Befehl. Unit S1 holt den Befehl “MOV k,2” aus dem Speicher.
Jetzt hat die CPU den Falschen Befehl im Speicher. Die CPU muss den vermeintlich nächsten Befehl holen bevor sie merkt, dass sie springen muss.
Welche Lösungsmöglichkeit gibt es mit UltraSPRAC III?

A

Der Befehl nach dem Sprung wird immer ausgeführt.

99
Q

Unit S2 der Pipeline untersucht gerade den Befehl “BR Next”. Eigentlich geht es dann mit “FOO x,y” weiter.
Während dessen (PARALLEL DAZU) holt Unit S1 den nächsten Befehl. Unit S1 holt den Befehl “MOV k,2” aus dem Speicher.
Jetzt hat die CPU den Falschen Befehl im Speicher. Die CPU muss den vermeintlich nächsten Befehl holen bevor sie merkt, dass sie springen muss.
Was schreibt man im Zweifelsfall bei UltraSPRAC III, wenn der nächste Befehl unsicher ist?

A

Im Zweifelsfall schreibt man an diese Stelle ein NOP

100
Q

Nicht bedingte Sprünge

Unit S2 der Pipeline untersucht gerade den Befehl “BR Next”. Eigentlich geht es dann mit “FOO x,y” weiter.
Während dessen (PARALLEL DAZU) holt Unit S1 den nächsten Befehl. Unit S1 holt den Befehl “MOV k,2” aus dem Speicher.
Jetzt hat die CPU den Falschen Befehl im Speicher. Die CPU muss den vermeintlich nächsten Befehl holen bevor sie merkt, dass sie springen muss.
Welche Lösungsmöglichkeit gibt es mit Pentium?

A

Umgehen des Problems durch eine Menge extra Transistoren

101
Q

Bedingte Sprünge

Bedingte Sprünge sind der kniffligste Fall für die Pipeline. Das Ergebnis von “BNE Next” liegt erst vor, wenn Unit S4 fertig ist. Also herrscht 3 Takte lange Unsicherheit. Was wären Lösungsansätze?

A
  • Einfach: Erstmal warten das ist aber leider langsam
  • Komplex: Spekulative Ausführung, d.h die CPU führt Befehle spekulativ aus
102
Q

Bedingte Sprünge

Gibt es irgendwelche Folgen wenn die CPU bei der spekulativen Ausführung richtig geraten hat?

A

Nein, da die Konsequenzen nicht schlimmer als unbedingte Sprünge sind

103
Q

Gibt es irgendwelche Folgen wenn man bei der Spekulativen Ausführung falsch geraten hat?

A

Die Pipeline muss geleert werden und rückgängiggemacht werden

104
Q

Bedingte Sprünge vorhersagen

Um die Sprünge vorherzusagen rät die CPU statisch. Wieso führen bedingte Rücksprünge wahrscheinlich zu einem Sprung?

A

Weil bedingte Sprünge in Schleifen vorkommen und die n-mal wiederholt werden und 1-mal abbrechen

105
Q

Bedingte Sprünge vorhersagen

Bedingte Vorwärtssprünge haben selten eine statisch bevorzugte Wahrscheinlichkeit. Das bedeutet, dass sie leicht…?

A

tendenziell eher nicht springen

106
Q

Bedingte Sprünge vorhersagen

Wieso kann statisches Raten des Compilers funktionieren?

A

Der Compiler weiß es manchmal besser als die CPU allerdings nur selten

107
Q

Bedingte Sprünge vorhersagen

Was könnte der Compiler beim statischen Raten theoretisch machen?

A

Er könnte theoretisch ein Flag im Befehl setzen, die die Vorzugsentscheidung angibt

108
Q

Bedingte Sprünge vorhersagen

Was macht der Compiler zuerst beim Profiling?

A

Der Compiler beginnt mit einer statischen Vorhersage von Sprungwahrscheinlichkeiten

109
Q

Bedingte Sprünge vorhersagen

Warum wird das Programm beim Profiling mehrfach ausgeführt nachdem der Compiler statisch rät?

A

Die Sprungwahrscheinlichkeiten werden ermittelt

110
Q

Bedingte Sprünge vorhersagen

Was macht der Compiler beim Profiling nachdem das Programm mehrfach ausgeführt wurde?

A

Es verbessert seine Vorhersagen

111
Q

Bedingte Sprünge vorhersagen

Beim dynamischen Raten der CPU mit 1 Bit merkt sich die CPU die letzten Sprungbefehle. Welcher Nachteil entsteht?

A

Es kostet extra Speicher in der CPU

112
Q

Bedingte Sprünge vorhersagen

Worauf beruht die Vorhersage beim dynamischen Raten der CPU mit 1 Bit?

A

Beruht auf der letzten Befehlsausführung, da die CPU ein extremes Kurzzeitgedächtnis hat

113
Q

Bedingte Sprünge vorhersagen

Welcher Algorithmus wird beim Dynamischen Raten der CPU mit 2 Bit benutzt?

A

Der “second chance” Algorithmus

114
Q

Bedingte Sprünge vorhersagen

Was merkt sich die CPU beim dynamischen Raten der CPU mit 2 Bit?

A

Die letzten 2 Befehlsausführungen