В данной статье я попытаюсь описать, как создать свою небольшую IDE для написания программ на Ассемблере. На самом деле приведённый способ можно использовать не только для Ассемблера, он годится и для любого языка, но мне в своё время оказалось нужным сделать это именно для Ассемблера.
Прежде всего, определимся с инструментарием. В качестве текстового редактора мы будем использовать Notepad++. В нём, как мне кажется, есть масса средств, которые позволяют комфортно работать с большинством языков программирования. В качестве компилятора с языка ассемблера будем использовать TASM, но тут уже дело вкуса, можно использовать тот, который Вам приходится по душе. В примерах использована версия TASM 4.1, но можно использовать и более свежую. Что касается запуска программ, то мы это будем делать в эмуляторе DOS, который называется DosBox. Те, кто любит старые игры под DOS наподобие Dangerous Dave In The Haunted Mansion наверняка слышали о такой программе. Причины её использования следующие:
1. При запуске 16-разрядных приложений в DosBox производительность системы остаётся на достаточном уровне, чтобы можно было с ней работать и процессор не загружался лишь процессом ntvdm.exe. Этот процесс является встроенной виртуальной машиной в Windows, чтобы можно было запускать приложения DOS;
2. Этот эмулятор является, как мне показалось, довольно простым в обращении.
3. Данный эмулятор распространяется свободно. Думаю, что это является его плюсом, хотя возможно найдутся те, кто со мной не согласится.
Вообще, я впервые задумался о запуске программ, написанных на Ассемблере, под DosBox, когда в лабораторной нужно было вывести на внутренний динамик некоторый звук, сигнализирующий об ошибке. У меня на компьютере этот динамик не работает, однако запустив DosBox я понял, что можно обойтись и без него. DosBox воспроизвёл звук, значение которого подавалось в порт на внешнем динамике.
Вместо DosBox можно использовать также виртуальные машины, такие как VMWare и VirtualBox. Но при этом у вас должен быть образ реальной системы DOS.
И ещё одна оговорка. Старайтесь использовать как можно более свежие версии DosBox. На одной из старых версий у меня были проблемы с отладкой программы на Ассемблере в Turbo Debbuger. Из памяти в регистр пересылались совершенно не те данные. Обновив DosBox до самой свежей версии, я снова запустил отладчик и всё прошло как по маслу. Поэтому, следите за свежими версиями программы.
Думаю, на этом можно закончить с инструментарием и перейти к нашей задаче. Нашей целью будет являться автоматизация компиляции и сборки программ, написанных на языке ассемблера с возможностью последующей отладки или запуска. Сделать это мы хотим так, чтобы нам не пришлось самим запускать отладчик и загружать туда программу. Стремимся к наиболее автоматизированной системе.
Начнём с того, что нам нужен плагин для Notepad++, который называется NppExec. Скачать его можно с сайта проекта. Инструкция по установке прилагается. Также имеется руководство пользователя. Данный плагин служит для интерпретации команд, которые поступают от Notepad++. По сути это интерпретатор команд, однако не стоит его путать с интерпретатором командной строки.
Для установки плагина выбираем Settings -> Import -> Import plugin(s)… и выбираем нужную DLL. Возможно после этого придётся перезапустить Notepad++, чтобы плагин стал доступен. Если данный способ не сработал, то можно просто скопировать данную DLL в каталог plugins директории, куда был установлен Notepad++.
Если всё получилось с установкой плагина, то перейдём к его использованию. Для этого выберем пункт меню Plugins -> NppExec ->Execute. Можно просто нажать F6. Вы увидите окно, представленной на картинке.
В данном окне Вы можете ввести одну или несколько команд и, нажав OK выполнить их. Подробно описывать синтаксис данного интерпретатора я здесь не буду, приведу лишь значения основных констант, чтобы Вы могли разобраться в работе данных скриптов.
$(FULL_CURRENT_PATH) - полный путь к редактируемому файлу, включая его имя и расширение. Например, C:/MyFiles/TextFile.txt.
$(CURRENT_DIRECTORY) – директория, в которой находится редактируемый файл. Например, C:/MyFiles.
$(NAME_PART) – имя файла без расширения. Например, TextFiles.
Советую использовать отдельный каталог для проектов на Ассемблере. Не стоит использовать длинные пути для данных проектов, у меня TASM их не воспринимал. Возможно из-за довольно старой версии.
Ещё один нюанс. Не забудьте добавить директорию с TASM в переменную среды PATH. В данной директории находятся приложения tasm, tlink и td, которые нам необходимы для компиляции, сборки и отладки программы соответственно. Однако td мы будем вызывать из DosBox, поэтому путь к нему придётся указать вручную при запуске DosBox.
Ну и разумеется стоит сохранить данные скрипты. Делается это нажатием кнопки Save… в том же самом окне Execute. Имя можете выбрать произвольное.
Итак, теперь код самих скриптов.
Скрипт AsmTasmDosBox:
NPP_SAVE
cmd /c del "$(CURRENT_DIRECTORY)\$(NAME_PART).map"
cmd /c del "$(CURRENT_DIRECTORY)\$(NAME_PART).lst"
cmd /c del "$(CURRENT_DIRECTORY)\$(NAME_PART).obj"
cmd /c del "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
cmd /c tasm $(FULL_CURRENT_PATH) $(CURRENT_DIRECTORY)\$(NAME_PART).obj, $(CURRENT_DIRECTORY)\$(NAME_PART).lst
cmd /c tlink $(CURRENT_DIRECTORY)\$(NAME_PART).obj
"C:\Program Files\DosBox-0.74\dosbox.exe" "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" -exit
Скрипт AsmTDDosBox:
NPP_SAVE
cmd /c del "$(CURRENT_DIRECTORY)\$(NAME_PART).map"
cmd /c del "$(CURRENT_DIRECTORY)\$(NAME_PART).lst"
cmd /c del "$(CURRENT_DIRECTORY)\$(NAME_PART).obj"
cmd /c del "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
cmd /c tasm $(FULL_CURRENT_PATH) $(CURRENT_DIRECTORY)\$(NAME_PART).obj, $(CURRENT_DIRECTORY)\$(NAME_PART).lst
cmd /c tlink $(CURRENT_DIRECTORY)\$(NAME_PART).obj
"C:\Program Files\DOSBox-0.74\dosbox.exe" -c "mount D: D:\Ucheba\Программирование\CompArch\_Soft\TASM\BIN" -c "mount C: \"$(CURRENT_DIRECTORY)\"" -c "D:" -c "td.exe C:\$(NAME_PART).exe"
В первом скрипте после окончания работы приложения DosBox сразу же закрывается, если Вам нужно сохранить окно эмулятора, например, для просмотра результатов вывода, то уберите в конце –exit.
Во втором скрипте в конце поменяйте директорию, где находится Turbo Debugger на ту, которая верна для вашей машины. В остальном можно ничего не менять. В именах директорий советую убрать пробелы, однако можно поработать с кавычками в данных скриптах и можно будет использовать пробелы.
Как Вы видите, данные скрипты выполняют схожую работу. Вначале они компилируют и собирают программу. Однако потом первый запускает эту программу, а второй запускает отладчик Turbo Debugger и загружает в него программу.
И это ещё не предел автоматизации. Не слишком удобно каждый раз в меню выбирать данный плагин, потом нажимать OK. Довольно много телодвижений, а нам хочется всё сделать побыстрее. Поэтому назначим нашим скриптам горячие клавиши.
В Notepad++ присвоение скрипту горячей клавиши выполняется предельно просто. Присвоим первому скрипту горячие клавиши Ctrl+F5, а второму Ctrl+F7.
Выбираем пункт меню Plugins -> NppExec -> Advanced Options… Вы увидите следующее окно.
В списке Associated script выбираем нужный нам скрипт. Поле Item можно не трограть. Нажимаем Add/Modify. Галочка Place to the Macros submenu позволяет добавить ваш плагин к списку пунктов в меню Macros. Закрываем это окно и перезапускаем Notepad++. Далее открываем пункт меню Settings -> Shortcut Mapper… Вы увидите окно редактирования горячих клавиш. Их довольно много, поэтому придётся самим следить, не занята ли выбранная Вами комбинация. Переходим на вкладку Plugin commands, в списке ищем имена наших плагинов, нажимаем Modify или дважды щёлкаем по имени плагина, и каждому присваиваем горячу клавишу.
Думаю, на этом можно завершить решение данной задачи. Многие люди делают примерно то же самое при помощи BAT-файлов. Для подобного решения плагин NppExec не потребуется, можно использовать меню Run -> Run или просто нажать клавишу F5, однако придётся самим заботится об именах файлов и их расположении, их можно передать в качестве параметра BAT-файлу.
Пожалуй, это всё, что я хотел написать на эту тему. Надеюсь изложение было не слишком сумбурным и статья окажется полезной. Удачи!
Комментариев нет:
Отправить комментарий