[ascoders] Re: flasm

  • From: Ralf Bokelberg <actionscript@xxxxxxxxxxxx>
  • To: ascoders@xxxxxxxxxxxxx
  • Date: Thu, 04 Mar 2004 10:59:32 +0100

Unter
www.bokelberg.de/actionscript/experiments/simflasm.zip
findest du einen einfachen flasm simulator
für Flash, der u.a. immer den aktuellen Stack anzeigt.
Das Ding ist zwar schon was älter (Mitte 2001) aber
vielleicht hilfts ja trotzdem.

mfg.r
codeazur.com


André Michelle wrote:
Ich habe gestern nacht meinen ersten Exkurs in die Assemblerwelt gemacht.
Die Resourcen sind sehr spärlich, konnte aber hier und da schon innerhalb
von Schleifen 2 Zeilen zusammenschrumpfen und gleich ein paar
Performancepunkte gewinnen.

Es bleiben ein paar Fragen, die auf der Seite
http://www.nowrap.de/flasm.html unbeantwortet blieben. Das schwierigste an
dem Assemblercode ist das Auslesen, welcher 'Wert" gerade oben im Stack
liegt. Genau das interessiert mich. Wer baut den Stack wie um ?

Beispiel: Innerhalb einer Funktion(2) stehen folgenden Zeile zu Begin:

push r: this, 'map'
getMember

Scheint mir einfach. Das Register r:this wird in den Stack gepusht. Die
Eigenschaft 'map' wird oben draufgesetzt und dann der Wert (bzw.
MovieClipInstanz) ausgelesen. Was genau liegt jetzt noch im Stack ? Nur ein
Wert oder ? ( 'map' ).

function2  (r:2='y') (r:1='this')
Wozu speichert Flash 'this' als Register r:1, um dann nicht mehr damit zu
arbeiten ? Witzigerweise wird die Performance messbar schlechter, wenn ich
r:this gegen r:1 austausche.


Jetzt noch etwas dicker. normaler AS Code:

holder._rotation = deg;
holder._xscale = holder._yscale = scl;

Riecht nach Flasm Arbeit :o)
der erste Output:

push r:this, 'holder'
getMember
push '_rotation', r:deg
setMember
push r:this, 'holder'
getMember
push '_xscale', r:this, 'holder'
getMember
push '_yscale', r:this, 'scl'
getMember
setRegister r:0
setMember
push r:0
setMember

Das geht mit Sicherheit besser, oder ? zB. zuviele 'getMember' für 'holder'.

push r:1, 'holder'
getMember
setRegister r: 5 // frei ausgesucht
push '_rotation', r:deg
setMember
push r:5
push '_xscale', r:this, 'scl'
setMember
push '_yscale', r:this, 'scl'
setMember

2 FPS mehr :o)
Aber da unten geht doch mehr, oder ?

Wie schaffe ich es, 'holder' dauerhaft im Stack zu halten ? Das ist
eigentlich die wichtigste Frage, denke ich, um flasm code richtig winzig zu
bekommen.


-- aM

------------------------------------------------------
Archiv   : //www.freelists.org/archives/ascoders/
Optionen : //www.freelists.org/list/ascoders
------------------------------------------------------



------------------------------------------------------
Archiv   : //www.freelists.org/archives/ascoders/
Optionen : //www.freelists.org/list/ascoders
------------------------------------------------------

Other related posts: