Probleme beim Linken

Offizieller deutscher Support für das MASM32 SDK. Download FAQ

Moderatoren: crack, Krüsty, Marwin

Probleme beim Linken

Beitragvon Marwin » Montag 11. Juli 2005, 20:21

Wenn man versucht mit den Standard-Tools 16-Bit Assembler-Code zu assemblieren und zu linken, dann wird es zu Problemen kommen.

Man benötigt eine andere Version des Linkers (z.B. Version 5.60.339). Nach dem Entpacken des Archvis benennt man die darin enthaltene Datei LINK.EXE um in z.B. LINK16.EXE und kopiert diese in das Verzeichnis \MASM32\BIN\.

Darin wird danach noch zusätzlich die Batch-Datei MAKE16.BAT erstellt:

@ECHO OFF

ECHO Assembling ...
\masm32\bin\ml /c /AT %1.asm

ECHO Linking ...
\masm32\bin\link16 /TINY %1.obj, %1.com;

DIR %1.*

PAUSE


Um nun die Quellcode-Datei zu assemblieren wird die Batch-Datei mit dem Namen der Quellcode-Datei als Parameter aufgerufen:

make16 mycode.bat


Grüße,
Marwin[/url]
Benutzeravatar
Marwin
Moderator
 
Beiträge: 307
Registriert: Donnerstag 8. Mai 2003, 21:19
Wohnort: Seelow, Deutschland

Beitragvon snoopy » Montag 22. Januar 2007, 02:23

http://board.codingcrew.de/viewtopic.ph ... ght=fehler :P Sowas habe ich mir schon gedacht .... :wink:

ist halt schon einen Tag älter (2003 letztmalig überarbeitet) und für Windows .... naja das kommt erst später, noch ein link und dann auch spass beseite :roll:
eine Kundenrezension von amazon (habe den link wieder gelöscht, bevor Werbung oder so...)
Der Benutzer schrieb: "Ich habe mir das Buch bestellt da ich mich mit der Programmierung in Assembler vertraut machen wollte. Doch schon bei dem Allerersten Programmbeispiel gab es ein unlösliches Problem."
...schade das der Leser so aufgibt :cry:



nun gut nach ein paar Seiten Lesen der erste Frust, die Lösung suchen...
also Werkzeuge anpassen und damit auseinander setzen. :? (wie immer :wink:)

Code: Alles auswählen
 Assembling: d:\Assemblerbeispiele\asm1.asm
d:\Assemblerbeispiele\asm1.asm(11) : error A2118: cannot have segment address references with TINY model
Linking ...

Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.

LINK : fatal error L1093: d:\Assemblerbeispiele\asm1.obj : object file not found


ich gebe zu, habe nach der Suche (heute gekauft, im Zug gelesen und den Abend bis zum finden dieser Lösung verbracht) stumpf abgekupfert und jetzt auch nicht weiter drüber nachgedacht. Mir werden dort sicher noch einige Beispiele begegnen, welche alle eine Anpassung vorraussetzen.... gestattet mir Fragen, ohne das ich faul wirken mag :oops:
ist es nun sinnvoller einen assembler zu suchen, der auf die Beispiele einfach schon passt?
habt ihr noch einen Tip? (damit ich mich ein wenig später mit all den Möglichkeiten, Werkzeugen... auseinander setzen kann und motiviert auch weitermache *grins)
gibt es eine Liste, die "error A2...usw" ... beschreibt, weiterhilft?

schöne Grüsse
snoopy
snoopy
Newbie
 
Beiträge: 2
Registriert: Montag 22. Januar 2007, 01:14

Beitragvon crack » Dienstag 23. Januar 2007, 20:19

Nun, das 'tiny' Model 'erlaubt' im MASM32 keine explizieten Segment Zuweisungen, da es eigentlich ja dazu dient .com Programme zu erstellen. Der 'A86' von Eric Isaacson erlaubt das verwenden der Segmentzuweisungen dennoch, m.E. ist es ja auch kein Fehler Daten und Codesegment zu definieren, solange die Gesamtgrösse von 64K für ein .com Prg. nicht überschritten wird.


Die Liste der Assembler und Linker Fehlermeldungen habe ich irgendwann einmal im www.msdn.com gesehen, vll kannst Du sie dort per Suchfunktion finden.



[Edit: Ergänzung]
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Beitragvon snoopy » Dienstag 23. Januar 2007, 23:17

super danke, das erklärt auch obige Fehlermeldung,
Code: Alles auswählen
error A2118: cannot have segment address references with TINY model
bei msdn habe ich die codes im ersten suchen nicht gefunden... naja das stell ich auch erstmal hinten an, wenn ich mal drüber stolpere poste ichs hier bei interresse :wink:
habe mich auch gerade erst wieder dran gesetzt, denke ich werde das mit dem gute alten
Code: Alles auswählen
 d:\masm\bin\ml /? und d:\masm\bin\link16 /?
auch lösen, die Beispiele aus dem Buch und damit wachsen :), ich frage oder schaue einfach wenn wieder mal was ist, danke
Edit: und das erste Porgramm hat funktioniert (und doch ein lösbares Problem :wink: ), solange ich das TINY Modell ausschalte.... kleine Frage noch *g erwartet mich da später sonst noch ein böses erwachen? ich lasse mich sonst auch überraschen .....
edit: vielleicht hier die Fehlerliste http://msdn2.microsoft.com/de-de/library/afzk3475(VS.80).aspx ist allerdings leicht mühsam :)
snoopy
Newbie
 
Beiträge: 2
Registriert: Montag 22. Januar 2007, 01:14

Beitragvon c0d34 » Mittwoch 24. Januar 2007, 17:05

Hallo icn bin neu hier.. mein name ist Alejandro und komme aus Chile :D... sorry wegen mein Deutsch.. ist nicht so perfekt aber ich versuch es richtig zu schreiben.. also mein problem ist hier

C:\masm\bin>make16 hehe.obj
Assembling ...
Das System kann den angegebenen Pfad nicht finden.
Linking ...
Das System kann den angegebenen Pfad nicht finden.
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: DC59-7821

Verzeichnis von C:\masm\bin

24.01.2007 15:59 172 hehe.obj
1 Datei(en) 172 Bytes
0 Verzeichnis(se), 7.216.652.288 Bytes frei
Drücken Sie eine beliebige Taste . . .


weisst einer wie ich da loesen kann?? ich werd noch verruckt..

grüsse

c0d34

PS : das ist der code die ich linken moechte....
ich weiss nicht ob es richtig ist... ich hab es mit DEBUG von MSDOS gemacht..

-----------------------

.MODEL SMALL
.CODE
Programa:
MOV AX, @DATA
MOV DS, AX
MOV DX, Offset Texto
MOV AH, 9
INT 21H
MOV AX,4C00H
INT 21H
.DATA
Texto DB 'Guten tag xD.' 0D 0A '$'
.STACK
END Programa

----------- und das hab ich mit debug gemacht

- a1 00

2C1B:0100 JMP 011D

2C1B:0102

- E 102 'Hola, como estas.' 0D 0A '$'

- A011D

2C1B:011D MOV DX,0102

2C1B:0120 MOV AH,09

2C1B:0122 INT 21

2C1B:0123 INT 20
Bild
c0d34
Newbie
 
Beiträge: 1
Registriert: Mittwoch 24. Januar 2007, 16:55

Beitragvon crack » Freitag 26. Januar 2007, 20:51

snoopy hat geschrieben:
...
Edit: und das erste Porgramm hat funktioniert (und doch ein lösbares Problem :wink: ), solange ich das TINY Modell ausschalte.... kleine Frage noch *g erwartet mich da später sonst noch ein böses erwachen? ich lasse mich sonst auch überraschen .....
edit: vielleicht hier die Fehlerliste http://msdn2.microsoft.com/de-de/library/afzk3475(VS.80).aspx ist allerdings leicht mühsam :)


Nun, das Tiny Modell hat nur wirkliche Vorteile wenn man besonders einfachen und schnelle Zugriff auf das PSP bzw. Komandozeile oder Umgebungsvariable braucht, ansonsten bietet es eher Nachteile als Vorteile, es ist auch heute nicht mehr wesentlich komplexer eine .exe zu erstellen ... (war es eigentlich sowieso nie) :wink:
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Beitragvon crack » Donnerstag 1. Februar 2007, 03:38

c0d34 hat geschrieben:Hallo icn bin neu hier.. mein name ist Alejandro und komme aus Chile :D... sorry wegen mein Deutsch.. ist nicht so perfekt aber ich versuch es richtig zu schreiben.. also mein problem ist hier

C:\masm\bin>make16 hehe.obj
Assembling ...
Das System kann den angegebenen Pfad nicht finden.
Linking ...
Das System kann den angegebenen Pfad nicht finden.
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: DC59-7821

Verzeichnis von C:\masm\bin

24.01.2007 15:59 172 hehe.obj
1 Datei(en) 172 Bytes
0 Verzeichnis(se), 7.216.652.288 Bytes frei
Drücken Sie eine beliebige Taste . . .


weisst einer wie ich da loesen kann?? ich werd noch verruckt..

grüsse

c0d34

PS : das ist der code die ich linken moechte....
ich weiss nicht ob es richtig ist... ich hab es mit DEBUG von MSDOS gemacht..

-----------------------

.MODEL SMALL
.CODE
Programa:
MOV AX, @DATA
MOV DS, AX
MOV DX, Offset Texto
MOV AH, 9
INT 21H
MOV AX,4C00H
INT 21H
.DATA
Texto DB 'Guten tag xD.' 0D 0A '$'
.STACK
END Programa

----------- und das hab ich mit debug gemacht

- a1 00

2C1B:0100 JMP 011D

2C1B:0102

- E 102 'Hola, como estas.' 0D 0A '$'

- A011D

2C1B:011D MOV DX,0102

2C1B:0120 MOV AH,09

2C1B:0122 INT 21

2C1B:0123 INT 20


Es ist nur eine Vermutung: Du musst entweder die Pfad Angaben ind der 'Make16.bat' Anpassen, oder den Assembler (ml.exe) und den Linker in dein Arbeitsverzeichniss kopieren, dann müsste es klappen...
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Beitragvon snooze01 » Donnerstag 14. Juni 2007, 00:39

Hallo Leute,

habe gerade meinen ersten Code mit masm32 geschrieben und bekomme die Fehlermeldung:

D:\masm32\firstasmcode.asm(14) : error A2004: symbol type conflict
_
Assembly Error

... kann mir jemand sagen, was das heißt?

In Zeile 14. steht bei mir nur folgendes:

mov ax,DATEN



Vielen Dank für Eure Hilfe !


Gruss.
Snooze.
snooze01
Newbie
 
Beiträge: 1
Registriert: Donnerstag 14. Juni 2007, 00:35

Beitragvon crack » Donnerstag 14. Juni 2007, 22:03

Ja,

"mov ax,DATEN" geht ja auch garnicht da ist die Compilermessage richtig.
gib doch bitte mal den kompletten Code, ich vermute Du möchtest das Segment von 'DATEN' oder den Offset von 'DATEN' laden. Aber dazu wäre es sinnvoll möglichst den kompletten Code zu sehen.
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Beitragvon someb0dy » Mittwoch 25. Juli 2007, 16:09

Hallo Leute

Ich hab auch meine Probleme mit dem Linker unter DOS.

Ich hab mich zuerst mal andiese Anleitunghier gehalten
Ich hab' dann das gemacht was in diesem Thema steht, allerdings ohne die .bat Datei.

Da hatte ich unter RadASM auch so nen Linkerfehler

Dann hab ich die make16.bat gemacht und jetzt funktioniert es zwar zum starten mit RadASM aber er hört nicht mehr auf zu werkeln. D.h. er wird nicht fertig. Und ich dachte mir, das kann es bei so einer kleinen Datei nicht sein.

Diese verbesserte Link Datei musste ich (oder zumindest hab ichs so gemacht ^^), je nachdem was ich verwendete auch DOSLINK oder link16 umbenennen

Im DOS sieht es so aus (Weiß jemand ob man den Text auch direkt aus DOS kopieren kann ? Ging bei mir irgendwie nicht)

Der Quelltext meiner asm-Datei ist folgender


DATEN SEGMENT

Meldung db "Assembler ist gar nicht 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


(aus dem altbekannten Buch von Backer kopiert)


Kann mir jemand helfen und sagen, was ich falsch gemacht habe ?
someb0dy
Newbie
 
Beiträge: 3
Registriert: Mittwoch 25. Juli 2007, 13:49

Beitragvon crack » Mittwoch 25. Juli 2007, 22:17

Och Mensch Leute!

Code: Alles auswählen
Anfang: mov ax,DATEN
mov ds,ax


kann doch nicht funktionieren da mit "mov ax,DATEN" der Wert einer 'Konstanten' mit dem Namen 'DATEN' in AX geladen wird. Wollt ihr den Wert für das Segment Daten laden müsste das doch so aussehen:
Code: Alles auswählen
mov ax, @DATEN ;für MASM, MASM32 und kompatible
mov ax, seg DATEN ;für A86, A386


unter DOS gibt eas kein Copy&Paste wie man es von Windows gewohnt ist, aber man kann mittels Mode Befehl, oder Ausgabeumleitung bewirken das die Ausgabe (zusätzlich?) in einer Datei landet.
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Beitragvon someb0dy » Samstag 28. Juli 2007, 20:27

Hallo !
crack hat geschrieben:Och Mensch Leute!

Code: Alles auswählen
Anfang: mov ax,DATEN
mov ds,ax


kann doch nicht funktionieren da mit "mov ax,DATEN" der Wert einer 'Konstanten' mit dem Namen 'DATEN' in AX geladen wird. Wollt ihr den Wert für das Segment Daten laden müsste das doch so aussehen:
Code: Alles auswählen
mov ax, @DATEN ;für MASM, MASM32 und kompatible
mov ax, seg DATEN ;für A86, A386



Ich hab das probiert, allerdings ging das nicht.

Das Programm funktioniert bei mir jetzt allerdings schon. Es war einfach der 16er Linker. Ich dürfte da irgedendwas durcheinandergebracht haben anfangs.
Einfach neu installiert und schon gings.

unter DOS gibt eas kein Copy&Paste wie man es von Windows gewohnt ist, aber man kann mittels Mode Befehl, oder Ausgabeumleitung bewirken das die Ausgabe (zusätzlich?) in einer Datei landet.


Ups...ich meinte nicht DOS, sondern die Konsole von Windows.
Da geht es einfach mit Bearbeiten-->Markieren
someb0dy
Newbie
 
Beiträge: 3
Registriert: Mittwoch 25. Juli 2007, 13:49

Beitragvon crack » Samstag 28. Juli 2007, 20:42

someb0dy hat geschrieben:Hallo !
...

Das Programm funktioniert bei mir jetzt allerdings schon. Es war einfach der 16er Linker. Ich dürfte da irgedendwas durcheinandergebracht haben anfangs.
Einfach neu installiert und schon gings.


Ups, ja das hatte ich stillschweigend vorrausgesetzt, aber dennoch gut das Du es noch mal anmerkst: für 16Bit Win/ DOS Programme ist ein anderer Linker erforderlich.


Ups...ich meinte nicht DOS, sondern die Konsole von Windows.
Da geht es einfach mit Bearbeiten-->Markieren

Oh, böse Tücke! Die Konsole von Windows ist nicht 100% kompatibel mit 'richtigem' DOS :wink:
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf

Beitragvon TheShadowdx » Freitag 30. November 2007, 17:34

Hallo,
ich habe ebenfalls ein Problem. Ich habe ebenfalls den selben Code, wie oben aus dem Buch von Herrn Backer. Habe auch den Linker verschoben, alles. Ich assembliere die Datei mit ml datei.asm und bekomme dann auch eine Objektdatei. Jetzt will ich diese ja noch linken. Das will ich mit link16 datei.obj machen, doch dann kommt nur ein englischer Text in dem irgendwas über Shareware steht. Ich glaube mal, dass das so die Copyrighterklärung oder sowas ist. Aufjedenfall bekomme ich keinen Error oder eine Meldung. Allerdings auch keine *.exe Datei. Es passiert einfach nichts!
Ich bin für jede Hilfe dankbar!
Gruß
TheShadowdx
Newbie
 
Beiträge: 1
Registriert: Freitag 30. November 2007, 17:30


Zurück zu MASM32-Package

 


  • { RELATED_TOPICS }
    Antworten
    Zugriffe
    Letzter Beitrag

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron