Меню Рубрики

Assembler for 64 bit windows

Какой ассемблер для Windows в 2020 году лучше? Какая IDE?

Подписчикам моего канала эта тема скорее всего покажется странной и незнакомой. Но она тоже имеет непосредственное отношение к технике (а канал посвящён не только электрике, но и всему техническому) а также она (эта тема) занимает существенную часть моей жизни.

В начале 90-х годов я много программировал на ассемблере. Сначала это был ассемблер МИКРО11 для процессоров архитектуры DEC PDP-11 (процессор К1801ВМ1 бытового компьютера БК0010-01), а с 1994 года я начал писать на ассемблере TASM для процессоров архитектуры x86 (персональный компьютер IBM PC AT i80386).

В то время я писал исключительно под DOS, и использовал для этого режим Ideal ассемблера TASM . Этот ассемблер был разработан компанией Borland. Синтаксис MASM от Microsoft мне нравился меньше, чем в TASM режима Ideal. В общем, на нём я и остановился.

Никаких IDE, конечно, тогда не было, и я использовал обычный текстовый редактор. Кажется, даже без подсветки синтаксиса. Компилировал и линковал утилитами командной строки, для удобства прописанными в пакетных файлах.

Когда наступила эра Windows, я попробовал написать на ассемблере пару тестовых приложений под эту ОС, и перешёл для этого на MASM, как чуть более подготовленный к этому процессу. Но писать на ассемблере под Windows мне показалось не очень интересным, и я перешёл на языки более высокого уровня.

На днях я решил посмотреть, что же изменилось с программированием на ассемблере за четверть века? Так вот, принципиально — ничего )))

Выбор ассемблера

Существует довольно много разных ассемблеров. При выборе я использовал только 2 критерия — живость проекта и популярность ассемблера. Остальные критерии, такие, как дополнительные возможности и фичи, я не рассматривал, это было уже не так важно.

TASM, к сожалению, отпал сразу, поскольку он, к сожалению, мёртв.

MASM тоже давно не обновлялся.

В общем, из всех ассемблеров меня привлекли два — NASM и FASM .

На настоящий момент FASM мне показался более интересным, и я решил пока выбрать его. Если вам больше нравятся другие варианты, напишите, пожалуйста, в комментариях, почему ваш выбор пал на другой ассемблер.

Выбор интегрированной среды разработки (IDE)

Конечно, можно пользоваться обычным редактором с подсветкой синтаксиса, например, Notepad++ . Но, честно говоря, хочется уже как-то автоматизировать некоторые рутинные действия, а также иметь функцию автодополнения и какие-то подсказки по коду.

Я думал, что уже существуют хорошие, мощные IDE для ассемблеров. Но не тут то было. Подающий в своё время большие надежды RadASM заброшен, остальные среды очень простенькие, глючащие, вылетающие при каждом чихе. В общем, проблема. Если вы знаете какую-нибудь действительно достойную среду для написания ассемблерного кода, отпишитесь, пожалуйста, в комментариях.

Поскольку в программах предполагается использование кириллицы, важно, чтобы редактор имел возможность сохранять файлы в UTF8 .

В общем, после поисков чего-то более-менее стоящего я сначала остановился на SASM .

Но он почему-то отказывается компилировать, не сообщая почему. Автодополнения и подсказок по коду там тоже нет.

Сейчас другой автор начал активно рекламировать ASM Visual :

Текущая версия имеет глючки, которые автор пообещал исправить. В этой IDE уже есть автодополнение и подсказки, но, к сожалению, только в платной версии. Как бесплатная IDE она была бы относительно неплоха вместе с этим функционалом, но как платная, она, на мой взгляд, ещё сыровата.

Вышеперечисленные IDE хороши для начинающих, потому что в них довольно легко разобраться, и они при создании нового проекта не предлагают шаблоны навороченного кода. Но если вы уже опытный программист, и знаете, как писать на ассемблере под Windows, то вам может подойти очень мощная и абсолютно бесплатная IDE « Easy Code Visual »:

Как видите, она позволяет даже визуальное конструирование интерфейса. Пожалуй, это самая мощная среда, которую я нашёл. Но она тоже глючит и вылетает.

Все три IDE активно поддерживаются, это одно из важных условий моего выбора. Так что от глюков можно избавиться, если активно сотрудничать с авторами этих программ.

Если вы знаете другие достойные варианты IDE с автодополнением и подсказками, напишите о них, пожалуйста, в комментариях.

На сегодня всё, ставьте лайки, подписывайтесь на канал, пока!

Источник

pirogov_vju

Пирогов Владислав Юрьевич

О программировании, ИТ и обо всем по немногу

Первой вопрос, который, я хочу рассмотреть и который, мне кажется, сейчас очень важным, это 64-битовое программирование. Естественно речь пойдет об ассемблере. В качестве такового возьмем fasm. Во-первых, поддерживает 64-битовое программирование, во-вторых, этот ассемблер является кроссплатформенным. Для того, чтобы начать писать 64-битовые программы достаточно 1. Узнать структуру программы; 2. Использовать правильное соглашение вызова системных и вообще функций.
Программирование в Windows.
В 64-битовых Windows принята следующая конвенция вызова функций (в том числе вызов функций API).
1. Первые четыре параметра передаются в функцию через регистры: rcx, rdx, r8, r9. Остальные параметры (если они есть) передаются через стек.
2. Перед вызовом функции резервируется область в стеке, на случай, если вызываемая функция «захочет» временно сохранить параметры в стеке. Таким образом, параметры, которые передаются через стек, помещаются туда после резервируемой области.
3. При передаче параметров, размер которых меньше 64 бит, передаются как 64-битовые параметры. При этом следует обнулить старшие биты. Параметры, большие 64-бит передаются по ссылке.
4. Данные возвращаются через регистр rax. Если возвращаемое значение имеет размер больший 64 бит, то данное передается через область памяти, адрес которой передается в первом параметре. Для возвращения может также использоваться регистр xmm0.
5. Все регистры при вызове функций сохраняются за исключением rax, rcx, rdx, r8, r9, r10, r11, сохранность которых не гарантируется.
6. Граница стека должна быть выровнена по адресу кратному 16.
Рассмотрим в общих чертах схему вызова функции API с пятью параметрами.
.
sub rsp,40 ; резервируем стек
mov qword ptr [rsp+32],par5
mov r9,par4
mov r8,par3,
mov rdx,par2
mov rcx,par1
call f_api64
.
add rsp,40 ;восстанавливаем стек
.

Обратите внимание, что в нашем случае стек с учетом адреса возврата при вызове функции оказывается выровненным на величину кратную 16 (48 байт). С учетом такого выравнивания вызов функции, содержащей только 4 параметра будет выглядеть так

sub rsp,40 ; резервируем стек
mov r9,par4
mov r8,par3,
mov rdx,par2
mov rcx,par1
call f_api64
.
add rsp,40 ;восстанавливаем стек

Рассмотрим следующую программу

format PE64 GUI
entry start
section ‘.text’ code readable executable
start:
sub rsp,8*5
mov r9,0
lea r8,[_caption]lea rdx,[_message]mov rcx,0
call [MessageBoxA]add rsp,40
sub rsp,16
mov ecx,eax
call [ExitProcess]section ‘.data’ data readable writeable
_caption db ‘Win64 assembly program’,0
_message db ‘Hello World!’,0
section ‘.idata’ import data readable writeable
dd 0,0,0,RVA kernel_name,RVA kernel_table
dd 0,0,0,RVA user_name,RVA user_table
dd 0,0,0,0,0
kernel_table:
ExitProcess dq RVA _ExitProcess
dq 0
user_table:
MessageBoxA dq RVA _MessageBoxA
dq 0
kernel_name db ‘KERNEL32.DLL’,0
user_name db ‘USER32.DLL’,0
_ExitProcess dw 0
db ‘ExitProcess’,0
_MessageBoxA dw 0
db ‘MessageBoxA’,0

Источник

MASM для x64 (ml64.exe) MASM for x64 (ml64.exe)

Visual Studio включает в себя как 32-разрядную, так и 64-разрядную версию Microsoft Assembler (MASM) для целевого кода x64. Visual Studio includes both 32-bit and 64-bit hosted versions of Microsoft Assembler (MASM) to target x64 code. С именем ml64. exe — это ассемблер, который принимает язык ассемблера x64. Named ml64.exe, this is the assembler that accepts x64 assembler language. Программы командной строки MASM устанавливаются при выборе C++ рабочей нагрузки во время установки Visual Studio. The MASM command-line tools are installed when you choose a C++ workload during Visual Studio installation. Средства MASM недоступны для загрузки отдельно. The MASM tools are not available as a separate download. Инструкции по скачиванию и установке копии Visual Studio см. в статье Установка Visual Studio. For instructions on how to download and install a copy of Visual Studio, see Install Visual Studio. Если вы не хотите устанавливать полную интегрированную среду разработки Visual Studio, но вам нужны только программы командной строки, скачайте средства сборки для Visual Studio. If you do not want to install the complete Visual Studio IDE, but only want the command-line tools, download the Build Tools for Visual Studio.

Чтобы использовать MASM для построения кода для платформ x64 в командной строке, необходимо использовать командную строку разработчика для целевых платформ x64, которые задают требуемый путь и другие переменные среды. To use MASM to build code for x64 targets on the command line, you must use a developer command prompt for x64 targets, which sets the required path and other environment variables. Сведения о запуске командной строки разработчика см. в разделе сборка C/C++ Code в командной строке. For information on how to start a developer command prompt, see Build C/C++ code on the command line.

Сведения о параметрах командной строки ml64. exe см. в разделе Справочник по командной строке ML и ML64. For information on ml64.exe command line options, see ML and ML64 Command-Line Reference.

Встроенный ассемблер или использование ключевого слова ASM не поддерживается для целевых объектов x64 и ARM. Inline assembler or use of the ASM keyword is not supported for x64 or ARM targets. Чтобы перенести код x86, использующий встроенный ассемблер для x64 или ARM, можно преобразовать код в C++, использовать встроенные функции компилятора или создать файлы исходного кода на языке ассемблера. To port your x86 code that uses inline assembler to x64 or ARM, you can convert your code to C++, use compiler intrinsics, or create assembler-language source files. Компилятор Майкрософт C++ поддерживает встроенные функции, позволяющие использовать специальные инструкции, например привилегированные, битовые проверки и тестирования, взаимоблокировки и т. д., в качестве максимально близкого к кросс-платформенному способу. The Microsoft C++ compiler supports intrinsics to allow you to use special-function instructions, for example, privileged, bit scan/test, interlocked, and so on, in as close to a cross-platform manner as possible. Сведения о доступных встроенных функциях см. в разделе встроенные функции компилятора. For information on available intrinsics, see Compiler Intrinsics.

Добавление файла ассемблерного языка в проект Visual Studio C++ Add an assembler-language file to a Visual Studio C++ project

Система проектов Visual Studio поддерживает файлы ассемблерного языка, созданные с помощью MASM в ваших C++ проектах. The Visual Studio project system supports assembler-language files built by using MASM in your C++ projects. Вы можете создавать файлы исходного кода на языке ассемблера x64 и создавать их в объектных файлах с помощью MASM, который поддерживает 64-разрядную версию. You can create x64 assembler-language source files and build them into object files by using MASM, which supports x64 fully. Затем эти файлы объектов можно связать с C++ кодом, созданным для платформ x64. You can then link these object files to your C++ code built for x64 targets. Это один из способов преодоления отсутствия встроенного ассемблера x64. This is one way to overcome the lack of an x64 inline assembler.

Добавление файла ассемблерного языка в существующий проект Visual Studio C++ To add an assembler-language file to an existing Visual Studio C++ project

Выберите проект в обозревателе решений. Select the project in Solution Explorer. В строке меню выберите проект, настройки сборки. On the menu bar, choose Project, Build Customizations.

В диалоговом окне файлы настройки визуальной C++ сборки установите флажок в поле MASM (targets, PROPS) . In the Visual C++ Build Customization Files dialog box, check the checkbox next to masm(.targets,.props). Нажмите кнопку ОК , чтобы сохранить выбранные элементы и закрыть диалоговое окно. Choose OK to save your selection and close the dialog box.

В строке меню выберите проект, Добавить новый элемент. On the menu bar, choose Project, Add New Item.

В центральной области диалогового окна Добавление нового элемента выберите C++ файл (CPP) . In the Add New Item dialog box, select C++ file (.cpp) in the center pane. В поле имя элемента управления изменить введите новое имя файла с расширением ASM вместо. cpp. In the Name edit control, enter a new file name that has a .asm extension instead of .cpp. Нажмите кнопку Добавить , чтобы добавить файл в проект и закрыть диалоговое окно. Choose Add to add the file to your project and close the dialog box.

Создайте код на языке ассемблера в добавленном ASM-файле. Create your assembler-language code in the .asm file you added. При сборке решения вызывается ассемблер MASM Assembler для сборки ASM-файла в объектный файл, который затем связывается с проектом. When you build your solution, the MASM assembler is invoked to assemble the .asm file into an object file that is then linked into your project. Чтобы упростить доступ к символам, объявите функции ассемблера как extern «C» C++ в исходном коде вместо использования соглашений об C++ оформлении имен в исходных файлах на языке ассемблера. To make symbol access easier, declare your assembler functions as extern «C» in your C++ source code, rather than using the C++ name decoration conventions in your assembler-language source files.

Директивы, относящиеся к ml64 ml64-Specific Directives

В исходном коде на языке ассемблера, предназначенном для x64, можно использовать следующие директивы ml64: You can use the following ml64-specific directives in your assembler-language source code that targets x64:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Asrock не загружается windows
  • Asrock драйвера на звук windows 7 32 bit
  • Asrock аудио драйвер для windows 10
  • Asrock z170 extreme4 windows 7 driver
  • Asrock xfast ram windows 10