Anweisung auf eine Stackmaschine implementieren |
03.01.2016, 13:32 | Auf diesen Beitrag antworten » | ||||
Shizmo | Anweisung auf eine Stackmaschine implementieren Hallo
Also als erstes würde ich die Anweisung (a + b)(c + (a + b) d) in die "polnische"-Notation bringen, also ab + d * c + ab + * (ich hoffe das stimmt so), und dann die Befehle ausführen, also: PUSH a PUSH b ADD PUSH d MULT PUSH c ADD PUSH a PUSH b ADD MULT POP Okay, also funktioniert das so oder muss ich das mehr aufteilen? BLAU a) wäre dann also 12. |
||||
|
|||||
03.01.2016, 14:06 | Auf diesen Beitrag antworten » | ||||
eulerscheZahl | Passt fürs erste, in der b) wird optimiert. |
||||
03.01.2016, 14:35 | Auf diesen Beitrag antworten » | ||||
Shizmo | Okay super, danke.
Bei a) wäre dann für jedes Push 3, kommen sonst auch noch Taktzyklen vor? Also 18 mMn.
Was wir denn alles unter einem Speicherzugriff verstanden? Sind das nicht nur die Push und Pop Befehle? Und die Befehlscodes sind die OP-Codes (also die, die in der Klammer danach stehen oder?). |
||||
03.01.2016, 14:42 | Auf diesen Beitrag antworten » | ||||
eulerscheZahl | Du hast noch 2 MULT, 3 ADD und ein POP, also 18+2*5+3*1+1*3 = 34 Irgendwo muss ja auch die Informatin kommen, dass etwas addiert oder multipliziert werden soll. Ich denke du sollst hier für jeden Befehl ein pop rechnen, also 34+12*3 = 70 |
||||
Anzeige | |||||
|
|||||
03.01.2016, 15:06 | Auf diesen Beitrag antworten » | ||||
Shizmo | Ah okay und ohne Einlesen der Befehlscodes wäre es dann 34+7*3 = 55 ? Oder 18+12*3 = 54 ?
12*1Byte (alle Codes) + 6*2Bytes (alle PUSH) + 5*4Bytes(alle ADD und MULT) = 44 Bytes ???? |
||||
03.01.2016, 15:22 | Auf diesen Beitrag antworten » | ||||
eulerscheZahl |
Das musst du mir jetzt erklären. Ich komme wir oben ausgerechnet auf 34 da waren deine ursprünglichen 6 pop ja schon mit dabei. Beim letzten Teil denke ich, dass die Variablen noch vom Speicher in den Prozessor geladen werden müssen. Aber an der Stelle bin ich auch keine verlässliche Quelle. |
||||
03.01.2016, 22:51 | Auf diesen Beitrag antworten » | ||||
Shizmo |
Laut Angabe gibt es die Anzahl der Speicherzugriffe mit und ohne dem Einlesen der Befehlscodes. Mit wären ja: 34+12*3 = 70 Und bei ohne dachte ich mir ohne den (3 ADD und 2 MULT)-POPs, also 34+7*3 = 55 Dann noch zu b) Würde das dann in etwa so aussehen? PUSH a PUSH b ADD DUP PUSH d MULT PUSH c ADD MULT POP |
||||
04.01.2016, 07:53 | Auf diesen Beitrag antworten » | ||||
eulerscheZahl | Kosten für Befehl selbst und Befehlscode ohne Gewähr: PUSH a 3 3 PUSH b 3 3 ADD 1 3 PUSH d 3 3 MULT 5 3 PUSH c 3 3 ADD 1 3 PUSH a 3 3 PUSH b 3 3 ADD 1 3 MULT 5 3 POP 3 3 gesamt: 34 36 Also 34 für die Befehle alleine. 34+36=70, wenn du den Code noch laden musst. Die b) passt so. |
||||
04.01.2016, 10:48 | Auf diesen Beitrag antworten » | ||||
Shizmo | Hmm okay, aber dann wäre
dasselbe wie die Anzahl der Speicherzugriffe ohne dem Einlesen der Befehlscodes. |
||||
04.01.2016, 10:56 | Auf diesen Beitrag antworten » | ||||
eulerscheZahl | Ich habe die ganze Zeit von den Taktzyklen gesprochen. Das einzige, was ich zum Speicherzugriff geschrieben habe:
|
||||
23.01.2016, 02:04 | Auf diesen Beitrag antworten » | ||||
Shizmo | Ich hätte hier noch ein Beispiel, wo ich mir nicht ganz sicher bin, die Angabe:
Also eh wieder sehr ähnlich: Also erst einmal ordentlich hinschreiben: Dann polnische Notation: Wenn das soweit passt ist a): PUSH A PUSH B ADD PUSH A DIV PUSH B ADD PUSH A DIV PUSH B ADD PUSH A DIV POP C bei b) bin ich mir allerdings nicht ganz sicher: PUSH A PUSH B ADD PUSH A DIV DUP PUSH B ADD DIV POP C Denn wenn ich das jetzt wieder auflöse, wäre das: Wenn ich von rechts nach links gehe teile ich durch was ja eigentlich nicht richtig ist. Wo liegt mein Fehler? |
||||
23.01.2016, 06:58 | Auf diesen Beitrag antworten » | ||||
eulerscheZahl | Du hast in der polnischen Notation ein fünftes a dazubekommen. Nimm das mal wieder weg. |
||||
23.01.2016, 10:06 | Auf diesen Beitrag antworten » | ||||
Shizmo | Hoppala, war ein Fehler beim Abtippen: |
||||
23.01.2016, 10:36 | Auf diesen Beitrag antworten » | ||||
eulerscheZahl | Ich komme bei deiner Rechnung auf . a/(b+a) zu kopieren macht denke ich keinen Sinn, weil man es nur einmal verwenden kann. Ich würde erst mal schauen, dass ich die Doppelbrüche wegbekomme: . Dadurch wird die Rechnung aber eher länger als kürzer |
||||
23.01.2016, 10:48 | Auf diesen Beitrag antworten » | ||||
Shizmo | Hmmm, eigenartig. Aber die a) passt soweit? |
||||
23.01.2016, 10:50 | Auf diesen Beitrag antworten » | ||||
eulerscheZahl | Ja, die a) passt. |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
Die Neuesten » |