FASM Tutorial

Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Neue Antwort erstellen

Vertex

Betreff: FASM Tutorial

BeitragDi, Jan 11, 2005 0:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch wenn es wieder direkt mit BMax nix zu tun hat, hier gibt es ein super FASM Tutorial den auch BMax benutzt. http://decard.net/?body=docs

Wer es noch nicht bemerkt hat, im .bmx Verzeichnis des Projekts sind Assemblerdateien, und Objektdateien wieder zu finden.

Code: [AUSKLAPPEN]
Print "Hello World"
WaitKey


wird



Code: [AUSKLAPPEN]
   format   MS COFF
   extrn   ___bb_appstub_appstub
   extrn   ___bb_audio_audio
   extrn   ___bb_bank_bank
   extrn   ___bb_bankstream_bankstream
   extrn   ___bb_basic_basic
   extrn   ___bb_blitz_blitz
   extrn   ___bb_blitzgl_blitzgl
   extrn   ___bb_bmploader_bmploader
   extrn   ___bb_font_font
   extrn   ___bb_freeaudioaudio_freeaudioaudio
   extrn   ___bb_freejoy_freejoy
   extrn   ___bb_freetypefont_freetypefont
   extrn   ___bb_glew_glew
   extrn   ___bb_glmax2d_glmax2d
   extrn   ___bb_jpgloader_jpgloader
   extrn   ___bb_map_map
   extrn   ___bb_oggloader_oggloader
   extrn   ___bb_pngloader_pngloader
   extrn   ___bb_retro_retro
   extrn   ___bb_tgaloader_tgaloader
   extrn   ___bb_wavloader_wavloader
   extrn   ___bb_win32_win32
   extrn   _bbStringClass
   extrn   _brl_standardio_Print
   extrn   _brl_system_WaitKey
   public   __bb_main
   section   "code" code
__bb_main:
   push   ebp
   mov   ebp,esp
   cmp   dword [_6],0
   je   _7
   mov   eax,0
   pop   ebp
   ret
_7:
   mov   dword [_6],1
   call   ___bb_blitz_blitz
   call   ___bb_appstub_appstub
   call   ___bb_audio_audio
   call   ___bb_bank_bank
   call   ___bb_bankstream_bankstream
   call   ___bb_basic_basic
   call   ___bb_blitzgl_blitzgl
   call   ___bb_bmploader_bmploader
   call   ___bb_font_font
   call   ___bb_freeaudioaudio_freeaudioaudio
   call   ___bb_freetypefont_freetypefont
   call   ___bb_glmax2d_glmax2d
   call   ___bb_jpgloader_jpgloader
   call   ___bb_map_map
   call   ___bb_oggloader_oggloader
   call   ___bb_pngloader_pngloader
   call   ___bb_retro_retro
   call   ___bb_tgaloader_tgaloader
   call   ___bb_wavloader_wavloader
   call   ___bb_freejoy_freejoy
   call   ___bb_glew_glew
   call   ___bb_win32_win32
   push   _3
   call   _brl_standardio_Print
   add   esp,4
   call   _brl_system_WaitKey
   mov   eax,0
   jmp   _4
_4:
   pop   ebp
   ret
   section   "data" data writeable
_6:
   dd   0
_3:
   dd   _bbStringClass
   dd   2147483647
   dd   11
   dw   72,101,108,108,111,32,87,111
   dw   114,108,100


wobei das hier wohl am interessantesten ist:
Code: [AUSKLAPPEN]
   push   _3
   call   _brl_standardio_Print
   add   esp,4
   call   _brl_system_WaitKey
   mov   eax,0
   jmp   _4
_4:
   pop   ebp
   ret
   section   "data" data writeable
_6:
   dd   0
_3:
   dd   _bbStringClass
   dd   2147483647
   dd   11
   dw   72,101,108,108,111,32,87,111
   dw   114,108,100


Bei Label _3 steht der String "Hello World".
dd 11 ist die Länge des Strings
dw 72,101,108,108,111,32,87,111,114,108,100 sind die ASCII Codes für "Hello World".
72 = "H", 101 = "e", 108 = "l", 108 = "l" usw.

über push _3 wird die Adresse von Label 3 wo unser String drin steht, auf den Stack gelegt, und dann per call _brl_standardio_Print das normale "Print" im Quellcode aufgerufen. Diese funktion nimmt sich dann das übergebene Parameter wieder vom Stack herunter. Auf den Stack kommen also immer Übergabeparameter wie z. B. Adressen wo was steht. Lokale Variablen kommen übrigens auch auf den stack, und werden dann wieder "herunter genommen" wenn sie nichtmehr gebraucht werden.

call _brl_system_WaitKey ruft dann gleichbedeutend die Funktion WaitKey auf, und wartet eben auf den Tastendruck.

Für Assemblerneulinge: Nein, die Funktionen wie _brl_standardio_Print gibt es nicht standardmäßig! Es sind eingebundene Blitzfunktionen die ebenfalls aus Assemblerbefehlen wie MOV, PUSH, POP usw. bestehen. Also einfach FASM herunterladen, und ohne BMax zu besitzen, mal eben ein Hello World zus chreiben geht nicht, da die Libs fehlen.

mfg olli
vertex.dreamfall.at | GitHub
 

xperience2003

Betreff: ...

BeitragMi, März 16, 2005 17:06
Antworten mit Zitat
Benutzer-Profile anzeigen
jo, is ne feine sache mit dem asm text

wer sich nun nen bissel auskennt, kann sein prog richtig
optimieren
in dem beispiel zb, die imageloader rausschmeisen etc,
neu assemlieren und man hat ne viel kleinere exe


schade das es aufm pc keine guten asm-optimizer gibt, die unbenutzte sachen automatisch killen und schleifen etc vereinfachen
-digital art since 1990-
 

Dreamora

BeitragMi, März 16, 2005 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
dafür hat man hochoptimierte C++ compiler wie der GCC der für die Windows Module benutzt wird ... von dem auf handgeschrieben ist nimmer so wirklich viel rauszuholen. Wer net totaler Pro in ASM ist, kanns also nur langsamer machen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group