В одном из учебников я взял текст :
************
.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"
Что ему надо ???
как можно сделать "*.inc" файлы доступными Ассемблеру ?
Модератор: Andy
в каталоге где находится asm файл, создать папку Masm32 и так далее по пути
It's a long way to the top if you wanna rock'n'roll
Или в корне диска? (меня смущает наличие '\' перед 'masm32' при описании include-файла)somewhere писал(а):в каталоге где находится asm файл, создать папку Masm32 и так далее по пути
У меня сильное ощущение, что в тексте примера предполагается, что ассемблер установлен в корневом каталоге masm32. Со всей иерархией подкаталогов.
Т.е., если бы stakha "не изголялся", и ставил бы ассемблер не в "C:\Program Files\MASM32", а в "C:\MASM32", думаю, все бы прошло на ура

Это относительные пути, при include путь формируется как "каталог_файла_asm" + "имя_inc_файла", а также если компилятору передан параметр /i то включаются еще и переданные пути
It's a long way to the top if you wanna rock'n'roll
somewhere, я сейчас не проверял, конечно, но логика и здравый смысл подсказывают, что в разбираемом листинге "\masm32\include\windows.inc" - это путь от корня данного диска. Если бы было иначе, т.е. относительный от каталог_файла_asm, то это означало бы, что в некий каталог, где хранятся примеры, описываемыйе в этом учебнике, махнули бы всю структуру каталогов MASM-а. Как-то несистемно это.
При указании относительного пути от текущего, все-таки, первым символом не ставят '\'. Или тогда писать еще с точкой впереди, перед слешом: ".\masm32\include\windows.inc". Обычные традиционные (еще со времен DOS) правила формирования путей.
При указании относительного пути от текущего, все-таки, первым символом не ставят '\'. Или тогда писать еще с точкой впереди, перед слешом: ".\masm32\include\windows.inc". Обычные традиционные (еще со времен DOS) правила формирования путей.
- mc-black
- Сообщения: 250
- Зарегистрирован: 08 май 2008, 16:09
- Откуда: Россия, Нижний Новгород
- Контактная информация:
Надо компилировать asm-файл на том же логическом диске, где находится установленный пакет masm32, причем сам masm32 sdk настоятельно рекомендуется устанавливать в корень диска. Первый backslash означает корень диска.
На заказ: VBA, Excel mc-black@yandex.ru