|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.04.2011, 15:58 | #1 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Компилирование FAR + MASM
Приветствую всех форумчан. Я сразу перейду к делу.
Я взял самоучитель ассемблера (Крупника). Написал 11.asm amake.bat в файле path в файле autoexec.bat(как-то так) и когда я пишу amake |11, мне отвечает, что "ml" не является внутренней командой (это в одном сообщении) "link" не является внутренней командой (это в другом) Версия самоучителя электронная, может что-то не так списал. P.S. Я решил изучать ассемблер, и возникла (у меня так с каждым языком) проблема с компилятором. Сначала я их долго искал, теперь не могу компилировать. Буду очень благодарен. Если нужно, вот код Код:
|
07.04.2011, 18:18 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,707
|
а сам то масм поставили?
|
07.04.2011, 20:54 | #3 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Да поставил.
[offtop] Не подскажите, как просмотреть командную строку? Я на что-то нажал, и она появилась, но что именно не пойму. -- Извините. Уже догадался. Нужно написать в строке "cmd" [/offtop] Последний раз редактировалось _PROGRAMM_; 07.04.2011 в 21:01. |
07.04.2011, 21:12 | #4 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Решил создать отдельный пост.
Чуть-чуть полазив в autoexec.bat и изменив переменную path, я добился следующих результатов. При написании строки "amake |11" получаю ответ:="11 не является внутренней или внешней программой, исполняемым файлом или пакетным файлом". Когда пишу "amake |11.asm" получаю ответ:=" ml не является внутренней или внешней программой, исполняемым файлом или пакетным файлом link не является внутренней или внешней программой, исполняемым файлом или пакетным файлом". Заранее спасибо. |
08.04.2011, 04:34 | #5 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
Приходится писать и под DOS, и под Windows, используя TASM, MASM, WASM (Watcom Assembler), FASM, NASM ― наш исходный файл имеет стандартное расширение asm, а в качестве результата требуется com, exe, dll, lib... А если мы пишем exe-файл для Windows ― тогда по разному нужно собирать exe под console или gui... Можно ли предельно упростить сборку из ASM-файлов и при этом не писать каждый раз новый bat-файл?
Для начала напишем bat-файл, который по щелчку мыши или по нажатию на Enter создает gui-шный файл под Windows, причем, если в той же папке будет rc-файл с тем же именем, тогда к нашему obj-файлу будет добавлен res-файл. Пишем asm.bat следующего содержания Код:
Far Menager, так же как до этого Norton commander, можно "приучить" к определенным действиям с файлами, имеющими одинаковое рассширение. Far Menager поддерживает ассоциации файлов, которые позволяют задавать разнообразные действия на запуск, редактирование и просмотр файлов, заданных маской (в данном случае маска "*.asm"). Можно добавлять новые ассоциации с помощью команды "Ассоциация файлов" в "Меню команд". Можно задать несколько ассоциаций для одного типа файлов и выбрать желаемую ассоциацию из меню. В списке ассоциаций доступны следующие действия: Ins ― добавить новую ассоциацию; F4 ― изменить настройки текущей ассоциации; Del ― удалить текущую ассоциацию. При запуске из командной строки, мы пишем примерно следущее: > asm.bat msgbox.asm asm.bat должен проанализировать коммандную строку, взять первый аргумент после своего имени, выделить из него название файла без расширения ".asm" и подставить это имя в переменную filename. Первый аргумент после имени программы обозначают как %1. Осталось научиться, как из полного имени файла выделять название файла без расширения. В ассоциированных командах используются специальные метасимволы, среди которых "!" означающий длинное имя без расширения. Ну вот ― знаний у нас достаточно для решения этой проблемы! Теперь нужно подправить наш asm.bat ― на первой строке пишем Код:
Разделим наш asm-bat на несколько частей, допустим, в первой части asm.bat строки, которые собирают COM-файлы, во второй части ― строки, которые собирают из asm-файла EXE-файлы для DOS, в третьей ― EXE-файлы для Windows (причем, когда нам нужен GUI подставляется параметр /SUBSYSTEM:WINDOWS а когда нужна консоль ― параметр /SUBSYSTEM:CONSOLE), в четвертой ― DLL-файлы, в пятой ― SYS-файлы и т.д., а часть строк asm-bat будет общей для удаления "мусора" в виде obj-файлов и т.п. Пусть первая строка нашего asm-файла скажет нашему универсальному bat-файлу какой тип файла у нас должен получиться в результате компиляции и линковки, для какой операционной системы (Windows, DOS) этот файл будет предназначен и каким ассемблером его нужно компилировать и линковать. Если первую строку в asm-файле закомменировать, то она будет игнорироваться компилятором, но будет восприниматься командным процессором, который, в свою очередь, игнорирует символ "точка с запятой". Итак первая строка asm-файла ― мы пишем на masm-диалекте и хотим получить com-файл под dos: Код:
Код:
Последний раз редактировалось Mikl___; 08.04.2011 в 04:37. |
08.04.2011, 04:35 | #6 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
Небольшие пояснения: :read_settings ― это имя нашей процедуры
Процедура читает первую строку asm-файла и работает с первыми пятью лексемами, разделенными пробелами или табуляцией и сопоставлет их с переменными начиная с %%A. Первое поле ― знак ";" экранирует всю строку, второе поле ― %%A, третье ― %%B, четвертое ― %%C, если пятое поле равно "#" ― выходим из процедуры. for Запуск некоторой команды для каждого файла из заданного множества. for {%переменная|%%переменная} in (множество) do команда {%переменная|%%переменная} Используйте %переменная для выполнения команды for из командной строки. Используйте %%переменная для выполнения команды for в пакетном файле. Переменные учитывают регистр и могут быть представлены со значением альфа, например, %A, %B или %C. (множество) Задает один или несколько файлов, каталогов, диапазон значений или текстовых строк, подлежащих обработке заданной командой. Скобки являются обязательными. команда Задает команду, которая будет выполнена для каждого файла, каталога диапазона значений или текстовой строки, включенной в указанный параметр (множество). /f передает первый отделенный пробелом элемент из каждой строки каждого файла. eol=# Задает символ конца строки (end of line). tokens=x,y,m-n Задает элементы, передаваемые из каждой строки в тело цикла for при каждой итерации. В результате размещаются дополнительные имена переменных. Форма m-n задает диапазон, указывающий элементы с m-го по n-ый. set переменная= Указывает имя переменной, значение которой требуется задать или изменить exit /b Выход из текущего пакетного сценария goto метка В пакетной программе передает управление Windows XP в строку, определенную меткой. Когда метка найдена, выполнение продолжается со следующей за ней строки. call :метка [аргументы] :метка Указывает метку, на которую должно быть передано управление программы пакетной обработки. При использовании команды call с этим параметром создается новый контекст пакетного файла, а управление передается инструкции, следующей за указанной меткой. Когда первый раз встречается конец пакетного файла (после перехода на метку), управление возвращается на инструкцию, следующую за инструкцией call. При втором достижении конца файла выполнение пакетной программы прекращается. Команда goto :eof позволяет возвращать управление из пакетной программы. аргументы Задает данные командной строки, которые передаются в новый экземпляр программы пакетной обработки, начинающейся с :метки, включая параметры командной строки, имена файлов, пакетные параметры (в диапазоне от %1 до %9) или переменные (например %filename%). Код:
Код:
Запускаем FAR ― жмем на F9 -> "Команды" -> "Ассоциации файлов" -> F4 -> "Маска файла" -> Набираем "*.asm" -> "Команда, выполняемая по Enter" -> Набираем "call asm.bat !" Последний раз редактировалось Mikl___; 08.04.2011 в 05:06. |
08.04.2011, 04:36 | #7 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
ниже полное содержание asm.bat, который я использую на своем компьютере
Код:
|
08.04.2011, 08:08 | #8 |
Форумчанин
Регистрация: 24.03.2009
Сообщений: 375
|
офигеть!!!!!!!!!!!!!!!
|
13.04.2011, 08:58 | #10 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
_PROGRAMM_
Не зная содержимого amake.bat как я могу сказать правильно "amake |11" или не правильно? |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
masm | Serjuk | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 02.02.2011 12:44 |
Компилирование .jar и .exe в java | Яр|/||< (^_^) | Общие вопросы по Java, Java SE, Kotlin | 5 | 13.10.2009 19:13 |
Компилирование проекта на Delphi в ассемблер | Legat | Общие вопросы Delphi | 3 | 10.04.2009 16:07 |
Компилирование для другой ОС | Лубышев | Помощь студентам | 2 | 21.01.2008 20:07 |