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.exeDas Programm ist ein selbstentpackendes Archiv. Nach der Ausführung stehen drei Dateien im Verzeichnis:
link.exe
cvpack.exe
readme.txtDen 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.asmCiao...
-
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:
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.txtDen 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 segmentWas 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 malstack segment
db 256 dup (?)
stack endsassume 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
RealDas 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?!
-
-
DrSchlau schrieb:
xig schrieb:
wo ´kann man denn den tasm saugen? hat einer nen link?!
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_LSM1350WWFS350Ok - 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.