Не компилируется исходник...
Как ни странно я тоже взялся за Assembler,а так как литературы не мало решил начать с
рассылки Калашникова Олега Александровича - "Ассемблер? Это просто! Учимся программировать".
Книга разбита на два тома: в первом рассматриваются практические основы программирования на
Ассемблере под MS-DOS ® "с нуля", во втором – теоретическая часть, оформленная в виде справочника
для имеющих опыт программирования.Нужный софт там же на сайте и вопрос собственно заключается в
следующем:
У меня ОС Windows XP SP2
В архиве установочные файлы MASM 6.12 при установке которого создаётся каталог программы и путь
его C:\MASM611\ !В архиве обнаружил два патча ML611D.EXE и ML612.EXE с помощью которых как понял
мы и получаем MASM 6.12 из MASM 6.11.Установил их в той же последовательности.Всё бы хорошо :),
но при первой попытке компилировать PROG.asm обнаружил только мелькнувшее в доли секунд окно MS-DOS...
При чём никаких изменений и реакций.И ожидаемого конечного файла я не нашёл.И так не раз...
У Калашникова написано:
Если Вы используете Macro Assembler версии 6.11 – 6.13 (MASM 6.11 – 6.13):
В командной строке необходимо указать следующее:
> ML.EXE PROG.ASM /AT
Мои действия:
PROG.asm я помещал в C:\MASM611\ и в C:\MASM611\BIN\
В командной строке указывал следующее:
C:\MASM611\BIN\ML.EXE PROG.ASM /AT
Параметр "/AT" указывает программе-ассемблеру (MASM), что после ассемблирования, в случае, если ошибок
не будет обнаружено, следует запустить компоновщик (LINK.EXE) и передать ему параметры для создания
файла типа COM.
Так же я скачал MASM32,но пока не устанавливал.Подходит ли он для компиляции под MS-DOS?
Вот содержимое PROG.asm:
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
mov ah,9
mov dx,offset Mess2
int 21h
int 20h
Message db 'Hello , world!$'
Messege db '"Это Я!$'
CSEG ends
end Begine
Вот на этом знаменательном моменте и образовался тупняк! А начинал изучать не для того чтобы
прийти к такому финишу!!!:)
Подскажите пожалуйста...
Begin:
end Begine
Убери "е"... Я тоже начинал с этой рассылки, компилировалось нормально... cmd->ML.EXE PROG.ASM /AT
Либо напишет список ошибок (при этом окно МС-ДОС не будет "убегать"), либо создаст два файла, один из которых комок. ТО есть если версия масма больше 6ти, линкер для комов не запускать не нужно...
В командной строке необходимо указать следующее:
> ML.EXE PROG.ASM /AT
В результате создается два файла: PROG.OBJ и PROG.COM. Prog.obj нам больше не понадобится, и его можно удалить, а prog.com запускаете на выполнение.
неа, не подходит. доса ни 32-разрядного ни 64-разрядного ;) ещё не выпустили.
Я взял стандартный пример "Hello , world" и разместил его в C:\MASM611\BIN\(правильно ли?) , а в командную строку вбил:
C:\MASM611\BIN\ML.EXE PROG.ASM /AT
Окно Доса так же мелькнуло, но появился PROG.obj ,а вот PROG.com не создался. А вообще должен же!Мы же не зря пишем команду /AT...
По пути C:\MASM611\BINR\ есть и компоновщик LINK.EXE ,с помощью которого я и решил попробовать слинковать полученный PROG.obj.В командную строку вбил:
C:\MASM611\BINR\LINK.EXE Prog.obj /t
Открылось Дос окно и вот эти строки:
Run File [Prog01.com]: (Выполнить файл)
List file [nul.map]: (Файл списка)
Libraries [ .lib]: (Библиотеки)
Definitions File [nul.def]: (Файл определений)
Просто жать на Enter???
Я просто жал на Enter на каждом переходе и оно закрылось.Создался и
PROG.com в 1кв как и Prog.obj такого же веса. Но вот запуская его обычным способом или через командную строку просто мелькает Дос окно и всё. Или нужно перезагрузиться в MS-DOS и уже в нём запускать???
Почему может команда /AT не работать???
Ассемблируя ещё первый код с ошибками окно просто мелькало и ничего не создавалось! Разве он не должен был вывести список ошибок???
Кстати, читая твои посты я понял что ты вызываешь непосредственно сам компилятор или линковщик. Советую делать так:
прописать cmd, в открывшемся окне мс-дос набрать cd c:\masm611\bin\, затем команды линковщику либо компилятору...
link /SUBSYSTEM:CONSOLE "%1.obj"
/c - только .obj
/coff - для винды
/SUBSYSTEM:CONSOLE - консольгое приложение винды
билдится из консоли:
make имя_файла_без_расширения
Я ведь не Masm32 пользуюсь, а Masm 6.12 и уроки по которым начал изучать рассматриваются как
практические основы программирования на Ассемблере под MS-DOS. Команды которые ты написал в
батнике(make.bat) для MASM32,а как ты сам раскрыл мне глаза он не годится для компиляции
программ для MS-DOS.
OSX
В более ранних версиях(MASM 5.00 – 5.10)для создания машинного кода необходимо воспользоваться
двумя программами: программой-ассемблером и компоновщиком.
Однако, для программы-ассемблера MASM версий 6.00 – 6.13 достаточно указать в командной строке
параметр "/AT" в процессе ассемблирования. В таком случае MASM после ассемблирования (если не
было ошибок в ассемблерном листинге) автоматически запустит компоновщик (LINK.EXE), который
создаст файл типа COM.В итоге набрав в командной строке ML.EXE PROG.ASM /AT мы получаем
*.com одной командой. Но в моём случае команда /AT почему-то не срабатывает!
Если ты заметил,возможно это из-за того,что ML.EXE находится в директории C:\MASM611\BIN\,а
компановщик LINK.EXE в директории C:\MASM611\BINR\
По идее для передачи управления от ML.EXE(после выполнения его задач) на LINK.EXE командой
/AT и ML.EXE и LINK.EXE должны находится в одно директории. Вроде как так!
Возможно я напутал что-то при установке.
Как правильно такие программы удалять? Ведь в установке и удалении её нет!
Какой у тебя софт?
Пример тобой приведённый удобный!Просто делаем нужный каталог текущим(рабочим):
В командной строке пишем:
cmd -тем самым вызываем имуляцию ms-dos в среде Windows
Далее в открывшемся окне прописываем тот каталог,где находятся те файлы с которыми
нам нужно работать.В моём случае:
cd c:\masm611\bin\
А дальше команды Вашей версии программы-ассемблера и компоновщика.
Например для MASM 5.00 – 5.10:
MASM.EXE PROG.ASM
LINK.EXE PROG.OBJ /t
Пример для MASM 6.11 – 6.13:
ML.EXE PROG.ASM /AT
Описал подробно,так как многие начинающие не в курсе этого.Пригодится!
У меня же твой совет не будет работать на 100%.Описание причины в начале этого поста.
OSX желательно там где я ставлю знак "?" хотя бы чем-то коментировать.Так как
становится не понятным, на мой вопрос никто не знает ответа или его просто не заметили!!!
Когда компилю алгоритм который в первом посте при исправленной тобой замеченой ошибке
он не компилит и не сообщает об ошибках,которые там есть,а просто мелькает Дос окном!
Этот вопрос "ПОЧЕМУ???" меня тоже беспокоит!А *.com файл всё же получил,но с *.asm,
который без ошибок.
В архиве PROG.ASM и PROG.OBJ по которым получил PROG.COM! Посмотри может что не так!?
Я ведь не Masm32 пользуюсь, а Masm 6.12 и уроки по которым начал изучать рассматриваются как
практические основы программирования на Ассемблере под MS-DOS. Команды которые ты написал в
батнике(make.bat) для MASM32,а как ты сам раскрыл мне глаза он не годится для компиляции
программ для MS-DOS.
а, прошу прощения... я думал что ты уже забил на дос и компилишь с masm32.
тогда действительно не пойдет.
PS: Предложенный выше батник изменить не трудно, не так ли?
PS2: Если очень хочетцо узнать. что тебе пишут в "мелькающем" окне сделай вывод в файл аля "ml /omf /AT PROG.ASM > log.txt"
PS3: А чтоб линкер лишних вопросов не задавал ставим ";" аля "link /TINY PROG.OBJ;"
OSX
В более ранних версиях(MASM 5.00 – 5.10)для создания машинного кода необходимо воспользоваться
двумя программами: программой-ассемблером и компоновщиком.
Однако, для программы-ассемблера MASM версий 6.00 – 6.13 достаточно указать в командной строке
параметр "/AT" в процессе ассемблирования. В таком случае MASM после ассемблирования (если не
было ошибок в ассемблерном листинге) автоматически запустит компоновщик (LINK.EXE), который
создаст файл типа COM.В итоге набрав в командной строке ML.EXE PROG.ASM /AT мы получаем
*.com одной командой. Но в моём случае команда /AT почему-то не срабатывает!
Если ты заметил,возможно это из-за того,что ML.EXE находится в директории C:\MASM611\BIN\,а
компановщик LINK.EXE в директории C:\MASM611\BINR\
По идее для передачи управления от ML.EXE(после выполнения его задач) на LINK.EXE командой
/AT и ML.EXE и LINK.EXE должны находится в одно директории. Вроде как так!
Возможно я напутал что-то при установке.
Как правильно такие программы удалять? Ведь в установке и удалении её нет!
Какой у тебя софт?
Пример тобой приведённый удобный!Просто делаем нужный каталог текущим(рабочим):
В командной строке пишем:
cmd -тем самым вызываем имуляцию ms-dos в среде Windows
Далее в открывшемся окне прописываем тот каталог,где находятся те файлы с которыми
нам нужно работать.В моём случае:
cd c:\masm611\bin\
А дальше команды Вашей версии программы-ассемблера и компоновщика.
Например для MASM 5.00 – 5.10:
MASM.EXE PROG.ASM
LINK.EXE PROG.OBJ /t
Пример для MASM 6.11 – 6.13:
ML.EXE PROG.ASM /AT
Описал подробно,так как многие начинающие не в курсе этого.Пригодится!
У меня же твой совет не будет работать на 100%.Описание причины в начале этого поста.
OSX желательно там где я ставлю знак "?" хотя бы чем-то коментировать.Так как
становится не понятным, на мой вопрос никто не знает ответа или его просто не заметили!!!
Когда компилю алгоритм который в первом посте при исправленной тобой замеченой ошибке
он не компилит и не сообщает об ошибках,которые там есть,а просто мелькает Дос окном!
Этот вопрос "ПОЧЕМУ???" меня тоже беспокоит!А *.com файл всё же получил,но с *.asm,
который без ошибок.
В архиве PROG.ASM и PROG.OBJ по которым получил PROG.COM! Посмотри может что не так!?
1е - почитай мой первый пост, 2е - я считаю, что программист тот человек, который должен уметь ставить экспиременты, то что линкер в другой папке ты кстати не писал, и я не мог этого заметить. 3е - я вчера взял расслылку калаша, скачал масм, откомпилил - вопросов не было, попробуй после компилятора, файл обж засунуть в директорию с линкером и слинковать. Я бы поступил так.
[COLOR="Red"]Ох не спорю,а даже больше ещё чего!!![/COLOR]:rolleyes:
[COLOR="SeaGreen"]Я всё так и сделал,как бы я по твоему в моём случае получил prog.com...[/COLOR]
Я не чайник aka ламер! Но с таким родом программ разбираюсь впервые.
Если ты всё же скачал и установил Masm 6.12,то можно тебя попросить описать пошагово как ты устанавливал и патчил.Возможно я жопустил на этом этапе ошибку. И это будет полезным для других начинающих!Всё же потом меньше лишьних вопросов!:)
~ArchimeD~
Спасибо тебе! Ведь ты мне помощь оказываешь!И Вам тов. OSX и Ramon!:)
Ramon
А можно подробнее о команде /omf ?
Это команда катит под Masm 6.12&
Object Module Format - OMF(/omf - используется для DOS)
Common Object File Format - COFF(/coff - используется для Windows)
PS: Если дальше интересно, что да как да поподробней, то вы все найдете, если захотите.
OSX если будет желание в время, то скинь всё же пошаговую инструкцию установки Masm.
На данный момент я получил ответы на свои вопросы и теперь могу двигаться дальше!:)