MASM32, Проблема с компиляцией
|
Leon4V
Unregistered
| Только-только начал изучать ассемблер, вот, сразу же столкнулся с такой проблемой: при компановке у меня появляется такое предупреждение 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Обидно, только начал, а уже застопорился из-за этого. Если кому известно, как исправить, подскажите, если не сложно. |
|
| |
18.05.2006 - 21:44 |
Love.sys
Коксохим
Группа: Наши Люди Сообщений: 1.341 Регистрация: 23.08.2005 Пользователь №: 12.345
Респектов: 120
| 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
invoke mciSendString,_cmd_open,0,0,0 invoke mciSendString,_cmd_eject,0,0,0 invoke mciSendString,_cmd_close,0,0,0
exit: invoke ExitProcess,0
_message db 'Do you need additional place for the beer?',0 _caption db 'Desktop configuration',0
_cmd_open db 'open cdaudio',0 _cmd_eject db 'set cdaudio door open',0 _cmd_close db 'close cdaudio',0
; import data in the same section
data import
library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ winmm,'WINMM.DLL'
import kernel32,\ ExitProcess,'ExitProcess'
import user32,\ MessageBox,'MessageBoxA'
import winmm,\ mciSendString,'mciSendStringA'
end data | |
| |
18.05.2006 - 22:57 |
ZaHack
Большой Брат
Группа: Заблокированные Сообщений: 1.252 Регистрация: 24.01.2006 Из: Where The Eagles Fly Пользователь №: 333
Респектов: 117
| QUOTE(Гражданин @ 18.05.2006 - 22:44) Leon4V, странно - у меня MASM таких ошибок не выдавал. Как альтернатива поробуй TASM, там вообще можно обойтись без стадии компановки. Какая ОСь у тебя стоит? И ещё, попробуй скомпилируй следующик код: [code] format PE GUI 4.0 include 'win32a.inc' invoke...... Гражданин, а зачем ты даешь ложные советы? Инклуд-файла win32a.inc в МАСМ и ТАСМ нету, и, вообще, если бы ты чуть-чуть рулил в асме, то понял бы, что синтаксис отличен от стандартного МАСМовского. Этот пример для Flat assembler (FASM) от Томаса Гризцара (он идет в поставке к компилятору ) ".... поробуй TASM, там вообще можно обойтись без стадии комп Ановки." - Мда, пиши еще, я таких анекдотов давно не слышал! | |
| |
18.05.2006 - 23:18 |
ZaHack
Большой Брат
Группа: Заблокированные Сообщений: 1.252 Регистрация: 24.01.2006 Из: Where The Eagles Fly Пользователь №: 333
Респектов: 117
| Leon4V! Асм изучаем по рассылкам Калашникова? На выходе хотим получить .COM-файл? Судя по "CSEG segment" я это говорю (может быть я и неправ). Неудивитильно, что это слегонца не работает. Все это писалось под 9х и в NT-family может глючить. Если надо могу привести рабочий хэлловорд | |
| |
18.05.2006 - 23:32 |
ZaHack
Большой Брат
Группа: Заблокированные Сообщений: 1.252 Регистрация: 24.01.2006 Из: Where The Eagles Fly Пользователь №: 333
Респектов: 117
| QUOTE(AquaTour @ 19.05.2006 - 0:26) MASM последних версий не может создавать нормальные com файлы, для их создания нужен MASM более старых версий например 6.11, 6.13 будут проблемы пиши в почту. Да, это тоже одна из причин.Можешь ко мне тож обратиться, у меня этих старых компиляторов....Вообще, совет: забей на ДОС и .СОМ-программирование, кодь на win32+API.От этого хоть какой-то толк будет. | |
| |
19.05.2006 - 20:31 |
Leon4V
Unregistered
| Всем спасибо за ответы. ZaHack, a что нужно для программирования на win32+api. Я просто думал, что масм под винду и будет компилировать. Версия масма, кстати 9.0, а Ось Winxp+sp2. А насчёт кода, что я привёл, то я в нём ничего не понимаю и не пытался даже разбираться. Это ж просто 'Hello world', а если даже он у меня не создаётся, то на этом моё обучение и остановилось. Если не сложно подскажите книжку для програмирования под win32, т.к. Рассылка Калашникова, видимо, только под дос заточена.
Всем кто ответил большое спасибо!!! |
|
| |
19.05.2006 - 20:48 |
Leon4V
Unregistered
| Вот к примеру твой код из 2-й статьи по введению в асм. QUOTE include 'win32a.inc' invoke MessageBox,0,_message,_caption,MB_ICONQUESTION+MB_YESNO cmp eax,IDYES jne exit
invoke mciSendString,_cmd_open,0,0,0 invoke mciSendString,_cmd_eject,0,0,0 invoke mciSendString,_cmd_close,0,0,0
exit: invoke ExitProcess,0
_message db 'Открыть дисковод?',0 _caption db 'Пример №2',0
_cmd_open db 'open cdaudio',0 _cmd_eject db 'set cdaudio door open',0 _cmd_close db 'close cdaudio',0
data import
library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ winmm,'WINMM.DLL'
import kernel32,\ ExitProcess,'ExitProcess'
import user32,\ MessageBox,'MessageBoxA'
import winmm,\ mciSendString,'mciSendStringA'
end data Как его лучше компилировать? Каким компилятором? разъясни, если не сложно что нужно для того, чтобы кодить на асме под win32. Ну, и книжку какую-нидь, хотя начну с твоего же кода. |
|
| |
19.05.2006 - 23:25 |
AquaTour
Специалист
Группа: Пользователи Сообщений: 417 Регистрация: 4.07.2005 Пользователь №: 27.183
Респектов: 50
Предупреждений: 0
| Этот код без переделки можно скомпилировать только FASM http://flatassembler.net. А что бы кодить на асме нужен сам компилятор и к нему желательно IDE (среду разработки): для удобства, например RadASM http://www.radasm.com Из учебников могу порекомендовать уроки Iczelion'а, ищи на wasm.ru | |
| |
|
|