Вопрос № 66705: Здравствуйте
…Есть вопросы о самом начале изучения ассемблера (точнее: относительно ассемблирования программы и ПО с эти связанным). Может эти вопросы покажутся «детскими», но помогите, пожалуйста, разобраться.
Просмотрев несколько учебн...
Вопрос № 66.705
Здравствуйте
…Есть вопросы о самом начале изучения ассемблера (точнее: относительно ассемблирования программы и ПО с эти связанным). Может эти вопросы покажутся «детскими», но помогите, пожалуйста, разобраться.
Просмотрев несколько учебников и самоучителей, совсем запутался в этих FAR’ах, MASM’ах, текстовых редакторах (встроенных, не встроенных) и т.п., что необходимо при написании и ассемблировании программ. Одни рекомендуют одно, другие – другое. Но дело даже не в этом, т.к. написать (перепечатать :) программу и ассемблировать ее получается, но все это как-то методом тыка и с непредсказуемыми результатами. Дело вот в чем: НЕТ ЦЕЛОСТНОЙ КАРТИНЫ пути от файла, набранного в текстовом редакторе (кстати, он может быть
любой? Например, тот же блокнот?) до *.exe файла. Т.е. нет представления порядка (последовательности) взаимодействия «текст.редактор - MASM - линковщик - готовая программа». Они, извините за наивность, как-будто друг в друге сидят; что откуда вызывается – непонятно. А в самоучителях это не разводится (или я не внимательно читал?).
В общем, вот эти «детские» вопросы по порядку:
1) допустим, создаем *.asm файл. Он должен быть именно в директории BIN? Почему?
2) Допустим, создали *.asm, тогда следующим шагом должно быть ассемблирование. Мне совершенно не понятен механизм запуска ассемблера. Говорится, что нужно в командной строке набрать > ML.EXE *.ASM /AT. Можете смеяться, но в командной строке чего? Почему не запускается MASM.EXE при прямом клике на нем?
3) А единственное, что открывается в каталоге BIN– это ярлык PWB. Это вообще что? Вернее, понятно, что это текстовый редактор (собственно, в нем и получалось ассемблировать, но без понятия, как это происходит) – непонятно его отношение к MASM. Это часть MASM?
4) Методом тыка набрел на DOS SHEL в меню «файл» (в PWB). Получался выход в некую командную строку. Это и есть та самая строка, где нужно набирать > ML.EXE *.ASM /AT? Эта строка относится к чему вообще? К PWB, MASM, DOS?
5) нужна ли MS-DOS вообще для всего вышеперечисленного?
…Если Вы все еще это читаете, буду благодарен за ответы.
Заранее спасибо
Отправлен: 12.12.2006, 20:54
Вопрос задал: Iverix (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Вiктор
Приветствую, Iverix!
1) создавать *.asm файл не обязательно в директории BIN. В этой директории находятся исполняемые файлы МАSМа - ML.EXE, lib.exe и т.п. Когда вы запускаете программу-ассемблер (ML.EXE) и указываете *.asm-файл без пути (т.е. просто prog.asm а не c:masmproga.asm) то указанный файл ищется в той же директории, откуда был запущен ассемблер. Так что надо или указывать полный путь к исходному тексту программы (т.е. *.asm файлу), или размещать исходный текст в папке BIN (кстати, поиск идёт не только в папке BIN, но и
в других папках, указанных в переменной среды PATH, и можно самому указывать их, но я в этом не разбираюсь, спросите у других)
2)MASM.EXE при прямом клике на нем запускается, смотрит что ему ничего не передано и закрывается. Результаты своей работы он пишет в текстовое окно, а это окно сразу после закрытия MASM закрывается и вы не успеваете ничего увидеть. Если вы просто запускаете масм щёлчком на нём, то ему ничего не передаётся.
Когда-то, во времена ДОС все команды задавались с клавиатуры, результаты отображались на экране. Сейчас вы просто щёлкаете на значке MASM.EXE, а в ДОСе вам пришлось бы набрать например "C:masminMASM.EXE". Это и есть командная строка. А если набрать после названия файла через пробел ещё что-то, то это передастся программе в виде параметров командной строки, например "c:masminML.EXE c:masmsourcesprogram1.ASM /AT".
прямым кликом вы не можете передавать параметры, надо другой подход. Например, вы можете сделать ярлык для МАСМ, и в свойствах ярлыка задать вместо "C:masminMASM.EXE" строку "C:masminMASM.EXE c:masmsourcesprogram1.ASM /AT". Тогда при запуске ярлыка будут передаваться параметры. Ещё можно запустить сам дос (command.com) или дос-навигаторы (нортон, фар, волков и т.п.) в которых можно запускать файлы через командную строку.
"в командной строке чего?" - в командной строке всего, что понимает командную строку и может запускать файлы, переданные в этой строке (можно даже написать свою программу, в которую вы например вводите строку, нажимаете кнопку и программа запускает эту строку на выполнение операционной системе).
Можно также делать *.bat-файлы. Это обычные текстовые файлы, их можно писать в блокноте и подобных редакторах. Каждая строка такого файла воспринимается как команда. Т.е. можно сделать файл make_proga.bat и записать в него текст "C:masminMASM.EXE c:masmsourcesprogram1.ASM /AT", потом запустить этот файл - результат должен быть такой же, как если бы вы ввели этоу строку в ДОСе.
Механизм запуска ассемблера (приближённо): ассемблер запрашивает у ОС командную строку, проверяет были ли переданы параметры, если были переданы имена файлов для ассемблирования, то ассемблирует.
3) PWB - текстовый редактор пакета МАСМ (лично я считаю что он неудобный). МАСМ - это пакет, и PWB - его часть.
4)DOS SHEL - это когда программа запускает ДОС, а сама остаётся в памяти (становится резидентной). Если в таком режиме набрать команду Exit, то управление вернётся к PWB. Так умеют и другие программы, например, турбопаскаль. В принципе можно в этой строке набирать, теоретически она должна вести себя как ДОС, но на практике могут быть проблемы - часть памяти занимает PWB, и если вы запутите другую программу (например, ML) то ей может не хватить памяти (а может и хватить). Лучше всё-таки использовать просто ДОС,
чтобы была доступна вся отведённая ему (ДОСу) память.
5) Для перехвата прерываний, резидентов, работы с защищённым режимом и некоторых других задач желательно иметь ДОС, т.к. Виндовс не всё эмулирует точно так, как в ДОСе. Но для вывода рожиц достаточно и эмуляции виндовс (по крайней мере у меня на 98-й работает)
«текст.редактор - MASM - линковщик - готовая программа» - так и есть.
*.АSМ-файлы можно писать в любом текстовом редакторе, который не добавляет дополнительных символов форматирования. Затем запускаем ассемблер и передаём ему в командной строке название *.asm-файла (файлов), управляющие параметры, а он выдаёт *.obj-файл.
*.obj-файл - это объектный файл, в нём мнемокоды заменены уже на бинарный код, а имена и метки ещё не заменены, они остаются в текстовом виде.
Затем запускаем линковщик, передаём ему полученный *.obj-файл и если нужно *.lib-файлы, линковщик из них создаёт *.exe, *.com или *.dll -файлы.
Линковщик смотрит на текстовые имена, оставшиеся в *.obj-файлах. Например, объявлена функция func1, но её кода не было в asm-файле, её код находится в *.lib-файле. Линковщик записывает весь код (и главную программу, и функцию) в исполняемый файл, причём вместо текстовых имён функций и переменных подставляет их реальные адреса, по которым они находятся в исполняемом файле. (поэтому линковщик ещё называют редактором связей - он приводит в порядок связи между переменными и функциями в разных объектных модулях.
Если редактор интегрированный, то при нажатии определённой кнопки (ну предположим F9) он сам запускает ассемблер и линковщик, сам передаёт им нужные параметры, и может даже запускать полученные исполняемые файлы.
программа ML может сама вызывать линковщика, т.е. мы задаём ей файл, она его ассемблирует и запускает линковщик с нужными параметрами, и в итоге мы получаем выполняемый файл.
Лично я делают так: пишу текст в редакторе rpad32 или notepad++ (с подсветкой синтаксиса), сохраняю, потом запускаю файл build.bat ("вручную", кликнув на нём мышью), в котором записано что-то вроде:
cd c:masmprog
c:masminml.exe c:masmprogprog.asm /zi
c:masminlink.exe c:masmprogprog.obj
для каждой программы свой bat-файл (build_win.bat, build_plan.bat, ...)
Не самое удобное решение, но меня устраивает.
Методов много, картину на стену можно прибить гвоздём, можно повесить на ввинченный шуруп, а можно приклеить клеем - так и создавать программы на ассемблере можно разными способами, используя разное ПО. Каждый использует самое удобное из того, что знает. Но всё равно всё крутится вокруг ассемблера и линковщика, редактор это всё-таки вспомогательное ПО. Различия в методах - это чем редактировать текст, как запускать ассемблер и линковщик и как передавать им параметры. Пробуйте разные, выбирайте лучший для вас.
Удачи!
--------- ни дня без строчки (но не получается)
Ответ отправил: Вiктор (статус: 10-ый класс)
Ответ отправлен: 13.12.2006, 00:49
Отвечает: Луковкин Николай Иванович
Здравствуйте, Iverix!
1.Чтобы писать программы на Ассемблере, одной программы-ассемблера мало, нужен еще редактор, в котором создаютя и меняются тексты программ, а также удобная среда, в которой можно выполнять полученные программы (DOS или Windows).
2. Для создания 16-битных программ (программ для операционной системы DOS) более удобен компилятор TASM фирмы Borland и редактор Norton Commander for DOS.
3. Для создания Windows программ чаще всего используется компилятор MASM фирмы Microsoft,средой для написания и редактирования программ больше всего подходит оболочка FAR.
4.Допустим мы с вами установили на диск C: или D: оболочку FAR, а в эту оболочку установили командные файлы компилятора MASM. Теперь давай напишем с тобой программу на Ассемблере для среды Windows.
4.1. Открываем оболочку FAR, нажимаем кл.Shift+F4, введем в появившемся окне имя нашего первого файла (программы), например 1.asm и нажимаем Enter.
4.2.На появившемся чистом экране оболочки FAR пишем нашу программу (ассемблерный листинг), после чего кл. F10 и нажатием Enter сохраняем написанную программу. С помощью подсветки на панели оболочки FAR можешь проверить и убедится, что у нас с тобой появился файл 1.asm
4.3. Чтобы получить готовую программу, тексты на ассемблере (наш 1.asm файл) сначала преобразуются в объектные файлы. Для этого в оболочке FAR в самом низу существует командная строка. В ней набираем команду:
ml /c/coff "%1.asm" и нажимаем Enter
Теперь с помощью подсветки оболочки, можешь проверить и убедится, рядом с 1.asm файлом появился 1.obj файл
4.4. Затем obj.файл обрабатывает редактор связей или компановщик. В нашем случае компановщик вызывается командой (опять же набираем в командной строке оболочки FAR):
link /SUBSYSTEM:CONSOLE "%1.obj" и нажимаем Enter
Получился 1.exe файл (с помощью подсветки в панели оболочки можешь проверить и убедится).
4.5. И компоновщик, и программа, выдающая объектный файл (часто ее называют компилятором) управляются ключами - символами, стоящими непосредственно за косой чертой. Компилятор в нашем командном файле управляется двумя ключами: /c означает, что создается только объектный файл с расширением .obj, а ключ /coff определяет формат этого файла, стандартный для системы Windows.
Компановщиком управляет один ключ /SUBSYSTEM:CONSOLE, определяющий тип программы. В нашем случае это консольное приложение Windows, то есть программа, использующая для своей работы одно окно, куда она может выводить символы и откуда может эти символы читать.
5. В папке BIN как раз и хранятся наши командные файлы:
ml - компилятор
link - компановщик (и другие)
Открывать их, а тем более запускать на исполнение не надо, в этом нет необходимости.
Все это (т.е. заставлять их работать) мы делаем с помощью командной строки оболочки FAR.
P.S. По моему вопросов не должно быть - все объяснял как в первом классе.
Желаю удачи в изучении Ассемблера!
--------- Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!