Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2008, 22:51   #1
Alcash
 
Регистрация: 20.06.2008
Сообщений: 4
По умолчанию не линкует, тобишь не компанует

пользуюсь masm32 v9. батник написал правильно( я так думаю). он компилирует, но не линкует. программу я первую сделал, обычную "hello world"

cls
echo off
c:\masm32\bin\ml.exe /c /coff C:\masm32\prog\fir.asm
echo =================================== =============================
echo скомпилировал
echo =================================== =============================
c:\masm32\bin\link.exe /subsystem:windows C:\masm32\prog\fir.obj

echo Press any key to close this window...
pause > nul
echo "Succesful"
Изображения
Тип файла: jpg Безымянный.JPG (33.2 Кб, 145 просмотров)
Alcash вне форума Ответить с цитированием
Старый 22.06.2008, 01:42   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Alcash, если компилируете с использованием MASM-овских заголовков, то, по идее, должно быть достаточно дописать в тексте.
Код:
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\kernel32.lib
B_N вне форума Ответить с цитированием
Старый 22.06.2008, 08:36   #3
Alcash
 
Регистрация: 20.06.2008
Сообщений: 4
По умолчанию

includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\kernel32.lib

куда именно нужно вставить эти две строчки? в батнике не место им, тк он его не понимает, а если в исходник, то я везде его вставлял( где по моему предположению они могут ноходится), и не всё ровно проблема таже
Alcash вне форума Ответить с цитированием
Старый 22.06.2008, 08:50   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Alcash Посмотреть сообщение
куда именно нужно вставить эти две строчки? в батнике не место им, тк он его не понимает, а если в исходник, то я везде его вставлял( где по моему предположению они могут ноходится), и не всё ровно проблема таже
Конечно в исходник. Покажите его чтобы вести предметный разговор. Возможны разные варианты в зависимости от того, как и где объявлены функции, пользуетесь ли Вы MASMовскими инклудами и т.п.
B_N вне форума Ответить с цитированием
Старый 22.06.2008, 09:54   #5
Alcash
 
Регистрация: 20.06.2008
Сообщений: 4
По умолчанию

код первой попавшейся программы из курса молодого бойца
Код:
 .386 
.model flat 

extrn ExitProcess:PROC 
extrn MessageBoxA:PROC 

.data 

Ttl db "First ASSEMBLER program",0h 
Msg db 'Hello, World!!!!',0h 

.code 

start: 
     push 0h 
         push offset Msg 
         push offset Ttl 
         push 0h 
         call MessageBoxA 
         push 0h 
         call ExitProcess 
end    start
в программе, я думаю, ошибки нет.
через tasm32 и компилирует и линкует, но всё таки нужно уметь на всём работать.

Последний раз редактировалось rpy3uH; 22.06.2008 в 20:18.
Alcash вне форума Ответить с цитированием
Старый 22.06.2008, 20:21   #6
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

на MASM это будет вот так:
Код:
.386p 
.model flat, stdcall 
option casemap:none 

includelib .\masm32\lib\kernel32.lib 
includelib .\masm32\lib\user32.lib 

include .\masm32\include\windows.inc 
include .\masm32\include\kernel32.inc 
include .\masm32\include\user32.inc 

.data 

Ttl db "First ASSEMBLER program",0h 
Msg db 'Hello, World!!!!',0h 

.code 

start: 
    push 0h 
    push offset Msg 
    push offset Ttl 
    push 0h 
    call MessageBoxA 
    push 0h 
    call ExitProcess 
end    start
компиляция
E:\Program\MASM\masm32\bin\ml.exe /c /FPi /coff current.asm
E:\Program\MASM\masm32\bin\link.exe /subsystem:windows current.obj
rpy3uH вне форума Ответить с цитированием
Старый 22.06.2008, 20:44   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Или второй вариант - без использования инклудов, но тогда имены должны быть в COFF-декорации и библиотеки указаны явно:

Код:
.386
.model flat

extrn _ExitProcess@4:PROC
extrn _MessageBoxA@16:PROC

.data

Ttl 		db 		"First ASSEMBLER program",0h
Msg 		db 		'Hello, World!!!!',0h

.code

_start:
			push 	0h
			push 	offset Msg
			push 	offset Ttl
			push 	0h
			call 	_MessageBoxA@16

			push 	0h
			call 	_ExitProcess@4
end _start
и строка линкера будет выглядеть примерно так:
Цитата:
c:\masm32\bin\link.exe /subsystem:windows /libpath:c:\masm32\lib user32.lib kernel32.lib C:\masm32\prog\fir.obj
B_N вне форума Ответить с цитированием
Старый 23.06.2008, 09:57   #8
Alcash
 
Регистрация: 20.06.2008
Сообщений: 4
По умолчанию

Всем спасибо, теперь всё правильно работает
Alcash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно отлаживать в masm32? Minimus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 12.08.2008 10:54
Random на MASM32 Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 02.05.2008 16:00
DirectX на masm32 Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 10.03.2008 23:05
обновление в блоге - MASM32 и DELPHI - битва за размер… Pblog Обсуждение статей 0 19.09.2007 14:40