Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/125: Рейтинг темы: голосов - 125, средняя оценка - 4.68
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091

Как создать объектный файл

02.03.2014, 16:22. Показов 24134. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как создать объектный файл если начало такое D:\masm32\topgun.exe D:\MYPROG\atest.asm
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.03.2014, 16:22
Ответы с готовыми решениями:

Как создать объектный файл?
CSEG segment org 100h Begin: mov ah,9 mov dx,offset Message int 21h int 20h

Объектный файл
Только что начал изучать Assembler и сразу же столкнулся с проблемой: не удаётся получить объектный файл. Пример из книги - ...

не создается объектный файл в TASM
ЗАДАНИЕ: Имеется система трех уравнений и следующие данные: -строка десятичных байт X из двадцати элементов: 23,12,54,60,04,71,37,...

27
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
02.03.2014, 16:57
obj-файл под DOS или под Windows?
  • под DOS
    D:\masm32\bin\ml /c /Cp D:\MYPROG\atest.asm
  • под Windows
    D:\masm32\bin\ml /c /Cp /Gz /ID:\masm32\include /coff /nologo D:\MYPROG\atest.asm
0
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
02.03.2014, 18:11  [ТС]
Что-то произошло, как бы малозаметное милькание. Под виндовс.

Добавлено через 2 минуты
Где его искать, объектный файл?

Добавлено через 1 час 7 минут
Не разобрался.

D:\masm32 это папка с подпапками ассемблера

D:\MYPROG\atest.asm это моя программа

Как создать обьектны файл в D:\MYPROG ?
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
02.03.2014, 18:42
Объектный файл будет создан в текущем каталоге (папке).

Перемещайся в каталог (папку) с твоей программой
cd D:\MYPROG
И будучи там запускай ассемблер, указав операционке где его брать :
D:\MASM32\BIN\ml ключи atest.asm
, это если у тебя MASM32 инсталлирован в папку D:\MASM32
1
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
02.03.2014, 19:10  [ТС]
Спасибо! Попробую

Добавлено через 1 минуту
Ну да, инсталлирован в папку D:\MASM32

Добавлено через 16 минут
То есть так? cd D:\MYPROG D:\MASM32\BIN\ml

Так выходит ошибка, а так D:\MYPROG D:\MASM32\BIN\ml попадаю в папку D:\MYPROG

И так D:\MYPROG D:\masm32\topgun.exe попадаю в папку D:\MYPROG
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
02.03.2014, 19:31
>То есть так? cd D:\MYPROG D:\MASM32\BIN\ml
Да не в одну строчку. Это две отдельные команды.
2
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
03.03.2014, 16:02  [ТС]
М-да... Позвольте начать с командной строки. как в ней двигаца назад?? Часто бывает ошибка , да и вообще.. Уже кучу разных клавиш наугад перепробовал.
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
03.03.2014, 16:45
В чистой командной строке мало средств редактирования. Ошибся, нажимаешь Backspace несколько раз, забивая набранное неправильно, потом вписываешь правильно. Ну и нажатие F3 вспоминает последнюю исполненную команду.

Очень удобно работать с командной строкой из под FAR. Ctrl-стрелка тогда перемещает курсор по кускам команды а строке. Ctrl-E вспоминает последнюю набранную команду. Alt-F8 выдает список уже набранных команд из которого можно выбрать. Можно вставлять в командную строку из буфера обмена по Shift-Ins.

Другой удобный способ - создать BAT-файл с командами командной строки и уже его запускать. BAT-файл можно редактировать как текстовый файл, например в блокноте.

Добавлено через 1 минуту
Наиболее удобный способ - работать с BAT-файлом сидя в FAR Manager-е

Добавлено через 5 минут
Те кто начинали в MS-DOS под Norton Commander-ом или Волков-коммандером или DOS-Navigator-ом типично сидят в FAR-е, поскольку для них интерфейс Виндоуз - это только время терять. Почти что угодно в FAR-е делается в несколько раз быстрее. У интерфейса Виндоуз только одно преимущество - он интуитивно понятен людям, которые компьютер видят первый раз.

Добавлено через 2 минуты
А чистой командной строкой, получаемой по cmd.exe, пользуются только мазохисты или на чужом компе, на котором FAR-а нет.
2
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
03.03.2014, 17:17
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

Dimka-novitsek,
я расскажу как использую один единственный бат-файл для работы с разными ассемблерами (tasm, masm, fasm, nasm, goasm) и при этом создаю разные типы файлов COM, EXE for DOS, EXE for Windows, SYS, DLL при желании можете продлить этот список самостоятельно...
Как создать универсальный bat-файл
Действительно, приходится писать и под DOS, и под Windows, используя TASM, MASM, WASM (Watcom Assembler), FASM, NASM ― наш исходный файл имеет стандартное расширение asm, а в качестве результата требуется com, exe, dll, lib... А если мы пишем exe-файл для Windows ― тогда по разному нужно собирать exe под console или gui... Можно ли предельно упростить сборку из ASM-файлов и при этом не писать каждый раз новый bat-файл?
Для начала напишем bat-файл, который по щелчку мыши или по нажатию на Enter создает gui-шный файл под Windows, причем, если в той же папке будет rc-файл с тем же именем, тогда к нашему obj-файлу будет добавлен res-файл.
Полетели! Пишем asm.bat следующего содержания
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
set filename=
set masm_path=\masm32
if exist %filename%.rc (
%masm_path%\bin\rc /v %filename%.rc
%masm_path%\bin\cvtres /machine:ix86 %filename%.res
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm  || exit
%masm_path%\bin\Link /SUBSYSTEM:WINDOWS /ALIGN:16 ^
/LIBPATH:%masm_path%\lib /NOLOGO %filename%.obj %filename%.res || exit
del %filename%.res
) else (
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm  || exit
%masm_path%\bin\Link /SUBSYSTEM:WINDOWS /ALIGN:16 ^
/LIBPATH:%masm_path%\lib /NOLOGO %filename%.obj
)
Получившийся bat-файл работает в полуавтоматическом режиме. В первой строке «set filename=» вписываем имя нашего asm-файла и запускаем asm.bat, а чтобы наши bat-файлы не плодились, как тараканы, нужно этот asm.bat перетаскивать из проекта в проект. Согласитесь это не совсем то что мы хотели ― точнее совсем не то!
Far Menager, так же как до этого Norton commander, можно «приучить» к определенным действиям с файлами, имеющими одинаковое расширение. Far Menager поддерживает ассоциации файлов, которые позволяют задавать разнообразные действия на запуск, редактирование и просмотр файлов, заданных маской (в данном случае маска «*.asm»). Можно добавлять новые ассоциации с помощью команды «Ассоциация файлов» в «Меню команд». Можно задать несколько ассоциаций для одного типа файлов и выбрать желаемую ассоциацию из меню. В списке ассоциаций доступны следующие действия:
Ins ― добавить новую ассоциацию;
F4 ― изменить настройки текущей ассоциации;
Del ― удалить текущую ассоциацию.
При запуске из командной строки, мы пишем примерно следующее:
Code
1
> asm.bat msgbox.asm
asm.bat должен проанализировать командную строку, взять первый аргумент после своего имени, выделить из него название файла без расширения «.asm» и подставить это имя в переменную filename. Первый аргумент после имени программы обозначают как %1. Осталось научиться, как из полного имени файла выделять название файла без расширения. В ассоциированных командах используются специальные метасимволы, среди которых «!» означающий длинное имя без расширения. Ну вот ― знаний у нас достаточно для решения этой проблемы!

Теперь нужно подправить наш asm.bat ― на первой строке пишем
Code
1
set filename=%1
Запускаем FAR ― жмем на F9 https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow «Команды» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow «Ассоциации файлов» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow F4 https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow «Маска файла» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow Набираем «*.asm» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow «Команда, выполняемая по Enter» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow Набираем «asm.bat !» а сам asm.bat скопируем в Windows\system32\. Теперь стоит по любому asm-файлу щелкнуть мышью или навести курсор и нажать на Enter, как будет запущен процесс компиляции и линковки. И asm.bat единственный! Но мы-то хотели, чтобы он был еще и универсальным...

Разделим наш asm-bat на несколько частей, допустим, в первой части asm.bat строки, которые собирают COM-файлы, во второй части ― строки, которые собирают из asm-файла EXE-файлы для DOS, в третьей ― EXE-файлы для Windows (причем, когда нам нужен GUI подставляется параметр /SUBSYSTEM:WINDOWS а когда нужна консоль ― параметр /SUBSYSTEM:CONSOLE), в четвертой ― DLL-файлы, в пятой ― SYS-файлы и т.д., а часть строк asm-bat будет общей для удаления «мусора» в виде obj-файлов и т.п.
Пусть первая строка нашего asm-файла скажет нашему универсальному bat-файлу какой тип файла у нас должен получиться в результате компиляции и линковки, для какой операционной системы (Windows, DOS) этот файл будет предназначен и каким ассемблером его нужно компилировать и линковать.
Если первую строку в asm-файле закомменировать, то она будет игнорироваться компилятором, но будет восприниматься командным процессором, который, в свою очередь, игнорирует символ «точка с запятой».
Итак первая строка asm-файла ― мы пишем на masm-диалекте и хотим получить com-файл под dos:
Code
1
2
3
4
5
6
; masm com dos #
.model tiny
.code
org 100h
start:
. . .
Внутри нашего asm.bat вставим процедуру, которая по трем первым словам, разделенным пробелами или табуляцией составит метку, на которую передаст управление внутри asm.bat и там уже из нашего asm-файла сделают необходимый нам файл-результат
Code
1
2
3
4
5
6
7
:read_settings 
for /f "eol=# tokens=2-5" %%A in (%filename%.asm) do (
set compiler=%%A
set kind_of_file=%%B
set os=%%C
if %%D == # exit /b)
exit /b
Небольшие пояснения
:
:read_settings ― это имя нашей процедуры
Процедура читает первую строку asm-файла и работает с первыми пятью лексемами, разделенными пробелами или табуляцией и сопоставляет их с переменными начиная с %%A. Первое поле ― знак ";" экранирует всю строку, второе поле ― %%A, третье ― %%B, четвертое ― %%C, если пятое поле равно "#" ― выходим из процедуры.
for Запуск некоторой команды для каждого файла из заданного множества.
for {%переменная|%%переменная} in (множество) do команда

{%переменная|%%переменная}
Используйте %переменная для выполнения команды for из командной строки. Используйте %%переменная для выполнения команды for в пакетном файле. Переменные учитывают регистр и могут быть представлены со значением альфа, например, %A, %B или %C.
(множество)
Задает один или несколько файлов, каталогов, диапазон значений или текстовых строк, подлежащих обработке заданной командой. Скобки являются обязательными.
команда
Задает команду, которая будет выполнена для каждого файла, каталога диапазона значений или текстовой строки, включенной в указанный параметр (множество).
/f
передает первый отделенный пробелом элемент из каждой строки каждого файла.
eol=#
Задает символ конца строки (end of line).
tokens=x,y,m-n
Задает элементы, передаваемые из каждой строки в тело цикла for при каждой итерации. В результате размещаются дополнительные имена переменных. Форма m-n задает диапазон, указывающий элементы с m-го по n-ый.
set переменная=
Указывает имя переменной, значение которой требуется задать или изменить
exit /b
Выход из текущего пакетного сценария
goto метка
В пакетной программе передает управление Windows XP в строку, определенную меткой. Когда метка найдена, выполнение продолжается со следующей за ней строки.
call :метка [аргументы]
:метка
Указывает метку, на которую должно быть передано управление программы пакетной обработки. При использовании команды call с этим параметром создается новый контекст пакетного файла, а управление передается инструкции, следующей за указанной меткой. Когда первый раз встречается конец пакетного файла (после перехода на метку), управление возвращается на инструкцию, следующую за инструкцией call. При втором достижении конца файла выполнение пакетной программы прекращается. Команда goto :eof позволяет возвращать управление из пакетной программы.
аргументы
Задает данные командной строки, которые передаются в новый экземпляр программы пакетной обработки, начинающейся с :метки, включая параметры командной строки, имена файлов, пакетные параметры (в диапазоне от %1 до %9) или переменные (например %filename%).
Code
1
2
3
4
cls
set filename=%1
call :read_settings %filename%
goto %compiler%%os%%kind_of_file%
Стираем с экрана (cls), получаем имя asm файла без расширения (set filename=%1) и передаем его в процедуру, в зависимости от требуемого ассемблера, ос и типа файла идем на соответствующую ветку (goto ...). Далее, по значениям в переменных compiler, kind_of_file, os обрабатываем asm-файл. Например, часть asm.bat собирающая на masm com-файл под dos выглядит вот так
Code
1
2
3
4
5
6
7
. . .
:masmdoscom
if exist %filename%.%kind_of_file% del %filename%.%kind_of_file%
ml /AT %filename%.asm
del %filename%.obj
exit
. . .
Так как внутри нашего asm.bat появилась процедура, придется внести небольшое изменение в запуск ассоциированного файла.
Запускаем FAR ― жмем на F9 https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow «Команды» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow "Ассоциации файлов" https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow F4 https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow «Маска файла» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow Набираем «*.asm» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow «Команда, выполняемая по Enter» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow Набираем «call asm.bat !»

ниже полное содержание asm.bat, который я использую на своем компьютере
Code
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
cls
set filename=%1
call :read_settings %filename%
@echo %compiler% %os% %kind_of_file%
if exist %filename%.exe del %filename%.exe
if exist %filename%.com del %filename%.com
if exist %filename%.dll del %filename%.dll
set %compiler%_path=d:\Aquila
goto :%compiler%%os%%kind_of_file%
:wasmwindowsgui
%wasm_path%\bin\wasm -6prs -mf -i%wasm_path%\include\WASM %filename%.asm || exit
%wasm_path%\bin\wlink file %filename%.obj form windows nt op c LIBPath ^
%wasm_path%\lib\ Library user32.lib,kernel32.lib,gdi32.lib
goto :m1
:fasmdoscom
:fasmdosexe
%fasm_path%\bin\fasm %filename%.asm
exit
:goasmwindowsgui
%goasm_path%\bin\GoAsm %filename% 
if exist %1.rc (
%goasm_path%\bin\GoRc /r %filename%.rc || exit
%goasm_path%\bin\GoLink %filename%.obj %filename%.res user32.dll kernel32.dll ^
gdi32.dll comctl32.dll shell32.dll ole32.dll comdlg32.dll || exit
del %filename%.res
) else (
%goasm_path%\bin\GoLink %filename%.obj user32.dll kernel32.dll gdi32.dll ^
comctl32.dll shell32.dll ole32.dll comdlg32.dll
)
goto :m1
:goasmwindowsconsole
%goasm_path%\bin\GoAsm %filename%
%goasm_path%\bin\GoLink /console %filename%.obj kernel32.dll user32.dll ^
winmm.dll gdi32.dll
goto :m1
:lzasmwindowsconsole
:lzasmwindowsgui
%lzasm_path%\bin\lzasm %filename%.asm 
%lzasm_path%\bin\alink %filename%.obj -oPE -c -subsys %kind_of_file%
goto :m1
:lzasmdoscom
%lzasm_path%\bin\lzasm %filename%.asm 
%lzasm_path%\bin\alink %filename%.obj -oCOM -c
goto :m1
:lzasmdosexe
%lzasm_path%\bin\lzasm %filename%.asm 
%lzasm_path%\bin\alink %filename%.obj -oEXE -c
goto :m1
:masmwindowsgui
set masm_path=d:\masm32
if exist %filename%.rc (
%masm_path%\bin\rc /v %1.rc
%masm_path%\bin\cvtres /machine:ix86 %1.res
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm  || exit
%masm_path%\bin\PoLink1 /SUBSYSTEM:WINDOWS /ALIGN:4 /MERGE:.data=.text ^
/LIBPATH:%masm_path%\lib /NOLOGO /STUB:%masm_path%\bin\stubby.exe %1.obj %filename%.res || exit
del %filename%.res
) else (
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm  || exit
%masm_path%\bin\PoLink1 /SUBSYSTEM:WINDOWS /ALIGN:4 /MERGE:.data=.text ^
/LIBPATH:%masm_path%\lib /NOLOGO /STUB:%masm_path%\bin\stubby.exe %filename%.obj
)
goto :m1
:masmwindowsnative
if exist %1.sys del if exist %1.sys
set masm_path=d:\masm32
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /nologo /c /coff %filename%.asm  || exit
%masm_path%\bin\link /LIBPATH:%masm_path%\lib\ /nologo /driver /base:0x10000 ^
/align:32 /out:%filename%.sys /subsystem:native %filename%.obj  || exit
goto :m1
:tasmwindowsgui
%tasm_path%\bin\tasm32 /I%tasm_path%\include\TASM /q /z %filename%.asm  %filename%.obj /ml/m3
%tasm_path%\bin\ilink32 -L%tasm_path%\lib /Tpe /aa /c /o /x %filename%.obj
goto :m1
:tasmwindowsconsole
%tasm_path%\bin\tasm32 /I%tasm_path%\include\TASM %filename%.asm /ml /m3 /q /z %filename%.obj 
%tasm_path%\bin\ilink32 -L%tasm_path%\lib /Tpe /ap /c /o /x %filename%.obj
goto :m1
:nasmwindowsconsole
:nasmwindowsgui
%nasm_path%\bin\nasmw -O1 -f bin %filename%.asm -o %filename%.exe ^
-I%nasm_path%\include\NASM\
exit
:nasmdoscom
:nasmdosexe
:nasmwindowsdll
%nasm_path%\bin\nasmw -f bin %filename%.asm -o %filename%.%kind_of_file% ^
-I%nasm_path%\include\NASM\
exit
:tasmdoscom
%tasm_path%\bin\tasm /m3 %filename%.asm
%tasm_path%\bin\tlink /t/x %filename%.obj
goto :m1
:tasmdosexe
%tasm_path%\bin\tasm /m3 %filename%.asm
%tasm_path%\bin\tlink /x %filename%.obj
goto :m1
:wasmdoscom
%wasm_path%\bin\wasm %filename%.asm
%wasm_path%\bin\wlink file %filename%.obj form dos com
goto :m1
:wasmdosexe
%wasm_path%\bin\wasm %filename%.asm
%wasm_path%\bin\wlink file %filename%.obj form dos
goto :m1
:рoasmwindowsconsole
%poasm_path%\bin\poasm /Gz /I%poasm_path%\include\PoAsm %filename%.asm 
%poasm_path%\bin\polink /SUBSYSTEM:CONSOLE /LIBPATH:%poasm_path%\lib /MERGE:.data=.text %filename%.obj 
goto :m1 
 
:masmdoscom
%masm_path%\bin\ml /AT /c %filename%.asm
%masm_path%\bin\link16 /T %filename%.obj,,,,,
goto :m1
:masmdosexe
%masm_path%\bin\ml /c %filename%.asm
%masm_path%\bin\link16 %filename%.obj,,,,,
:m1
if exist %filename%.map del %filename%.map
if exist %filename%.obj del %filename%.obj
if exist %filename%.ilc del %filename%.ilc
if exist %filename%.ild del %filename%.ild
if exist %filename%.ilf del %filename%.ilf
if exist %filename%.ils del %filename%.ils
if exist %filename%.tds del %filename%.tds
exit
:read_settings
for /f "eol=# tokens=2-5" %%A in (%filename%.asm) do (
set compiler=%%A
set os=%%B
set kind_of_file=%%C
if %%D == # exit /b )
exit /b
Если вы не используете Far Menager, а набираете ASM-файлы в NotePad или еще где-то, тогда в bat-файле переделаем все «%1» на «%~n1», щелкаем по «Мой компьютер» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow «Сервис» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow «Свойства папки» https://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow «Типы файлов» и связываем ASM-файлы с файлом asm.bat.
5
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
03.03.2014, 22:50  [ТС]
Получившийся bat-файл производит какое-то мелькание, при его работе неясно промелькивает черный квадрат- и все.

Огромное спасибо конечно за столь развернутый ответ!
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2094 / 528 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
03.03.2014, 23:25
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Получившийся bat-файл производит какое-то мелькание, при его работе неясно промелькивает черный квадрат- и все.
Mikl___, опять pause людям пожалел
1
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
04.03.2014, 00:18  [ТС]
Вот
Миниатюры
Как создать объектный файл  
0
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
04.03.2014, 00:21  [ТС]
Но ведь должен быть .obj файл?
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2094 / 528 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
04.03.2014, 00:31
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Но ведь должен быть .obj файл?
Бат файл для меня очень сильное колдунство. Поэтому для локализации затыка я бы например использовал финт ушами. Попробовать прогнать через него не свою программу, а какую нибудь заведомо исправную "хелло мир" из того же пути запендюрить. Если с неё obj файл разродится значит дело не в батнике и не в путях, а в самой проге. Но это антинаучно.
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
04.03.2014, 02:59
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Но ведь должен быть .obj файл?
удали в bat-файле строку
Code
1
if exist %filename%.obj del %filename%.obj
obj-файл это "программный мусор" поэтому bat-файл чистит дисковое пространство после своей работы,
Получившийся bat-файл производит какое-то мелькание, при его работе неясно промелькивает черный квадрат- и все.
перед строкой exit вставь строку pause
1
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
04.03.2014, 23:57  [ТС]
Атеперь позвольте разобрать более пошагово. Я в нотепаде дополняю строки батника комментариями.

Первый аргумент после имени программы обозначают как %1. Можно подробнее?

Добавлено через 6 часов 45 минут
А может кто-нибудь закомментировать строки бат-файла, что они делают?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
05.03.2014, 04:27
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
А может кто-нибудь закомментировать строки бат-файла, что они делают?
Dimka-novitsek,
а может быть ты сам попробуешь комментировать и при этом внимательно будешь читать и в некоторых случаях перечитывать топик #9 и если комментарии будут неправильными, то я поправлю
1
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
06.03.2014, 01:09  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
set filename=%1  rem мы создаем переменную в которую у нас помещается значение.. Запуская его мышью Вы не передаете в него никаких параметров.
set masm_path=\masm32  rem   мы создаем переменную в которую у нас помещается путь в masm32?
if exist %filename%.rc (   rem  если существует значение переменной filename .rc  это что?   А, это какое-то расширение.
%masm_path%\bin\rc /v %filename%.rc   rem  /v  это что означает?  Я нашол rc.exe  Это Microsoft Resource Compiler
%masm_path%\bin\cvtres /machine:ix86 %filename%.res  rem Я нашол cvtres.exe  Это Resource File To COFF Object Conversion Utility
%masm_path%\bin\ml /c /Cp /Gz /I%masm_path%\include /coff /nologo %filename%.asm || exit  rem /c /Cp /Gz /I% Это что?Действительно, это что? Я из
 rem всей строки понимаю только %masm_path% -это значение переменной.
%masm_path%\bin\Link /SUBSYSTEM:WINDOWS /ALIGN:16 ^  rem ^ - означает, что команда продолжается в следующей строке;Link - линковщик? \Link /SUBSYSTEM:WINDOWS /ALIGN:16 это что?
/LIBPATH:%masm_path%\lib /NOLOGO %filename%.obj %filename%.res || exit  rem Это что?
del %filename%.res  rem Это что?
)
Добавлено через 3 часа 14 минут
Подитожу

В общем, не понятны все команды, пиредающиеся через обратную дробь!! Причом я час гуглил на все лады.

А так же неепонятно это || exit что это с чем соединяется и куда выходит.

В общем мне 100% непонятны все нижние строки.

Ну а моя справка говорит, что ,, эта команда не поддерживается,, .
0
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
06.03.2014, 03:43
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Запуская его мышью Вы не передаете в него никаких параметров.
Нет. Вместо %1 подставляется то что пойдет после первого пробела после имени батника. В нашем случае имя асм-файла.

Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
/v это что означает?
Команда для mc.exe, отображает сообщения о ходе компиляции.

Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Это что?Действительно, это что?
Тоже команды.

Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
А так же неепонятно это || exit что это с чем соединяется и куда выходит.
Это означает, что если команда не выполнена, то выполняем команду exit.
3
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
07.03.2014, 00:14  [ТС]
/v Команда для mc.exe, отображает сообщения о ходе компиляции.

Куда отображает? Это важно для дальнейшего выполнения программы?

Добавлено через 18 минут
%masm_path%\bin\rc /v %filename%.rc rem /v Команда для mc.exe, отображает сообщения о ходе компиляции. Я нашол rc.exe Это Microsoft Resource Compiler


А почему в этой строке дана /v Команда для mc.exe, тогда как вроде бы вызывается rc.exe?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.03.2014, 00:14
Помогаю со студенческими работами здесь

Как создать COM-файл?
Здравствуйте. ; Programm Hello3 .MODEL SMALL .CODE org 100h begin: jmp start Hello DB 'Hello!$' start: LEA DX,Hello ...

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

Как подключить объектный файл из другого проекта?
Привет всем! Есть 2 проекта в одном решении (на самом деле их больше, но не суть) Каждый проект при сборке создает свой исполняемый...

Объектный файл
День добрый, подскажите пожалуйста, где можно почитать про структуру объектных файлов для Windows, Linux и MacOS? и где можно почитать...

Не создаётся объектный файл
Необходимо создать объектный файл вот код: #include <stdio.h> //#include <conio.h> extern "C" void asmproc(char ch,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru