Notepad++ в качестве IDE для masm64

Тема в разделе "IDE. Интегрированные среды разработки", создана пользователем Mikl___, 23 мар 2023.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710
    Создаем простейшую IDE, в которой можно создавать/редактировать asm-/rc-файлы, компилировать, запускать и отлаживать exe-/sys-/dll-файлы.

    Установка Notepad++


    1. Отправляемся на https://notepad-plus-plus.org/.
    2. Жмем Download, выбираем нужный вариант (инсталлятор, zip-архив, 7z-архив, сверхмалый 7z-архив, откуда вырезано все лишнее), скачиваем.
      00.jpg
    3. Ставим Notepad++ через инсталлятор или распаковываем в нужное место из архива (смотря что выбрали).
    4. Если выбрали инсталлятор, во время установки, на странице выбора компонентов устанавливаемой программы выберите русскую локализацию.
      102.jpg
    5. Куда же без этого ;)
      144.jpg
    6. на ваш выбор
      145.jpg
    7. на ваш выбор, но лучше оставить как есть
      146.jpg
    8. Ярлык на рабочем столе (на ваш выбор). Если хотите установить Notepad++ на флэшку, запретите ему хранить настройки в %APPDATA%
      147.jpg
    9. На ваш выбор.
      148.jpg

    Настройка подсветки кода ассемблера masm и сворачивания блоков

    Подсветку синтаксиса я не нашел, пришлось ее делать самому, так что тапками не кидайтесь.
    1. Копируем файл masm.xml в ту папку, в которую мы установили (распаковали) Notepad++.
    2. Запускаем Notepad++.
    3. Идем в меню «Синтаксисы Задать свой синтаксис».
      00.jpg
    4. В открывшемся диалоге жмем кнопку «Импортировать», выбираем наш файл (masm.xml)
      100.jpg
    5. Получаем сообщение об успешном импорте. Теперь можно здесь же в списке «Пользовательский язык» выбрать «masm».
      00.jpg
    6. Обратите внимание на то, что установилась галочка «Любой регистр» (ключевые слова будут подсвечиваться независимо от того, в каком регистре набраны) и в поле «Расширение» появилось расширение «asm» (именно его принято использоваться для исходных текстов ассемблера masm). В принципе, с подсветкой все. В этом диалоге при желании потом можно покопаться и изменить подсветку по вашему вкусу.
    7. Для файлов с расширением «asm» подсветка должна теперь включаться автоматически. Для файлов с другим расширением эту подсветку можно подключить, выбрав ее в самом низу меню «Синтаксис» (появится только после перезапуска Notepad++).

    Объединяем Notepad++ с транслятором, линкером, hiew32, Resource hacker и x64dbg

    Сам по себе Notepad++ умеет запускать по клавише F5 сторонние программы с нужными параметрами, но этого маловато, ибо хотелось бы, чтобы и клавиш было побольше (одну на ассемблирование, другую на запуск, третью на ассемблирование и сразу запуск, четвертую на отладчик и т.п.). Хотелось бы видеть, что там в консоль компилятор написал, а то его окошко быстро исчезает. Можно пару bat-файлов написать, ждущих нажатия паузы. Но мы пойдем другим путем.
    1. Установить из меню Notepad++ плагин NppExec
    2. Плагин NppExec попадет в папку «plugins».
    3. После перезапуска Notepad++ в меню «Плагины» появиться пункт «NppExec», а на панели инструментов кнопка «Show NppExec Console»
      149.jpg
      .
    4. Жмем эту кнопку, появится окно консоли. В нем мы будем видеть все сообщения от нашего компилятора и линкера. Их запуск нам предстоит еще настроить.
    5. Напишем три простых скрипта. Первый будет компилировать проект с помощью ml64.exe и link.exe, второй запускать полученный exe-файл, третий скрипт будет делать и первое, и второе ("и компот" ;)).
    6. Начнем с первого. Идем в меню «Плагины NppExec Execute NppExec Script». Откроется диалог, в котором можно набрать небольшой скрипт и тут же его запустить. Мы его пока запускать не будем, но наберем следующий скрипт:
      Код (Text):
      1. cls
      2. npp_save
      3. set masm64=диск:\первый_каталог\второй_подкаталог\...
      4. cd "$(CURRENT_DIRECTORY)" \\меняем рабочую директорию
      5. NPE_CONSOLE local v+
      6. cmd /c if exist errors.txt del errors.txt
      7. cmd /c if exist $(NAME_PART).obj del $(NAME_PART).obj
      8. cmd /c if exist $(NAME_PART).exe del $(NAME_PART).exe
      9. cmd /c $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" $(FILE_NAME) >> errors.txt
      10. if $(EXITCODE) !=0 goto exit
      11. cmd /c if exist $(NAME_PART).rc @echo "Exists"
      12. if $(OUTPUT) !="Exists" goto nores
      13. cmd /c $(masm64)\bin\rc /r /i"$(masm64)\Include" $(NAME_PART).rc >> errors.txt
      14. if $(EXITCODE) !=0 goto exit
      15. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain /fixed /nocoffgrpinfo $(NAME_PART).obj $(NAME_PART).res /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
      16. if $(EXITCODE) !=0 goto exit
      17. cmd /c del errors.txt
      18. cmd /c del $(NAME_PART).obj
      19. cmd /c del $(NAME_PART).res
      20. exit
      21. :nores
      22. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain $(NAME_PART).obj /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
      23. if $(EXITCODE) !=0 goto exit
      24. cmd /c del errors.txt
      25. cmd /c del $(NAME_PART).obj
      26. exit
      27. :exit
      28. con_loadfrom errors.txt
    7. Скрипт готов. Теперь логично его сохранить. Жмем «Save...». Вводим имя нашего первого скрипта, например, «Complie». Снова жмем «Save».
    8. Выберем в списке <temporary script>, окошко очистится, и наберем в нем следующее:
      Код (Text):
      1. cmd /c $(NAME_PART).exe
      Здесь все аналогично первому скрипту.
    9. Аналогично пункту #7 сохраним скрипт под именем «Run»
    10. Действуя, как в пункте #8, наберем скрипт «Сохранение+Запуск»
      Код (Text):
      1. cls // очищаем консоль NppExec
      2. npp_save
      3. set masm64=диск:\первый_каталог\второй_подкаталог\...
      4. cd "$(CURRENT_DIRECTORY)" \\меняем рабочую директорию
      5. NPE_CONSOLE local v+
      6. cmd /c if exist errors.txt del errors.txt
      7. cmd /c if exist $(NAME_PART).obj del $(NAME_PART).obj
      8. cmd /c if exist $(NAME_PART).exe del $(NAME_PART).exe
      9. cmd /c $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" $(FILE_NAME) >> errors.txt
      10. if $(EXITCODE) !=0 goto exit
      11. cmd /c if exist $(NAME_PART).rc @echo "Exists"
      12. if $(OUTPUT) !="Exists" goto nores
      13. cmd /c $(masm64)\bin\rc /r /i"$(masm64)\Include" $(NAME_PART).rc >> errors.txt
      14. if $(EXITCODE) !=0 goto exit
      15. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain /fixed /nocoffgrpinfo $(NAME_PART).obj $(NAME_PART).res /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
      16. if $(EXITCODE) !=0 goto exit
      17. cmd /c del $(NAME_PART).res
      18. goto run
      19. :nores
      20. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain $(NAME_PART).obj /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
      21. if $(EXITCODE) !=0 goto exit
      22. :run
      23. cmd /c del errors.txt
      24. cmd /c del $(NAME_PART).obj
      25. cmd /c $(NAME_PART).exe
      26. exit
      27. :exit
      28. con_loadfrom errors.txt
      Тут все понятно, это два предыдущих скрипта вместе.
      Сохраним скрипт под именем «Complie and Run».
      Скрипты готовы, теперь хотелось бы, чтобы они были под рукой. Для чего идем в меню «Плагины → NppExec → Advanced Options...».
    11. В группе «Menu items» устанавливаем галочку на «Place to the Macros submenu».
      Ниже в группе «Menu item», вводим имена пунктам меню и выбираем скрипты, которые они буду запускать. Например, в «Item name» введем «Компиляция», в списке «Associated script» выберем «Compile». Не забудем нажать кнопку «Add/Modify». Добавленный пункт появится в списке сверху. После создания пунктов меню для всех наших трех скриптов, их порядок расположения можно поменять кнопками «Move Up» и «Move down». Закрываем этот диалог. Notepad++ сообщит о необходимости перезапуска. Перезапустим его. В меню «Макросы» появились наши макросы. Поговорим о горячих клавишах. Действуем дальше.
    12. Идем в меню «Опции → Горячие клавиши...». На вкладке «Plugin commands» ищем наши Макросы, жмем «Modify» или кликаем 2 раза по строке с макросом, задаем горячую клавишу. Заданы клавиши F9, F10 и Shift+F10 для всех трех макросов.

    Запуск hiew32 и exe-файла

    Код (Text):
    1. cls
    2. set masm64=диск:\первый_каталог\второй_подкаталог\...
    3. cd "$(CURRENT_DIRECTORY)"
    4. npp_run  $(MASM64)\bin\hiew32.exe $(NAME_PART).exe

    Запуск Resource hacker и exe-файла

    Код (Text):
    1. cls
    2. set masm64=диск:\первый_каталог\второй_подкаталог\...
    3. cd "$(CURRENT_DIRECTORY)"
    4. npp_run $(masm64)\ResourceHacker\ResHacker $(NAME_PART).exe

    Запуск x64dbg и exe-файла

    Код (Text):
    1. cls
    2. set masm64=диск:\первый_каталог\второй_подкаталог\...
    3. npp_run $(masm64)\x64\x64dbg "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
    Макросы-скрипты готовы, теперь можно собрать какой-нибудь простенький проект и попробовать всё, что мы написали на практике. Можно видеть, как при компиляции в окне консоли внизу компилятор или линкер выдает ошибки, указывая имя файла и строку, но их не удобно искать среди нескольких файлов проекта.

    Настройка переходов на строки содержащие ошибки в asm-файле из консоли NppExec

    Если asm-файл содержит ошибки, тогда компилятор в файле errors.txt создает подобные строки:
    tut_05b-1.asm(11) : error A2006:undefined symbol : LoadCursorFromFile

    Название файла(номер строки с ошибкой) : тип ошибки
    Нажимаем Меню «Плагины NppExec Console Output Filters...». На вкладке «Highlight» задаем следующую маску "%FILE%(%LINE%): error: ". Устанавливаем галочку для нее. А также цвет (например красный) и стиль шрифта. Жмем «OK». Снова пытаемся откомпилировать наш исходник с ошибкой. Строки с ошибками выделены выбранным цветом. Два раза щелкаем по строке с ошибкой мышью. Удобно :boast:.
    101.jpg
    cls — аналогично команде BAT/CMD, очистить консоль NppExec
    npp_save — внутренняя команда Notepad++, сохранить текущий файл
    cd "$(CURRENT_DIRECTORY)"cd аналогично команде BAT/CMD, перейти в указанную директорию
    "$(CURRENT_DIRECTORY)" — внутренняя переменная с текущей директорией. Текущей директорией считается та, где сохранен файл, открытый в активной вкладке редактора (файл, который редактируем).
    set переменная = строка — аналогично команде BAT/CMD, задает значение переменной равной строке
    cmd /c $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" $(FILE_NAME) >> errors.txt отправляем наш проект на компиляцию, $(FILE_NAME) — полное имя файла без пути, например, hello.asm, если этот файл открыт на активной вкладке редактора.
    if $(EXITCODE) !=0 goto exit — команды if и goto работают также, как и в BAT/CMD-файлах.
    $(EXITCODE) — внутренняя переменная, получающая код возврата ранее вызванного приложения. Аналог %ERRORLEVEL% в BAT/CMD. Вызванный компилятор завершается с кодом 0, если компиляция прошла успешно. Если $(EXITCODE) не нулевой — перейдем на метку :error, имя метки начинается с двоеточия «:»
    cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain $(NAME_PART).obj /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe отвечает за линковку.
    $(NAME_PART) — внутренняя переменная, содержащая имя файла без расширения и точки. Если на активной вкладке открыт файл hello.asm — переменная $(NAME_PART) содержит значение hello.
    npp_run <программа> — внутренняя команда Notepad++ для запуска какой-либо программы как внешний процесс по отношению к NppExec
    con_loadfrom <file> — внутренняя команда Notepad++ загрузить содержимое файла <file> в консоль NppExec
    exit — завершить текущий сеанс CMD
    При запуске плагин запоминает последний выполненный скрипт, и при новом запуске по F6 он уже будет открыт в окне NppExec
    При выполнении скрипта откроется окно консоли, в котором можно наблюдать за ходом его выполнения.
    NppExec хранит скрипты в каталоге C:\Users\<username>\Application Data\Notepad++\plugins\config\
    <username> — имя пользователя.
    В файлах npes_last.txt — хранится последний использованный скрипт, в npes_saved.txt — хранятся все скрипты.
     
    Application, GRAFik и mantissa нравится это.
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710

    Notepad++. Общие действие с файлами и вкладками (меню "Файл")

    103.jpg
    Ctrl+N — создать новый файл
    Ctrl+O — открыть существующий
    Еще один способ открыть файл или группу файлов — перетащить их на редактор. Если перетащить папку, то та развернется в окне "Folder as Workspace".
    Ctrl+S — сохранить изменения
    Ctrl+Shift+S — сохранить изменения в новый файл. В результате то, что мы редактируем, этим самым файлом и становится, а первоначальный файл остаётся лежать на диске нетронутым. По умолчанию используется чуть другая комбинация, то предпочитаю изменить по образцу других приложений.
    Ctrl+W — закрыть текущую вкладку
    Ctrl+Shift+W — закрыть все вкладки. В окне редактора остаётся чистый файл.
    Можно закрыть все вкладки слева или справа от текущей. Сделайте правый щелчок на вкладке файла и выберите команду из контекстного меню.
    Чтобы закрыть вкладку, достаточно щёлкнуть по ней средней кнопкой мыши.
    Удалить файл в корзину — файл сразу же направляется в мусорную корзину
    Открыть последний закрытый файл — если случайно закрыли нужную вкладку, то ее можно сразу восстановить, нажав Ctrl+Shift+T (Restore Recent Closed File).
    Если хотите открыть один из недавних файлов, то можно щёлкнуть на нём в истории файлов.
    Alt+F4 — закрыть программу

    Notepad++. Контекстное меню на панели вкладок

    104.jpg
    Редактор может располагать редактируемые файлы в двух рабочих областях. Чтобы переместить файл в другую область, щелкните по его вкладке правой кнопкой мыши и в открывшемся диалоговом окне выберите "Move to Other View" или "Clone to Other View". Аналогичным образом можно переместить файл в новый экземпляр программы.Другие возможности контекстного меню, вызываемого на панели вкладок:
    • Закрытие Вкладок — Закрытие всех вкладок кроме текущей или только справа/слева от нее. 106.jpg
    • Переименовать... — переименование файла. При этом открывается окно "Сохранить как..." (что может ввести в заблуждение). В окне вводите новое имя. Файл со старым названием после этого исчезает.
    • Обновить с диска — перезагрузка файла с копии на винчестере. Тоже самое, что и в меню Файл Обновить с диска.
    • Открытие папку файла — Открытие папки, в которой находится файл, в Проводнике и в cmd (Command Prompt).
    • "Только Чтение" файла — временная защита файла от случайных изменений в редакторе (к примеру, от автозамены)
    • Снять "Только Чтение" — если редактируемый файл имеет флаг "Только для чтения", то его можно убрать напрямую из редактора. Но не поставить обратно.
    • Копировать в буфер — Помещение в буфер обмена полного адреса файла или его части

    Перемещение между вкладками

    Самый очевидный способ переключаться между вкладками — щелчки и перетаскивания мышкой. Перемещаться можно и через клавиатуру:
    • Ctrl+PgDn/PgUp — активировать следующую/предыдущую вкладку.
    • Ctrl+Shift+PgDn/PgUp — переместить активную вкладку среди других вправо/влево.
    • F8 (ВидFocus on Another View) — переброс фокуса на другую рабочую область ('View')
    • Ctrl+Tab — вывод на экран контекстного меню со списком всех открытых вкладок. Преимущества: конденсируются файлы из обеих рабочих областей и показываются полные пути.

    Notepad++. Манипуляции с текстом (Меню "Правка")

    107.jpg
    Если нужно передвинуть некоторый текст — выделите его, зажмите левую кнопку мышки и перенесите на новое место. Если копировать — удерживайте нажатой клавишу Ctrl. Можно использовать программируемую мышку и настроите свободные клавиши на вырезание, копирование и вставку.
    Для выделения слова сделайте двойной щелчок по нему. Для выделения абзаца — трижды. Если требуется выделить всё содержимое внутри скобок, двойной щелчок внутри скобок при зажатой Ctrl. Скобки выступают в роли ограничителей (delimiter), тип ограничителей можно изменить на PreferencesDelimiter.
    Ctrl+Shift+←/→ — перемещение влево/вправо на одно слово
    Ctrl+Shift+←/→ — перемещение с выделением
    Ctrl+[/] — перемещение на один абзац вверх/вниз. Если зажата Shift, то с выделением.
    Home/End — перемещение в начало/конец текущей строки (c Shift выделение). Если нажимаем одну Home — курсор устанавливается после отступов, а если Alt+Home, тогда перепрыгивает в абсолютное начало строки.
    Ctrl+Home/End — в начало/конец всего кода
    Alt+Shift+↑/↓ — задание прямоугольной зоны редактирования. Позволяет одновременно редактировать несколько соседних строк (попробуйте, чтобы понять). При использовании мышки прямоугольную зону можно задать, если предварительно зажать Alt.
    Ctrl+левый_щелчок — мультиредактирование. Установка нескольких кареток, что позволяет одновременно редактировать несколько мест. (Для использования должна быть активирована опция Preferences>Editing→Multi-Editing Settings)
    Ctrl+↑/↓ — вертикальное перемещение кода внутри окна (сложные слова, но элементарная вещь, если попробуете). Курсор, остаётся на том же месте кода, пока не достигнет границы.
    Ctrl+Z — отменить последнее действие
    Ctrl+Y — повторить только что отменённое действие
    Ctrl+X, Ctrl+C, Ctrl+V — вырезать, копировать, вставить
    Del и BackSpace — удалить
    Ctrl+BackSpace/Del — удаления слова впереди/сзади
    Ctrl+Shift+BackSpace/Del — удаление до начала/конца строки
    Ctrl+A — выделить всё
    Ctrl+Shift+↑/↓ — перемещение строки (или группы строк) вверх/вниз относительно других
    Ins — вставка символа / замена символа. Все об этой штуке знают, но подавляющее большинство на практике забывает.
    Изменить режим можно и щелчком мыши на крайний правый пункт строки состояния:

    Строка состояния редактора Notepad++

    108.jpg Begin/End Select — задание выделения. Когда в первый раз щёлкаете по ней, то позиция курсора запоминается, это будет началом выделения. Когда щёлкаете второй раз, то текущее положение курсора обозначается как его конец.
    Tab — если курсор стоит в строке или выделяет часть строки, то в этом месте ставится знак табуляции (отступ). Если курсор выделяет несколько строк — тогда нажатие на Tab приводит к их отступу вправо (технически перед строками ставится знак табуляции). Это удобная команда для изменения уровня вложенности. Shift+Tab при выделении нескольких строк совершает обратное действие, сдвигая всё содержимое влево.

    подменю копирования в буфер

    109.jpg
    Копировать в буфер — Помещение в буфер обмена полного адреса файла или его части

    Подменю изменения регистра символов

    111.jpg
    Преобразование регистра — операции изменения регистров символов. В том числе
    Ctrl+Shift+U (ПРОПИСНЫЕ) — сделать буквы прописными (заглавными)
    Ctrl+U (строчные) — строчными

    подменю операций со строками

    110.jpg
    Ctrl+D — дублировать текущую строку
    Ctrl+I (Разбить строки) — работает только если выключена функция Word wrap. Команда разбивает текущую длинную строку на несколько коротких, исходя из ширины окна редактора. Может пригодиться в редких случаях.
    Ctrl+J (Объединить строки) — объединение нескольких строк в одну

    Тонкости добавления новой строки

    При нажатии на Enter создаётся новая строка с отступом, равным имеющемуся в текущей.
    При нажатии Shift+Enter создаётся новая строка без отступа.
    Ctrl+Alt+Shift+Enter — полезное сокращение, как если бы нажали на End (курсор перемещается в конец текущей строки), а далее на Shift+Enter.

    Существует несколько видов сортировки строк на тот случай, если используете файл в качестве простейшей базы данных.

    подменю работы с комментариями

    112.jpg
    Comment/Uncomment — работа с комментариями. Существуют 2 вида комментариев: строчные и блоковые. Если вас не устроили горячие клавиши, предложенные разработчиками — их можно переназначить.
    Комментирование строки (вкл/выкл) (Ctrl+Q)
    Раскомментировать строку (Ctrl+Shift+K)
    Закомментировать выделенное (Alt+Q)
    Раскомментировать выделенное (Alt+Shift+Q)
    Переключить комментирование строки (Ctrl+Alt+Shift+Q)
    — рабочие строки кода прячутся внутри комментариев, а закомментированные становятся рабочими. В том числе если располагаются вперемешку.

    подменю автозавершений

    114.jpg
    Auto-Completion — автозавершение.
    Ctrl+Пробел — вывод окна с вариантами, из которых можно выбрать.
    Ctrl+Enter — моментальная подстановка наиболее часто используемой команды, начинающейся с напечатанных букв.
    Вместо того, чтобы полностью прописывать 'getElementById' (с большой вероятностью ошибиться), проще напечатать 'getE' и нажать Ctrl+Enter. Но если нужно 'getElementsByClassName', то после 'getE' нажимается Ctrl+Пробел и выбирается вариант.

    В пункте меню PreferencesAuto-Completion можно выбрать, будет ли меню с подсказками постоянно выскакивать под рукой или появляться только после Ctrl+Пробел. Там же можно выбрать, будут ли автоматически выставляться парные скобки и html-теги.
    главное меню - вкладка Автозавершение

    подменю работы с пробелами

    115.jpg
    Blank Operations — операции с символами пробелов и знаками табуляций. Команды данного подменю действуют разом на весь файл.
    (Прежде чем выкладывать финальный вариант файла в интернет, рекомендуется очистить его от излишних завершающих пробелов.)

    подменю Специальной Вставки

    116.jpg
    Особые режимы вставки — Могут быть полезны только для специфических задач, а в общем случае бессмысленны.

    подменю операций с выделенным текстом

    117.jpg
    On Selection — некоторые операции с выделенным текстом:
    • Если в тексте имеется ссылка на файл, то можно сразу открыть его в Notepad++. Поставьте курсор внутрь и выберите команду Открыть Файл. Если эта операция требуется часто, тогда поместите её в контекстное меню или назначьте горячую клавишу.
    • Если хотите открыть веб адрес, приведенный в документе. Ни в какое меню заходить не нужно, просто дважды щелкните по ссылке.
    • Открыть папку Файла — команда может оказаться полезной лишь для решения редких специфических задач. Прописанный в папке путь должен быть абсолютный, начиная с буквы диска. И этот путь нужно полностью выделить.
    • Поиск в Интернете — отправляет выделенную фразу в поисковую систему Google. Поисковую систему можно изменить в настройках (вкладка Search Engine).

    окно Генератора столбца

    118.jpg
    Вертикальное выделение — рудимент от первых версий редактора. Служит для того, чтобы проинформировать пользователя, что в Notepad++ существует режим вертикального выделения. Переход в режим осуществляется клавишами Alt+Shift+↑/↓ и зажатием Alt перед щелчком мыши. Этот пункт меню сам по себе ничего не делает.

    Column Editor (Alt+C) — "генератор столбца". Позволяет вставить в столбец, пересекающий множество строк, одинаковый текст или цифровую последовательность. Например, дописать расширение файла или пронумеровать строки.

    окно таблицы ASCII символов

    119.jpg
    Character Panel — таблица ASCII символов. Позволяет вставлять в документ некоторые нестандартные вещи вроде ƒ ½ ± © €. Щёлкните по символу и он появится в документе.

    панель истории буфера обмена

    Clipboard History — панель истории буфера обмена. Позволяет скопировать на отдельную панель несколько текстовых фрагментов, а потом вставлять их в нужные места. Функционал минимален.
    Вместо этой панели рекомендуется использовать плагин MultiClipboard, предоставляющий дополнительные возможности. К примеру, редактирование фрагментов, выборочное удаление и сохранение между сессиями.
    панель плагина MultiClipboard
    "Только Чтение" файла — временная защита файла от случайных изменений в редакторе
    Снять "Только Чтение" — если редактируемый файл имеет флаг "Только для чтения", то его можно убрать напрямую из редактора. Но не поставить обратно.
     
    Последнее редактирование: 25 мар 2023
    GRAFik нравится это.
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710

    Содержимое masm.xml

    Код (Text):
    1. <NotepadPlus>
    2.     <UserLang name="masm" ext="asm inc" udlVersion="2.1">
    3.         <Settings>
    4.             <Global caseIgnored="yes" allowFoldOfComments="yes" foldCompact="no" forcePureLC="0" decimalSeparator="0" />
    5.             <Prefix Keywords1="no" Keywords2="no" Keywords3="no" Keywords4="no" Keywords5="no" Keywords6="no" Keywords7="no" Keywords8="no" />
    6.         </Settings>
    7.         <KeywordLists>
    8.             <Keywords name="Comments">00; 01 02 03 04</Keywords>
    9.             <Keywords name="Numbers, prefix1"></Keywords>
    10.             <Keywords name="Numbers, prefix2"></Keywords>
    11.             <Keywords name="Numbers, extras1">A B C D E F a b c d e f</Keywords>
    12.             <Keywords name="Numbers, extras2">A B C D E F</Keywords>
    13.             <Keywords name="Numbers, suffix1">h</Keywords>
    14.             <Keywords name="Numbers, suffix2">b o y h</Keywords>
    15.             <Keywords name="Numbers, range"></Keywords>
    16.             <Keywords name="Operators1">+ - / * = &lt; &gt; ( ) [ ] : , | &amp; ~ # ` \</Keywords>
    17.             <Keywords name="Operators2"></Keywords>
    18.             <Keywords name="Folders in code1, open"></Keywords>
    19.             <Keywords name="Folders in code1, middle"></Keywords>
    20.             <Keywords name="Folders in code1, close"></Keywords>
    21.             <Keywords name="Folders in code2, open">proc</Keywords>
    22.             <Keywords name="Folders in code2, middle"></Keywords>
    23.             <Keywords name="Folders in code2, close">endp</Keywords>
    24.             <Keywords name="Folders in comment, open"></Keywords>
    25.             <Keywords name="Folders in comment, middle"></Keywords>
    26.             <Keywords name="Folders in comment, close"></Keywords>
    27.             <Keywords name="Keywords1">aaa aad aam aas adc adcx add addpd addps addsd addss addsubpd addsubps adox aesdec aesdeclast aesenc aesenclast aesimc aeskeygenassist and andn andnpd andnps andpd andps arpl bextr blcfill blci blcic blcmsk blcs blendpd blendps blendvpd blendvps blsfill blsi blsic blsmsk blsr bnd bndcl bndcn bndcu bndldx bndmk bndmov bndstx bound bsf bsr bswap bt btc btr bts bzhi call cbw cdq cdqe clac clc cld cldemote clflush clflushopt clgi cli clrssbsy clts clwb clzero cmc cmova cmovae cmovb cmovbe cmovc cmove cmovg cmovge cmovl cmovle cmovna cmovnae cmovnb cmovnbe cmovnc cmovne cmovng cmovnge cmovnl cmovnle cmovno cmovnp cmovns cmovnz cmovo cmovp cmovpe cmovpo cmovs cmovz cmp cmpeqpd cmpeqps cmpeqsd cmpeqss cmplepd cmpleps cmplesd cmpless cmpltpd cmpltps cmpltsd cmpltss cmpneqpd cmpneqps cmpneqsd cmpneqss cmpnlepd cmpnleps cmpnlesd cmpnless cmpnltpd cmpnltps cmpnltsd cmpnltss cmpordpd cmpordps cmpordsd cmpordss cmppd cmpps cmps cmpsb cmpsd cmpsq cmpss cmpsw cmpunordpd cmpunordps cmpunordsd cmpunordss cmpxchg cmpxchg16b cmpxchg8b comisd comiss cpuid cqo crc32 cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtpi2ps cvtps2dq cvtps2pd cvtps2pi cvtsd2si cvtsd2ss cvtsi2sd cvtsi2ss cvtss2sd cvtss2si cvttpd2dq cvttpd2pi cvttps2dq cvttps2pi cvttsd2si cvttss2si cwd cwde daa das dec div divpd divps divsd divss dppd dpps emms endbr32 endbr64 enter extractps extrq f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldenvd fldenvw fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnsaved fnsavew fnstcw fnstenv fnstenvd fnstenvw fnstsw fpatan fprem fprem1 fptan frndint frstor frstord frstorw frstpm fsave fsaved fsavew fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstenvd fstenvw fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fwait fxam fxch fxrstor fxrstor64 fxsave fxsave64 fxtract fyl2x fyl2xp1 getsec gf2p8affineinvqb gf2p8affineqb gf2p8mulb haddpd haddps hlt hsubpd hsubps icebp idiv imul in inc incsspd incsspq ins insb insd invoke insertps insertq insw int int1 int3 into invd invept invlpg invlpga invpcid invvpid iret iretd iretq iretw ja jae jb jbe jc jcxz je jecxz jg jge jl jle jmp jna jnae jnb jnbe jnc jne jng jnge jnl jnle jno jnp jns jnz jo jp jpe jpo jrcxz js jz kaddb kaddd kaddq kaddw kandb kandd kandnb kandnd kandnq kandnw kandq kandw kmovb kmovd kmovq kmovw knotb knotd knotq knotw korb kord korq kortestb kortestd kortestq kortestw korw kshiftlb kshiftld kshiftlq kshiftlw kshiftrb kshiftrd kshiftrq kshiftrw ktestb ktestd ktestq ktestw kunpckbw kunpckdq kunpckwd kxnorb kxnord kxnorq kxnorw kxorb kxord kxorq kxorw lahf lar lddqu ldmxcsr lds lea leave les lfence lfs lgdt lgs lidt lldt llwpcb lmsw loadall286 loadall386 lock lods lodsb lodsd lodsq lodsw loop loopd loope looped loopeq loopew loopne loopned loopneq loopnew loopnz loopnzd loopnzq loopnzw loopq loopw loopz loopzd loopzq loopzw lsl lss ltr lwpins lwpval lzcnt maskmovdqu maskmovq maxpd maxps maxsd maxss mcommit mfence minpd minps minsd minss monitor monitorx mov movapd movaps movbe movd movddup movdir64b movdiri movdq2q movdqa movdqu movhlps movhpd movhps movlhps movlpd movlps movmskpd movmskps movntdq movntdqa movnti movntpd movntps movntq movntsd movntss movq movq2dq movs movsb movsd movshdup movsldup movsq movss movsw movsx movsxd movupd movups movzx mpsadbw mul mulpd mulps mulsd mulss mulx mwait mwaitx neg nop not or orpd orps out outs outsb outsd outsw pabsb pabsd pabsw packssdw packsswb packusdw packuswb paddb paddd paddq paddsb paddsw paddusb paddusw paddw palignr pand pandn pause pavgb pavgusb pavgw pblendvb pblendw pclmulhqhdq pclmulhqhqdq pclmulhqlqdq pclmullqhdq pclmullqhqdq pclmullqlqdq pclmulqdq pcmpeqb pcmpeqd pcmpeqq pcmpeqw pcmpestri pcmpestrm pcmpgtb pcmpgtd pcmpgtq pcmpgtw pcmpistri pcmpistrm pcommit pdep pext pextrb pextrd pextrq pextrw pf2id pf2iw pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfnacc pfpnacc pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr phaddd phaddsw phaddw phminposuw phsubd phsubsw phsubw pi2fd pi2fw pinsrb pinsrd pinsrq pinsrw pmaddubsw pmaddwd pmaxsb pmaxsd pmaxsw pmaxub pmaxud pmaxuw pminsb pminsd pminsw pminub pminud pminuw pmovmskb pmovsxbd pmovsxbq pmovsxbw pmovsxdq pmovsxwd pmovsxwq pmovzxbd pmovzxbq pmovzxbw pmovzxdq pmovzxwd pmovzxwq pmuldq pmulhrsw pmulhrw pmulhuw pmulhw pmulld pmullw pmuludq pop popa popad popaw popcnt popd popf popfd popfq popfw popq popw por prefetch prefetchnta prefetcht0 prefetcht1 prefetcht2 prefetchw prefetchwt1 psadbw pshufb pshufd pshufhw pshuflw pshufw psignb psignd psignw pslld pslldq psllq psllw psrad psraw psrld psrldq psrlq psrlw psubb psubd psubq psubsb psubsw psubusb psubusw psubw pswapd ptest ptwrite punpckhbw punpckhdq punpckhqdq punpckhwd punpcklbw punpckldq punpcklqdq punpcklwd push pusha pushad pushaw pushd pushf pushfd pushfq pushfw pushq pushw pxor rcl rcpps rcpss rcr rdfsbase rdgsbase rdmsr rdmsrq rdpid rdpkru rdpmc rdpru rdrand rdseed rdsspd rdsspq rdtsc rdtscp rep repe repne repnz repz ret retd retf retfd retfq retfw retn retnd retnq retnw retq retw rol ror rorx roundpd roundps roundsd roundss rsm rsqrtps rsqrtss rstorssp sahf sal salc sar sarx saveprevssp sbb scas scasb scasd scasq scasw seta setae setalc setb setbe setc sete setg setge setl setle setna setnae setnb setnbe setnc setne setng setnge setnl setnle setno setnp setns setnz seto setp setpe setpo sets setssbsy setz sfence sgdt sha1msg1 sha1msg2 sha1nexte sha1rnds4 sha256msg1 sha256msg2 sha256rnds2 shl shld shlx shr shrd shrx shufpd shufps sidt skinit sldt slwpcb smsw sqrtpd sqrtps sqrtsd sqrtss stac stc std stgi sti stmxcsr stos stosb stosd stosq stosw str sub subpd subps subsd subss swapgs syscall sysenter sysexit sysexitq sysret sysretq t1mskc test tpause tzcnt tzmsk ucomisd ucomiss ud0 ud1 ud2 umonitor umwait unpckhpd unpckhps unpcklpd unpcklps useavx256 useavx512 vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vaesdec vaesdeclast vaesenc vaesenclast vaesimc vaeskeygenassist valignd valignq vandnpd vandnps vandpd vandps vblendmpd vblendmps vblendpd vblendps vblendvpd vblendvps vbroadcastf32x2 vbroadcastf32x4 vbroadcastf32x8 vbroadcastf64x2 vbroadcastf64x4 vbroadcastf128 vbroadcasti32x2 vbroadcasti32x4 vbroadcasti32x8 vbroadcasti64x2 vbroadcasti64x4 vbroadcasti128 vbroadcastsd vbroadcastss vcmpeq_ospd vcmpeq_osps vcmpeq_ossd vcmpeq_osss vcmpeq_uqpd vcmpeq_uqps vcmpeq_uqsd vcmpeq_uqss vcmpeq_uspd vcmpeq_usps vcmpeq_ussd vcmpeq_usss vcmpeqpd vcmpeqps vcmpeqsd vcmpeqss vcmpfalse_ospd vcmpfalse_osps vcmpfalse_ossd vcmpfalse_osss vcmpfalsepd vcmpfalseps vcmpfalsesd vcmpfalsess vcmpge_oqpd vcmpge_oqps vcmpge_oqsd vcmpge_oqss vcmpgepd vcmpgeps vcmpgesd vcmpgess vcmpgt_oqpd vcmpgt_oqps vcmpgt_oqsd vcmpgt_oqss vcmpgtpd vcmpgtps vcmpgtsd vcmpgtss vcmple_oqpd vcmple_oqps vcmple_oqsd vcmple_oqss vcmplepd vcmpleps vcmplesd vcmpless vcmplt_oqpd vcmplt_oqps vcmplt_oqsd vcmplt_oqss vcmpltpd vcmpltps vcmpltsd vcmpltss vcmpneq_oqpd vcmpneq_oqps vcmpneq_oqsd vcmpneq_oqss vcmpneq_ospd vcmpneq_osps vcmpneq_ossd vcmpneq_osss vcmpneq_uspd vcmpneq_usps vcmpneq_ussd vcmpneq_usss vcmpneqpd vcmpneqps vcmpneqsd vcmpneqss vcmpnge_uqpd vcmpnge_uqps vcmpnge_uqsd vcmpnge_uqss vcmpngepd vcmpngeps vcmpngesd vcmpngess vcmpngt_uqpd vcmpngt_uqps vcmpngt_uqsd vcmpngt_uqss vcmpngtpd vcmpngtps vcmpngtsd vcmpngtss vcmpnle_uqpd vcmpnle_uqps vcmpnle_uqsd vcmpnle_uqss vcmpnlepd vcmpnleps vcmpnlesd vcmpnless vcmpnlt_uqpd vcmpnlt_uqps vcmpnlt_uqsd vcmpnlt_uqss vcmpnltpd vcmpnltps vcmpnltsd vcmpnltss vcmpord_spd vcmpord_sps vcmpord_ssd vcmpord_sss vcmpordpd vcmpordps vcmpordsd vcmpordss vcmppd vcmpps vcmpsd vcmpss vcmptrue_uspd vcmptrue_usps vcmptrue_ussd vcmptrue_usss vcmptruepd vcmptrueps vcmptruesd vcmptruess vcmpunord_spd vcmpunord_sps vcmpunord_ssd vcmpunord_sss vcmpunordpd vcmpunordps vcmpunordsd vcmpunordss vcomisd vcomiss vcompresspd vcompressps vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtpd2qq vcvtpd2udq vcvtpd2uqq vcvtph2ps vcvtps2dq vcvtps2pd vcvtps2ph vcvtps2qq vcvtps2udq vcvtps2uqq vcvtqq2pd vcvtqq2ps vcvtsd2si vcvtsd2ss vcvtsd2usi vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvtss2usi vcvttpd2dq vcvttpd2qq vcvttpd2udq vcvttpd2uqq vcvttps2dq vcvttps2qq vcvttps2udq vcvttps2uqq vcvttsd2si vcvttsd2usi vcvttss2si vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtuqq2pd vcvtuqq2ps vcvtusi2sd vcvtusi2ss vdbpsadbw vdivpd vdivps vdivsd vdivss vdppd vdpps verr verw vexp2pd vexp2ps vexpandpd vexpandps vextractf32x4 vextractf32x8 vextractf64x2 vextractf64x4 vextractf128 vextracti32x4 vextracti32x8 vextracti64x2 vextracti64x4 vextracti128 vextractps vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vfmadd132pd vfmadd132ps vfmadd132sd vfmadd132ss vfmadd213pd vfmadd213ps vfmadd213sd vfmadd213ss vfmadd231pd vfmadd231ps vfmadd231sd vfmadd231ss vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsub132pd vfmaddsub132ps vfmaddsub213pd vfmaddsub213ps vfmaddsub231pd vfmaddsub231ps vfmaddsubpd vfmaddsubps vfmsub132pd vfmsub132ps vfmsub132sd vfmsub132ss vfmsub213pd vfmsub213ps vfmsub213sd vfmsub213ss vfmsub231pd vfmsub231ps vfmsub231sd vfmsub231ss vfmsubadd132pd vfmsubadd132ps vfmsubadd213pd vfmsubadd213ps vfmsubadd231pd vfmsubadd231ps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmadd132pd vfnmadd132ps vfnmadd132sd vfnmadd132ss vfnmadd213pd vfnmadd213ps vfnmadd213sd vfnmadd213ss vfnmadd231pd vfnmadd231ps vfnmadd231sd vfnmadd231ss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsub132pd vfnmsub132ps vfnmsub132sd vfnmsub132ss vfnmsub213pd vfnmsub213ps vfnmsub213sd vfnmsub213ss vfnmsub231pd vfnmsub231ps vfnmsub231sd vfnmsub231ss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfpclasspd vfpclassps vfpclasssd vfpclassss vfrczpd vfrczps vfrczsd vfrczss vgatherdpd vgatherdps vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vgatherqpd vgatherqps vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vgf2p8affineinvqb vgf2p8affineqb vgf2p8mulb vhaddpd vhaddps vhsubpd vhsubps vinsertf32x4 vinsertf32x8 vinsertf64x2 vinsertf64x4 vinsertf128 vinserti32x4 vinserti32x8 vinserti64x2 vinserti64x4 vinserti128 vinsertps vlddqu vldmxcsr vmaskmovdqu vmaskmovpd vmaskmovps vmaxpd vmaxps vmaxsd vmaxss vmcall vmclear vmfunc vminpd vminps vminsd vminss vmlaunch vmload vmmcall vmovapd vmovaps vmovd vmovddup vmovdqa vmovdqa32 vmovdqa64 vmovdqu vmovdqu8 vmovdqu16 vmovdqu32 vmovdqu64 vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntdqa vmovntpd vmovntps vmovq vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmptrld vmptrst vmread vmresume vmrun vmsave vmulpd vmulps vmulsd vmulss vmwrite vmxoff vmxon vorpd vorps vp4dpwssd vp4dpwssds vpabsb vpabsd vpabsq vpabsw vpackssdw vpacksswb vpackusdw vpackuswb vpaddb vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpaddw vpalignr vpand vpandd vpandn vpandnd vpandnq vpandq vpavgb vpavgw vpblendd vpblendmb vpblendmd vpblendmq vpblendmw vpblendvb vpblendw vpbroadcastb vpbroadcastd vpbroadcastmb2q vpbroadcastmw2d vpbroadcastq vpbroadcastw vpclmulhqhdq vpclmulhqlqdq vpclmullqhdq vpclmullqlqdq vpclmulqdq vpcmov vpcmpb vpcmpd vpcmpeqb vpcmpeqd vpcmpeqq vpcmpeqw vpcmpestri vpcmpestrm vpcmpgtb vpcmpgtd vpcmpgtq vpcmpgtw vpcmpistri vpcmpistrm vpcmpleb vpcmpled vpcmpleq vpcmpleub vpcmpleud vpcmpleuq vpcmpleuw vpcmplew vpcmpltb vpcmpltd vpcmpltq vpcmpltub vpcmpltud vpcmpltuq vpcmpltuw vpcmpltw vpcmpneqb vpcmpneqd vpcmpneqq vpcmpnequb vpcmpnequd vpcmpnequq vpcmpnequw vpcmpneqw vpcmpnleb vpcmpnled vpcmpnleq vpcmpnleub vpcmpnleud vpcmpnleuq vpcmpnleuw vpcmpnlew vpcmpnltb vpcmpnltd vpcmpnltq vpcmpnltub vpcmpnltud vpcmpnltuq vpcmpnltuw vpcmpnltw vpcmpq vpcmpub vpcmpud vpcmpuq vpcmpuw vpcmpw vpcomb vpcomd vpcomeqb vpcomeqd vpcomeqq vpcomequb vpcomequd vpcomequq vpcomequw vpcomeqw vpcomfalseb vpcomfalsed vpcomfalseq vpcomfalseub vpcomfalseud vpcomfalseuq vpcomfalseuw vpcomfalsew vpcomgeb vpcomged vpcomgeq vpcomgeub vpcomgeud vpcomgeuq vpcomgeuw vpcomgew vpcomgtb vpcomgtd vpcomgtq vpcomgtub vpcomgtud vpcomgtuq vpcomgtuw vpcomgtw vpcomleb vpcomled vpcomleq vpcomleub vpcomleud vpcomleuq vpcomleuw vpcomlew vpcomltb vpcomltd vpcomltq vpcomltub vpcomltud vpcomltuq vpcomltuw vpcomltw vpcomneqb vpcomneqd vpcomneqq vpcomnequb vpcomnequd vpcomnequq vpcomnequw vpcomneqw vpcompressb vpcompressd vpcompressq vpcompressw vpcomq vpcomtrueb vpcomtrued vpcomtrueq vpcomtrueub vpcomtrueud vpcomtrueuq vpcomtrueuw vpcomtruew vpcomub vpcomud vpcomuq vpcomuw vpcomw vpconflictd vpconflictq vpdpbusd vpdpbusds vpdpwssd vpdpwssds vperm2f128 vperm2i128 vpermb vpermd vpermi2b vpermi2d vpermi2pd vpermi2ps vpermi2q vpermi2w vpermil2pd vpermil2ps vpermilmo2pd vpermilmo2ps vpermilmz2pd vpermilmz2ps vpermilpd vpermilps vpermiltd2pd vpermiltd2ps vpermpd vpermps vpermq vpermt2b vpermt2d vpermt2pd vpermt2ps vpermt2q vpermt2w vpermw vpexpandb vpexpandd vpexpandq vpexpandw vpextrb vpextrd vpextrq vpextrw vpgatherdd vpgatherdq vpgatherqd vpgatherqq vphaddbd vphaddbq vphaddbw vphaddd vphadddq vphaddsw vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddw vphaddwd vphaddwq vphminposuw vphsubbw vphsubd vphsubdq vphsubsw vphsubw vphsubwd vpinsrb vpinsrd vpinsrq vpinsrw vplzcntd vplzcntq vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpmadd52huq vpmadd52luq vpmaddubsw vpmaddwd vpmaskmovd vpmaskmovq vpmaxsb vpmaxsd vpmaxsq vpmaxsw vpmaxub vpmaxud vpmaxuq vpmaxuw vpminsb vpminsd vpminsq vpminsw vpminub vpminud vpminuq vpminuw vpmovb2m vpmovd2m vpmovdb vpmovdw vpmovm2b vpmovm2d vpmovm2q vpmovm2w vpmovmskb vpmovq2m vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovswb vpmovsxbd vpmovsxbq vpmovsxbw vpmovsxdq vpmovsxwd vpmovsxwq vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpmovuswb vpmovw2m vpmovwb vpmovzxbd vpmovzxbq vpmovzxbw vpmovzxdq vpmovzxwd vpmovzxwq vpmuldq vpmulhrsw vpmulhuw vpmulhw vpmulld vpmullq vpmullw vpmultishiftqb vpmuludq vpopcntb vpopcntd vpopcntq vpopcntw vpor vpord vporq vpperm vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vprotb vprotd vprotq vprotw vpsadbw vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshldd vpshldq vpshldvd vpshldvq vpshldvw vpshldw vpshlq vpshlw vpshrdd vpshrdq vpshrdvd vpshrdvq vpshrdvw vpshrdw vpshufb vpshufbitqmb vpshufd vpshufhw vpshuflw vpsignb vpsignd vpsignw vpslld vpslldq vpsllq vpsllvd vpsllvq vpsllvw vpsllw vpsrad vpsraq vpsravd vpsravq vpsravw vpsraw vpsrld vpsrldq vpsrlq vpsrlvd vpsrlvq vpsrlvw vpsrlw vpsubb vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpsubw vpternlogd vpternlogq vptest vptestmb vptestmd vptestmq vptestmw vptestnmb vptestnmd vptestnmq vptestnmw vpunpckhbw vpunpckhdq vpunpckhqdq vpunpckhwd vpunpcklbw vpunpckldq vpunpcklqdq vpunpcklwd vpxor vpxord vpxorq vrangepd vrangeps vrangesd vrangess vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrcpps vrcpss vreducepd vreduceps vreducesd vreducess vrndscalepd vrndscaleps vrndscalesd vrndscaless vroundpd vroundps vroundsd vroundss vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vrsqrtps vrsqrtss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestpd vtestps vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper wait wbinvd wbnoinvd wrfsbase wrgsbase wrmsr wrmsrq wrpkru wrssd wrssq wrussd wrussq xabort xacquire xadd xbegin xchg xend xgetbv xlat xlatb xor xorpd xorps xrelease xrstor xrstor64 xrstors xrstors64 xsave xsave64 xsavec xsavec64 xsaveopt xsaveopt64 xsaves xsaves64 xsetbv xtest</Keywords>
    28.             <Keywords name="Keywords2">ah al ax bh bl bp bpl bx ch cl cs cx dh di dil dl dr0 dr1 dr2 dr3 dr4 dr5 dr6 dr7 dr8 dr9 dr10 dr11 dr12 dr13 dr14 dr15 ds dx eax ebp ebx ecx edi edx eip es esi esp fs gs k0 k1 k2 k3 k4 k5 k6 k7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 r8 r8b r8d r8l r8w r9 r9b r9d r9l r9w r10 r10b r10d r10l r10w r11 r11b r11d r11l r11w r12 r12b r12d r12l r12w r13 r13b r13d r13l r13w r14 r14b r14d r14l r14w r15 r15b r15d r15l r15w rax rbp rbx rcx rdi rdx rip rsi rsp si sil sp spl ss st st0 st1 st2 st3 st4 st5 st6 st7 tr0 tr1 tr2 tr3 tr4 tr5 tr6 tr7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31</Keywords>
    29.             <Keywords name="Keywords3">byte db dd df dp dq oword dt du dw dword file fword pword qword tbyte word xword yword zword</Keywords>
    30.             <Keywords name="Keywords4">far near short</Keywords>
    31.             <Keywords name="Keywords5">align assert break display dup end err label offset org ptr</Keywords>
    32.             <Keywords name="Keywords6">equ =</Keywords>
    33.             <Keywords name="Keywords7">common define forward include irp irps irpv local macro match postpone purge rept restore restruc reverse struc</Keywords>
    34.             <Keywords name="Keywords8">binary code coff console data discardable dll dynamic efi efiboot efiruntime elf elf64 entry executable export extrn fixups format gnuehframe gnurelro gnustack gui heap import interpreter large linkinfo linkremove ms ms64 mz native note notpageable nx pe pe64 public readable resource section segment shareable stack static use16 use32 use64 wdm writable writeable</Keywords>
    35.             <Keywords name="Delimiters">00&quot; 01 02&quot; 03&apos; 04 05&apos;</Keywords>
    36.         </KeywordLists>
    37.         <Styles>
    38.             <WordsStyle name="LINE COMMENTS" fgColor="008040" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    39.             <WordsStyle name="NUMBERS" fgColor="FF8000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    40.             <WordsStyle name="KEYWORDS1" fgColor="0000FF" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    41.             <WordsStyle name="KEYWORDS2" fgColor="0080FF" bgColor="FFFF80" fontStyle="1" nesting="0" />
    42.             <WordsStyle name="KEYWORDS3" fgColor="0080C0" bgColor="FFFFFF" fontStyle="1" nesting="0" />
    43.             <WordsStyle name="KEYWORDS4" fgColor="008040" bgColor="FFFFFF" fontStyle="3" nesting="0" />
    44.             <WordsStyle name="KEYWORDS5" fgColor="0080FF" bgColor="FFFFFF" fontStyle="1" nesting="0" />
    45.             <WordsStyle name="KEYWORDS6" fgColor="6F5C98" bgColor="FFFFFF" fontStyle="1" nesting="0" />
    46.             <WordsStyle name="KEYWORDS7" fgColor="8000FF" bgColor="FFFFFF" fontStyle="1" nesting="0" />
    47.             <WordsStyle name="KEYWORDS8" fgColor="FF8000" bgColor="FFFFFF" fontStyle="3" nesting="0" />
    48.             <WordsStyle name="FOLDER IN CODE1" fgColor="8000FF" bgColor="FFFFFF" fontStyle="1" nesting="0" />
    49.             <WordsStyle name="FOLDER IN CODE2" fgColor="0080FF" bgColor="FFFFFF" fontStyle="2" nesting="0" />
    50.             <WordsStyle name="DELIMITERS1" fgColor="676767" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    51.             <WordsStyle name="DELIMITERS2" fgColor="676767" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    52.             <WordsStyle name="DEFAULT" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    53.             <WordsStyle name="COMMENTS" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    54.             <WordsStyle name="OPERATORS" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    55.             <WordsStyle name="FOLDER IN COMMENT" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    56.             <WordsStyle name="DELIMITERS3" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    57.             <WordsStyle name="DELIMITERS4" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    58.             <WordsStyle name="DELIMITERS5" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    59.             <WordsStyle name="DELIMITERS6" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    60.             <WordsStyle name="DELIMITERS7" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    61.             <WordsStyle name="DELIMITERS8" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
    62.         </Styles>
    63.     </UserLang>
    64. </NotepadPlus>
     

    Вложения:

    • masm.zip
      Размер файла:
      6,3 КБ
      Просмотров:
      105
    Последнее редактирование: 28 мар 2023
    mantissa нравится это.
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710

    Поиск и замена (меню Search)

    120.jpg
    меню Поиск (Search)
    Выделяете слово — одинаковые с ним, сразу же подсветятся. Если такое поведение в какой-то момент мешает, то отключите на PreferencesHighlighting.
    Аналогичным образом подсвечиваются парные теги.
    Ctrl+F (Find) — поиск фрагмента текста.
    После нахождения первого совпадения можно закрыть окно поиска и переходить к другим вхождениям посредством F3 (Find Next) и Shift+F3 (Find Previous).

    окно стандартного поиска

    121.jpg
    Альтернативный способ задать поисковое выражение — выделить образец и нажать Ctrl+F3 (Select and Find Next). При этом сразу перескочите на следующее вхождение (или на предыдущее, если Ctrl+Shift+F3). Далее можно использовать одиночную F3.
    Поиск через комбинацию Ctrl+F3 регистронезависим. Если требуется учет регистра, тогда используйте "Find (Volatile) Next". По умолчанию команду запускает сочетание клавиш Ctrl+Alt+F3.

    окно поиска в файлах

    122.jpg
    Find in Files — поиск по всем файлам в директории, включая наложение на поиск фильтра. А также автозамена. Можно запустить через меню, но проще вызвать окно стандартного поиска и переключить вкладку.

    окно замены

    123.jpg
    Replace — замена. В подавляющем большинстве программ такое действие производится по Ctrl+R.
    Если попытаться найти все случаи совпадения в текущем документе или в некоторой группе документов (кнопки вида "Find All"), то будет сформировано окно результатов поиска. Между ним и основным окном редактора можно переключаться с помощь клавиши F7. Перемещение по результатам такого поиска осуществляется нажатиями F4 и Shift+F4.
    Поиск по F3 и F4 — вещи разные, сосуществующие параллельно, но порой происходит их слияние.
    Ctrl+Alt+I (Incremental Search) — поиск по мере набора. Осуществляется посредством поисковой строки, выводимой под редактором.
    Для многостроковых поиска и замены используйте плагин ToolBucket. Чтобы разрулить конфликт горячих клавиш, предлагается для данной функции использовать Ctrl+Alt+Shift+F (вещь мощная, полезная, но редкая). Полностью заменить стандартный поиск не может, не поддерживаются некоторые его возможности.

    Выделение и переходы (меню Search)

    Перейти к.. (Ctrl+G) — перескок на строку с тем номером, который вы введёте.
    Окно перехода на строку с введенным номером 124.jpg
    Перейти на парную скобку (Ctrl+B) — курсор окажется перед парной скобкой. Работает с тремя видами скобок: круглыми ( ), фигурными { } и квадратными [ ].
    Выделить все между парных скобок (Ctrl+Alt+B) — выделение содержимого скобок, включая их самих. Чтобы команда запустилась, курсор обязан касаться одной из скобок. Что будет, если курсор одновременно касается двух скобок. Ориентируйтесь на то, какая их пара окажется подсвеченной.

    окно перманентных пометок

    131.jpg
    Пометки... (Ctrl+M) — команда, стоящая в одном ряду с Find/Replace. Позволяет перманентно выделить некоторый текст, который в рамках сессии так и будет оставаться выделенным, невзирая ни на какие манипуляции с ним. Если последовательно через Пометки задается несколько выделений, то есть опция, станут эти выделения суммироваться или при каждом запросе будет происходить очищение от результатов предыдущего. Напротив найденных вхождений возможно автоматически выставлять закладки, к которым затем возможно применить пакетное действие (Search → Bookmark)
    Notepad++ содержит удобный механизм анализа чужого кода и анализа трудных мест в своем. Можно перманентно подсвечивать различные произвольные участки с помощью пяти различных стилей. Горячие клавиши для их установки не выделены, предлагается использовать контекстное меню. В главном меню за это отвечает группа команд Search →Mark All/Unmark All. Перемещаться между выделениями можно с помощью клавиш Ctrl+0..5 (вверх)/Ctrl+Shift+0..5 (вниз). Цифра "0" здесь означает, что под рассмотрение подпадают все стили.
    В случае очищения от стиля (команды "Clear ... Style") выделения разом снимаются со всех мест, помеченных этим стилем. Нельзя снять стиль только с одного конкретного вхождения, и даже нельзя переопределить.

    подменю работы с закладками

    126.jpg
    Bookmark — закладки. Установка осуществляется клавишами Ctrl+F2. Удобнее делать это мышкой, щелкнув на линии между номерами строк и кодом. Переход к следующей закладке по F2, к предыдущей — Shift+F2. К помеченным закладками строкам можно применять различные действия.
    (Поле закладок можно убрать через Preferences → Editing → Display bookmark. Сами закладки при этом не пропадают и вы можете выполнять с ними прежние действия, только теперь вслепую.)
    Минус выделений (обоих видов Mark) то, что их невозможно сохранить между открытиями редактора никакими стандартными способами. Закладки (Bookmark) сохранить можно, но только через целенаправленное создание файла сессии (File Save Session...).

    Внешний вид кода (меню View)

    125.jpg
    Поверх всех окон — перевод редактора в режим "Always on Top" (полезная штука, но рекомендуется делать это с помощью внешней программы или скрипта, чтобы применять не только к данному редактору, но и к любой другой программе.)
    Вкладки на весь Экран (F11) — полноэкранный режим. Сворачивается панель задач Windows, в редакторе прячутся заголовок окна, меню и панель инструментов.
    Текстовое поле в размер Окна (F12) — текст во всё окно. Убираются все вспомогательные элементы, даже панель закладок. Размеры самого окна остаются прежними, для получения максимума места под код сочетайте F11 и F12.
    Отображение символов — подменю работы с пробелами, знаками табуляции и конца строки.
    132.jpg

    подменю масштаба текста

    127.jpg
    Крупнее/мельче (Ctrl+Num "+/-") — изменение размера шрифта. Альтернативный способ — колесо мышки при нажатой Ctrl.
    Восстановить масштаб... (Ctrl+Num "/") — восстановить первоначальное значение размера текста.
    Alt+H (Hide Lines) — спрятать выделенные строки

    блок команд сворачивания кода

    Свернуть все уровни вложенности кода (Alt+0) — в редакторе будут отображаться только заголовки функций и глобальные переменные, все подробности спрячутся.
    Развернуть все уровни вложенности (Alt+Shift+0)
    Можно сворачивать/разворачивать код до определенного уровня, нажимая Alt+1..9 . Если свернуть первый и второй уровни (Alt+1, Alt+2, в любой последовательности), а затем развернуть второй (Alt+Shift+2), тогда раскроются только большие функции. А все мелкие и комментарии по-прежнему будут сжаты до состояния одной строчки.
    Есть возможность свернуть только текущий блок. Рекомендуется переназначить на Alt+9.
    128.jpg
    Информация о файле... — статические данные по файлу: когда был создан, сколько символов, сколько слов. Практической пользы нет.

    подменю работы с проектами

    Project — "проекты", удобны в случае, если в папке находится множество файлов, а редактировать нужно лишь несколько из них. Или когда редактируемые файлы разбросаны по разным папкам. Работа с панелью проектов в Notepad++ сделана примитивно, но достаточно составить структуру один раз, а далее пожинать выгоду. Для открытия проектов рекомендуется назначить горячие клавиши Ctrl+Shift+F4..F6.
    окно опции Папка как рабочее пространство
    Папка как Проект — позволяет держать под рукой содержимое папок. Если перетащите на редактор одиночные файлы, но Notepad++ их откроет. А если папку, то её содержимое раскроется в описываемом окне.
    окно Карты документа
    Карта документа — панель, показывающая в миниатюре весь код файла и отображаемую в данный момент его часть. Помогает осуществлять быструю навигацию. С одной стороны удобно, с другой — занимает место.
    Список функций — хорошая штука, но работает лишь с некоторыми видами файлов (например, xml).
    Синхронизировать вертикальную прокрутку — синхронизация вертикального скроллинга между рабочими областями
    Текст справа налево/Текст слева направо — определяют направление текста.
    Мониторинг (tail -f) — предназначен для отслеживания в реальном времени изменений, производимых в файле другими программами. Обычно это используется для просмотра логов. Сам Notepad++ в этом режиме файл модифицировать не может, только следит. Подробнее на https://notepad-plus-plus.org Аналогичную вещь производит плагин Document Monitor.

    Кодировки документа

    133.jpg
    Меню позволяет решать проблемы, связанные с кодировкой документа.

    Макросы (меню Macro)

    129.jpg
    Запоминание действий пользователя и их воспроизведение.
    Начать запись/Остановить запись (Ctrl+Shift+R) — начало и конец записи макроса. Разработчики почему-то спрятали это сочетание клавиш.
    Воспроизвести (Ctrl+Shift+P) — Однократное проигрывание макроса.
    Многократный запуск... — многократное проигрывание.
    Можно создавать и держать под рукой множество макросов. Но нельзя их модифицировать.
    Notepad++ поставляется с одним макросом от разработчиков — Trim Trailing Space and Save (Alt+Shift+S).

    Запуск файла во внешних программах (меню Run)

    134.jpg

    окно команды Запуск

    130.jpg
    пример модифицированного меню Запуск (Run)
    Команды меню Run позволяют позволяют запускать внешние программы с различными параметрами.
    Вариантов использования множество, однако практическая польза только от запуска текущего файла в других приложениях. Команды этого меню можно изменять. Можно напрямую из программы, или прямое редактирование файла shortcuts.xml, расположенного в главной папке программы (это может быть C:\Users\ваше_имя\AppData\Roaming\Notepad++). Всегда сохраняйте копию оригинала.
    запуск нового пустого экземпляра Notepad++ и открытие файла в AkelPad, который обычно использую для временного хранения текущих заметок. Делается такое кодом
    Код (Text):
    1. <Command name="Open in Akelpad" Ctrl="no" Alt="no" Shift="no" Key="0">
    2.   akelpad &quot;$(FULL_CURRENT_PATH)&quot;
    3. </Command>
    4. <Command name="Another Notepad++ instance" Ctrl="no" Alt="no" Shift="no" Key="0">
    5.    notepad++ -nosession -multiInst
    6. </Command>

    Настройки редактора

    меню Настройки

    135.jpg
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710

    Некоторые рекомендации по настройке Notepad++

    136.jpg
    Можно модифицировать контекстное меню (появляющееся в редакторе при щелчке правой кнопкой мыши). Используйте пункт Edit Popup ContextMenu. Инструкции закомментированы внутри файла.
    Для доступа к меню глобальных настроек рекомендую установить горячую клавишу, поскольку заходить туда приходится часто.
    Далее рассмотрены вкладки окна Preferences.

    Основные

    137.jpg
    Панель вкладок (корешки с названиями файлов) можно разместить сбоку от окон редактирования. Tab BarVertical. Выигрываем по высоте, проигрываем по ширине — что для вас важнее?

    Правка

    138.jpg
    Непременно включите Multi-Editing Settings. Это позволяет по нажатию Ctrl+щелчок_мыши установить несколько кареток для редактирования файла сразу в нескольких местах.
    Если хотите, чтобы ширина кода не превышала некоторой длины (к примеру, 80 символов), то установите декоративную линию на этом расстоянии: Vertical Edge Settings.

    Синтаксисы

    139.jpg
    Если используете всего несколько языков программирования, то запрячьте все ненужные и отключите опцию Make language menu compact. Это сделает пункт Синтаксисы главного меню более компактным и удобным:
    Рекомендуется установить опцию Заменять пробелом — тогда ваши отступы будут выглядеть одинаковыми во всех программах.

    Подсветка

    140.jpg
    Чтобы подсветка искала совпадения не только в текущем окне редактора, но и в смежном с ним, задействуйте опцию Highlight another view.

    Резервное Копирование

    141.jpg
    Установите резервное копирование файлов при сохранении. Иногда бывают случаи, когда сохраняется что-то не то и хочется сделать откат до старой версии. Если не установите Custom Backup Directory, то резервная копия будет размещаться там же, где и основной файл, а это замусорит рабочие директории. Simple backup или Verbose backup — на ваш выбор. В первом случае каждый новый бекап будет затирать предыдущий. Во втором случае все бекапы будут сохраняться, в конец файлов будет дописываться дата.

    Автозавершение

    142.jpg
    Группа опций Auto-Completion регулирует, будет ли контекстное меню автоподстановки появляться автоматически или только по нажатию Ctrl+Space.
    В группе Auto-Insert рекомендуется задействовать авто-вставку закрывающих тегов html.

    Темы оформления

    Изменить стиль оформления Notepad++ можно через Опции → Определение стилей... В том числе править существующие стили. Ограничение стилей: они модифицируют только внутреннюю рабочую область редактора, где набирается код. Меню, ползунки и некоторые вспомогательные панели по-прежнему зависят от общего стиля Windows. Плагины добавляют свою расцветку элементов. При использовании черных тем это превращается в большую проблему. Дизайнеры тем часто ориентируются только на главное окно редактора и свои любимые языки программирования, в результате этого получаются ляпы в других местах. Создать качественную тему сложно.
    Если хотите, чтобы Notepad++ выглядел как Sublime Text, тогда
    • используйте тему оформления Monokai
    • выставьте шрифт Опции→Определение стилей→Стиль шрифта... на Consolas (по умолчанию шрифт не прописан).
    • Для лучшей контрастности выделений рекомендуется дополнительно изменить Selected text colour на rgb(30,87,87) и Current line background color на rgb(57,56,45).
    Существует хорошая тема от Clever Techie. Но там слишком крупный шрифт. Еще одна проблема — неравномерность фона: в некоторых местах то ярко-чёрный, а в других сероватый.
    У темы Deep Black наблюдается противоположная проблема со шрифтом, рекомендуется его увеличить.

    За основу была взята статья Программирование в Notepad++ и немного личных экспериментов
     
    E.N.D. и Application нравится это.
  6. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    139
    Спасибо за подробный гайд по NPP. Отдельное спасибо за masm.xml. А что насчет меток :GUI, :CONSOLE, решили отказаться? В будущем дополнительно к ним(или новый скрипт) можно добавить еще, например, отладочную сборку, в которой к параметрам ml64 добавить ключи /Zi /Zd и к link /debug, чтобы было удобно просматривать код в отладчике.
     
    GRAFik нравится это.
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710
    mantissa,
    нет, по поводу :GUI, :CONSOLE и т.д. решил оставить на дальнейшее развитие статьи, так же как и с расшифровкой masm.xml
    GRAFik,
    с вопросом о "прикручивании питона" к Notepad++ — с этим лучше обратиться на форум по изучению питона, меня интересует применение связки notepad++ и masm64 на практике, переступите через себя и отпишитесь
     
  8. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Взял простой файл для MASM 64
    Код (ASM):
    1. ; Файл MASM 64
    2.  
    3.  
    4. OPTION DOTNAME
    5.  
    6. option casemap:none
    7. include temphls.inc
    8. include win64.inc
    9. include kernel32.inc
    10. includelib kernel32.lib
    11. include user32.inc
    12. includelib user32.lib
    13. OPTION PROLOGUE:rbpFramePrologue
    14. OPTION EPILOGUE:none
    15.  
    16. .data
    17. MsgCaption      db 'Win64 Iczelion''s lesson #2: MessageBox',0
    18. MsgBoxText      db 'Win64 Assembly is Great!',0
    19. .code
    20. WinMain proc
    21.     sub rsp,28h
    22.       invoke MessageBox, NULL, &MsgBoxText, &MsgCaption, MB_OK
    23.       invoke ExitProcess,NULL
    24. WinMain endp
    25. end
    Скрипт для компиляции ( который Complie )
    Код (Text):
    1. cls
    2. npp_save
    3. set masm64=C:\masm64\
    4. cd "$(CURRENT_DIRECTORY)" \\меняем рабочую директорию
    5. cmd /c if exist errors.txt del errors.txt
    6. cmd /c if exist $(NAME_PART).obj del $(NAME_PART).obj
    7. cmd /c if exist $(NAME_PART).exe del $(NAME_PART).exe
    8. cmd /c if not exist $(NAME_PART).rc goto nores
    9. cmd /c $(masm64)\bin\rc /r /i"$(masm64)\Include" $(NAME_PART).rc >> errors.txt
    10. if $(EXITCODE) !=0 goto exit
    11. cmd /c $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" $(FILE_NAME) >> errors.txt
    12. if $(EXITCODE) !=0 goto exit
    13. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain /fixed /nocoffgrpinfo $(NAME_PART).obj $(NAME_PART).res /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
    14. if $(EXITCODE) !=0 goto exit
    15. cmd /c del errors.txt
    16. cmd /c del $(NAME_PART).obj
    17. cmd /c del $(NAME_PART).res
    18. exit
    19. :nores
    20. cmd /c $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" $(FILE_NAME) >> errors.txt
    21. if $(EXITCODE) !=0 goto exit
    22. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain $(NAME_PART).obj /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
    23. if $(EXITCODE) !=0 goto exit
    24. cmd /c del errors.txt
    25. cmd /c del $(NAME_PART).obj
    26. exit
    27. :exit
    28. con_loadfrom errors.txt
    Выдает ошибку :
     
  9. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    350
    Mikl___
    поддерживает ли ваше решение подключение дебаггера Ollydbg? (32, 64)
     
  10. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710
    alex_dz,
    попробуйте подключить Олли, как в примере Запуск x64dbg и exe-файла. О 64-разрядном Ollydbg я не слышал
     
  11. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Mikl___, на всякий случай уточню.
    Взял еще один асм-файл:
    Код (ASM):
    1. .DATA
    2.  
    3. a1 dq 1
    4. b1 dq 2
    5. c1 dq 7
    6. d1 dq 3
    7.  
    8. .CODE
    9.  
    10. WinMain proc
    11.  
    12. mov rax,a1
    13. mul b1
    14. mov r10,rax
    15.  
    16. mov rax,c1
    17. div d1
    18. add r10,rax
    19.  
    20. WinMain endp
    21. end
    Скопировал его в папку ( C:\masm64\bin ). И в ней запустил простейший батник:

    Код (Text):
    1. ml64   /c     proba.asm
    2.  
    3. link   /SUBSYSTEM:windows    /entry:WinMain      proba.obj
    4.  
    5. pause
    Главные папки у меня находятся здесь:
    Так все компилируется. А скрипт в NotePad++ выдает ошибку. А-то, думаю вдруг я где-то с путями в исходнике накосячил. Чтоб уж не сомневаться. :)
     
    Последнее редактирование: 27 мар 2023
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.710
    GRAFik,
    скрипт работает и при наличии rc-файла, и при его отсутствии
    Код (Text):
    1. cls
    2. npp_save
    3. set masm64=диск:\первый_каталог\второй_подкаталог\...
    4. cd "$(CURRENT_DIRECTORY)" \\меняем рабочую директорию
    5. NPE_CONSOLE local v+
    6. cmd /c if exist errors.txt del errors.txt
    7. cmd /c if exist $(NAME_PART).obj del $(NAME_PART).obj
    8. cmd /c if exist $(NAME_PART).exe del $(NAME_PART).exe
    9. cmd /c $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" $(FILE_NAME) >> errors.txt
    10. if $(EXITCODE) !=0 goto exit
    11. cmd /c if exist $(NAME_PART).rc @echo "Exists"
    12. if $(OUTPUT) != "Exists" goto nores
    13. cmd /c $(masm64)\bin\rc /r /i"$(masm64)\Include" $(NAME_PART).rc >> errors.txt
    14. if $(EXITCODE) !=0 goto exit
    15. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain /fixed /nocoffgrpinfo $(NAME_PART).obj $(NAME_PART).res /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
    16. if $(EXITCODE) !=0 goto exit
    17. cmd /c del errors.txt
    18. cmd /c del $(NAME_PART).obj
    19. cmd /c del $(NAME_PART).res
    20. exit
    21. :nores
    22. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain /fixed /nocoffgrpinfo $(NAME_PART).obj /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
    23. if $(EXITCODE) !=0 goto exit
    24. cmd /c del errors.txt
    25. cmd /c del $(NAME_PART).obj
    26. exit
    27. :exit
    28. con_loadfrom errors.txt
    Пробуйте! :)
     
  13. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Mikl___, будете смеяться, но я не виноват. :)
    Код (ASM):
    1.  
    2. ;  proba_2_GRAFik_.asm
    3.  
    4. .DATA  
    5. a1 dq 1
    6. b1 dq 2
    7. c1 dq 7
    8. d1 dq 3
    9. .CODE      
    10. WinMain proc
    11. mov rax,a1
    12. mul b1
    13. mov r10,rax
    14.  
    15. mov rax,c1
    16. div d1
    17. add r10,rax
    18.  
    19. WinMain endp
    20. end
    Опять: fatal error
     
  14. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Компилируемый файл под названием: proba_2_GRAFik_.asm
    Находится в папке: C:\_05__MASM-64__PROJECTs__1
    Код (ASM):
    1.  
    2. ;  файл  proba_2_GRAFik_.asm
    3.  
    4. .DATA  
    5.  
    6. a1 dq 1
    7. b1 dq 2
    8. c1 dq 7
    9. d1 dq 3
    10.  
    11. .CODE    
    12.  
    13. WinMain proc
    14.  
    15. mov rax,a1
    16. mul b1
    17. mov r10,rax
    18.  
    19. mov rax,c1
    20. div d1
    21. add r10,rax
    22.  
    23. WinMain endp
    24. end
    25.  
    Обновленный скрипт для компиляции ( который Complie ) следующий:
    Код (Text):
    1.  
    2. cls
    3. npp_save
    4. set masm64=C:\masm64\
    5. cd "$(CURRENT_DIRECTORY)" \\меняем рабочую директорию
    6. cmd /c if exist errors.txt del errors.txt
    7. cmd /c if exist $(NAME_PART).obj del $(NAME_PART).obj
    8. cmd /c if exist $(NAME_PART).exe del $(NAME_PART).exe
    9. cmd /c $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" $(FILE_NAME) >> errors.txt
    10. if $(EXITCODE) !=0 goto exit
    11. cmd /c if not exist $(NAME_PART).rc goto nores
    12. if $(EXITCODE) !=0 goto nores
    13. cmd /c $(masm64)\bin\rc /r /i"$(masm64)\Include" $(NAME_PART).rc >> errors.txt
    14. if $(EXITCODE) !=0 goto exit
    15. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain /fixed /nocoffgrpinfo $(NAME_PART).obj $(NAME_PART).res /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
    16. if $(EXITCODE) !=0 goto exit
    17. cmd /c del errors.txt
    18. cmd /c del $(NAME_PART).obj
    19. cmd /c del $(NAME_PART).res
    20. exit
    21. :nores
    22. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain /fixed /nocoffgrpinfo $(NAME_PART).obj /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
    23. if $(EXITCODE) !=0 goto exit
    24. cmd /c del errors.txt
    25. cmd /c del $(NAME_PART).obj
    26. exit
    27. :exit
    28. con_loadfrom errors.txt
    29.  
    В консоли NppExec отображается error.txt с ошибками:
    Вопрос: что нужно сделать, чтобы избавиться от ошибок и получить exe-файл? :)
     
  15. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    350
  16. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    139
    upload_2023-3-27_17-53-30.png
    Здесь кроется ошибка, у вас почему-то директория не сменилась, а C:\_05__MASM-64__PROJECTs__1 точно существует?
     
  17. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Точно существует. Я захожу в эту папку ( C:\_05__MASM-64__PROJECTs__1 ), открываю в ней c помощью (NotePad++) асм-файл (proba_2_GRAFik_.asm). И выбираю макрос скомпилировать ( который Complie ).
     
  18. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    139
    может существует какой-то конфликт из-за имени папки с _ попробуйте создать папку test и протестировать с ней.
     
  19. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Бесполезно.

    mantissa, благодаря вашим наводящим вопросам удалось выяснить вот что:

    Путь к папке с асм-файлом - скрипт почему-то не меняет, а пытается его (асм-файл) найти в папке C:\Program Files\Notepad++ и в эту же папку ( C:\Program Files\Notepad++ ) сбрасывает файл errors.txt

    Когда я копирую асм-файл ( proba_2_GRAFik_.asm ) в папку ( C:\Program Files\Notepad++ ), то все компилируется и exe-файл ( proba_2_GRAFik_.exe ) - тоже появляется в папке ( C:\Program Files\Notepad++ ).

    Вот такая фигня. :)
     
  20. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    139
    Проверил в консоли, нужно убрать комментарий в конце, видимо NppExec не распознает их. А может быть слеш должен быть в другую сторону в пути, иначе распознается как комментарий.
    upload_2023-3-27_19-47-2.png
    Лучше просто уберите комментарий.