[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 : http://www.freelists.org/archives/ascoders/
Optionen : http://www.freelists.org/list/ascoders
------------------------------------------------------
------------------------------------------------------
Archiv : http://www.freelists.org/archives/ascoders/
Optionen : http://www.freelists.org/list/ascoders
------------------------------------------------------
- Follow-Ups:
- [ascoders] Re: flasm
- From: Ralf Bokelberg
- [ascoders] Re: flasm
- From: André Michelle
- References:
- [ascoders] Flex Plug-in for WebSphere Studio
- From: Ralf Siegel
- [ascoders] flasm
- From: André Michelle
Other related posts:
- » [ascoders] flasm
- » [ascoders] Re: flasm
- » [ascoders] Re: flasm
- » [ascoders] Re: flasm
- » [ascoders] Re: flasm
- » [ascoders] Re: flasm
- » [ascoders] Re: flasm
- » [ascoders] Re: flasm
- » [ascoders] Re: flasm
- » [ascoders] Re: flasm
- » [ascoders] Re: flasm
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 : http://www.freelists.org/archives/ascoders/ Optionen : http://www.freelists.org/list/ascoders ------------------------------------------------------
- [ascoders] Re: flasm
- From: Ralf Bokelberg
- [ascoders] Re: flasm
- From: André Michelle
- [ascoders] Flex Plug-in for WebSphere Studio
- From: Ralf Siegel
- [ascoders] flasm
- From: André Michelle