Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Windows/Dos > Ошибка при компилляции!


Автор: wrvu 23.12.2009, 16:29
Подскажите как правильно задать компиллятору команду для данного кода:
Код

.MODEL small
.STACK 200h
.DATA
  StringBuffer db 81 dup(?)
.CODE
start: 
  mov ax,2 
  mov ds,ax
  mov ah,0Fh                 
  int 10h
end start


Я прописываю так: ml /c /coff namefile.asm 
Ошибка:  Assembling: namefile.asm
namefile.asm(11) : warning A4023: with /coff switch, leading underscore required for start address : start

------------
Какой в этоге вообще должен получиться файл .com .exe?
Подскажите правильные команды!
мой вариант:
ml /c /coff namefile.asm
link  /subsystem:windows namefile.obj

Автор: 500mhz 23.12.2009, 18:24
в теории ЕХЕ должен получиться, для СОМ нужно указать org 0x100

пс
а чем обусловлен выбор компилятора? не проще ли в фасме скомпилить нажав F9 ? 

Автор: wrvu 23.12.2009, 19:33
500mhz благодарен за ответ. Не в простоте дело, использую компиллятр MASM - компиляция также происходить от одного нажатия клавиши. Но не в нажимании дело, я хочу изучить прерывания, поискал в интернете информацию не нашел.

Если кто владеет такой информацией о прерываниях, и как правильно задавать команды компиллятору, поделитесь пожалуйста. 

Автор: airyashov 23.12.2009, 20:40
Цитата(wrvu @  23.12.2009,  16:29 Найти цитируемый пост)
Какой в этоге вообще должен получиться файл .com .exe?
Подскажите правильные команды!
мой вариант:
ml /c /coff namefile.asm
link  /subsystem:windows namefile.obj


exe
ml namefile.asm - достаточно



Автор: wrvu 23.12.2009, 23:09
airyashov Благодарю за ответ, вот только бы еще правильную команду для link. Иду пробовать твой вариант!!  smile 
-----------------------------------------------
Попробовал, вариант на верном пути, только все равно ошибка.
Код

 Assembling: musor2.asm
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/z2 
"musor2.obj" 
"musor2.exe" 
NUL 
LINK : warning LNK4044: unrecognized option "z2"; ignored
musor2.obj : warning LNK4033: converting object format from OMF to COFF
musor2.obj : warning LNK4078: multiple ".data" sections found with different attributes (C0220040)
LINK : fatal error LNK1181: cannot open input file "musor2.exe"


 Не пойму в чем дело!  smile 
---------------------
Помогите! не могу скомпиллировать, что бы получился рабочий файл .exe
Код

.model small,c
.stack 100h
.data
  StringBuffer db 81 dup(?)
.code
start: 
  mov ax,2 
  mov ds,ax
  mov ah,0Fh                 
  int 10h
end start

Автор: airyashov 24.12.2009, 00:10
незнаю что за масм у Вас 6,11 результат нормальный exe

L:\asm\MASM611\BIN>ml 2.asm
Microsoft ® Macro Assembler Version 6.11
Copyright © Microsoft Corp 1981-1993.  All rights reserved.

 Assembling: 2.asm

Microsoft ® Segmented Executable Linker  Version 5.31.009 Jul 13 1992
Copyright © Microsoft Corp 1984-1992.  All rights reserved.

Object Modules [.obj]: 2.obj
Run File [2.exe]: "2.exe"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:

L:\asm\MASM611\BIN>


Автор: wrvu 24.12.2009, 01:10
airyashov Благодарю за ответ. Помоги мне и на дальше разобраться, у маня Масм вот какой, сообщение после компиляции с ошибкой:

Microsoft ® Macro Assembler Version 6.15.8803
Copyright © Microsoft Corp 1981-2000.  All rights reserved
 Assembling: musor2.asm
Microsoft ® Incremental Linker Version 5.12.8078
Copyright © Microsoft Corp 1992-1998. All rights reserved.

/z2 
"musor2.obj" 
"musor2.exe" 
NUL 
LINK : warning LNK4044: unrecognized option "z2"; ignored
musor2.obj : warning LNK4033: converting object format from OMF to COFF
musor2.obj : warning LNK4078: multiple ".data" sections found with different attributes (C0220040)
LINK : fatal error LNK1181: cannot open input file "musor2.exe"


В чем же ошибка?
airyashov А возможно, прикрипить твой Масм для пробы? Может в версиях разница...

Автор: wrvu 24.12.2009, 01:28
Спасибо за помощь, разобрался с ошибкой, проблемма была в версии LINK.EXE. Получился файл .exe я так понимаю 16-битная программа? Каким отладчиком ее можно просмотреть?  smile 

Автор: Mikl_ 24.12.2009, 04:10
wrvu, 
Вот http://forum.vingrad.ru/forum/topic-238910.html# я прикреплял afdpro -- для 16-разрядных программ достаточно хороший отладчик, еще для этих целей есть insight, td

Автор: wrvu 24.12.2009, 10:36
Спасибо Mikl_, подскажи, вот к примеру такой код
Код

.model small,c
.stack 100h
.data
  StringBuffer db 81 dup(?)
.code
start: 
  mov ax,2 
  mov ds,ax
  mov ah,0Fh                 
  int 10h
end start

может быть .exe 32 бит? Хочу углубиться в изучение портов (USB), как вообще они работают, если имееться такая информация, с радостью почитаю.  smile 

Автор: Mikl_ 24.12.2009, 11:16
wrvu, 
32-разрядные инструкции в 16-разрядных программах (COM, EXE для DOS, OVR, DRV)
делаются путем указания перед инструкции .586 например
Код
.286;<-- команды для микропроцессора 80286
.model tiny ;<-- модель памяти для COM программ
.code
org 100h
start: mov ah,9
          mov dx, offset Hello
          int 21h
.586;<-- далее пойдут инструкции для Пня
       cpuid; <-- инструкция Pentium'a
.286; <-- снова переходим на инструкции 80286
         retn
Hello db 'Hello, world!$'   
end start
 
либо если старый компилятор и не знает новых команд пишешь в кодах например для cpuid -- db 0Fh, 0A2h

Автор: wrvu 24.12.2009, 17:42
Mikl_ Благодарю заответ! Я так понял,что мне нужно идти читать книжки  smile 
Подскажите, если писать программу, которая бы работала с USB портом, нужно использовать прерывания?

Автор: Mikl_ 25.12.2009, 04:02
wrvu, 
Если писать программы для Windows, то там нет прерываний в привычном для DOS понимании, там всё делается через WinAPI-функции

Автор: wrvu 26.12.2009, 16:59
Я так понял, что с помощью IP-функций также можно использовать порт USB?  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)