• Keine Ergebnisse gefunden

Projekt „Core Wars“ Projekt „Core Wars“

N/A
N/A
Protected

Academic year: 2021

Aktie "Projekt „Core Wars“ Projekt „Core Wars“"

Copied!
23
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Projekt „Core Wars“

Projekt „Core Wars“

(2)

Ziel Ziel

In Core Wars geht es darum, zwei – in einer Assembler ähnlichen Sprache geschriebene – Programme

gegeneinander antreten zu lassen

Ziel ist die Vernichtung eines der Programme

(3)

Ablauf Ablauf

Das Spiel besteht aus einem Server, welcher die

„Assemblersprache“ der gegeneinander antretenden Programme Interpretiert.

Abwechselnd werden jeweils eine Anweisung der beiden Programme ausgeführt.

Nach jeder Anweisung wird der Programm-Counter des Cores inkrementiert.

Verloren hat das Programm, das als erstes auf eine

nicht ausführbare Anweisung trifft.

(4)

Server Server

Der Server verwaltet einen gemeinsamen

Speicherbereich für die interpretierten Programme.

-> Überlegen Sie sich, welche Informationen der Speicher haben kann

Der Speicherbereich ist zusammenhängend, d.h wird etwas über die Maximalgröße hinaus adressiert, fängt er vorne wieder an --> Tip: Modulo rechnen!

Grundzustand des Speichers ist überall DAT #0

Vor dem laden eines Programms (Core) ist eine Zufalls-

Adresse zu ermitteln, an der das Programm im Speicher

anfängt.

(5)

Aufbau des Assembler- Aufbau des Assembler-

Programms Programms

Das Assembler-Programm hat beispielsweise folgenden Aufbau:

Hier wird der gesamte Inhalt von Speicheradresse 1 auf Speicheradresse 0 kopiert.

Mit add wird der Inhalt von Argument A zur Adresse von Argument B hinzuaddiert – also hier wird 4 zur Fünft-

Nächsten Speicheradresse addiert.

mov 0,1

add #4,5

(6)

Aufbau des Assembler- Aufbau des Assembler-

Programms Programms

Zu einer bestimmten Speicheradresse kann mit einem Jump-Befehl gesprungen werden:

Progamm-Sprünge sind grundsätzlich relativ, d.h hier wird von der aktuellen Speicheradresse aus um 200 zurück gesprungen.

jmp ­200

(7)

Labels Labels

Labels legen einen Namen für eine Variable an

über ptr ist nun die Variable ansprechbar (Wert ist 0)

Mit Labels kann eine bestimmte Adresse angesprungen werden:

Die zwei Programme bewirken das gleiche. Hier wird endlos eine Variable um 1 erhöht

DAT #0 P1  add #1,­1

jmp P1

  DAT #0 add #1,­1 jmp ­1 Ptr DAT #0

(8)

Zahl - direkt

Bsp: MOV Quelle Ziel

Kopiert den Inhalt der Adresse Quelle zur Adresse Ziel

#Zahl - unmittelbar Bsp: MOV #5 Ziel

füllt den Inhalt der Adresse Ziel mit der Zahl 5

@Zahl - indirekt

Bsp: MOV #5 @Ziel

füllt den Inhalt der in der Adresse Ziel angegebene Adresse mit der Zahl 5

<Zahl - dekrementierend und Indirekt Bsp: MOV #5 <Ziel

Hier wird zunächst die Zieladresse um 1 erniedrigt, anschließend ein MOV #5 @Ziel.

Adressierungsarten

Adressierungsarten

(9)

DAT

Bsp: Var DAT #­1

Erstellt eine Variable mit dem Label Var und dem Inhalt -1

MOV

Bsp: MOV #5 Ziel

füllt den Inhalt der Adresse Ziel mit der Zahl 5

ADD

Bsp: ADD  #5 @Ziel

Addiert

den Wert 5 zum Inhalt der angegebenen Adresse „Ziel“

SUB

Bsp: SUB  #5 @Ziel

Subtrahiert den Wert 5 vom Inhalt der angegebenen Adresse „Ziel“

Assembler-Operanden

Assembler-Operanden

(10)

JMP

Bsp: JMP ­2

Springt zwei Programmzeilen zurück

JMZ

Bsp: JMZ - 5 ptr

Spring 5 Programmzeilen zurück, wenn der Inhalt von ptr Null ist

JMG

Bsp: JMG ptr @var

Springe nach „ptr“ falls der Inhalt von „var“ ungleich Null ist

DJN

Bsp: DJN ptr @var

Dekrementiere den Inhalt von var um 1 und springe nach ptr falls der Inhalt von var noch nicht Null ist

Assembler-Operanden

Assembler-Operanden

(11)

CMP

Bsp: CMP @var #42

Vergleiche den Inhalt von „var“ mit 42 und überspringe die nächste Instruktion, falls die Werte nicht nicht übereinstimmen

Assembler-Operanden

Assembler-Operanden

(12)

Assembler - Beispiel:

Assembler - Beispiel:

ptr DAT #0 ; legt eine „Variable“ ptr mit dem Wert 0 an start ADD #5, ptr ; addiert 5 in den Speicherbereich „ptr“

MOV #0, @ptr ; kopiert füllt den Inhalt in der Adresse „ptr“

; mit 0

JMP start ; springt an die Stelle mit dem Label „start“

Assembler

Objekt-Code

(13)

Was ist Objekt-Code?:

Was ist Objekt-Code?:

„Objekt-Code besteht aus einer folge von Bits“ (bei uns Integern)

Objekt-Code = { Instruktionen } Instruktion = { DAT Value |

MOV Operands | ADD Operands | SUB Operands | JMP Operand | JMZ Operands | JMG Operands | DJN Operands | CMP Operands } Operands = Operand | Operand

Operand = Adressing Mode Value

Adressing Mode = Immediate | Direct | Indirect | Decrement

(14)

Was ist Objekt-Code?:

Was ist Objekt-Code?:

„Objekt-Code besteht aus einer folge von Bits“

Objekt-Code = { Instruktionen } Instruktion = { DAT Value |

MOV Operands | ADD Operands | SUB Operands | JMP Operands | JMZ Operands | JMG Operands | DJN Operands | CMP Operands } Operands = Operand | Operand

Operand = Adressing Mode Value

Adressing Mode = Immediate | Direct | Indirect | Decrement DI

DAT=0 MOV=1 ADD=2 SUB=3 ....

CMP=8

Imediate = 0 Direct = 1 Indirect = 2 Decrement = 3

(15)

Zurück zum Beispiel:

Zurück zum Beispiel:

ptr DAT #0 ; legt eine „Variable“ ptr mit dem Wert 0 an start ADD #5, ptr ; addiert 5 in den Speicherbereich „ptr“

MOV #0, @ptr ; kopiert füllt den Inhalt in der Adresse „ptr“

; mit 0

JMP start ; springt an die Stelle mit dem Label „start“

0 0

2 0 5 1 -1

1 0 0 2 -2

4 1 -2

Assembler

Objekt-Code

(16)

Simulator:

Simulator:

ptr DAT #0

start ADD #5, ptr MOV #0, @ptr JMP start

0 0

2 0 5 1 -1

1 0 0 2 -2

4 1 -2

Der Objekt-Code wird nun interpretiert:

0 1 2 3 4 5 6 7 8 9 10

0

Cunter: 0

(17)

Simulator:

Simulator:

ptr DAT #0

start ADD #5, ptr MOV #0, @ptr JMP start

0 0

2 0 5 1 -1

1 0 0 2 -2

4 1 -2

Der Objekt-Code wird nun interpretiert:

0 1 2 3 4 5 6 7 8 9 10

5 0

Cunter: 1

(18)

Simulator:

Simulator:

ptr DAT #0

start ADD #5, ptr MOV #0, @ptr JMP start

0 0

2 0 5 1 -1

1 0 0 2 -2 4 1 -2

Der Objekt-Code wird nun interpretiert:

0 1 2 3 4 5 6 7 8 9 10

5 0

0

Cunter: 2

5

(19)

Simulator:

Simulator:

ptr DAT #0

start ADD #5, ptr MOV #0, @ptr JMP start

0 0

2 0 5 1 -1

1 0 0 2 -2

4 1 -2

Der Objekt-Code wird nun interpretiert:

0 1 2 3 4 5 6 7 8 9 10

5

0 5

0

Cunter: 3

(20)

Simulator:

Simulator:

ptr DAT #0

start ADD #5, ptr MOV #0, @ptr JMP start

0 0

2 0 5 1 -1

1 0 0 2 -2

4 1 -2

Der Objekt-Code wird nun interpretiert:

0 1 2 3 4 5 6 7 8 9 10

5

0 10

0

Cunter: 4

5

0

(21)

Simulator:

Simulator:

ptr DAT #0

start ADD #5, ptr MOV #0, @ptr JMP start

0 0

2 0 5 1 -1

1 0 0 2 -2 4 1 -2

Der Objekt-Code wird nun interpretiert:

0 1 2 3 4 5 6 7 8 9 10

5

0 10

0

0

Cunter: 5

10

0

(22)

Simulator:

Simulator:

ptr DAT #0

start ADD #5, ptr MOV #0, @ptr JMP start

0 0

2 0 5 1 -1

1 0 0 2 -2

4 1 -2

Der Objekt-Code wird nun interpretiert:

0 1 2 3 4 5 6 7 8 9 10

5

0 10

0

0

Cunter: 6

10

0

(23)

Simulator:

Simulator:

ptr DAT #0

start ADD #5, ptr MOV #0, @ptr JMP start

0 0

2 0 5 1 -1

1 0 0 2 -2

4 1 -2

Der Objekt-Code wird nun interpretiert:

0 1 2 3 4 5 6 7 8 9 10

5

0 10 10 15

0

0

Cunter: 7

0 0 0

Referenzen

ÄHNLICHE DOKUMENTE

• Zero, based on undisturbed sediment surface of B.C.. wuellerstorfi are unreliable due to a

(1996): Wassermassenaustausch zwischen NE-Atlantik und Nordmeer während der letzten 300.000/80.000 Jahre im Abbild stabiler O- und C-Isotope, Diss..

(1991): δ 18 O stratigraphy and chronology of Kiel sediment cores from the East Atlantic.- Ber.-Rep.. (1986): Spätquartäre Entwicklung von Küstenauftrieb und Tiefenwasserzirkulation

(1998): Produktivität und Temperaturen im subtropischen Nordatlantik: Zyklische und abrupte Veränderungen im späten Quartär.. (1991): δ 18 O stratigraphy and chronology of Kiel

Macroscopic observations of the breccias within the CRP-1 core suggest in s i f ~ i f'racturing, brittle sI~~~:iring along discrete shear planes, and

Central core disease (CCD) is an inherited (mostly dominant) neuromuscular disorder characterised by central cores in type I fibers on muscle biopsy and clinical features of

During split cycle operations, the read sequencer completes the read portion of memory cycle and waits for a write initiate input signal to start the write

The E0C6274 is a single-chip microcomputer made up of the 4-bit core CPU E0C6200A, ROM, RAM, LCD driver, input ports, output ports, I/O ports, clock timer, stopwatch timer,