Кто нибудь выложите пожалуйста пример исходняка на NASM любой проги под win32, подойдёт даже "Хелло Ворлд", а то нимогу нигде найти пример программы под винду на насме Заранее спасибо. P.S. у кого стоит делфи от борланда приаттачте плиз или скиньте мне на мыло (Loginanton@mail.ru) доку по MSDN
Код (Text): extern MessageBoxA [section data class=data use32] string db "NASM Test Application: Message Box",0 title db "Visual Assembler",0 [section code class=code use32] ..start: push dword 0 push dword title push dword string push dword 0 call MessageBoxA ret
А он и не будет ничего делать, т.к. "экзешником" не является . На выходе от насма ты получаешь объектный файл (obj), как ты, наверное, успел заметить, в комплект поставки насма линкер вообще-то не входит. Я юзал alink, который брал здесь. Там же лежит и либа win32.lib, кою, собственно, и необходимо будет прикрутить, дабы заюзать MessageBox'ы, ну и другие прелести жизни Код (Text): extern MessageBoxA [section .data] szTitle: db 'Test',0 szText: db 'Hello from Nasm!',0 [section .text] global main main: push dword 0 push dword szTitle push dword szText push dword 0 call MessageBoxA ret Ну а далее nasm -f win32 hello.asm alink -oPE hello.obj win32.lib -entry main А так, по-дружески..ну его нафик Используй fasm, те же преимущества, только ЛИЦОМ к народу Удачи.
Код (Text): ;@echo off ;goto make extern __imp__ExitProcess@4 ExitProcess EQU __imp__ExitProcess@4 extern __imp__MessageBoxA@16 MessageBox EQU __imp__MessageBoxA@16 extern __imp__GetCurrentProcessId@0 GetCurrentProcessId EQU __imp__GetCurrentProcessId@0 extern __imp__wsprintfA wsprintf EQU __imp__wsprintfA %macro push 2-* %rep %0 push %1 %rotate 1 %endrep %endmacro %macro pop 2-* %rep %0 %rotate -1 pop %1 %endrep %endmacro %macro invoke 1-* %rotate -1 %rep %0-1 push %1 %rotate -1 %endrep call [%1] %endmacro %macro cinvoke 1-* %rotate -1 %rep %0-1 push %1 %rotate -1 %endrep call [%1] %if (%0-1) add esp, 4*(%0-1) %endif %endmacro global _start section .data USE32 sz db "Hello",0 format_string db "PID: %08lX",0 section .bss USE32 szBuff resb 64 section .text USE32 _start: invoke GetCurrentProcessId cinvoke wsprintf, szBuff, format_string, eax invoke MessageBox, 0, szBuff, sz, 0 invoke ExitProcess, 0 ;:make ;SET PROJECTNAME=Hello ;if exist %PROJECTNAME%.res del %PROJECTNAME%.res ;if exist %PROJECTNAME%.obj del %PROJECTNAME%.obj ;if exist %PROJECTNAME%.exe del %PROJECTNAME%.exe ;if exist *.rc goto rc ;\nasm\nasmw -fwin32 %PROJECTNAME%.bat ;\masm32\bin\link /nologo /opt:nowin98 /SUBSYSTEM:WINDOWS /ENTRY:start /release /LIBPATH:\masm32\lib %PROJECTNAME%.obj KERNEL32.LIB USER32.LIB ;goto exit ;:rc ;\nasm\nasmw -fwin32 %PROJECTNAME%.bat ;\masm32\bin\rc %PROJECTNAME%.rc ;\masm32\bin\link /nologo /opt:nowin98 /SUBSYSTEM:WINDOWS /ENTRY:start /release /LIBPATH:\masm32\lib %PROJECTNAME%.obj %PROJECTNAME%.res KERNEL32.LIB USER32.LIB ;del %PROJECTNAME%.res ;:exit ;del %PROJECTNAME%.obj ;echo. ;pause ;cls
Вот сайтик, посмотрика. http://visual-assembler.pt.vu/ Много там всякого добра по NASM-у, и не только.
Да я пробовал фасм уже - немогу на нём кодить Синтаксис в голову не лезет так сказать Вот выбрал насм, потому что он и кросплатформенный и к нему отличная дока на русском есть
А вот и нет Код (Text): %define ONLY_NASM %include "nagoa+.inc" %include "defines.inc" section .text start: invoke MessageBox,0,Message,wTitle,MB_OK+MB_SYSTEMMODAL retn wTitle db 'Iczelion Tutorial #2:MessageBox',0 Message db 'Win32 Assembly with NASM is Great!',0 LAST_BEGIN __LIBS_ user32, 'user32.DLL' __IMPORT_ user32,\ MessageBox,'MessageBoxA',0 LAST_END Собираем (естественно подставив свои %nasm_path% и %filename%) Код (Text): %nasm_path%\bin\nasmw -f bin %filename%.asm -o %filename%.exe ^ -I%nasm_path%\include\NASM\ И на выходе нормальный ехе
Вообще то у тебя обычный бинарник В комплект насма на самом деле линкер не входит, а "-o" - она просто переименовывает выходной файл. В твоём примере ты просто из .bin переименовываешь в .exe
я для винды на насме пишу так: a.asm Код (Text): cpu 386 bits 32 global start %macro cextern 1-2 %if %0 == 1 extern _%1 %define %1 _%1 %else extern _%1@%2 %define %1 _%1@%2 %endif %endmacro cextern printf cextern ExitProcess,4 section .text start: push msg call printf add esp,byte 4 push byte 0 call ExitProcess section .data msg db "hello,world",13,10,0 makefile
да,Loginanton правильно сказал - насм - это компилятор,а не линкер. Экзешники напрямую получить нельзя.
Ra!N, Loginanton вот на это обратили внимание Код (Text): %define ONLY_NASM %include "nagoa+.inc" %include "defines.inc" сайт http://visual-assembler.pt.vu/ на главной странице написано Nagoa can also build EXE using only NASM ! в примерах NAGOA_NASM_PACKAGE_RAD_IDE_1_MAR_2004\lab\vasm\project\ONLY_NASM_examples можно найти как делать экзшник с ресурсами и без и dll используя только NASM без всякого линкера, т.е. практически всё как в FASM'е ! PS Пример S_Alex как раз и взят оттуда
S_Alex: Эмм, как вообще можно хоть что-то собрать без линкера? Не, ну можно, конечно, и ПЕ-хидер вручную забить, и импорты прописать.. Вот когда на пенсию выйду, времени буит много, тогда, наверное, и займусь) Читаем раздел documentation c nasm.sourceforge.net: "The Netwide Assembler, NASM, is an 80x86 and x86-64 assembler designed for portability and modularity. It supports a range of object file formats, including Linux and *BSD a.out, ELF, COFF, Mach-O, Microsoft 16-bit OBJ, Win32 and Win64..." Mikl___: на ALINK.EXE в папке с этим "nagoa" внимание обратил? Кабы запустил этот ngoa+, то узрел бы 2 кнопки, на которые надо жать.Первая - asm->obj, а вторая link.
А как без линкера работает FASM? И NASM точно такой же (IMHO NASM предшественник FASM'а) и ничего здесь "вручную забивать" не нужно nagoa.inc все это делает за тебя -- может быть это кому-то и не нравится, но NASM и без ALINK.EXE и без компиляторов ресурсов прекрасно работает
Скажу котегорично. Верх групости - этот мамонт умер, а доки и кросплатформенность есть и у фасма. Масму отдают предпочтение старперы. Для остальных путь один фасм. Или вы желаете двигаться в обратном направлении?
assorted Не знаю кого ты там старпёрами называешь, но масм поддерживается майкрософтом, пускай и не в виде отдельного пакета.