Daß der asm code für den kurzen Augenblick der Compilierung in einem Unterverzeichnis von %Temp liegt, hatte ich ja schon mitbekommen, aber da kommt man halt schlecht ran, weil er gleich wieder gelöscht wird.
Ein Blick in die PB HIlfe unter "Benutzung des SHELL-Compilers" hat mir dann die Augen geöffnet.

Ich habe mir dazu jetzt einen Eintrag in's PB-Werkzeuge-Menü gemacht, der mir den aktuellen Quellcode des PB Editors nach D: compiliert. Also so, daß unter D:\PureBasic.asm dann die Datei mit dem Assemblercode steht.
Folgende Einstellungen unter Werkzeug:
Code: Alles auswählen
Kommandozeile:
C:\Programme\PureBasic\Compilers\PBCompiler.exe
Argumente:
%TEMPFILE /COMMENTED
Arbeitsverzeichnis:
D:\
Name:
Show ASM
Ggf. müsst ihr den Pfad zum PBCompiler anpassen.
Gruß Markus
Edit: Mist, funktioniert nicht, wenn der Code Konstanten aus den Compileroptionen nutzt. Die sind dem PBCompier dann nämlich nicht bekannt.
Edit2: Außerdem sieht man nicht was der PBCompiler anmeckert (wenn er meckert), weil das DOS-Fenster gleich wieder geschlossen wird.
Ich habe mir daher ein kleines Tool geschrieben, was das managed und sowohl die Compilermeldunegn, als auch den generierten ASM-Code anzeigt.
Sieht dann so aus:

Code: Alles auswählen
;
; ------------------------------------------------------------
;
; PB to ASM
;
; (c) 2007 - Markus Haacke
;
; ------------------------------------------------------------
;
; Wird als PB IDE-Tool eingebunden und erwartet als einzigen Paraneter den
; korrekten Pfad der umzuwandelden .pb Datei.
; Unter Benutzung des PBCompilers wird im Outputverzeichnis eine Datei namens
; "PureBasic.asm" und "PureBasic.exe" erstellt, die den Assemblercoode des
; aktuellen PB-Projektes enthält bzw. die ausführbare Datei.
;
; Die Ausgaben des PBCompilers und auch der Inhalt der erzeugten Assemblerdatei
; werden im Fenster von PB to ASM angezeigt.
; Der PBCompiler startet das Programm nach der Umwandlung automatisch, da kann
; ich nichts gegen machen. Also nicht erschrecken. ;-)
;
; Einrichtung dieses Tools in den PB-Werkzeugen
; 1) Die Konstanten #PBCOMPILER und #PBCOMPILEROUTPUTPATH anpassen
; 2) Dieses Tool compilieren
; 3) Einrichtung als Werkzeug (siehe unten)
;
; Kommandozeile: [Pfad zu diesem Tool]
; Argumente: "%FILE"
; Arbeitsverzeichnis: [egal]
; Name: PB to ASM
EnableExplicit
; ------------------------------------------------------------
; Konstanten-, Variablen- und Strukturdeklarationen
#PBCOMPILER = "C:\Programme\PureBasic\Compilers\PBCompiler.exe"
#PBCOMPILERPARAMETER = "/COMMENTED"
#PBCOMPILEROUTPUTPATH = "D:\" ; Wenn diese Konstante "" ist, dann wird die ASM-Datei im Source-Verzeichnis erstellt!
#EOL = Chr(13)+Chr(10)
Enumeration
#ASMFile
EndEnumeration
Enumeration
#Window_Main
EndEnumeration
Enumeration
#Editor_Log
EndEnumeration
Global temp.l, NumParameters.l, Compiler.l
Global Parameter$, Outputpath$, ASMText$
; ------------------------------------------------------------
Procedure Open_Window_Main()
If OpenWindow(#Window_Main, 280, 178, 600, 500, "PB to ASM (using the PBCompiler)", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_Main))
EditorGadget(#Editor_Log, 10, 10, 580, 480)
EndIf
EndIf
EndProcedure
Procedure InsertEditorText(Gadget,Text$)
ProcedureReturn SendMessage_(GadgetID(Gadget),#EM_REPLACESEL,0,Text$)
EndProcedure
; ------------------------------------------------------------
; Main
Open_Window_Main()
NumParameters = CountProgramParameters()
If NumParameters > 0
Parameter$ = ProgramParameter(temp)
If #PBCOMPILEROUTPUTPATH = ""
Outputpath$ = GetPathPart(Parameter$)
Else
Outputpath$ = #PBCOMPILEROUTPUTPATH
EndIf
DeleteFile(Outputpath$ + "PureBasic.asm") ; Vorherige Dateiversion löschen...
InsertEditorText(#Editor_Log, "Programmparameter: " + Parameter$ + #EOL + #EOL)
Compiler = RunProgram(#PBCOMPILER, #PBCOMPILERPARAMETER + " " + Chr(34) + Parameter$ + Chr(34), Outputpath$, #PB_Program_Read|#PB_Program_Open)
If Compiler
While ProgramRunning(Compiler)
While AvailableProgramOutput(Compiler)
InsertEditorText(#Editor_Log, ReadProgramString(Compiler) + #EOL)
Wend
Wend
EndIf
If ReadFile(#ASMFile, Outputpath$ + "PureBasic.asm")
ASMText$ = #EOL + "----------------- ASSEMBLER-SOURCE -----------------" + #EOL + #EOL
While Eof(#ASMFile) = 0
ASMText$ + ReadString(#ASMFile) + #EOL
Wend
InsertEditorText(#Editor_Log, ASMText$)
Else
InsertEditorText(#Editor_Log, #EOL + "Die Assemblerdatei " + Chr(34) + Outputpath$ + "PureBasic.asm" + Chr(34) + " wurde nicht erstellt!")
EndIf
Else
MessageRequester("Fehler", "Es muß mindestens ein Programmparameter angegeben werden!" + #EOL + "Erwartet wird der Pfad und Dateiname des umzuwandelnden PureBasic Codes.", #MB_ICONERROR)
End
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow: End
EndSelect
ForEver