Einsteigerprobleme
-
Hi ich habe folgenden code aus einem tutorial übernommen:
DATEN SEGMENT MELDUNG DB "HALLO WELT !","$" DATEN ENDS STAPEL SEGMENT BYTE STACK DW 128 DUP(0) STAPEL ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATEN,ES:NOTHING,SS:STAPEL MOV AX, DATEN MOV DS, AX CALL PRINT MOV AH, 4CH INT 21H PRINT PROC NEAR MOV AH, 09H MOV DX, OFFSET MELDUNG INT 21H RET PRINT ENDP CODE ENDS
jetzt mache ich (ml Test.asm) aber da kommen zwei fehler
1enddirective requiered und dann noch ein symbol type conflict woran liegt das?
-
Hallo _Newbie_:
Der Fehler ist, dass Du am Ende der Assemblerdatei die Direktive END nicht eingegeben hast:
DATEN SEGMENT MELDUNG DB "HALLO WELT !","$" DATEN ENDS STAPEL SEGMENT BYTE STACK DW 128 DUP(0) STAPEL ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATEN, ES:NOTHING, SS:STAPEL Start: MOV AX, DATEN ;Label Start kennzeichnet Anfang MOV DS, AX CALL PRINT MOV AH, 4CH INT 21H PRINT PROC NEAR MOV AH, 09H MOV DX, OFFSET MELDUNG INT 21H RET PRINT ENDP CODE ENDS END Start ; Direktive END mit Label, das den Programmstart kennzeichnet
Außerdem muss der Anfang des Programms, dort wo die Ausführung starten soll, ein Label haben. Der Name dieses Labels wird hinter der END-Direktive eingefügt. So weiß der Compi beim Starten des Programms, an welcher Stelle die Programmausführung beginnen soll.
Assemblieren solltest Du mit ml /c DeinProgramm.asm. Die Option /c verhindert, dass der Linker automatisch gestartet wird. Bei MASM32 ist es ja ein 32-Bit-Linker, der keine DOS-Exe erzeugen kann.
Du benötigst also noch einen 16-Bit-Linker, der DOS-Exe erzeugen kann. Den gibt es hier: ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe
Die Datei ist ein selbstentpackendes Archiv. Die Datei link.exe umbenennen in z.B. link16.exe und in das bin-Verzeichnis von masm32 kopieren.
Der Aufruf zum Linken lautet: link16 DeinProgramm.obj;
Ohne das Semikolon am Ende durchläuft der Linker eine Abfrageprozedur.
Ciao...
-
Hi leider bekomme ich so immernoch zwei fehler:
Test.asm(17) : error A2004: symbol type conflict
Test.asm(36) : warning A4023: with /coff switch, leading underscore required for start address : Startich benutze den Microsoft
Macro Assembler Version 7.10.3077 der bei der SchülerVerison von VC++ .NET 2003 im bin ordner dabei war.
-
@_Newbie_:
ml /c Test.asm OHNE die Option /coff!!!
Und sollte die Option /coff standardmäßig eingeschaltet sein, gib mal ml /? ein, um die Optionen zu checken.
Ciao...
-
Klappt leider immer noch nicht ich habe mal was rum probier und mit /omf habe ich dann ne obj Datei bekommen aber die lies sich dann nicht linken ich galube ich schike mal eben die hilfe sachen der dateien
ml:
Microsoft (R) Macro Assembler Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.ML [ /options ] filelist [ /link linkoptions ]
/AT Enable tiny model (.COM file) /omf generate OMF format object file
/Bl<linker> Use alternate linker /Sa Maximize source listing
/c Assemble without linking /Sc Generate timings in listing
/Cp Preserve case of user identifiers /Sf Generate first pass listing
/Cu Map all identifiers to upper case /Sl<width> Set line width
/Cx Preserve case in publics, externs /Sn Suppress symbol-table listing
/coff generate COFF format object file /Sp<length> Set page length
/D<name>[=text] Define text macro /Ss<string> Set subtitle
/EP Output preprocessed listing to stdout /St<string> Set title
/F <hex> Set stack size (bytes) /Sx List false conditionals
/Fe<file> Name executable /Ta<file> Assemble non-.ASM file
/Fl[file] Generate listing /w Same as /W0 /WX
/Fm[file] Generate map /WX Treat warnings as errors
/Fo<file> Name object file /W<number> Set warning level
/FPi Generate 80x87 emulator encoding /X Ignore INCLUDE environment path
/Fr[file] Generate limited browser info /Zd Add line number debug info
/FR[file] Generate full browser info /Zf Make all symbols public
/G<c|d|z> Use Pascal, C, or Stdcall calls /Zi Add symbolic debug info
/H<number> Set max external name length /Zm Enable MASM 5.10 compatibility
/I<name> Add include path /Zp[n] Set structure alignment
/link <linker options and libraries> /Zs Perform syntax check only
/nologo Suppress copyright message /safeseh Assert all exception
handlers are declaredlink:
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.usage: LINK [options] [files] [@commandfile]
options:
/ALIGN:#
/ALLOWBIND[:NO]
/ASSEMBLYDEBUG[:DISABLE]
/ASSEMBLYLINKRESOURCE:filename
/ASSEMBLYMODULE:filename
/ASSEMBLYRESOURCE:filename
/BASE:{address|@filename,key}
/DEBUG
/DEF:filename
/DEFAULTLIB:library
/DELAY:{NOBIND|UNLOAD}
/DELAYLOAD:dll
/DELAYSIGN[:NO]
/DLL
/DRIVER[:{UPONLY|WDM}]
/ENTRY:symbol
/EXETYPE:DYNAMIC
/EXPORT:symbol
/FIXED[:NO]
/FORCE[:{MULTIPLE|UNRESOLVED}]
/HEAP:reserve[,commit]
/IDLOUT:filename
/IGNOREIDL
/IMPLIB:filename
/INCLUDE:symbol
/INCREMENTAL[:NO]
/KEYFILE:filename
/KEYCONTAINER:name
/LARGEADDRESSAWARE[:NO]
/LIBPATH:dir
/LTCG[:{NOSTATUS|PGINSTRUMENT|PGOPTIMIZE|STATUS}]
(PGINSTRUMENT and PGOPTIMIZE are only available for IA64)
/MACHINE:{AM33|ARM|EBC|IA64|M32R|MIPS|MIPS16|MIPSFPU|MIPSFPU16|MIPSR41XX|
SH3|SH3DSP|SH4|SH5|THUMB|X86}
/MAP[:filename]
/MAPINFO:{EXPORTS|LINES}
/MERGE:from=to
/MIDL:@commandfile
/NOASSEMBLY
/NODEFAULTLIB[:library]
/NOENTRY
/NOLOGO
/OPT:{ICF[=iterations]|NOICF|NOREF|NOWIN98|REF|WIN98}
/ORDER:@filename
/OUT:filename
/PDB:filename
/PDBSTRIPPED:filename
/PGD:filename
/RELEASE
/SAFESEH[:NO]
/SECTION:name,[E][R][W][S][D][K][L][P][X][,ALIGN=#]
/STACK:reserve[,commit]
/STUB:filename
/SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|
EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|
WINDOWSCE}[,#[.##]]
/SWAPRUN:{CD|NET}
/TLBOUT:filename
/TSAWARE[:NO]
/TLBID:#
/VERBOSE[:{LIB|SAFESEH}]
/VERSION:#[.#]
/VXD
/WINDOWSCE:{CONVERT|EMULATION}
/WS:AGGRESSIVEWie muss ich das jetzt machen die asm DAtei ist so wie sie in ihrem post steht
-
Hallo _Newbie_,
versuche die Option /omf. Die neuen MASM-Versionen erstellen standardmäßig COFF-Dateien.
Und nochmals: Da Du eine DOS-Applikation erstellen möchtest, benötigst Du einen 16-Bit-Linker. Den Link und Erklärungen hatte ich bereits in einem vorherigen Posting angegeben.
Assemblieren: ml /c /omf DeinProgramm.asm
Linken: link16 DeinProgramm.objCiao...
-
Danke hat geklappt