Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: MASM64, х64/long mode
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Alex Gor
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 39
1

Masm64

23.04.2019, 17:24. Просмотров 832. Ответов 20
Метки нет (Все метки)

Пыталась написать программу на masm64, но компилятор то библиотеку не открывает, то команда неизвестная, то ещё что-то. Попыталась скомпилить элементарщину, но тоже ничего. В чем ошибка, подскажите? Я слышала, что 64b не поддерживает invoke. Если это так, то что можно сделать?
В ассемблере почти полный ноль, но курсач делать надо и срочно, в инете ничего не нашла
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2019, 17:24
Ответы с готовыми решениями:

Процедуры в MASM64. Я не понимаю
MASM64 меня, конечно, убивает. Я про temphls.inc от vasil211yandex.ru 1. Если у процедуры нет...

Masm64 console hello world
Надыбал кое что, вроде и ошибок нет а ничего не выводит( OPTION DOTNAME option casemap:none ...

Переход с MASM32 на MASM64
Привет, всем! Мной написана программа (более 20 000 строк), возникла необходимость перехода на 64...

Error A2081, masm64
mov wc.lpszClassName, offset ClassName Данный момент должен разворачиваться компилятором. Взамен...

[masm64] Создать окно с кнопками
Кто сможет помочь,нужно на masm64 создать окно с тремя кнопками: A - закрытие окна, а остальные 2-е...

20
ФедосеевПавел
Модератор
4517 / 2527 / 1018
Регистрация: 01.02.2015
Сообщений: 8,281
23.04.2019, 18:08 2
Посмотрите закреплённые темы в данном подразделе.
Все, что нужно знать, чтобы начать программировать для 64-разрядных версий Windows
Создание консольных приложений в 64-разрядной Windows Seven

Также, в темах этого подраздела.

И, задавая вопрос, приводите исходник и командные строки запуска компилятора и компоновки.
0
Alex Gor
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 39
23.04.2019, 19:03  [ТС] 3
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
OPTION DOTNAME
option casemap: none
include temphls.inc
include win64.inc
include kernel32.inc
includelib kernel32.lib
include use32.inc
includelib user32.lib
OPTION PROLOGUE: none
OPTION EPILOGUE: none
.data
titl db "Test", 0
st dq 1 dup (0), 0
ifmt db "Какой-то текст", 0
.code
WinMain proc
sub rsp, 28h
mov rbp, rsp
invoke wsprintf, addr st, addr ifmt
invoke MessageBox, 0, addr st, addr titl, MB_ICONINFORMATION
invoke ExitProcess, 0
WinMain endp
end
Компилировала и через батник, и через консоль
ml64/c Test.asm
0
ФедосеевПавел
Модератор
4517 / 2527 / 1018
Регистрация: 01.02.2015
Сообщений: 8,281
23.04.2019, 19:14 4
А вот смотрите, вы скомпилировали текст на ассемблере и получили объектный файл. Но не показали вызов компоновщика.

Ещё можете посмотреть Все, что нужно знать, чтобы начать программировать для 64-разрядных версий Windows и следующее сообщение с примерами командной строки. Там другие ключи компиляции.
0
23.04.2019, 19:14
Alex Gor
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 39
23.04.2019, 19:18  [ТС] 5
Объектный файл я не получила, не компилируется даже
Я в асм полнейший ноль
Может есть какие примеры программ на 64? Я нахожу либо на 32, либо всякие тасмы, фасмы и т.д.
0
ФедосеевПавел
Модератор
4517 / 2527 / 1018
Регистрация: 01.02.2015
Сообщений: 8,281
23.04.2019, 19:59 6
Да, примеры есть - я дал ссылки на закреплённые темы. А также в подразделе есть темы с примерами.

Добавлено через 33 минуты
Я ещё никогда не компилировал 64-разрядные программы. Пока первый опыт.

Несколько дней назад скачал и установил Visual Studio 2019 Community. И из этого пакета и запускаю компилятор ml64.

По всей программе заменил переменную st на string, полностью прописал пути к Include и Lib. После этого компиляция успешно выполнилась (появился obj)
ml64 /Cp /c %file%.asm

Но компоновка не выполняется - возникает ошибка вызова какой-то dll. Пока не пойму, как указать путь к ней.
0
Alex Gor
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 39
23.04.2019, 21:01  [ТС] 7
Я брала даже работающие исходники, не компилится, хоть убейся. Никак, даже в онлайн компиляторах
До сдачи неделя...
Через студию тоже пробовала, но не получилось (почему, не помню)
0
ФедосеевПавел
Модератор
4517 / 2527 / 1018
Регистрация: 01.02.2015
Сообщений: 8,281
23.04.2019, 21:44 8
Я создал d:\masm64 распаковал в него Inlude и Lib из архива Все, что нужно знать, чтобы начать программировать для 64-разрядных версий Windows
В вашем исходнике заменил переменную st и полностью прописал пути
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
OPTION DOTNAME
option casemap: none
include d:\masm64\Include\temphls.inc
include d:\masm64\Include\win64.inc
include d:\masm64\Include\kernel32.inc
include d:\masm64\Include\user32.inc
includelib d:\masm64\Lib\kernel32.lib
includelib d:\masm64\Lib\user32.lib
 
OPTION PROLOGUE: none
OPTION EPILOGUE: none
 
.data
titl db "Test", 0
string dq 1 dup (0), 0
ifmt db "Какой-то текст", 0
 
.code
WinMain proc
sub rsp, 28h
mov rbp, rsp
invoke wsprintf, addr string, addr ifmt
invoke MessageBox, 0, addr string, addr titl, MB_ICONINFORMATION
invoke ExitProcess, 0
WinMain endp
end
Запускаю пакетный файл
Windows Batch file
1
2
3
4
5
6
7
set file=hello
@set mlpath="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\bin\Hostx86\x64"
@rem set mlpath="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\bin\Hostx86\x64"
@set path=%mlpath%
%mlpath%\ml64 /Cp %file%.asm /link /subsystem:windows /entry:WinMain /OUT:%file%.exe
@rem %mlpath%\link /subsystem:windows /entry:WinMain %file%.obj
@pause
Компиляция выполняется (obj создаётся), но компоновщик завершается с ошибкой
LINK : fatal error lnk1171 не удаётся загрузить mspdb140.dll (код ошибки 126)
Это не пойму, как одолеть.
0
Alex Gor
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 39
23.04.2019, 21:55  [ТС] 9
Dll это вроде динамическая библиотека
Я в студии меняла настройки как-то, но не помню
На самом деле, мне вообще другая прога нужна, но с ней все намного хуже..
0
ФедосеевПавел
Модератор
4517 / 2527 / 1018
Регистрация: 01.02.2015
Сообщений: 8,281
23.04.2019, 22:02 10
Понятно, что другая. Для начала требуется научиться компилировать чужую заведомо правильную.

Смотрите. Я на днях установил VS 2019 Community.
Установил библиотеки из архива (ссылку давал)
В asm файле провёл изменения.
Сейчас получилось создать exe - у меня была ошибка при запуске пакетного файла - я указывал неправильный путь к программе ml и link - у меня Win7 x64, а путь я указывал для x86. После исправления
Windows Batch file
1
2
3
4
5
6
7
set file=hello
@rem set mlpath="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\bin\Hostx86\x64"
@set mlpath="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\bin\Hostx64\x64\"
@rem set path=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\bin\Hostx64\x64\
%mlpath%\ml64 /Cp %file%.asm /link /subsystem:windows /entry:WinMain /OUT:%file%.exe
@rem %mlpath%\link /subsystem:windows /entry:WinMain %file%.obj
@pause
Получил exe.

Попробуйте так же.
0
Alex Gor
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 39
23.04.2019, 22:17  [ТС] 11
Это не "чужая заведомо правильная", а моя " неизвестно работающая ли" программа)
Хорошо, я попробую
Но нам преподаватель батник попроще давал, типа:
Windows Batch file
1
2
3
4
5
ml64/c file.asm
link.... и т.д.
pause
delete file.obj
start file.exe
0
ФедосеевПавел
Модератор
4517 / 2527 / 1018
Регистрация: 01.02.2015
Сообщений: 8,281
23.04.2019, 22:20 12
У меня пакетник похож - я же экспериментировал с пакетником из пояснительной темы (ссылку я тоже давал).

Добавлено через 57 секунд
Ваша программа после исправлений становится рабочей.
0
Alex Gor
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 39
23.04.2019, 22:28  [ТС] 13
Т.е. написать код в Студии. Правильно я поняла? И запустить батник
0
ФедосеевПавел
Модератор
4517 / 2527 / 1018
Регистрация: 01.02.2015
Сообщений: 8,281
23.04.2019, 22:39 14
Не буду строить из себя спеца - никогда не работал в VS и не умею. Потом освою, но не сегодня.
Смысл в том, что учебные программы для ассемблера очень просты и для их компиляции достаточно средств командной строки. А ml64 в этом отношении идентичен знакомому мне ml (masm32).
Короче, код я скопировал в блокнот, и все исправления делал в блокноте. Потом в блокноте создал пакетный файл. И провёл компиляцию.

Знаю, что это всё удобно делать в VS, но не умею.
0
Alex Gor
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 39
23.04.2019, 22:46  [ТС] 15
Может я задам глупый вопрос, но хотелось бы окончательно разобраться. Выше Вы написали в 2-4 строках путь к Студии. Зачем, если все было написано в блокноте? Чтобы библиотеки использовать или что-то вроде этого?..
0
ФедосеевПавел
Модератор
4517 / 2527 / 1018
Регистрация: 01.02.2015
Сообщений: 8,281
23.04.2019, 22:58 16
У меня нет отдельных программ ml64 и link - имеются только в составе VS. Я их там нашёл в двух версиях - для хоста x86 и для хоста x64. У меня Win7 x64 - т.е. хост x64. Поэтому полный путь к соответствующим ml64 и link.

В моём пакетнике нужно удалить строку, в которой я пытался указать путь к x86, чтобы "чище" было.
Windows Batch file
1
2
3
4
set file=hello
@set mlpath="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\bin\Hostx64\x64\"
%mlpath%\ml64 /Cp %file%.asm /link /subsystem:windows /entry:WinMain /OUT:%file%.exe
@pause
Добавлено через 1 минуту
Полные пути к Include и Lib я указал в исходнике.
0
Alex Gor
0 / 0 / 0
Регистрация: 03.11.2017
Сообщений: 39
23.04.2019, 23:02  [ТС] 17
Агаа.. И ещё, %mlpath% - это путь... куда?
0
ФедосеевПавел
Модератор
4517 / 2527 / 1018
Регистрация: 01.02.2015
Сообщений: 8,281
23.04.2019, 23:12 18
Вы умеете писать для командного интерпретатора cmd - т.е. пакетные файлы?

Изначально я предполагал, как и в вашем пакетнике, получить obj при помощи ml64, а потом exe при помощи link.
Для этого нужно запустить две программы с одинаковым путём. Компактнее, объявить переменную с этим путём, а потом "прикручивать" её к вызываемым программам.
Тем более, что я экспериментировал с разными путями и менять в нескольких строках тяжело, а так - только в одной.

mlpath содержит путь к единственным рабочим у меня на компе ml64 и link, находящимся в составе VS.
0
Mikl___
Автор FAQ
13896 / 6531 / 658
Регистрация: 11.11.2010
Сообщений: 11,763
08.05.2019, 03:34 19
Alex Gor, ФедосеевПавел,
Наберите в гугл-поисковой строке "сказки дядюшки Римуса ассемблер" и читайте по первой ссылке
2
ФедосеевПавел
Модератор
4517 / 2527 / 1018
Регистрация: 01.02.2015
Сообщений: 8,281
08.05.2019, 18:08 20
Для первых шагов хватило Все, что нужно знать, чтобы начать программировать для 64-разрядных версий Windows и общих представлений.

А про Римуса сразу и не вспомнил. Видимо, это был бы следующий шаг. Видел, что статьи этого цикла на wasm продолжают пополняться.

Alex Gor, это вполне хороший совет почитать "сказки дядюшки Римуса".
0
08.05.2019, 18:08
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2019, 18:08

Masm64 ничего не выводит на экран!
Кто подскажет в чём дело,беру любой пример для масм64 с выводом на экран,всё компилируется ,но...

Masm64 and FASM64, win_API, Examples
Предисловие. По скорости написания программы: макро ассемблеры, требуют меньше времени чем любой...

MASM64 Menu, Ошибка построения ресурсов
Я так хотел подружиться с менюшками, но никак. option dotname option casemap:none option...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru