erstes assembler programm lässt sich nicht assemblieren II

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

Moderatoren: crack, Krüsty, Marwin

erstes assembler programm lässt sich nicht assemblieren II

Beitragvon Shadowblack » Freitag 21. Oktober 2005, 15:27

Hi!

Ich habe dasselbe Problem von dem auch pablo in dem Thread "erstes assembler programm lässt sich nicht assemblieren" berichtet hat. Der Code ist übrigends für MASM und TASM. Dass da was fehlt - wie .model xxx oder dergleichen - mag ich nicht glauben.
(Das Buch hat recht gute Bewertungen bekommen, und von fehlerhaftem Code insbesondere im Einführungsbeispiel habe ich nichts gelesen.)
Der Tipp von Marwin hat mich auch nicht wirklich weiter gebracht.
Fehlerausgabe:
Code: Alles auswählen
Assembling ...
 Assembling: asm1.asm
asm1.asm(12) : 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: asm1.obj : object file not found


Wäre cool, wenn mir jemand dabei helfen könnte. Erste Schritte mit FASM und entsprechendem Tutorial waren erfolgreich, aber ich würde schon gern das Buch von Backer durcharbeiten und auch den dort verwendeten Code benutzen können.

Ciao
Shadowblack
 

Beitragvon crack » Montag 24. Oktober 2005, 09:35

Hm, doch entweder fehlt die .model direktive, oder Du versuchst ein PRG das für 16bit MASM gedacht ist, als 32bit PRG zu compilieren, poste doch mal den Quellcode...

asm1.asm(12) : error A2118: cannot have segment address references with TINY model


Diese Fehlerausgabe ist doch schon Hinweisgebend, .model TINY oder .model FLAT gilt glaube ich nur für WIN32 PRG's...
Wie gesagt, poste doch mal den Source Code, dann kann ich bestimmt was wirklich hilfreiches dazu sagen... ;)
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 Shadowblack » Montag 24. Oktober 2005, 21:56

Hm, doch entweder fehlt die .model direktive, oder Du versuchst ein PRG das für 16bit MASM gedacht ist,


Allerdings. Der Code ist eigentlich für MASM (nicht MASM32). Darauf bezog sich auch meine Annahme, dass nichts an dem Code fehlen sollte. Arbeite ich mit MASM32, dann kann es natürlich sein, dass das nicht mehr gültig ist.
Das Prob ist, dass ich MASM nicht habe und man - wenn ich mich recht erinnere - auch nicht so ohne weiteres mehr da ran kommt. Wäre schön, wenn ich ohne große Modifikationen den MASM-Code aus dem Buch mit MASM32 verwenden könnte.

Im Folgenden noch mal der Code (ist aus dem Buch ASSEMBLER von Reiner Backer).

Code: Alles auswählen
DATEN       SEGMENT

Meldung     db "assember 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


Ciao
Shadowblack
 

Beitragvon crack » Dienstag 25. Oktober 2005, 12:53

So, habs probiert, assembliert mit A86 von Eric Isaacson und Gelinkt mit dem Linker von MASM und zwar hat Marvin hier mal gepostet wie man ein Batch File macht das 16Bit Code korrekt linkt, es funzt...
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 Shadowblack » Mittwoch 26. Oktober 2005, 17:53

Erst mal danke für deine Mühe!

So, habs probiert, assembliert mit A86 von Eric Isaacson

Davon inspiriert, habe ich nochmal versucht, an den MASM (16 bit) zu kommen, was auch funktioniert hat. Wie das geht, steht hier:
http://users.easystreet.com/jkirwan/new/pctools.html
Das Assemblieren funktioniert damit anstandslos - jedoch auch mit MASM32! Der Download des MASM scheint somit unnötig zu sein.

und Gelinkt mit dem Linker von MASM und zwar hat Marvin hier mal gepostet wie man ein Batch File macht das 16Bit Code korrekt linkt

Das hatte ich ohnehin vorher ausprobiert. Zu dem batch-file nur noch ein paar Kommentare:
    - Auf den Schalter /AT muss bei diesem Code und MASM(32) verzichtet werden. Bei mir hat das jedenfalls nicht funktioniert.
    - Selbiges gilt auch für den Schalter /TINY für den Linker. Bei mir sonst ebenfalls: no go.
Gelinkt habe ich mit LINK16 <name>.obj. Dabei wurde scheinbar korrekt eine <name>.exe erzeugt, die auch das tut, was sie soll. Jedoch bekam ich eine Fehlermeldung:
LINK : warning L4021: no stack segment

Vielleicht kann mir jemand sagen, was das bedeutet? Aber es hat - wie gesagt - trotzdem funktioniert.

Ciao
Shadowblack
 

Beitragvon crack » Donnerstag 27. Oktober 2005, 19:38

Tja, im Prinzip kannst Du bei dem Programm diese Meldung getrost ignorieren. Deshalb heist es 'warning' und nicht 'error'...
So was es mit dem Stapelsegment auf sich hat: Um Programmunterbrechungen wie Interrupts und andere abarbeiten zu können ist der sogenannte Kellerspeicher oder 'Stack' - Stapel erforderlich, wenn ein Interrupt (Programmunterbrechung) durchgeführt wird, dann müssen die Registerinhalte des Prozessors gesichert werden, und dazu wird der Stack benutzt. Im gegesatz zu anderen Prozessoren (6502 und andere) haben 80X86 Prozessoren keinen Hard- sondern einen SoftwareStapel, dieser ist ein reservierter Bereich des Hauptspeichers. Unter DOS mussten die Benutzerprogramme den Stapel expliziet zugewiesen bekommen - eben das Stack Segment, unter Windows, dürfen die Benutzerprogramme den Stapel nicht selbst verwalten (das müssen sie auch nicht), das erledigt Windows ...
mit freundlichen grüssen,
with best regards,

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


Zurück zu MASM32-Package

 


  • { RELATED_TOPICS }
    Antworten
    Zugriffe
    Letzter Beitrag

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron