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 : Start

    ich 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 declared

    link:
    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:AGGRESSIVE

    Wie 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.obj

    Ciao...



  • Danke hat geklappt


Anmelden zum Antworten