Только-только начал изучать ассемблер, вот, сразу же столкнулся с такой проблемой: при компановке у меня появляется такое предупреждение warning A4023: /coff switch, leading underscore required for start address : begin
Но, всё равно, файл *.obj создается. Зато при линковании уже появляется не предупреждение, а ошибка: fatal error LNK1190: invalid fixup found, type 0x0001
Поискал такие ошибки в поисковике, вроде такие вопросы ранше задавались людьми, но никто ничего конкретного не ответил, лишь ссылки на faq-и давали, документации и т.д.
Если нужно, вот код компилируемой программы, но пробовал и другие подобные:
QUOTE
CSEG segment org 100h
Begin:
mov ah,9 mov dx,offset Message int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends end Begin
компилировал в командной строке такими командами c:\masm32\bin\ml /c /coff 1.asm c:\masm32\bin\link /SUBSYSTEM:WINDOWS /LIBPATH:c:\masm32\lib 1.obj
Обидно, только начал, а уже застопорился из-за этого. Если кому известно, как исправить, подскажите, если не сложно.
Love.sys, 18.05.2006 - 21:44
Leon4V, странно - у меня MASM таких ошибок не выдавал. Как альтернатива поробуй TASM, там вообще можно обойтись без стадии компановки. Какая ОСь у тебя стоит? И ещё, попробуй скомпилируй следующик код:
CODE
format PE GUI 4.0 include 'win32a.inc' invoke MessageBox,0,_message,_caption,MB_ICONQUESTION+MB_YESNO cmp eax,IDYES jne exit
Leon4V, странно - у меня MASM таких ошибок не выдавал. Как альтернатива поробуй TASM, там вообще можно обойтись без стадии компановки. Какая ОСь у тебя стоит? И ещё, попробуй скомпилируй следующик код: [code] format PE GUI 4.0 include 'win32a.inc' invoke......
Гражданин, а зачем ты даешь ложные советы? Инклуд-файла win32a.inc в МАСМ и ТАСМ нету, и, вообще, если бы ты чуть-чуть рулил в асме, то понял бы, что синтаксис отличен от стандартного МАСМовского. Этот пример для Flat assembler (FASM) от Томаса Гризцара (он идет в поставке к компилятору ) ".... поробуй TASM, там вообще можно обойтись без стадии компАновки." - Мда, пиши еще, я таких анекдотов давно не слышал!
ZaHack, 18.05.2006 - 23:18
Leon4V! Асм изучаем по рассылкам Калашникова? На выходе хотим получить .COM-файл? Судя по "CSEG segment" я это говорю (может быть я и неправ). Неудивитильно, что это слегонца не работает. Все это писалось под 9х и в NT-family может глючить. Если надо могу привести рабочий хэлловорд
AquaTour, 18.05.2006 - 23:26
MASM последних версий не может создавать нормальные com файлы, для их создания нужен MASM более старых версий например 6.11, 6.13 будут проблемы пиши в почту.
ZaHack, 18.05.2006 - 23:32
QUOTE(AquaTour @ 19.05.2006 - 0:26)
MASM последних версий не может создавать нормальные com файлы, для их создания нужен MASM более старых версий например 6.11, 6.13 будут проблемы пиши в почту.
Да, это тоже одна из причин.Можешь ко мне тож обратиться, у меня этих старых компиляторов....Вообще, совет: забей на ДОС и .СОМ-программирование, кодь на win32+API.От этого хоть какой-то толк будет.
Leon4V, 19.05.2006 - 20:31
Всем спасибо за ответы. ZaHack, a что нужно для программирования на win32+api. Я просто думал, что масм под винду и будет компилировать. Версия масма, кстати 9.0, а Ось Winxp+sp2. А насчёт кода, что я привёл, то я в нём ничего не понимаю и не пытался даже разбираться. Это ж просто 'Hello world', а если даже он у меня не создаётся, то на этом моё обучение и остановилось. Если не сложно подскажите книжку для програмирования под win32, т.к. Рассылка Калашникова, видимо, только под дос заточена.
Всем кто ответил большое спасибо!!!
Leon4V, 19.05.2006 - 20:48
Вот к примеру твой код из 2-й статьи по введению в асм.
QUOTE
include 'win32a.inc' invoke MessageBox,0,_message,_caption,MB_ICONQUESTION+MB_YESNO cmp eax,IDYES jne exit
Как его лучше компилировать? Каким компилятором? разъясни, если не сложно что нужно для того, чтобы кодить на асме под win32. Ну, и книжку какую-нидь, хотя начну с твоего же кода.
AquaTour, 19.05.2006 - 23:25
Этот код без переделки можно скомпилировать только FASM http://flatassembler.net. А что бы кодить на асме нужен сам компилятор и к нему желательно IDE (среду разработки): для удобства, например RadASM http://www.radasm.com Из учебников могу порекомендовать уроки Iczelion'а, ищи на wasm.ru
Ребяяятаааа, огромнейшее вам спасибо!!! Не поверите, как я рад, что после стольких мучений, и, наконец, с вашей помощью всё получилось. Наконец-то начну изучать асм, благодаря вам!!!
ОГРОМНОЕ ВАМ СПАСИБО!!!
ZaHack, 24.05.2006 - 9:54
Leon4V, во-первых, чтобы поблагодарить есть кнопочка Thanks Во-вторых, я сделал тут Hello world для win32:
.586P .Model flat, stdcall STD_OUTPUT_HANDLE equ -11 EXTERN GetStdHandle@4:NEAR EXTERN WriteConsole@20:NEAR EXTERN ExitProcess@4:NEAR includelib c:\masm32\lib\user32.lib includelib c:\masm32\lib\kernel32.lib _DATA SEGMENT STR1 DB "Console application", 0 LENS DD ? RES DD ? _DATA ENDS _TEXT SEGMENT START: PUSH STD_OUTPUT_HANDLE CALL GetStdHandle@4 Push OFFSET STR1 call LENSTR push offset RES push offset LENS push ebx push offset STR1 push eax call WriteConsole@20 push 0 call ExitProcess@4 LENSTR PROC push ebp mov ebp,esp push eax push edi cld mov edi,dword ptr [ebp+08] mov ebx, edi mov ecx, 100 xor al,al repne scasb sub edi, ebx mov ebx, edi dec ebx pop edi pop eax pop ebp ret 4 LENSTR ENDP _TEXT ENDS END START