Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не компилируется исходник...

30K
27 июля 2007 года
Actek
5 / / 26.07.2007
Доброго времени суток тов. Программисты!
Как ни странно я тоже взялся за 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

Вот на этом знаменательном моменте и образовался тупняк! А начинал изучать не для того чтобы
прийти к такому финишу!!!:)
Подскажите пожалуйста...
15K
27 июля 2007 года
osx
78 / / 20.07.2007
Цитата: Actek

Begin:
end Begine


Убери "е"... Я тоже начинал с этой рассылки, компилировалось нормально... cmd->ML.EXE PROG.ASM /AT
Либо напишет список ошибок (при этом окно МС-ДОС не будет "убегать"), либо создаст два файла, один из которых комок. ТО есть если версия масма больше 6ти, линкер для комов не запускать не нужно...

Цитата:
Если Вы используете Macro Assembler версии 6.11 - 6.13 (MASM 6.11 - 6.13):
В командной строке необходимо указать следующее:
> ML.EXE PROG.ASM /AT

В результате создается два файла: PROG.OBJ и PROG.COM. Prog.obj нам больше не понадобится, и его можно удалить, а prog.com запускаете на выполнение.

245
27 июля 2007 года
~ArchimeD~
1.4K / / 24.07.2006
Цитата:
Так же я скачал MASM32,но пока не устанавливал.Подходит ли он для компиляции под MS-DOS?


неа, не подходит. доса ни 32-разрядного ни 64-разрядного ;) ещё не выпустили.

30K
27 июля 2007 года
Actek
5 / / 26.07.2007
Я подправил код, но это не помогло.Видно там есть ещё ошибки.Которые я допустил при добавлении второй строчки сообщения.
Я взял стандартный пример "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 не работать???
Ассемблируя ещё первый код с ошибками окно просто мелькало и ничего не создавалось! Разве он не должен был вывести список ошибок???
15K
28 июля 2007 года
osx
78 / / 20.07.2007
Прикрепи пожалуста получившийся *.com... (код тот же самый?)
Кстати, читая твои посты я понял что ты вызываешь непосредственно сам компилятор или линковщик. Советую делать так:
прописать cmd, в открывшемся окне мс-дос набрать cd c:\masm611\bin\, затем команды линковщику либо компилятору...
245
28 июля 2007 года
~ArchimeD~
1.4K / / 24.07.2006
вообще, я бы для компилировал так: создал бы файл make.bat следующего содержания (взято из одной книжки для чайников):

 
Код:
ml /c /coff "%1.asm"
link /SUBSYSTEM:CONSOLE "%1.obj"


/c - только .obj
/coff - для винды
/SUBSYSTEM:CONSOLE - консольгое приложение винды

билдится из консоли:

make имя_файла_без_расширения
30K
28 июля 2007 года
Actek
5 / / 26.07.2007
~ArchimeD~

Я ведь не 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! Посмотри может что не так!?
245
28 июля 2007 года
~ArchimeD~
1.4K / / 24.07.2006
Цитата: Actek
~ArchimeD~

Я ведь не Masm32 пользуюсь, а Masm 6.12 и уроки по которым начал изучать рассматриваются как
практические основы программирования на Ассемблере под MS-DOS. Команды которые ты написал в
батнике(make.bat) для MASM32,а как ты сам раскрыл мне глаза он не годится для компиляции
программ для MS-DOS.



а, прошу прощения... я думал что ты уже забил на дос и компилишь с masm32.
тогда действительно не пойдет.

260
28 июля 2007 года
Ramon
1.1K / / 16.08.2003
Вбиваем "ml /omf /AT PROG.ASM", и радуемсо + есть замечательная вещь - "ml /?" зоветцо, так же есть "MASM Programmers Guide" и "MASM Reference"

PS: Предложенный выше батник изменить не трудно, не так ли?
PS2: Если очень хочетцо узнать. что тебе пишут в "мелькающем" окне сделай вывод в файл аля "ml /omf /AT PROG.ASM > log.txt"
PS3: А чтоб линкер лишних вопросов не задавал ставим ";" аля "link /TINY PROG.OBJ;"
15K
29 июля 2007 года
osx
78 / / 20.07.2007
Цитата: Actek

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е - я вчера взял расслылку калаша, скачал масм, откомпилил - вопросов не было, попробуй после компилятора, файл обж засунуть в директорию с линкером и слинковать. Я бы поступил так.

15K
29 июля 2007 года
osx
78 / / 20.07.2007
Кстати - у тебя все работает, выводит хелло ворлд... файл *.асм - составлен правильно... обж тоже линкуецо
30K
29 июля 2007 года
Actek
5 / / 26.07.2007
Цитата: osx
1е - почитай мой первый пост, 2е - [COLOR="Red"]я считаю, что программист тот человек, который должен уметь ставить экспиременты[/COLOR], то что линкер в другой папке ты кстати не писал, и я не мог этого заметить. 3е - я вчера взял расслылку калаша, скачал масм, откомпилил - вопросов не было, [COLOR="SeaGreen"]попробуй после компилятора, файл обж засунуть в директорию с линкером и слинковать. Я бы поступил так.[/COLOR]



[COLOR="Red"]Ох не спорю,а даже больше ещё чего!!![/COLOR]:rolleyes:

[COLOR="SeaGreen"]Я всё так и сделал,как бы я по твоему в моём случае получил prog.com...[/COLOR]
Я не чайник aka ламер! Но с таким родом программ разбираюсь впервые.
Если ты всё же скачал и установил Masm 6.12,то можно тебя попросить описать пошагово как ты устанавливал и патчил.Возможно я жопустил на этом этапе ошибку. И это будет полезным для других начинающих!Всё же потом меньше лишьних вопросов!:)

~ArchimeD~
Спасибо тебе! Ведь ты мне помощь оказываешь!И Вам тов. OSX и Ramon!:)

Ramon
А можно подробнее о команде /omf ?
Это команда катит под Masm 6.12&

260
29 июля 2007 года
Ramon
1.1K / / 16.08.2003
ключик /omf "катит" на MASM 6.1x и выше, а задает он формат выходного объектного файла компилятора

Object Module Format - OMF(/omf - используется для DOS)
Common Object File Format - COFF(/coff - используется для Windows)

PS: Если дальше интересно, что да как да поподробней, то вы все найдете, если захотите.
30K
30 июля 2007 года
Actek
5 / / 26.07.2007
Спасибо OSX,~ArchimeD~ и Ramon! Вы мне хорошо помогли на этом этапе!!! Теперь знаю людей готовых помоч! Форум хороший!

OSX если будет желание в время, то скинь всё же пошаговую инструкцию установки Masm.

На данный момент я получил ответы на свои вопросы и теперь могу двигаться дальше!:)
100.0M
22 августа 2019 года
dgoker
0 / / 22.08.2019
У меня точно такая же ситуация!
100.0M
22 августа 2019 года
dgoker
0 / / 22.08.2019
(01) CSEG segment

(02) org 100h

(03)

(04) Begin:

(05)

(06) mov ah,9

(07) mov dx,offset Message

(08) int 21h

(09)


(10) int 20h

(11)

(12) Message db 'Hello, world!$'

(13) CSEG ends

(14) end Begin


Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог