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

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

02.03.2014, 16:22. Показов 24100. Ответов 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
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
07.03.2014, 11:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Куда отображает?
Боже... ты знаешь много мест куда она может их отобразить?
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Это важно для дальнейшего выполнения программы?
Это важно, чтобы понять почему не заработало.
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
А почему в этой строке дана /v Команда для mc.exe, тогда как вроде бы вызывается rc.exe?
Потому что было без пятнадцати четыре утра, и я опечатался.
1
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
07.03.2014, 23:18  [ТС]
Добрый вечер! А как отслеживать ошибку? Я тут из батника удалил все лишнее, не ругайтесь сильно.


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set filename=%1
ECHO filename
ECHO %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  /Cp /Gz /I%masm_path%\include/coff  %filename%.asm  || pause exit
%masm_path%\bin\Link/LIBPATH:%masm_path%\lib %filename%.obj %filename%.res 
pause
) else (
%masm_path%\bin\ml /Cp /Gz /I%masm_path%\include %filename%.asm  || pause exit
%masm_path%\bin\Link /LIBPATH:%masm_path%\lib %filename%.obj
)
pause
Миниатюры
Как создать объектный файл  
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
08.03.2014, 04:04
Dimka-novitsek,
а для чего ТЕБЕ нужен obj-файл? Давай начнем с того, что ты выложишь содержимое atest.asm
1
Невнимательный
 Аватар для ft4l
2835 / 1260 / 357
Регистрация: 08.02.2013
Сообщений: 7,332
Записей в блоге: 2
08.03.2014, 04:13
Во во, ато вопросы о obj-файлах, а тяга сразу к автоматизированным системам кроссплатформенной межсерверной универсальной чудо-сборки
по поводу бат...
1. не передано имя файла
2. если используется имя без расширения должно быть set filename=%~n1
3."pause exit" так не делается в одной строке, наверное pause & exit или pause & exit /b

если из notepad++ запускать из меню "Запуск"
то в shortcuts.xml должно добавляться что-то вроде
XML
1
2
3
<Command name="ASM BUILD"
Ctrl="no" Alt="no" Shift="no"
Key="0">cmd /K cd $(CURRENT_DIRECTORY) &  ИМЯ_BAT_ФАЙЛА.bat $(FILE_NAME)</Command>
или cmd /C
добавлять надо там где похожие строки, и при незапущеннолм notepad++
и ещё куча или...
у кого-то всё в отдельных папках, с бат-файлами make.bat
у кого-то имена bat-файлов такие-же как filename, и не нужно передавать имя,
или кто-то просто юзает одни и те-же бат-файлы для любых .asm
лично у меня не получается писать бат-файлы не запуская в коммандной строке проверки каких-нибудь моментов
2
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
08.03.2014, 08:20
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

Dimka-novitsek и obj-файл

роман с продолжением
часть первая
Dimka-novitsek,
ответа не дождался, допустим у тебя есть асм-файл atest,asm следующего содержания
Assembler
1
2
3
4
5
6
7
8
9
10
11
.model tiny 
.code
org 100h
start:  mov ah,9
    mov dx,offset Hello
    int 21h
    mov ah,0
    int 16h
    ret
Hello byte "Hello, world!$"
end start
и из этого файла ты решил получить СОМ-файл. Ты должен сделать следующее
  1. создать папку (допустим с именем ТЕМР)
  2. скопировать в эту папку atest.asm и из пакета MASM32 из папки masm32\bin файлы ml.exe, ml.err и lnk16.exe
  3. переименовать файл lnk16.exe в link.exe
  4. создать файл asm.bat
    Code
    1
    
    ml /Cp /AT atest.asm /link /T
  5. зайти в папку TEMP и щелкнуть мышкой по asm.bat
  6. появятся файлы atest.com и atest.obj
  7. запускаем atest.com на исполнение
Твоя цель создание atest.com и файл atest.obj тебе не нужен, поэтому в asm.bat добавим строку
Code
1
2
ml /Cp /AT atest.asm /link /T
del atest.obj
Продолжение следует...

Добавлено через 19 минут
Часть вторая
Допустим Dimka-novitsek, после создания файла atest.com, вошел во вкус и решил создать файл btest.com на основе btest.asm Возник вопрос "что делать?" создать папку ТЕМР2 и повторить всё что делали с файлом atest.asm или использовать папку ТЕМР и в файле asm.bat заменить atest на btest. Таким образом Dimka-novitsek создал файлы ctest.com, dtest.com, etest.com и ftest.com. Но при создании gtest.com Dimka-novitsek добавил в asm.bat строку
Code
1
2
3
set filename=gtest
ml /Cp /AT %filename%.asm /link /T
del %filename%.obj
Теперь можно было создавать СОМ-файлы с любыми именами меняя название только в первой строке
Продолжение следует...

Добавлено через 17 минут
Часть третья. Dimka-novitsek и ЕХЕ-файлы под DOS
Прошло немного времени и Dimka-novitsek решил написать ЕХЕ-файл под DOS. Создал вот такой асм-файл
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.model small
.stack 200
.data
Hello byte "Hello, world!$"
.code
start:  mov ax,@data
    mov ds,ax
    mov ah,9
    mov dx,offset Hello
    int 21h
    mov ah,0
    int 16h
    mov ah,4Ch
    int 21h
end start
Но вот незадача, ключи которые должны передаваться компилятору и линковщику должны быть другими. Пришлось создать бат-файл asm1.bat вот такого содержания
Code
1
2
3
set filename=btest
ml /Cp %filename%.asm
del %filename%.obj
. Теперь Dimka-novitsek создавал СОМ- и ЕХЕ-файлы как блины, но останавливаться на достигнутом не собирался и решил создать ЕХЕ-файл под Windows.
Продолжение следует...

Добавлено через 18 минут
Часть четвертая.
Dimka-novitsek и Windows
Чтобы написать ЕХЕ-файл под Windows Dimka-novitsek ctest.asm со следующим содержанием
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
 
.data
MsgCaption      db "Iczelion's tutorial no.2",0
MsgBoxText      db "Win32 Assembly is Great!",0
 
.code
start:
    invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
    invoke ExitProcess,NULL
end start
чтобы всё скомпилировать и получить ЕХЕ-файл пришлось создать в папке TEMP ещё один файл asm2.bat
Code
1
2
3
4
set filename=ctest
d:\masm32\bin\ml /c /Cp /coff %filename%.asm 
d:\masm32\bin\link /SUBSYSTEM:WINDOWS %filename%.obj 
del %filename%.obj
. При клике мышью по asm2.bat появился ctest.ехе
Продолжение следует...
7
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
08.03.2014, 12:32  [ТС]
СПАСИБО!!!!!!!

Добавлено через 2 минуты
Спасибо!!!! асм-файл у меня почти ровно такой же.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
08.03.2014, 17:35
Часть пятая.
Dimka-novitsek и компилятор ресурсов
Поиграл Dimka-novitsek с Мессаджбоксом и говорит "Не хочу быть вольною царицей -- хочу быть владычицей морскою" "Хочу полноценное оконное приложение с меню, анимированным курсором, блэк джеком и шлюхами". Говорит ему Mikl__ "Так тебе одним асм-файлом не обойтись, нужен тебе еще и файл с описанием ресурсов". Создал Dimka-novitsek асм-файл по имени dtest.asm с таким содержанием
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
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
.386
.model flat,stdcall
option casemap:none
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
 
.data
ClassName db "SimpleWinClass",0
AppName  db "Our First Window",0
MenuName db "FirstMenu",0
Test_string db "You selected Test menu item",0
Hello_string db "Hello, my friend",0
Goodbye_string db "See you again, bye",0
 
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hMenu HMENU ?
 
.const
IDM_TEST equ 1
IDM_HELLO equ 2
IDM_GOODBYE equ 3
IDM_EXIT equ 4
 
.code
start:
    invoke GetModuleHandle, NULL
    mov    hInstance,eax
    invoke GetCommandLine
        mov CommandLine,eax
    invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    LOCAL hwnd:HWND
    mov   wc.cbSize,SIZEOF WNDCLASSEX
    mov   wc.style, CS_HREDRAW or CS_VREDRAW
    mov   wc.lpfnWndProc, OFFSET WndProc
    mov   wc.cbClsExtra,NULL
    mov   wc.cbWndExtra,NULL
    push  hInst
    pop   wc.hInstance
    mov   wc.hbrBackground,COLOR_WINDOW+1
    mov   wc.lpszMenuName,NULL
    mov   wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov   wc.hIcon,eax
    mov   wc.hIconSm,0
    invoke LoadCursor,NULL,IDC_ARROW
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    invoke LoadMenu, hInst, OFFSET MenuName
    mov    hMenu,eax
    INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
           CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hMenu,\
           hInst,NULL
    mov   hwnd,eax
    INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
    INVOKE UpdateWindow, hwnd
    .WHILE TRUE
                INVOKE GetMessage, ADDR msg,NULL,0,0
                .BREAK .IF (!eax)
                INVOKE DispatchMessage, ADDR msg
    .ENDW
    mov     eax,msg.wParam
    ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    .IF uMsg==WM_DESTROY
        invoke PostQuitMessage,NULL
    .ELSEIF uMsg==WM_COMMAND
        mov eax,wParam
        .IF ax==IDM_TEST
            invoke MessageBox,NULL,ADDR Test_string,OFFSET AppName,MB_OK
        .ELSEIF ax==IDM_HELLO
            invoke MessageBox, NULL,ADDR Hello_string, OFFSET AppName,MB_OK
        .ELSEIF ax==IDM_GOODBYE
            invoke MessageBox,NULL,ADDR Goodbye_string, OFFSET AppName, MB_OK
        .ELSE
            invoke DestroyWindow,hWnd
        .ENDIF
    .ELSE
        invoke DefWindowProc,hWnd,uMsg,wParam,lParam
        ret
    .ENDIF
    xor    eax,eax
    ret
WndProc endp
end start
а к нему еще и dtest.rc с вот таким содержанием
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define IDM_TEST 1
#define IDM_HELLO 2
#define IDM_GOODBYE 3
#define IDM_EXIT 4
 
FirstMenu MENU
{
 POPUP "&PopUp"
        {
         MENUITEM "&Say Hello",IDM_HELLO
         MENUITEM "Say &GoodBye", IDM_GOODBYE
         MENUITEM SEPARATOR
         MENUITEM "E&xit",IDM_EXIT
        }
 MENUITEM "&Test", IDM_TEST
}
а чтобы из этих двух файлов получился ЕХЕ-файл пришлось писать asm3.bat
Code
1
2
3
4
5
6
7
set filename=dtest
d:\masm32\bin\rc /v %filename%.rc
d:\masm32\bin\cvtres /machine:ix86 %filename%.res
d:\masm32\bin\ml /c /coff %filename%.asm
d:\masm32\bin\Link /SUBSYSTEM:WINDOWS %filename%.obj %filename%.res
del %filename%.obj
del %filename%.res
Добавлено через 4 часа 35 минут
Часть шестая.
Dimka-novitsek и консольное приложение под Windows
Как-то решил Dimka-novitsek написать консольное приложение под Windows. Создал etest.asm следующего содержания
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
.686
.model flat,stdcall
option casemap:none
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
include \masm32\include\windows.inc;содержит описание типов данных Windows 
COL1 = 2+8;цвет выводимого текста
COL2 = 1+2+8;цвет выводимого текста 2
.data
HANDL  dd ?
HANDL1 dd ?
STR1 db 'Введите строку:',13,10,0
LEN1 = $ - STR1 - 1
STR2 db 'Простой пример консоли',0
LEN2 = $ - STR2 - 1
BUF db 200 dup (?)
LENS db '25',0;количество выведенных символов
CRD COORD <?>
.code
start:   invoke CharToOemA,offset STR1,offset STR1;перекодируем строку из Win в DOS
         invoke FreeConsole;освободим существующую консоль
         invoke AllocConsole;образуем свою консоль
         invoke GetStdHandle,STD_INPUT_HANDLE;получаем HANDL1 для ввода
         mov HANDL1,eax
         invoke GetStdHandle,STD_OUTPUT_HANDLE;получаем HANDL для вывода
         mov HANDL,eax
         mov CRD.X,100
         mov CRD.Y,25
         invoke SetConsoleScreenBufferSize,eax,dword ptr CRD;устанавливаем новый размер окна консоли
         invoke SetConsoleTitleA,offset STR2;определение заголовка окна
         mov CRD.X,0
         mov CRD.Y,10
         invoke SetConsoleCursorPosition,HANDL,dword ptr CRD;устанавливаем позицию курсора
         invoke SetConsoleTextAttribute,HANDL,COL1;задаем цветовые атрибуты выводимого текста
         invoke WriteConsoleA,HANDL,offset STR1,dword ptr LEN1,offset LENS,offset STR1;выводим строку символов
         invoke ReadConsoleA,HANDL1,offset BUF,200,offset LENS,0;ждем ввод строки символов
         invoke SetConsoleTextAttribute,HANDL,COL2;задаем цветовые атрибуты выводимого текста
         invoke WriteConsoleA,HANDL,offset BUF,dword ptr LENS,offset LENS,0
         invoke Sleep,1500;небольшая задержка
         invoke FreeConsole;закрываем консоль
         invoke ExitProcess,0
end start
а к нему asm4.bat
Code
1
2
3
4
set filename=etest
d:\masm32\bin\ml /c /coff %filename%.asm
d:\masm32\bin\Link /SUBSYSTEM:CONSOLE %filename%.obj
del %filename%.obj
и давай штамповать консольные приложения в разделе, чтобы другим студентам помочь...
3
16 / 16 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
09.03.2014, 16:20  [ТС]
1000% !!!!!!!!!!!!!!!!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.03.2014, 16:20
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru