|
bogdan11 0 / 0 / 0 Регистрация: 05.04.2018 Сообщений: 10 |
||||||||
12.09.2018, 12:44. Показов 17333. Ответов 2 Метки 2, masm32, отладчик (Все метки)
Внимание! В ходе построения обнаружены ошибки:
0 |
ФедосеевПавел Модератор 8604 / 4446 / 1662 Регистрация: 01.02.2015 Сообщений: 13,804 Записей в блоге: 9 |
||||
12.09.2018, 13:16 |
||||
Пропишите полные пути к компилятору masm32 и его библиотекам.
1 |
liv 5118 / 4572 / 854 Регистрация: 07.10.2015 Сообщений: 9,462 |
||||||||
12.09.2018, 13:22 |
||||||||
bogdan11, в строке
наверное, предполагалось
0 |
Новые блоги и статьи
Все статьи Все блоги / |
||||
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025 Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . . |
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025 NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . . |
Реализация DI в PHP
Jason-Webb 13.05.2025 Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . . |
Обработка изображений в реальном времени на C# с OpenCV
stackOverflow 13.05.2025 Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . . |
POCO, ACE, Loki и другие продвинутые C++ библиотеки
NullReferenced 13.05.2025 В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . . |
Паттерны проектирования GoF на C#
UnmanagedCoder 13.05.2025 Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . . |
Создаем CLI приложение на Python с Prompt Toolkit
py-thonny 13.05.2025 Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . . |
Конвейеры ETL с Apache Airflow и Python
AI_Generated 13.05.2025 ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . . |
Выполнение асинхронных задач в Python с asyncio
py-thonny 12.05.2025 Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . . |
Работа с gRPC сервисами на C#
UnmanagedCoder 12.05.2025 gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . . |
Наверх
-
Randomris
New Member
- Публикаций:
-
0
- Регистрация:
- 8 янв 2020
- Сообщения:
- 5
Здравствуйте форумчане! компилятор масм не открывает windows.inc
Все перепробовал путь указывал и т.д.
выдает
fatal error A1000: cannot open file : \masm32\include\windows.inc -
Indy_
Well-Known Member
- Публикаций:
-
4
- Регистрация:
- 29 апр 2011
- Сообщения:
- 4.789
-
Mikl___
Супермодератор
Команда форума- Публикаций:
-
14
- Регистрация:
- 25 июн 2008
- Сообщения:
- 3.933
Randomris,
а у тебя точно есть папка include в каталоге masm32? Если сборка 64-разрядная, тогда в masm32 папки include нет, а есть папка include64 -
Randomris
New Member
- Публикаций:
-
0
- Регистрация:
- 8 янв 2020
- Сообщения:
- 5
У меня есть эта папка и в ней есть нужный файл
Программа установлена в первоначальном виде, ничего не изменено (ASM Visual)Вложения:
-
Mikl___
Супермодератор
Команда форума- Публикаций:
-
14
- Регистрация:
- 25 июн 2008
- Сообщения:
- 3.933
-
Randomris
New Member
- Публикаций:
-
0
- Регистрация:
- 8 янв 2020
- Сообщения:
- 5
Я задавал полный путь к нужному файлу, но все равно он выдает ошибку
-
Mikl___
Супермодератор
Команда форума- Публикаций:
-
14
- Регистрация:
- 25 июн 2008
- Сообщения:
- 3.933
Randomris,
а почему я должен верить на слово? То что папка называлась не include, а includes уже выяснили… Какую ошибку у тебя сейчас выдает? Желательно картинкой и текст asm-файла также нужно прикрепить -
Randomris
New Member
- Публикаций:
-
0
- Регистрация:
- 8 янв 2020
- Сообщения:
- 5
Код программы
-
includelib C:\Programms\ASM Visual\masm\32\includes\kernel32.lib
-
includelib C:\Programms\ASM Visual\masm\32\includes\user32.lib
-
include C:\Programms\ASM Visual\masm\32\includes\windows.inc
-
include C:\Programms\ASM Visual\masm\32\includes\kernel32.inc
-
include C:\Programms\ASM Visual\masm\32\includes\user32.inc
-
szTitleName db ‘Window Application’,0
-
szClassName db ‘ASMCLASS32’,0
-
msg MONMSGSTRUCT <?> ; структура сообщения
-
wc WNDCLASS <?> ; структура класса
-
Invoke GetModuleHandle,0 ; получаем hInstanse
-
Mov [wc.style], CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS
-
; устанавливаем стиль окна
-
Mov [wc.lpfnWndProc], offset WndProc ;
-
Invoke LoadIcon,0,IDI_APPLICATION ; получаем значок приложения по
-
Invoke LoadCursorA,0,IDC_ARROW ; получаем курсор по умолчанию
-
Mov [wc.hbrBackground], COLOR_BACKGROUND+1
-
Mov dword ptr [wc.lpszMenuName], 0
-
Mov dword ptr [wc.lpszClassName], offset szClassName ; задаём имя класса
-
Invoke RegisterClassA,offset wc ; регистрируем класс окна
-
Push [hInst] ; дескриптор
-
Push CW_USEDEFAULT ; высота
-
Push CW_USEDEFAULT ; ширина
-
Push WS_OVERLAPPEDWINDOW ; стиль
-
Push offset szTitleName ; заголовок окна
-
Push offset szClassName ; имя класса
-
Push 0 ; дополнительный стиль
-
Call CreateWindowEx ; создаём окно
-
mov [newhwnd], eax ; сохраняем его дескриптор
-
invoke ShowWindow,[newhwnd],SW_SHOWNORMAL; показываем окно
-
invoke UpdateWindow, [newhwnd]; обновляем его
-
msg_loop: ; запускаем цикл обработки сообщений
-
invoke GetMessage,offset msg, 0,0,0
-
invoke TranslateMessage, offset msg
-
invoke DispatchMessage, offset msg
-
WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD
-
Invoke DefWindowProcA,[hwnd],[wmsg],[wparam],[lparam]
-
; вызываем стандартный обработчик сообщений
-
je wmdestroy; если нажата клавиша Escape то выход
-
invoke PostQuitMessage, 0
-
invoke ExitProcess, 0 ; выход
Все начало работать после переустановки программы и чистки всего реестра. Но появилась новая ошибка
LINK : fatal error LNK1104: cannot open file «C:\Programms\ASM.lib»Последнее редактирование модератором: 20 янв 2020
-
Mikl___
Супермодератор
Команда форума- Публикаций:
-
14
- Регистрация:
- 25 июн 2008
- Сообщения:
- 3.933
Randomris,
так найди в своем IDE файл, который содержит строку «C:\Programms\ASM.lib» и исправь ее на «C:\Programms\ASM Visual\masm\32\lib» -
Indy_
Well-Known Member
- Публикаций:
-
4
- Регистрация:
- 29 апр 2011
- Сообщения:
- 4.789
Mikl___,
Потом только выяснилось что у него ошибка в имени каталога, масм работает с относительными путями, если запихал в каталоги нужно указать прямой путь, иначе будет ошибка.
А если билдер выдал cannot open file «C:\Programms\ASM.lib» это не с проста. Тем более что какой то левый IDE, параметры переданные линкеру не известны.
С таким подходом вообще незачем браться за асм, будут косяки и трудности непрерывно. В примитивном мягко говоря выше коде коментов больше чем кода. Так не пишется, масм так и назван потому что это макро язык.
— Сообщение объединено, 20 янв 2020 —
> cmp ax, 0
Какой дебил такое написал.. а куда делась старшая часть регистра, те его половина. А про инструкцию test авторы этого высера не слышали получается. Тогда как всегда:
Intel® 64 and IA-32 architectures software developer’s manual combined volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4
https://software.intel.com/en-us/do…bined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4
Изучать нужно с первого, а не как евреи с конца.
-
Randomris
New Member
- Публикаций:
-
0
- Регистрация:
- 8 янв 2020
- Сообщения:
- 5
Я только студент (1С группа), и сам занимаюсь асмом. По этому код взял с сайта (уже не помню откуда) и занимаюсь разбором кода.
читаю книги и пытаюсь по ним изучать. -
Mikl___
Супермодератор
Команда форума- Публикаций:
-
14
- Регистрация:
- 25 июн 2008
- Сообщения:
- 3.933
Randomris,
вспоминай, ищи сайт, откуда скачал IDE, там же найдешь инструкцию об установке, прочитай ее несколько раз, разберись и установи ASM Visual по инструкции, никакой самодеятельности… -
M0rg0t
Well-Known Member
- Публикаций:
-
0
- Регистрация:
- 18 окт 2010
- Сообщения:
- 1.602
А лучше скачать оригинальный 32 битный масм32, и поставить в корень диска, а не в папку с пробелами. Т.к. все это весьма костыльно и может выдавать неожиданные глюки.
-
Mikl___
Супермодератор
Команда форума- Публикаций:
-
14
- Регистрация:
- 25 июн 2008
- Сообщения:
- 3.933
Randomris,
https://gri-software.com/ru/asmvisual/help/- Начало
- Системные требования
- Загрузка и установка
- Обратная связь
- ASM Visual
- Интерфейс
- Работа с проектами
- Работа с кодом
- Сборка программ
- Отладка
- Настройка среды
- Метрики
- Горячие клавиши
-
Indy_
Well-Known Member
- Публикаций:
-
4
- Регистрация:
- 29 апр 2011
- Сообщения:
- 4.789
Randomris,
> Я только студент (1С группа)
Что то не помню в МКБ таких кодов
> читаю книги и пытаюсь по ним изучать.
Не читай их, я тебе выше дал ведь ссылку. Есчо конечно не плохо было бы по логике и алго что то почитать, для общего развития так скажем; архитектур всяких много но принципы одинаковы
В одном из учебников я взял текст :
************
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
HelloWorld db «Hello World!», 0
.code
start:
invoke StdOut, addr HelloWorld
invoke ExitProcess, 0
end start
***************
Пытаюсь его ассемблировать.
Папка MASM32
со всеми её подпапками находится в «C:\Program Files»
MASM32 даёт сообщение:
Hello.asm(4) : fatal error A1000: cannot open file : \masm32\include\windows.inc
Мой вопрос: как можно сделать «*.inc» файлы доступными Ассемблеру ?
(не меняя в исходном тексте ни одной буквы !!!)
И такой же вопрос относительно файлов «.lib» в операторе includelib ?
Спасибо! Вы меня кустаря-одиночку продвинули
3-й вопрос:
при вызове ассемблера
ml /coff Hello.asm /I «c:\Program Files» > asmbl.txt
даёт сообщение
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
«Hello.obj»
«/OUT:Hello.exe»
LINK : fatal error LNK1221: a subsystem can’t be inferred and must be defined
а при вызове
ml /coff Hello.asm /I «c:\Program Files» /link OUT:Hello.exe» > asmbl.txt
даёт сообщение
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
«Hello.obj»
«/OUT:Hello.exe»
«OUT:Hello.exe»
LINK : fatal error LNK1104: cannot open file «OUT:Hello.exe»
Что ему надо ???
Вставляю код в qeditor и делаю все по инструкции, но после постороения выдает ошибку:
Assembling: C:\Users\User\Desktop\masm32p\test.asm
C:\Users\User\Desktop\masm32p\test.asm(5) : fatal error A1000: cannot open file : \masm32\include\windows.inc
У другиг этот же код работает а гугл на счет этой ошибки молчит
Код:
.586
.model flat, stdcall
option casemap: none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\debug.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\debug.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
.data
Arr dd -100,2,3,4,45
Res dd 0
cf dd 200
d dd 5
.code
start:
mov ecx,5
mov eax, cf
cdq
mov ebx, d
div ebx
mov ebx, eax
PrintDec ebx, "C/D"
prnt:
mov eax, [Arr+ecx*4-4]
cmp eax, ebx
jl L
add Res, eax
PrintDec eax, "Added"
L: dec ecx
cmp ecx, 0
jnz prnt
PrintDec Res, "Res"
invoke ExitProcess, NULL
end start
Hello again ,
I’ve tried to move masm32 from C: to D:, but not at the root (D:/…/masm32).
I searched on the forum and saw that the folder should be at the root, or else we must use a trick on Windows to create an alias of a volume.
This is the batch file used for assembling :
@echo off
set file=%1
if %file%V equ V (echo No arg given ! & pause & exit)
set app=%file:~0,-4%
echo *************************************************************************************************************
echo Assembling %file% into %app%.exe
echo *************************************************************************************************************
echo.
echo.
subst Z: D:\Programmation\Assembleur
Z:\masm32\bin\ml.exe /c /coff /Cp /nologo /W3 /I"Z:" /I"Z:\masm32\include" %file%
Z:\masm32\bin\link.exe /subsystem:console /release /version:4.0 /libpath:"Z:" /libpath:"Z:\masm32\lib" /out:%app%.exe %app%.obj
subst Z: /D
%app%.exe
echo.
echo.
echo *************************************************************************************************************
pause
I got the following error :
Quote
Z:\masm32\include\masm32rt.inc(38) : fatal error A1000: cannot open file : \masm32\include\windows.inc
(and another from the linker whch cannot open test.obj)
So it seems that I did something wrong, but I can’t see where, because the compiler says that it cannot find a file, but I put /I»Z:\masm32\include» in the batch file.
Could you please healp me to find the error ?
Your problem happens here:
subst Z: D:\Programmation\Assembleur
Z:\masm32\bin\ml.exe /c /coff /Cp /nologo /W3 /I"Z:" /I"Z:\masm32\include" %file%
Try
subst Z: D:\Programmation\Assembleur
Z:
\masm32\bin\ml.exe /c /coff /Cp /nologo %file%
Your %file% is on Z:, I suppose?
Thanks for your reply.
If I add Z: in the .bat, the .obj file is created in Z: directory, instead of being in the same folder than %file%.
And by the way the linker is unable to find the .obj in the same folder of %file%.
So I can make a little code which moves the .obj in the correct folder, but it involves the parsing of the file’s path to find the directory.
Is there a better solution ?
I have been using the SUBST trick for many years, never had similar problems.
My suspicion is that your drive Z is not permanent enough. Suppose you want a permanent drive M: (like «Masm»); press Alt R, type regedit and hit Return. Then go for this:
Key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices
RegSZ M: (you need to create a new REG_SZ value)
Text \??\D:\Programmation\Assembleur
Save and reboot. Afterwards, you have P:\Masm32\… and all the rest.
I tried both A: and M: but each time I try to open it (command A: or M: with CMD), I get an error.
So, I think I’ll modify my batch file to move the .obj .
Thanks for time spent on my problem
(Perhaps I’ll edit post with new file for person who will maybe have the same problem)
Moving files around is not a solution — even if you get it to work, you’ll regret it later on.
What kind of errors do you get with A: or M: with CMD? If the drives really exist (and they should, if the registry entry is correct, and you rebooted), then typing A: or M: should never throw an error.
(Btw A: was a special drive, I wonder if the OS has some legacy quirks that could make problems)
I’ll strive to describe and translate correctly :
I’ve edited the register and rebooted the computer.
When I open explorer.exe, a new local disk appeared, M:, so that’s ok (but the icon has a ? near the picture)
If I want to access, Windows throws me an error :
Quote
M:\ isn’t accessible.
Syntax or file’s, directory’s or volume’s name is incorrect.
So I guess I didn’t edit correctly the register :
- Win+R regedit [Enter] -> as administrator
- Browsing to Ordinateur\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices
- Right click -> new -> string value («valeur chaîne» in French, if the translation isn’t correct)
- Named it M:
- Changed its value to D:\Programmation\Assembleur\
- Rebooted the computer
- Started Chrome and went to MASM forum to reply
Thanks, all is now working as expected
I didn’t write the \??\ because I thought you meant «replace it by parent directories».
After several changes, the batch file can compile and link without modifying register (that’s quite handy for me, if I want to code on my school’s computers where I haven’t admin rights fo course) :
@echo off
set file=%1
if %file%V equ V (echo No arg given ! & pause & exit)
call :extractNames %file%
echo *************************************************************************************************************
echo Assembling %file% into %app%.exe
echo *************************************************************************************************************
echo.
echo.
subst Z: D:\Programmation\Assembleur
Z:
set zFilePath=%filePath%
set zFilePath=%zFilePath:D:\Programmation\Assembleur=%
cd %zFilePath%
echo %zFilePath% %cd%
Z:\masm32\bin\ml.exe /c /coff /Cp /nologo /W3 /I"Z:\" /I"Z:\masm32\include\" %file%
Z:\masm32\bin\link.exe /subsystem:console /release /version:4.0 /libpath:"Z:\" /libpath:"Z:\masm32\lib\" /out:%app%.exe %app%.obj
%drive%
subst Z: /d
%app%.exe
echo.
echo.
echo *************************************************************************************************************
pause
:extractNames
set drive=%~d1
set filePath=%drive%%~p1
set app=%filePath%%~n1
Instead of compiling at the wrong place and then moving, I extracted the path from the complete file name and then went to Z: (temp drive) and moved to the file’s directory to build and link at the same place.
Links which helped me :
- https://stackoverflow.com/questions/15567809/batch-extract-path-and-filename-from-a-variable
- https://www.dostips.com/DtTipsStringManipulation.php#Snippets.Remove
I hope it may help someone with the same problems.
Hi totosayen_cpp,
Concerning the Masm32 package, the best installation location is the root of a partition. Simple and easy.
Evenif it’s finally a bit more complicated than leave it at the root, I did that to organize correctly my files.
But I wonder why it needs to be at the root of a (virtual or not) drive…
Quote from: totosayen_cpp on May 02, 2021, 06:28:31 PM
But I wonder why it needs to be at the root of a (virtual or not) drive…
Because all the includes in all examples are organised as
include \Masm32\include\msvcrt.inc
includelib \Masm32\lib\msvcrt.lib
No need for environment variables. And it works, always. Compare that to the incredible mess of a C++ compiler…
Easy. You probably have heard of Occam’s razor, an important principle of science and philosophy. Prefering the root of a partition as the installation location makes easy the maintainance of your batch files. Nearly all of my .bat files are looking like the following :
C:\masm32 or D:\masm32 :
\masm32\bin\ml /c /coff Hello.asm
\masm32\bin\polink /SUBSYSTEM:WINDOWS Hello.obj
I don’t have to tweak complicated .bat files to build Masm projects.
jj2007 is right, you can see the complications of some C++ compilers to build even the most simple hello world project.
- The MASM Forum
-
►
General -
►
The Campus -
►
include error on D: