Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 633
от 18.12.2006, 20:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 372, Экспертов: 30
В номере:Вопросов: 1, Ответов: 2


Вопрос № 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. По моему вопросов не должно быть - все объяснял как в первом классе.
Желаю удачи в изучении Ассемблера!
---------
Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Ответ отправил: Луковкин Николай Иванович (статус: 4-ый класс)
Ответ отправлен: 14.12.2006, 22:39


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное