Kezdőoldal » Számítástechnika » Programozás » Win32 fejlesztésre melyik...

Win32 fejlesztésre melyik assembler a jobb? A FASM vagy a MASM?

Figyelt kérdés

2015. jan. 21. 16:36
 1/5 anonim ***** válasza:
Amíg Windowson maradsz és nem érdekel a 64bit addig a MASM (Microsoft Assembler) a legnépszerűbb választás. Én mindenhova NASM-ot használok, talán a fejlettebb az összes közül és a mai napig fejlesztik, érdemes ránézni. FASM-ot sosem használtam.
2015. jan. 21. 16:55
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:
NASM ben is vannak olyan macrok mint a MASM ben? pl .if meg invoke stb. ? Csak, hogy jobban átlássam a kódot !
2015. jan. 21. 17:01
 3/5 anonim ***** válasza:

Igen NASM-ban is vannak makrók és definiálhatsz sajátokat is. If-re példa:


%if<condition>

    ; some code which only appears if <condition> is met

%elif<condition2>

    ; only appears if <condition> is not met but <condition2> is

%else

    ; this appears if neither <condition> nor <condition2> was met

%endif


[link]


De ajánlom hogy fogd a makrók használatát minimumra, az a tapasztalatom hogy ez elején segít, de a végén rengeteg fejfájás és bug forrása lehet és kevésbé lesz átláthatóbb egy jól megírt velük.

2015. jan. 21. 17:21
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:

Nagyon megtetszett valamiért az assembly, úgy döntöttem, hogy nekikezdek, csak eleinte muszáj lesz használnom a macrokat mivel jobban átlátom mint a tiszta asm kódot. Mondjuk:


PUSH 0

call ExitProcess


Ez nekem jobban bejön:

invoke ExitProcess, 0


Azt nem mondom, hogy később nem változik a véleményem, de most még így könnyebb !


Köszönöm a válaszaid !

2015. jan. 21. 17:33
 5/5 anonim ***** válasza:

Ha jól tudom az INVOKE makrót alapból azért nem tartalmazza mert ez egy cross-platform assembler, és vannak olyan platformok ahol pl. a rendszerhívás paramétereit nem a stack-be kell tenni, hanem a register-ekbe.


Jó hír viszont hogy itt meg tudsz bármilyen makrót írni, és ami a még jobb benne, hogy már megírták helyetted:

[link]


NASMX egy makró csomag NASM-hoz, ami tartalmazza a ciklusokat, feltételes elágazásokat, függvény hívásokat, String kezelést, struktúrákat, típusokat, stb.


Itt egy példa program a dokumentációból amit kiszámolja kettőnek a valahányadik hatványát (de ez már annyira tele van pumpálva makrókkal hogy lassan nem is hasonlít az assembly-re amit meg akarsz tanulni):


%include 'nasmx.inc'


IMPORT cdecl,printf


PROTO my_pow2, uint32_t exp


ENTRY my_main


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[section .text]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


%define EXPONENT 8


PROC my_pow2, uint32_t exp

LOCALS NONE

    mov eax, 1

    mov ecx, uint32_t [argv(.exp)]

    WHILE ecx,!=,0

        IF ecx,>,31

            xor eax,eax ; return 0 to indicate error

            BREAK         ; break out of while loop

        ENDIF

        shl eax, 1

        dec ecx

    ENDWHILE

ENDPROC


PROC my_main

LOCALS

    LOCAL result, unint32_t, 1

ENDLOCALS

    INVOKE my_pow2, EXPONENT

    IF eax,!=,0

        mov uint32_t [var(.result)], eax

        INVOKE printf, message, EXPONENT, uint32_t [var(.result)]

    ELSE

        INVOKE printf, errmsg

    ENDIF

ENDPROC


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[section .data]

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


message: declare(NASMX_TCHAR) NASMX_TEXT('The power of 2 to %u = %u'),13,10,0

errmsg: declare(NASMX_TCHAR) NASMX_TEXT('an error occurred!'),13,10,0

2015. jan. 21. 21:24
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!