nasm, fasm oder andere asm



  • ich sehe manchmal beitraege von jemandem in forum, die behaupten dass masm keine richtige assembler sprache sei. es sind nur macro von microsoft. ich wuerde gern mal sehen, wie man so ne window programm in nasm, fasm oder andere asm geschrieben werden. ( win32 programm )



  • Ein Win32 Hello World fuer NASM, das ich mir irgendwann mal abgerungen habe:

    %macro codeseg 0
    
    segment .text
    
    align 4
    
    USE32
    
    %endmacro
    
    %macro dataseg 0
    
    segment .data
    
    align 4
    
    %endmacro
    
    %macro udataseg 0
    
    segment .bss
    
    alignb 4
    
    %endmacro
    
    ; **** Includes ****
    
    %include "..\..\inc\win32n.inc"
    
    EXTERN	ExitProcess
    
    EXTERN	MessageBoxA
    
    codeseg
    
    global start
    
    start:
    
    	; UINT uType
    
    	push	MB_OK | MB_ICONINFORMATION
    
    	; LPCSTR lpCaption
    
    	push	text1
    
    	; LPCSTR text
    
    	push	text0
    
    	; HWND hWnd
    
    	push	0
    
    	call	MessageBoxA
    
    	; error code
    
    	push	0
    
    	call	ExitProcess
    
    dataseg
    
    	text0 db "Hallo Welt!", 0
    
    	text1 db "->Titel<-", 0
    


  • JnZn558 schrieb:

    ich sehe manchmal beitraege von jemandem in forum, die behaupten dass masm keine richtige assembler sprache sei. es sind nur macro von microsoft. ich wuerde gern mal sehen, wie man so ne window programm in nasm, fasm oder andere asm geschrieben werden. ( win32 programm )

    das ist Quatsch von Leuten, die nie wirklich selber Assembler Programmiert haben. Zumal MASM einem nur die Möglichkeit bietet Marcos zu benutzen, was aber nicht heißt dass man es auch machen muss! - Auch in MASM kann man reinen Spagetti Code schreiben.



  • Ich wuerde eher sagen:
    Die Macro-Programmierung in MASM (hier auch gemeint als eine Sprachenbezeichnung, da das einfach kein Assembler (==Mnemonics + Meta-Code fuer Rahmenstrukturierung und Datenanordnung) mehr ist) ist etwas fuer Leute, die nie wirklich vorhatten, Assembler zu programmieren, geschweigedenn dies schon einmal wirklich getan haetten oder ueberhaupt koennten. :p
    Und ohne die Macros ist der MASM einfach nur ein sehr mittelmaessiger Assembler. Zwar, was die CPU-Unterstuetzung angeht, auf der Hoehe der Zeit, aber sonst vor allem aufgeblaeht, Closed Source und mit dem Basis-Set an Microsofts Version von nichtssagenden Fehlermeldungen als Ueberraschungsbeigabe.



  • ohne Macros sind alle Assembler mehr oder wenig gleich.

    Nobuo T, zeig mir doch bitte einemal eine von MASM nichtssagenden Fehlermeldungen 😋



  • Sry dich enttaeuschen zu muessen, aber ich habe gerade echt besseres zu tun. Auch hier im Forum sollten sich aber irgendwelche uralten Themen zu Fehlermeldungen von MASM finden lassen. Falls du also Wert darauf legst, kannst du gern die Suche auch selbst bemuehen.

    Edit:
    Nimm es von mir aus als unzulaessige Verallgemeinerung oder Gefuehlssache, aber IMHO sehen Microsofts Fehlermeldungen in Compilern oft unuebersichtlich aus.



  • hier ist ein Code-Beispiel von Fasm:

    ; example of simplified Windows programming using complex macro features
    
    include 'win32ax.inc' ; you can simply switch between win32ax, win32wx, win64ax and win64wx here
    
    .code
    
      start:
    	invoke	MessageBox,HWND_DESKTOP,"Hi! I'm the example program!",invoke GetCommandLine,MB_OK
    	invoke	ExitProcess,0
    
    .end start
    

    Ein Problem ist u.a, wenn ein Betriebssystem wie Windows(und die Zusatzhardware) gar keine Asm-Schnittstelle oder schlimmer noch, keine vernünftige Hardwareschnittstelle zur Verfügung stellt. So unterscheiden sich dann Funktionsaufrufe nicht mehr so sonderlich.
    Ein weiteres Problem ist, wenn die Macros und Hochsprachenelemente den Zugang zu den Assembler Grundlagen verstellen...



  • Mal dumm gefragt: was ist bitte eine Asm-Schnittstelle?



  • dumdum__ schrieb:

    Mal dumm gefragt: was ist bitte eine Asm-Schnittstelle?

    Z.B. Funktionen, Treiber oder Möglichkeiten, die es z.B. erlauben, direkt auf Ports zuzugreifen bzw. hardwarenah zu programmieren, oder z.B. sowas wie das Dos Programm Debug.

    Nette Dokumentationen, wie z.B. die Intel-Manuals zur Assemblerprogrammierung unter Windows wären auch in der Vergangenheit nicht schlecht gewesen. Auch gute Dokumentation gehört letztlich in die "Schnittstellen" - Schublade.

    Auf Handys sieht die Sache noch trauriger aus. Früher hatten Taschencomputer und Co ein einfaches Basic zum Programmieren drauf, und das ging auch relativ einfach.
    Handys haben die Möglichkeit, Java Programme (gewissermaßen hardwarebeschleunigt) abzuspielen.. Man müsste sich also einen einfachen Basic-Interpreter mit Java für Handys entwickeln, diesen auf Emulatoren testen, aufs Handy laden usw.



  • nachtfeuer schrieb:

    Z.B. Funktionen, Treiber oder Möglichkeiten, die es z.B. erlauben, direkt auf Ports zuzugreifen bzw. hardwarenah zu programmieren, oder z.B. sowas wie das Dos Programm Debug.

    Nette Dokumentationen, wie z.B. die Intel-Manuals zur Assemblerprogrammierung unter Windows wären auch in der Vergangenheit nicht schlecht gewesen. Auch gute Dokumentation gehört letztlich in die "Schnittstellen" - Schublade

    Ja was unterscheidet denn jetzt eine Asm-Schnittstelle von z.B. der WinAPI? Und durch Treiber kann man sich ja auch der IO Ports bedienen (soweit ich weiß). Dokumentiert ist die ganze Sache auch (Windows=>msdn).

    Verstehe jetzt auch nicht was das Programm 'debug' hiermit zu tun hat - das ist doch nur eine Spielerei (kenn ich noch aus dem Schulunterricht ^^)


Log in to reply