Autor Thema: Problem mit Assembler SDK  (Gelesen 10730 mal)

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« am: 20. February 2013, 19:36 »
Hallo erstmal :D
Also ich habe letztens extrem viele Problem mit meinem alten Assembler SDK gehabt, und hab mir deswegen diesen "neuen" hier geholt:
http://www.codingcrew.de/masm32/index.php
Da es schon bei einem einfachen Test mit Hello zu Fehlern kommt, wo es im alten noch ging, weis ich nicht ob dieser geeignet ist,
hier mal die Fehlermeldungen:
Assembling: C:\Users\Kenner\Desktop\ASM\asm1.asm
C:\Users\Kenner\Desktop\ASM\asm1.asm(14) : error A2004: symbol type conflict
C:\Users\Kenner\Desktop\ASM\asm1.asm(27) : warning A4023: with /coff switch, leading underscore required for start address : Anfang
 Datentr„ger in Laufwerk C: ist OS
 Volumeseriennummer: D8EC-A465

 Verzeichnis von C:\Users\Kenner\Desktop\ASM

20.02.2013  16:22               312 asm1.asm
               1 Datei(en),            312 Bytes
               0 Verzeichnis(se), 356.248.166.400 Bytes frei


In google konnte ich nicht wirklich was hilfreiches über die Fehler finden.
Mfg Manuel

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 20. February 2013, 19:49 »
Zeig mal den Code.
Dieser Text wird unter jedem Beitrag angezeigt.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 20. February 2013, 20:31 »
DATEN SEGMENT

Meldung db "Mein Test für eine SDK."

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

Könnte es sein dass es da ein unterschied zwischen dem Windows ASM und dem DOS ASM gibt?
Ich meine in DOS brauch man z.B. "model SMALL" und hier ist es nicht der fall.
Könnte es daran liegen? Wobei ich es eher für unwahrscheinlich halte.
Und der TEST oben funktioniert in allen anderen möglichen SDK'S die ich benutzt habe.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 20. February 2013, 20:45 »
Könnte es sein dass es da ein unterschied zwischen dem Windows ASM und dem DOS ASM gibt?

Genau so ist es. Der MASM, den du runtergeladen hast, ist für Windows, aber der Code ist für DOS. Du musst MASM für DOS nehmen oder Code für Windows.
Dieser Text wird unter jedem Beitrag angezeigt.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 20. February 2013, 21:38 »
Ok Ich habe mal wider meine erste assembler SDK rausgeholt fuer die windows CMD
Da muss man zwar sehr viel tippen aber dass Koennte ich doch mit einer
Batchdatei vereinfachen, mal Gucken was Mir  einfaellt
Achja an Jidder,
ESP ist
 genau andersrum mit dem code, ich nutzen windows code aber Der SDK war fuer dos  ;-)
SRy wegen Derek rechtschreibung, ich schreibe vom handy Aus
Under falls Ihr wollt stelle ich die batchdatei mit dem editor hier mal rein

livinskull

  • Beiträge: 27
    • Profil anzeigen
    • Livinskulls site
Gespeichert
« Antwort #5 am: 20. February 2013, 23:47 »
Erstens: dein Code ist DOS Code und nicht Windows. Das sind DOS Interrupts die du da nutzt. Es läuft aber auch unter Windows ;)
Zweitens: Masm kann DOS und Windows Programme bauen, wird aber meistens im masm32 package für Windows Programme benutzt (da passende WinAPI includes und libs dabei sind)
Drittens: DOS interrupts wollen strings mit "$" terminiert.

Die Fehlermeldung besagt wohl das der Linker keinen Einsprungpunkt finden kann, versuch mal "Anfang:" in "_start:" umzubenennen

EDIT: wenn ich mir den Fehler so nochmal durchlese müsste auch "_Anfang:" gehen ;)


Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 21. February 2013, 01:47 »
Es läuft aber auch unter Windows ;)
Das gilt nur für 32-Bit-Versionen von Windows (und eventuell XP-64). Die späteren Versionen unterstützen keine DOS-Programme - und damit auch keine DOS-Interrupts - mehr.

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 21. February 2013, 13:34 »
Warum steht dann in meinem Buch mit dem ich vor langer Zeit ASM gelernt habe dass dass windows code ist?
 :-o

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 21. February 2013, 17:34 »
Ahja und mit dem ersten geht es wohl auch nicht mehr so, ich weis gerade nicht weiter O.o

GoAsm.Exe Version 0.57.0.4 - Copyright Jeremy Gordon 2001/12 - JG@JGnet.co.uk

Error!
Line 1 of assembler source file (asmtest.asm):-
Must declare a section first -
Use DATA SECTION ["name"], CODE SECTION ["name"] or CONST SECTION ["name"]
Or just DATA, CODE or CONST; .DATA, .CODE or .CONST

OBJ file not made

Was soll dass jetzt? O.o
« Letzte Änderung: 21. February 2013, 18:57 von Manello »

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 22. February 2013, 02:31 »
Warum steht dann in meinem Buch mit dem ich vor langer Zeit ASM gelernt habe dass dass windows code ist?
Weil Windows vor langer Zeit auch DOS-Code ausführen konnte? Windows 7-32 kann das noch immer, Windows 7-64 nicht. Punkt.

Fakt ist, unter Windows gibt es weder BIOS-Treiber (z.B. int 13h für Laufwerke und int 10h für Grafik) noch DOS-Treiber (int 21h). Benutzt du die, so schreibst du ein DOS-Programm. Punkt.

freecrac

  • Beiträge: 86
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 23. February 2013, 06:44 »
Für 16 Bit - Dos-Anwendungen braucht man einen 16 Bit-Linker.
Z.B. Link.exe von MASM 5. Weil MASM 6 hat keinen 16 Bit-Linker mit dabei.
http://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe

Rohgerüst für MASM 5 und 16 Bit-DOS-Anwendung:
(Für MASM 6 kann man optional z.B. auch folgende Parameter angeben:
.MODEL SMALL
.686P
.MMX)
.MODEL SMALL
.386P
.387
  CODE SEGMENT use16 'CODE'
 assume cs:CODE,ds:DATEN,ss:STAPEL
 org 100h

START:
          mov      ax, DATEN
          mov      ds, ax


BACK:     mov      al, cl             ; ERRORLEVEL holen
          mov      ah, 4Ch            ; Rücksprung, Programm-Ende
          int    21h
;-------------------------------------
;    U N T E R - R O U T I N E N
;-------------------------------------
 org START + ((($-START)/16)*16)+16   ; Code-Ausrichtung
;-------------------------------------

          ret
;-------------------------------------
  CODE ends
;-------------------------------------
;    D A T E N - B E R E I C H
;-------------------------------------
  DATEN SEGMENT use32 'DATA'
 org 0
;-------------------------------------
WERT   DD ?
;-------------------------------------
  DATEN ends
;-------------------------------------
  STAPEL SEGMENT use16 STACK 'STACK'
       DB 10h dup (0)
  STAPEL ends
;-------------------------------------
 end

Batchfile für MASM 5
(erzeugt 16 BIT-Anwendung unter DOS und/oder Windows 32bit)
@ECHO OFF
MASM /Z %1.asm,%1.obj,%1.lst,%1.crf
if ERRORLEVEL 1 goto ENDE
CREF %1.crf,%1.ref
if ERRORLEVEL 1 goto ENDE
LINK /CP:1 %1.obj,%1.exe,%1.map,,
if ERRORLEVEL 1 goto ENDE
if exist *.crf del *.crf
if exist *.obj del *.obj
%1.exe
:ENDE

Batchfile für MASM 6 mit Link.exe aus MASM 5
(erzeugt 16 BIT-Anwendung unter Windows; ML.exe ist nicht unter puren DOS ausführbar und benötigt Windows.)
@ECHO OFF
ML /c /Zm %1.asm
if ERRORLEVEL 1 goto ENDE
LINK /CP:1 %1.obj,%1.exe,,,
if exist *.obj del *.obj
if exist *.map del *.map
:ENDE

Zu beachten wäre auch noch, dass dieser 16 Bit-Linker mit langen Dateinamen nicht umgehen kann, sondern nur 8.3-Namen kennt.

Dirk

Manello

  • Beiträge: 69
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 26. February 2013, 19:57 »
Rohgerüst für MASM 5 und 16 Bit-DOS-Anwendung:
(Für MASM 6 kann man optional z.B. auch folgende Parameter angeben:
.MODEL SMALL
.686P
.MMX)

Moment, zu diesem Code muss ich aber was fragen:
Ist jetzt dass mit dem .Model Small DOS oder dass mit dem DATEN SEGMENT ???
Ich bin jetzt verwirrt

freecrac

  • Beiträge: 86
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 26. February 2013, 22:01 »
Rohgerüst für MASM 5 und 16 Bit-DOS-Anwendung:
(Für MASM 6 kann man optional z.B. auch folgende Parameter angeben:
.MODEL SMALL
.686P
.MMX)

Moment, zu diesem Code muss ich aber was fragen:
Ist jetzt dass mit dem .Model Small DOS oder dass mit dem DATEN SEGMENT ???
Ich bin jetzt verwirrt
Das alles ist nur zum Erstellen einer einzigen 16 bit -Dos-Anwendung(mit MZ-Signatur, Relocation table und 8.3-Name.exe).
Damit ist es möglich mehrere Segmente für Daten und Code zu verwenden und die *.exe darf grösser als 64 KB werden.

Es ist ja nicht das "Modell Tiny":
http://www.c-jump.com/CIS77/ASM/Directives/D77_0030_models.htm

Im obigen Rohgerüst wird ein Codesegment, ein Datensegment und ein Stacksegment für eine Anwendung zur Verfügung gestellt.
Das Codesegment-Register und das Stacksegment-Register werden beim Starten initialisiert.
Das DS-Register müssen wir selber mit der Adresse unseres Datensegments laden.

...

Die eine Batchdatei für MASM 5 kann unter DOS und unter Windows verwendet werden.
Die andere Batchdatei für MASM 6 kann nur unter Windows(32 bit) verwendet werden (Angaben wie .MMX  sind dafür im Listing nur optinal).
Für diese Batchdatei wird zu MASM 6 mit der dort enthalltenen ml.exe zusätzlich die Link.exe von MASM 5 benötigt, um damit eine 16 bit -Dos-Anwendung erstellen zu können.
Weil mit dem Linker von MASM 6 und neuere Versionen davon kann man keine 16 bit -Dos-Anwendung mehr erstellen.

Dirk
« Letzte Änderung: 26. February 2013, 22:19 von freecrac »

 

Einloggen