PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit ersten Assembler Prog. Linken usw. geht nicht.



compufreak
15.05.2010, 13:16
Guten Tag.


Ich habe angefangen mit Assembler, aber so ganz will es nicht funktionieren.
Ich verwende MASM + Win7.

Aus dem Buch "Assembler Maschinnahes programmieren von Anfang an" habe Ich folgenden Quelltext abgetippt:


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 AnfangDas ganze habe Ich dann mit "speichern unter" als "asm1.asm" gespeichert.
Jetzt wollte ich das gerne ausführen.
Dazu habe Ich im MASM auf Projekt > Assemble&Link geklickt.

Das funktioniert aber nicht, ich bekomme folgende Meldung:

http://img522.imageshack.us/img522/2425/qweqwe.th.jpg (http://img522.imageshack.us/i/qweqwe.jpg/)

Uploaded with ImageShack.us (http://imageshack.us)

Aus dem Text sehe Ich , das Irgendwas mit meinen Quelltext nicht stimmt.
Ich finde den Fehler aber nicht, oder stimmt was mit meinem Programm nicht?

Ich bitte darum das mir vielleicht mal Jemand unter die Arme greift damit ich Anfänger zumindest meine Umgebung korrekt zum laufen kriege und weiß, wie man ein Assembler Code in ein ausführbares Programm umwandelt.

Im Buch wird gesagt, das es für MSDOs ist, liegt daran vielleicht das Problem? ... Im Buch wird gesagt ich könne es mit MASM Ausführen.
Wenn es wirklich das Problem ist, könnte mir Jemand das was da oben steht in Windows umschreiben... damit ich sehen kann ob mein MASM richtig funktioniert?

Vielen Dank.

Compufreak

AlterHacker
15.05.2010, 13:29
Hey,

Meine assembler-progs in masm32 sehen da etwas anders aus, aber jeder compiler hat da n eigenen syntax.
Kannst dies ja mal probieren:


.386
.model stdcall, flat

include user32.inc
includelib user32.lib

include kernel32.inc
includelib kernel32.lib


include windows.inc

.data
text db "Es ist ein Fehler aufgetreten. ",0,0
capt db "Achtung!",0,0
.code
main:
xor eax, eax
mov eax, MB_OK
xor eax, MB_ICONERROR
invoke MessageBox, 0, addr text, addr capt, eax
invoke ExitProcess,0
END main

Ist wohl jetzt kein Prog mit interrupts sondern n win32 projekt. Dort wirst du keine ints ausführen dürfen (wenn ich das richtig in erinnerung hab)

(WinASM ist eg ne ganz nette GUI ;-))

compufreak
15.05.2010, 13:49
Also dein Text geht, in WinASM. Danke dafür.

Ich frage mich jetzt nur wie Ich Assembler lernen soll, wenn die Sachen in meinem Buch nicht ausführbar sind. Anscheint wird in allen Assembler Büchern erst mit Dos gelernt, dann umgestiegen.
Hast du/Ihr euch erst Dos angeschaut, dann später in Windows Assembler gearbeitet?

Atropos
15.05.2010, 13:53
Anscheint wird in allen Assembler Büchern erst mit Dos gelernt, dann umgestiegen.
Das liegt nicht am OS ;)
Der Syntax ist einfach kein MASM-Syntax.
Ich selber lerne gerade auch Assembler und komme nur teils voran.
Die Programme sind für Dos geschrieben und ic muss sie auf Win7 umschreiben.
Aber das Prinzip ist gleich und sind nur kleine Änderungen.
Außerdem lernt man dabei etwas ;)

//Edit:
Sry ist ein Blödsinn (ich mach nur 80x86 durch und kenn daher nur die Register)

compufreak
15.05.2010, 13:54
Das liegt nicht am OS ;)
Der Syntax ist einfach kein MASM-Syntax.
Ich selber lerne gerade auch Assembler und komme nur teils voran.
Die Programme sind für Dos geschrieben und ic muss sie auf Win7 umschreiben.
Aber das Prinzip ist gleich und sind nur kleine Änderungen.
Außerdem lernt man dabei etwas ;)

Klingt logisch. Ich weiss nur nicht wie Ich das machen soll.
Was für Referenzen kann ich dafür verwenden, wenn nicht das Buch mit dem Ich lerne?

EBFE
15.05.2010, 13:57
@just_a_new_compilation (http://free-hack.com/member.php?u=65264)
doch, ist MASM ;) . Nur nutzt heutzutage kein Mensch diese Syntax oder programmiert tatsächlich irgendwas für die DOSe :D

@compufreak (http://free-hack.com/member.php?u=66983)
Im Buch sollten die aber auch noch sagen, dass damit noch MASM aus den Urzeiten gemeint ist ;).16-bit DOS Programmierung dürfte schon seit 10 Jahren so gut wie ausgestorben sein - dementsprechend brauchst du die alte MASM Version (Assembler und Linker)

Hier gibt es die alte ML Version:
http://download.microsoft.com/download/vb60ent/Update/6/W9X2KXP/EN-US/vcpp.exe
(ist ein VisualC++ "updatepacket" . Die Exe kannst du auch mit WinZip/WinRAR öffnen. Von den ganzen Dateien brauchst du nur die "ML.exe")
http://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe
(hier die Link.exe - bitte auch entpacken. Als Ergebnis sollte eine "Link.exe" verfügbar sein ;) )
Beide im gleichen Ordner platzieren. Die Sourcen aus dem Buch dürften sich dann entweder mit
ML.exe source.asm
oder
ML.exe /AT source.asm
kompilieren lassen

Edit:
@compufreak: ich hab es eben vor dem Post noch getestet ;)
hier die Daten:


X:\masm32\BIN\dos>ml komischer.asm
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.

Assembling: komischer.asm

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

Object Modules [.obj]: komischer.obj
Run File [komischer.exe]: "komischer.exe"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
LINK : warning L4021: no stack segment

X:\masm32\BIN\dos>komischer.exe
Assembler ist garnicht so schwer
X:\masm32\BIN\dos>

compufreak
15.05.2010, 13:57
Der Syntax ist einfach kein MASM-Syntax.
Das kann / will ich nicht so ganz glauben.
Erstens ist das direkt aus dem Buch, zum anderen finde ich den Syntax auch auf Wikipedia MASM - MSDos

Assemblersprache – Wikipedia (http://de.wikipedia.org/wiki/Assemblersprache)




Hier gibt es die alte ML Version:
http://download.microsoft.com/downlo...EN-US/vcpp.exe (http://download.microsoft.com/download/vb60ent/Update/6/W9X2KXP/EN-US/vcpp.exe)
(ist ein VisualC++ "updatepacket", davon brauchst du aber nur die ML.exe)
http://download.microsoft.com/downlo...-US/Lnk563.exe (http://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe)
(hier die Link.exe)
Beide im gleichen Ordner platzieren. Die Sourcen aus dem Buch dürften sich dann entweder mit
ML.exe source.asm
oder
ML.exe /AT source.asm
kompilieren lassen __________________


Danke das werde ich nun ausprobieren.

AlterHacker
15.05.2010, 13:58
"Win32 Assembler Coding for Crackers" vom ARTeam ist ganz gut ^^.
Damit bin ich quasi dann in die direkte-programmierung eingestiegen.
Vorher nur mit OllyDBG im laufenden programm sachen 'rumgeproggt'

compufreak
15.05.2010, 14:05
"Win32 Assembler Coding for Crackers" vom ARTeam ist ganz gut ^^.
Damit bin ich quasi dann in die direkte-programmierung eingestiegen.
Vorher nur mit OllyDBG im laufenden programm sachen 'rumgeproggt'

WoW!
Genausowas habe Ich gesucht, vielen lieben Dank !! ;)



@just_a_new_compilation (http://free-hack.com/member.php?u=65264)
doch, ist MASM ;) . Nur nutzt heutzutage kein Mensch diese Syntax oder Programmiert tatsächlich irgendwas für die DOSe :D


Leider kann ich die Programme die du vorgeschlagen hast nicht auf meinen 64 bit System zum laufen bringen.
Naja, was ich nicht verstehe. Wenn MASM Niemand mehr verwendet, warum wird das in allen aktuellen Assembler Büchern gelernt.

Nostalgie Wert oder wie.... ? ....

EBFE
15.05.2010, 14:15
Leider kann ich die Programme die du vorgeschlagen hast nicht auf meinen 64 bit System zum laufen bringen.

Ok, 64-Bit Systeme haben keinen eingebauten DOS Emulator mehr. Hättest deine assemblierten Programm eher nicht ausführen können ;). Wenn du aber unbedingst mit DOS experimentieren möchtest:
DOSBox – Wikipedia (http://de.wikipedia.org/wiki/DOSBox)
darin kannst du den alten Assembler, Linker und die "Ergebnisse" laufen lassen.



Naja, was ich nicht verstehe. Wenn MASM Niemand mehr verwendet, warum wird das in allen aktuellen Assembler Büchern gelernt.

Nostalgie Wert oder wie.... ? .... Nene, nicht "MASM" an sich, sondern die Ur-alten Versionen ;)
Was ist für dich "aktuell" ?
Großteil der Bücher wird nur in einer neuen Auflage gedruckt, mit minimaler Überarbeitung ;).

Schaut man bei den "aktuellen" Büchern aber ganz vorne in die kleingeschriebenen Copyrights und Erscheinungsdaten, sieht man meistens 1990-1994 (zumindest fast alle Bücher, die ich so im Handel gesehen habe ;) ). Wären die Bücher aktuell, hätten die Autoren diese "Anfänger" - Probleme längst bemerkt und beschrieben - denn du bist bei weitem nicht der erste.
Das ist quasi schon seit 2002/2003 die "klassische" Anfängerfrage zu MASM.
Zudem wird auch noch häufig TASM benutzt (zumindest sehe ich das immer noch ab und zu in Asm-Büchern, die es zu kaufen gibt)
Und TASM hat schon seit 10+ Jahren keine offizielle Unterstützung
Die letzte veröffentlichte Version 5 unterstützte auch Windows 95 (http://de.wikipedia.org/wiki/Microsoft_Windows_95) und NT (http://de.wikipedia.org/wiki/Microsoft_Windows_NT) und Prozessoren bis zum Pentium (http://de.wikipedia.org/wiki/Pentium)

PS: wie man bemerkt, hat MASM auch keine wirkliche Unterstützung seitens MS. Es wird halt auch nicht mehr "as is" vertrieben - sondern nur zusammen mit VisualC++ und anderen MS Compilern. D.h für den Leser ist es relativ schwer, an die benötigten Sachen zu kommen. "Aktuell" wären imho eher NASM oder FASM - beide sind schon länger ausgereift, gut verwendbar und zudem problemlos zu beziehen :)

AlterHacker
15.05.2010, 14:26
PS: wie man bemerkt, hat MASM auch keine wirkliche Unterstützung seitens MS. Es wird halt auch nicht mehr "as is" vertrieben - sondern nur zusammen mit VisualC++ und anderen MS Compilern. D.h für den Leser ist es relativ schwer, an die benötigten Sachen zu kommen. "Aktuell" wären imho eher NASM oder FASM - beide sind schon länger ausgereift, gut verwendbar und zudem problemlos zu beziehen :)
Oder man benutzt MASM32, welches auch einen vernünfigen Syntax hat:
MASM32 Home Page (http://www.masm32.com/)