[Squeak-ev] Newbie-Frage(n) zur Auflockerung zwischendurch

Marcus Denker marcus at ira.uka.de
Don Jul 17 14:56:51 UTC 2003


On Thu, Jul 17, 2003 at 03:59:43PM +0200, thomas.metz at web.de wrote:
> Liebe Squeak-Experten,
> 
> - Ist es möglich, in Squeak Assembler-Befehle direkt einzugeben?
> 
Assembler ist ja von Prozessor zu Prozessor verschieden. Und eines
der Ziel von Squeak ist es, "ueberall" lauffaehig zu sein. Dies
wird ueber eine sog. virtuelle Maschine erreicht: Dies ist, sozusagen,
ein in in Software realisierter Prozessor. Squeak selber erzeugt
dann "Maschinencode" fuer diese virtuelle Maschine: Den Bytecode (der
heist so, weil die befehle ein byte gross sind). 

Fuer diesen Bytecode gibt es einen Assemblierer (er ist Teil des
Closure-Compilers, also noch nicht im Image). Das sieht dann so
aus:

    IRBuilder new
		rargs: #(self a);		"receiver and args names"
		addTemps: #(z);		"extra temps (not used here)"
		pushTemp: #self;
		getField: 1;
		pushTemp: #a;
		send: #>;
		jumpAheadTo: #else if: false;
		pushLiteral: 'yes';
		returnTop;
		jumpAheadTarget: #else;
		pushLiteral: 'no';
		returnTop;
		ir


Das ist also "Squeak Assembler". Aber sinnvoll ist das nur, wenn man
das innerhalb eines Uebersetzers verwendet (z.B. verwendet es der
Uebersetzer, der Smalltalk in Bytecode compiliert). 

Aber zurueck zur Frage ;-) :

Assembler in dem Sinne, in dem es wahrscheinlich gemeint war, kann man
nicht direct von innerhalb Squeak verwenden. Das macht ja auch keinen 
Sinn, denn dann laeuft das ja nur auf einem System. Man kann natuerlich 
Assembler wie C anbinden... wenn man ein .o file erzeugt, dass den
Link-Konventionen fuer C entspricht kann man es zur VM dazulinken, oder
man koennte gewiss auch eine DLL (bzw. .so unter linux bzw. .bundle unter Mac) 
bauen und FFI verwenden.... dann wird man aber wahrscheinlich das meiste in C 
schreiben, und nur fuer das wirklich noetige auf Assembler zurueckgreifen. 

Dumme Frage: Wofuer braucht der das denn? Macht heutzutage Assembler 
ausserhalb des Compilerbaus ueberhaupt noch Sinn? Kann ich mir nicht
so recht vorstellen... die C-Compiler sind schon sehr gut, heutzutage.

Wenn er so richtig experimentell sein will: Exupery enthaellt tatsaechlich
einen x86-Assemblierer (naja, eher ein compiler-backend), in Squeak fuer Squeak:

http://map1.squeakfoundation.org/sm/package/3f443df5-3d77-4e98-a8e0-dd8661371fa1


      Marcus


-- 
Marcus Denker marcus at ira.uka.de  -- Squeak! http://squeak.de