Masm nutzen???



  • Moin, Moin...

    Der Assembler ML.EXE (MASM) kann natürlich auch 16-Bit-Programme assemblieren. MASM startet jedoch in der Regel den Linker automatisch. Der Linker wiederum kann KEINE 16-Bit-Exes erzeugen. Du musst einen 16-Bit-Linker benutzen.
    Den automatischen Start des Linkers unterdrückst Du mit der Option /c.

    ml.exe /c DeinProgramm.asm

    Den 16-Bit-Linker gibt es unter:
    ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe

    Das Programm ist ein selbstentpackendes Archiv. Nach der Ausführung stehen drei Dateien im Verzeichnis:

    link.exe
    cvpack.exe
    readme.txt

    Den Linker link.exe umbenennen in link16.exe und in das Verzeichnis bin kopieren.

    Die OBJ-Datei linkst Du dann mit:

    link16 DeinProgramm.obj;

    Das Semikolon am Ende der Zeile unterdrückt den Abfragemodus des Linkers.

    Damit Du ml.exe und link.exe von jedem beliebigen Ort starten kannst, musst Du den Suchpfad für Anwendungen mit dem Pfad des bin-Verzeichnisses erweitern:

    SET PATH=%PATH%;c:\masm32\bin

    Wenn Du XP benutzt, kannst Du das über
    Rechte Maustaste über Arbeitsplatz -> Eigenschaften -> Registerkarte "Erweitert" -> Button "Umgebungsvariablen"
    Die Variable Path auswählen und auf Bearbeiten Klicken.

    Ciao...



  • Ich kriege das nicht hin. 😡
    Mein Code ist folgender:

    DATEN	SEGMENT
    Meldung db "Assembler ist garnicht so schwer."
    	db "$"
    DATEN	ENDS
    CODE	SEGMENT
    	ASSUME CS:CODE,DS:DATEN
    Anfang:	mov ax,DATEN
    	mov ds,ax
    	mov dx,offset Meldung
    	mov ah,9
    	int 21h
    	mov ah,4Ch
    	int 21h
    CODE	ENDS
    	END Anfang
    

    Ich nutze XP.
    Du schreibst anscheinend auch Assembler.
    Kannst du mir vieleicht deinen Compiler schicken??? (Daniel-Knobe web.de)
    Das funzt bei mir einfach nicht 😞
    Bei mir sagt er 28 Fehler gefunden 🙄



  • Moin, Moin...

    Wenn Du ml /? eingibst, welche Versionsnummer zeigt er dann an? Bei mir ist es 6.14.8444. Mit dieser Version habe ich Dein Programm ohne Fehlermeldung übersetzt: ml /c DeinProgramm.asm

    Solltest Du eine neuere Version haben, dann probier mal:
    ml /omf /c DeinProgramm.asm

    Ciao...



  • jo, jetzt hab ichs, thx. Ich hab den selben wie du 🙄
    Wie linkt man die Objektdatei mit MASM??? (in meinem Buch ist das so gut wie garnicht erklärt) 😡



  • Moin, Moin...

    Ich hatte im obigen Posting bereits geschrieben, dass Du einen 16-Bit-Linker brauchst, weil der Linker des MASM-Pakets nur 32-Bit-Applikationen erstellen kann.

    Oben hatte ich auch einen Link angegeben, der leider nicht mehr funktioniert. Hole Dir den Linker von hier:

    http://win32asm.cjb.net/

    Klick auf Download und in der erscheinenden Liste gibt es einen Link mit Namen Link version 5.63.

    Das Programm lnk563.exe ist ein selbstentpackendes Archiv. Nach der Ausführung stehen drei Dateien im Verzeichnis:

    link.exe
    cvpack.exe
    readme.txt

    Den Linker link.exe umbenennen in link16.exe und in das Verzeichnis bin kopieren.

    Die OBJ-Datei linkst Du dann mit:

    link16 DeinProgramm.obj;

    Das Semikolon am Ende der Zeile unterdrückt den Abfragemodus des Linkers.

    Ciao...



  • Lade dir einfach Borland Turbo Assembler 5.5
    oder MASM 6.0 von Microsoft runter. Dann wird es klappen.
    MASM32 v8.0 ist für 32bit Code, also für echte Windows-Programmen. Ein 16bit Linker brauchst du ja sowieso, und der ist da auch dabei.

    Bemuhe einfach emule 😉



  • thx, ich habe nun eine exe 🙂
    Aber beim Linken mit dem Linker kommt eine Fehlermeldung:
    LINK : warning L4021 : no stack segment

    Was hat das zu bedeuten 😕



  • du hast kein STACK segment (müsste irgendwo in deinem buch auch vorkommen).
    auf dem stack werden zB parameter für prozeduren zwischengespeichert usw...
    probier einfach mal

    stack segment
    db 256 dup (?)
    stack ends

    assume ds:daten,cs:code,ss:stack

    noch einzufügen.



  • btw, das ist blosss ne warnung, die brauchste jetzt noch ncith unbedingt zu beachten.



  • Moin, Moin...

    Ich habe Dein Testprogramm mal um ein Stacksegment erweitert. Wenn Du das übersetzt, bekommst Du die Warnung nicht mehr.
    Ein Programm ohne eigenes Stacksegment nutzt den DOS-Stack mit. Eigentlich sollte man immer einen eigenen Stack bereitstellen.

    DATEN SEGMENT
    
    Meldung     db "Assembler ist gar nicht so schwer."
                db "$"
    
    DATEN ENDS
    
    STACK SEGMENT STACK
    
                dw 256 dup (0)
    
    STACK ENDS
    
    CODE SEGMENT
    
    ASSUME CS:CODE,DS:DATEN,ES:NOTHING,SS:STACK
    
    Anfang:     mov ax,DATEN
                mov ds,ax
                mov dx,offset Meldung
                mov ah,9
                int 21h
    
                mov ah,4Ch
                int 21h
    
    CODE ENDS
    
    END Anfang
    

    Ciao...



  • Hi,
    darf ich fragen, warum man unbedingt einen 16 Bit Linker braucht? Ist das nicht etwas langsamer?

    Liebe Grüße
    Real



  • Real schrieb:

    Hi,
    darf ich fragen, warum man unbedingt einen 16 Bit Linker braucht? Ist das nicht etwas langsamer?

    Liebe Grüße
    Real

    Das 16-Bit bezog sich auf die Zielplattform und nicht auf die Art des Linkers selber. Man kann natürlich auch einen Linker nehmen, der unter Win32 läuft, wie z.B. alink. Der Linker muss nur in der Lage sein 16-Bit-DOS-Programme zu erstellen.

    Ciao...



  • wo ´kann man denn den tasm saugen? hat einer nen link?!



  • xig schrieb:

    wo ´kann man denn den tasm saugen? hat einer nen link?!

    www.tasm.com/download



  • DrSchlau schrieb:

    xig schrieb:

    wo ´kann man denn den tasm saugen? hat einer nen link?!

    www.tasm.com/download

    Gut, dass der Link 100% irgendwo ins Nirvana fuehrt, sonst waehr illegal.
    Borland / Inprise verticken das Teil immer noch fuer knapp 180$!

    P.s. wenn dich ein freier guter Compiler interessiert, schau dich mal um nach NASM.



  • also ich hatte tasm 4.0 damals für 40DM bei gilmeister gekauft...



  • TASM 5:
    http://www.dealtime.com/xPO-Borland_Turbo_Assembler_and_Debugger_5_0_Full_Version_PC_LSM1350WWFS350

    Ok - sind doch keine 180$ mehr, auch wenn ichs vor ein paar Wochen noch fuer diesen Preis gesehen habe.



  • ich meinte ja nur dass ein anfänger nicht unbeding 5.0 braucht, sondern einfach nur 4.0 kaufen sollte, wenn er unbedingt mit tasm arbeiten will...



  • Wenn ich das richtig verstanden hab, kann man die exe auch unter Dos starten?!
    Kann man den selben Code auch mit einem Linuxkompiler auf Linux kompilieren???
    Wenn ja, weis jemand wo man die Software findet und wie man sie nutzt? (Der MASM war schon ihrgendwie unnötig kompliziert) 🙄
    mfg
    cya



  • nein kann man nicht. alleine schon wegen int 21h, den es nur unter dos gibt. und linux kann keine .exe starten.


Anmelden zum Antworten