Handout - Institut für Theoretische Informatik - Technische ...

Handout - Institut für Theoretische Informatik - Technische ... Handout - Institut für Theoretische Informatik - Technische ...

iti.cs.tu.bs.de
von iti.cs.tu.bs.de Mehr von diesem Publisher
05.11.2013 Aufrufe

4. Church-Turing-These 4.1 RAM 4.1.0 Befehlssatz einer RAM Befehl Wirkung READ 〈R 0 〉 := 〈read〉, 〈BZ〉 := 〈BZ〉 + 1 der Lesekopf bewegt sich ein Feld nach rechts WRITE der Schreibkopf schreibt 〈R 0 〉 und bewegt sich ein Feld nach rechts, 〈BZ〉 := 〈BZ〉 + 1 LOAD i 〈R 0 〉 := 〈R i 〉 und 〈BZ〉 := 〈BZ〉 + 1 STORE i 〈R i 〉 := 〈R 0 〉 und 〈BZ〉 := 〈BZ〉 + 1 ADD i 〈R 0 〉 := 〈R i 〉 + 〈R 0 〉 und 〈BZ〉 := 〈BZ〉 + 1 PRED 〈R 0 〉 := pred〈R 0 〉 1 und 〈BZ〉 := 〈BZ〉 + 1 GOTO m 〈〈BZ〉 := { m m falls 〈R IF R i = 0 GOTO m 〈BZ〉 := i 〉 = 0 〈BZ〉 + 1 sonst { m falls 〈R IF R i > 0 GOTO m 〈BZ〉 := i 〉 > 0 〈BZ〉 + 1 sonst STOP Maschine hält Weiter kann man für LOAD , STORE und ADD das Argument i statt als Zählindex für Register R i auch zur indirekte Adressierung des Registers R 〈Ri 〉 oder als Konstante i ∈ N verwenden. Dies wird durch einen Asterisk ∗ bzw. ein Ausrufezeichen ! vor dem i angezeigt. 1 mit pred(n + 1) = n und pred0 = 0 Jürgen Koslowski (TU-BS) Theoretische Informatik 2 SS 2012 50 / 215

4. Church-Turing-These 4.1 RAM Beim Programmieren elementarer Aktionen als “Macros” ist zu beachten, daß Sprung-Adressen ggf. anzupassen und der Akkumulator zu retten sind. Beispiel SUCC i / PRD i soll den Inhalt von R i STORE α 〈R α 〉 = 〈R 0 〉 LOAD !1 〈R o 〉 = 1 ADD i 〈R 0 〉 := 〈R i 〉 + 1 STORE i 〈R i 〉 := 〈R i 〉 + 1 LOAD α 〈R 0 〉 = 〈R α 〉 um 1 erhöhen/vermindern: STORE α 〈R α 〉 = 〈R 0 〉 LOAD i 〈R 0 〉 = 〈R i 〉 PRED 〈R 0 〉 := pred〈R i 〉 STORE i 〈R i 〉 := pred〈R i 〉 LOAD α 〈R 0 〉 = 〈R α 〉 Dabei ist R α ein zum Zeitpunkt des Aufrufs freies Register, das manuell anzupassen ist. Jürgen Koslowski (TU-BS) Theoretische Informatik 2 SS 2012 51 / 215

4. Church-Turing-These 4.1 RAM<br />

4.1.0 Befehlssatz einer RAM<br />

Befehl<br />

Wirkung<br />

READ 〈R 0 〉 := 〈read〉, 〈BZ〉 := 〈BZ〉 + 1<br />

der Lesekopf bewegt sich ein Feld nach rechts<br />

WRITE der Schreibkopf schreibt 〈R 0 〉 und bewegt sich ein Feld nach rechts, 〈BZ〉 := 〈BZ〉 + 1<br />

LOAD i 〈R 0 〉 := 〈R i 〉 und 〈BZ〉 := 〈BZ〉 + 1<br />

STORE i 〈R i 〉 := 〈R 0 〉 und 〈BZ〉 := 〈BZ〉 + 1<br />

ADD i 〈R 0 〉 := 〈R i 〉 + 〈R 0 〉 und 〈BZ〉 := 〈BZ〉 + 1<br />

PRED 〈R 0 〉 := pred〈R 0 〉 1 und 〈BZ〉 := 〈BZ〉 + 1<br />

GOTO m<br />

〈〈BZ〉 :=<br />

{<br />

m<br />

m falls 〈R<br />

IF R i = 0 GOTO m 〈BZ〉 :=<br />

i 〉 = 0<br />

〈BZ〉 + 1 sonst<br />

{<br />

m falls 〈R<br />

IF R i > 0 GOTO m 〈BZ〉 :=<br />

i 〉 > 0<br />

〈BZ〉 + 1 sonst<br />

STOP<br />

Maschine hält<br />

Weiter kann man <strong>für</strong> LOAD , STORE und ADD das Argument i statt als<br />

Zählindex <strong>für</strong> Register R i auch zur indirekte Adressierung des Registers<br />

R 〈Ri 〉 oder als Konstante i ∈ N verwenden. Dies wird durch einen Asterisk<br />

∗ bzw. ein Ausrufezeichen ! vor dem i angezeigt.<br />

1 mit pred(n + 1) = n und pred0 = 0<br />

Jürgen Koslowski (TU-BS) <strong>Theoretische</strong> <strong>Informatik</strong> 2 SS 2012 50 / 215

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!