Assembler & Visual Studio 6.0
4 отговора
265 прегледа
Assembler & Visual Studio 6.0
Imam edno pitane:
kak da compiliram i linkvam *.asm filowe v sredata na Visual C++ 6.0 ?
Stava vupros za proekt na 4ist asebmler taka 4e startovata to4ka na programata na se opredelq v samiq *.asm fail ( _START - direktiva).Imam Service Pack 5 i podhodq6t Processor Pack. Opitah s custom build (i predpolagam 4e tova e na4ina)no ne6to ne mi se polu4ava.
kak da compiliram i linkvam *.asm filowe v sredata na Visual C++ 6.0 ?
Stava vupros za proekt na 4ist asebmler taka 4e startovata to4ka na programata na se opredelq v samiq *.asm fail ( _START - direktiva).Imam Service Pack 5 i podhodq6t Processor Pack. Opitah s custom build (i predpolagam 4e tova e na4ina)no ne6to ne mi se polu4ava.
Re: Assembler & Visual Studio 6.0
не могат да се правят толкова сложни неща с студиото. направи го с OLE 2
стой та гледай
стой та гледай
Re: Assembler & Visual Studio 6.0
значи VCто работи така:
когато пуснеш компилация, то вика файла cl.exe и му подава от команден ред параметри, включващи това което трябва да се компилира и опциите. после подава обектните файлове на линкера по същия начин, като тук се подават и параметри които указват някои важни работи като това каква субсистема е проекта.
ето един пример за win32 приложение
/nologo /subsystem:windows /incremental:yes /pdb:"Debug/TstStenaCM.pdb" /debug /machine:I386 /out:"Debug/TstStenaCM.exe" /pdbtype:sept
ето един за конзола:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/probi.pdb" /debug /machine:I386 /out:"Debug/probi.exe" /pdbtype:sept
значи единият вариант е да си сложиш твой компилатор и линкер, а другия е да ползваш стандартна подложка, например win32 и да сложиш в някой от твоите модули функция winmain, която ще бъде извикана автоматично от модула който отговаря за начално зареждане. имай предвид че това не е истинската входна точка. истинската всъщност имаше друго име, но не мога да се сетя можеш ли да я прихванеш. май тя викаше конструкторите на глобалните променливи. другия вариант е да укажеш име на входна точка с параметъра /ENTRY:symbol
поиграй си с линкера и ще се светнеш. аз съм си играл, ама съм забравил как беше. а тия параметри можеш да си ги бараш от
Project->Settings->Link / C/C++
абе ето ти направо опциите на линкера
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
usage: LINK [options] [files] [@commandfile]
options:
/ALIGN:#
/BASE:{address|@filename,key}
/COMMENT:comment
/DEBUG
/DEBUGTYPE:{CV|COFF}
/DEF:filename
/DEFAULTLIB:library
/DELAY:{NOBIND|UNLOAD}
/DELAYLOAD:dll
/DLL
/DRIVER[:{UPONLY|WDM}]
/ENTRY:symbol
/EXETYPE:DYNAMIC
/EXPORT:symbol
/FIXED[:NO]
/FORCE[:{MULTIPLE|UNRESOLVED}]
/GPSIZE:#
/HEAP:reserve[,commit]
/IMPLIB:filename
/INCLUDE:symbol
/INCREMENTAL:{YES|NO}
/LARGEADDRESSAWARE[:NO]
/LIBPATH:dir
/LINK50COMPAT
/MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|SH4}
/MAP[:filename]
/MAPINFO:{EXPORTS|FIXUPS|LINES}
/MERGE:from=to
/NODEFAULTLIB[:library]
/NOENTRY
/NOLOGO
/OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98}
/ORDER:@filename
/OUT:filename
/PDB:{filename|NONE}
/PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]}
/PROFILE
/RELEASE
/SECTION:name,[E][R][W][S][D][K][L][P][X]
/STACK:reserve[,commit]
/STUB:filename
/SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]]
/SWAPRUN:{CD|NET}
/VERBOSE[:LIB]
/VERSION:#[.#]
/VXD
/WARN[:warninglevel]
/WINDOWSCE:{CONVERT|EMULATION}
/WS:AGGRESSIVE
когато пуснеш компилация, то вика файла cl.exe и му подава от команден ред параметри, включващи това което трябва да се компилира и опциите. после подава обектните файлове на линкера по същия начин, като тук се подават и параметри които указват някои важни работи като това каква субсистема е проекта.
ето един пример за win32 приложение
/nologo /subsystem:windows /incremental:yes /pdb:"Debug/TstStenaCM.pdb" /debug /machine:I386 /out:"Debug/TstStenaCM.exe" /pdbtype:sept
ето един за конзола:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/probi.pdb" /debug /machine:I386 /out:"Debug/probi.exe" /pdbtype:sept
значи единият вариант е да си сложиш твой компилатор и линкер, а другия е да ползваш стандартна подложка, например win32 и да сложиш в някой от твоите модули функция winmain, която ще бъде извикана автоматично от модула който отговаря за начално зареждане. имай предвид че това не е истинската входна точка. истинската всъщност имаше друго име, но не мога да се сетя можеш ли да я прихванеш. май тя викаше конструкторите на глобалните променливи. другия вариант е да укажеш име на входна точка с параметъра /ENTRY:symbol
поиграй си с линкера и ще се светнеш. аз съм си играл, ама съм забравил как беше. а тия параметри можеш да си ги бараш от
Project->Settings->Link / C/C++
абе ето ти направо опциите на линкера
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
usage: LINK [options] [files] [@commandfile]
options:
/ALIGN:#
/BASE:{address|@filename,key}
/COMMENT:comment
/DEBUG
/DEBUGTYPE:{CV|COFF}
/DEF:filename
/DEFAULTLIB:library
/DELAY:{NOBIND|UNLOAD}
/DELAYLOAD:dll
/DLL
/DRIVER[:{UPONLY|WDM}]
/ENTRY:symbol
/EXETYPE:DYNAMIC
/EXPORT:symbol
/FIXED[:NO]
/FORCE[:{MULTIPLE|UNRESOLVED}]
/GPSIZE:#
/HEAP:reserve[,commit]
/IMPLIB:filename
/INCLUDE:symbol
/INCREMENTAL:{YES|NO}
/LARGEADDRESSAWARE[:NO]
/LIBPATH:dir
/LINK50COMPAT
/MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|SH4}
/MAP[:filename]
/MAPINFO:{EXPORTS|FIXUPS|LINES}
/MERGE:from=to
/NODEFAULTLIB[:library]
/NOENTRY
/NOLOGO
/OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98}
/ORDER:@filename
/OUT:filename
/PDB:{filename|NONE}
/PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]}
/PROFILE
/RELEASE
/SECTION:name,[E][R][W][S][D][K][L][P][X]
/STACK:reserve[,commit]
/STUB:filename
/SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.##]]
/SWAPRUN:{CD|NET}
/VERBOSE[:LIB]
/VERSION:#[.#]
/VXD
/WARN[:warninglevel]
/WINDOWSCE:{CONVERT|EMULATION}
/WS:AGGRESSIVE
Re: Assembler & Visual Studio 6.0
Ne sum siguren che cl.exe znae za kakuvto i da bilo assembler. Tozi driver, za razlika ot gcc drivera ne wika neshto ot roda na gas (gnu assemblera).
Edin variant e da si namerish MASM - no ne znam dali go ima free njakude. Drug variant e da probvash NASM - Netwide assembler - no az nikoga ne sum go polzwal. Wsushnsot poslednia put kogato mi se nalagashe da kompiliram full-blown assemblerska programa beshe predi njakolko godini - i posledno sus TASM32 na Borland.
Ne sum siguren dali NASM generira kod suvmestim sus tozi na MASM, i naj-verojatno syntaxisa ima razliki. No mozhe i da gresha, procheti poveche tuka:
(tova go namerih ot google tursejki: nasm "microsoft visual studio"):
[url][линк]]
choveka dava objasnenie kak gnu gmp bibliotekata (math biblioteka za golemi chisla), mozhe da se prekompilira pod Microsoft Visual Studio 2003, w kompilatziata sushto uchastwa i NASM. Proveri sorsovete ili neshto ot tozi rod.
Edin variant e da si namerish MASM - no ne znam dali go ima free njakude. Drug variant e da probvash NASM - Netwide assembler - no az nikoga ne sum go polzwal. Wsushnsot poslednia put kogato mi se nalagashe da kompiliram full-blown assemblerska programa beshe predi njakolko godini - i posledno sus TASM32 na Borland.
Ne sum siguren dali NASM generira kod suvmestim sus tozi na MASM, i naj-verojatno syntaxisa ima razliki. No mozhe i da gresha, procheti poveche tuka:
(tova go namerih ot google tursejki: nasm "microsoft visual studio"):
[url][линк]]
choveka dava objasnenie kak gnu gmp bibliotekata (math biblioteka za golemi chisla), mozhe da se prekompilira pod Microsoft Visual Studio 2003, w kompilatziata sushto uchastwa i NASM. Proveri sorsovete ili neshto ot tozi rod.
Re: Assembler & Visual Studio 6.0
Sled dosta bluskane mislq 4e re6ih problema.
Ne sum otkril ni6to osobeno no ponau4ih nqkoi ne6ta.
Zaphod mi prati dosta info (mersi) i me nakara da se porovq iz MSDN helpa.
MASM 6.15 go ima v Processor Pack pri polojenie 4e e instaliran Service Pack 5 s
update-tite podformata na ml.exe.
Posledniq linkva i/ili compilira *.asm.Oba4e za link-a izpolzva link.exe ot Visual Studioto
kato ideqta e za svurzvane na assembler moduli kum programi na C++.Linka avtomati4no
preobrazuva *.obj failovete v COFF ako ne sa (OMF format) i polu4enoto *.exe
ne vurvi kato console prilojenie ako assemblerskata programa e za pod dos.
Okaza se 4e ima opciq na ml.exe na se izpolzva drug link.exe.
Tova i napravih: svalih ot net-a
Microsoft (R) Segmented Executable Linker Version 5.60.339.
Nakraq trqbva6e da se dosetq da izpolzvam Utility project a ne nqkakuv drug i s Custom build
compiliram i svurzvam.
V kraina smetka moga da pi6a na assembler v VS 6.0
(bez da mi se razduva *.exe-to ot main() ili WinMain() ako mi trqbva samo za pod DOS).
Moje i da ima po dobur (lesen) na4in no i taka e dobre.
Mislq da napravq nqkakuv Custom Wizard za celta.
Ако имате идеи по темата пишете:)
Ne sum otkril ni6to osobeno no ponau4ih nqkoi ne6ta.
Zaphod mi prati dosta info (mersi) i me nakara da se porovq iz MSDN helpa.
MASM 6.15 go ima v Processor Pack pri polojenie 4e e instaliran Service Pack 5 s
update-tite podformata na ml.exe.
Posledniq linkva i/ili compilira *.asm.Oba4e za link-a izpolzva link.exe ot Visual Studioto
kato ideqta e za svurzvane na assembler moduli kum programi na C++.Linka avtomati4no
preobrazuva *.obj failovete v COFF ako ne sa (OMF format) i polu4enoto *.exe
ne vurvi kato console prilojenie ako assemblerskata programa e za pod dos.
Okaza se 4e ima opciq na ml.exe na se izpolzva drug link.exe.
Tova i napravih: svalih ot net-a
Microsoft (R) Segmented Executable Linker Version 5.60.339.
Nakraq trqbva6e da se dosetq da izpolzvam Utility project a ne nqkakuv drug i s Custom build
compiliram i svurzvam.
V kraina smetka moga da pi6a na assembler v VS 6.0
(bez da mi se razduva *.exe-to ot main() ili WinMain() ako mi trqbva samo za pod DOS).
Moje i da ima po dobur (lesen) na4in no i taka e dobre.
Mislq da napravq nqkakuv Custom Wizard za celta.
Ако имате идеи по темата пишете:)