day & night

MASM32, Проблема с компиляцией
Дата обновления: , перейти к новому сообщению
#1
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


Обидно, только начал, а уже застопорился из-за этого. Если кому известно, как исправить, подскажите, если не сложно.
Go topGo end

Ответов(1 - 9)
18.05.2006 - 21:44
#2
Love.sys



Коксохим
Group Icon

Группа: Наши Люди
Сообщений: 1.341
Регистрация: 23.08.2005
Пользователь №: 12.345


Респектов: 120
-----X----




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
User is offline
Go topGo end
18.05.2006 - 22:57
#3
ZaHack



Большой Брат
Group Icon

Группа: Заблокированные
Сообщений: 1.252
Регистрация: 24.01.2006
Из: Where The Eagles Fly
Пользователь №: 333


Респектов: 117
-----X----




QUOTE(Гражданин @ 18.05.2006 - 22:44)
Leon4V, странно - у меня MASM таких ошибок не выдавал. Как альтернатива поробуй TASM, там вообще можно обойтись без стадии компановки.
Какая ОСь у тебя стоит?
И ещё, попробуй скомпилируй следующик код:
[code]
format PE GUI 4.0
include 'win32a.inc'
invoke......
*


Гражданин, а зачем ты даешь ложные советы? Инклуд-файла win32a.inc в МАСМ и ТАСМ нету, и, вообще, если бы ты чуть-чуть рулил в асме, то понял бы, что синтаксис отличен от стандартного МАСМовского. Этот пример для Flat assembler (FASM) от Томаса Гризцара (он идет в поставке к компилятору wink.gif ) ".... поробуй TASM, там вообще можно обойтись без стадии компАновки." - laugh.gif laugh.gif laugh.gif Мда, пиши еще, я таких анекдотов давно не слышал! biggrin.gif
User is offline
Go topGo end
18.05.2006 - 23:18
#4
ZaHack



Большой Брат
Group Icon

Группа: Заблокированные
Сообщений: 1.252
Регистрация: 24.01.2006
Из: Where The Eagles Fly
Пользователь №: 333


Респектов: 117
-----X----




Leon4V! Асм изучаем по рассылкам Калашникова? На выходе хотим получить .COM-файл? Судя по "CSEG segment" я это говорю (может быть я и неправ). Неудивитильно, что это слегонца не работает. Все это писалось под 9х и в NT-family может глючить. Если надо могу привести рабочий хэлловорд
User is offline
Go topGo end
18.05.2006 - 23:26
#5
AquaTour



Специалист
****

Группа: Пользователи
Сообщений: 417
Регистрация: 4.07.2005
Пользователь №: 27.183


Респектов: 50
-----X----


Предупреждений: 0


MASM последних версий не может создавать нормальные com файлы, для их создания нужен MASM более старых версий например 6.11, 6.13 будут проблемы пиши в почту.
User is offline
Go topGo end
18.05.2006 - 23:32
#6
ZaHack



Большой Брат
Group Icon

Группа: Заблокированные
Сообщений: 1.252
Регистрация: 24.01.2006
Из: Where The Eagles Fly
Пользователь №: 333


Респектов: 117
-----X----




QUOTE(AquaTour @ 19.05.2006 - 0:26)
MASM последних версий не может создавать нормальные com файлы, для их создания нужен MASM более старых версий например 6.11, 6.13 будут проблемы пиши в почту.
*


Да, это тоже одна из причин.Можешь ко мне тож обратиться, у меня этих старых компиляторов....Вообще, совет: забей на ДОС и .СОМ-программирование, кодь на win32+API.От этого хоть какой-то толк будет.
User is offline
Go topGo end
19.05.2006 - 20:31
#7
Leon4V



Unregistered














Всем спасибо за ответы. ZaHack, a что нужно для программирования на win32+api. Я просто думал, что масм под винду и будет компилировать. Версия масма, кстати 9.0, а Ось Winxp+sp2. А насчёт кода, что я привёл, то я в нём ничего не понимаю и не пытался даже разбираться. Это ж просто 'Hello world', а если даже он у меня не создаётся, то на этом моё обучение и остановилось. Если не сложно подскажите книжку для програмирования под win32, т.к. Рассылка Калашникова, видимо, только под дос заточена.

Всем кто ответил большое спасибо!!!
Go topGo end
19.05.2006 - 20:48
#8
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. Ну, и книжку какую-нидь, хотя начну с твоего же кода.
Go topGo end
19.05.2006 - 23:25
#9
AquaTour



Специалист
****

Группа: Пользователи
Сообщений: 417
Регистрация: 4.07.2005
Пользователь №: 27.183


Респектов: 50
-----X----


Предупреждений: 0


Этот код без переделки можно скомпилировать только FASM
http://flatassembler.net. А что бы кодить на асме нужен сам компилятор и к нему желательно IDE (среду разработки): для удобства, например RadASM
http://www.radasm.com Из учебников могу порекомендовать уроки Iczelion'а, ищи на wasm.ru
User is offline
Go topGo end
19.05.2006 - 23:55
#10
yah



профи!
[SoftoRooMTeaM] Group Icon

Группа: Наши Люди
Сообщений: 2.336
Регистрация: 27.01.2006
Из: рнд
Пользователь №: 500


Респектов: 408
-----XXX--




Здесь ты сможешь скачать хатчеевский масм32:
http://wasm.ru/baixado.php?mode=tool&id=48

А здесь и сами уроки по кодингу, но лучше будет купить книгу:
http://wasm.ru/publist.php?list=1
User is offline
Go topGo end

Topic Options
Сейчас: 10.05.2024 - 22:11
Мобильная версия | Lite версия