Hilfe: Einfacher Einstieg in MASM
-
N'Abend zusammen,
ich probiere mir gerade Assembler anzueignen und habe mir zuerst einige Tut's und das Packet masm32v8.zip besorgt. MASM habe ich gewählt, weil es kostenlos ist und von der Syntax TASM ähnlich sein soll. Vom Verständnis her habe ich wenig Probleme mit den Begriffen aber in der Praxis hapert's. Die Beispiele aus den Tut's lassen sich mit MASM nicht kompilieren. Ich habe mal angefangen mir ein kleines Beispielprogramm zu schreiben was (noch) nichts macht. Wärt ihr vielleicht so nett mir das ein wenig zu ergänzen, damit ich wenigstens "Hello World" in die Konsole ausgeben kann. ich verwende eine emulierte Konsole (Windows XP).Meine ersten Schritte
:
CODE SEGMENT ; Begin des Code Segments ASSUME CS:CODE ; Zuweisung der Segmente, hier nur das Code Segement _START: ; Start-Label ; Was muss hier rein um nen db-String auszugeben? ; szText db "Hello World!",0 CODE ENDS ; Ende des CODE-Segments END _START ; Ende des Start-Labels
thx,
Murray
-
also für tasm würde daS glaub ich so aussehen:
.model small .stack .code START: jmp Begin MyMessage db "Hello World!$" BEGIN mov dx,OFFSET MyMessage mov ax,SEG MyMessage mov ds,ax mov ah,9 int 21h mov ah,4ch int 21h end START
ich hab allerdings keinen plan ob das bei masm auch so funzt!!
-
Also MASM kennt SEG nicht...
TEST_2.asm(11) : error A2004: symbol type conflict
Was soll ich nun machen?
-
Die Direktive SEG kann man nur verwenden, wenn man die umständliche Methode der Definition eines Segments nutzt. Mit der vereinfachten Methode mittels .model, .code, .data lautet die Anweisung:
mov dx, @code
Das obige Beispielprogramm ist allerdings nicht so ganz korrekt. Besser:
.model small .stack .data MyMessage db 'Hello World!', 13, 10, '$' .code .startup mov dx,OFFSET MyMessage mov ah,9 int 21h .exit 0 end
Ciao...
-
Mache ich irgendwas falsch? Ich kann die Version von Kal El auch nicht kompilieren.
C:\masm32\PROG\TEST_2.asm(11) : error A2006: undefined symbol : DGROUP
-
Die Anweisung zum Übersetzen lautet: ml /c DasProgramm.asm
Dabei gibt es bei mir keine Probleme!!
Da es sich um ein DOS-Programm handelt, musst Du den 16-Bit-Linker von Microsoft verwenden:
[uml]ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe[/uml]
Den Linker solltest Du umbenennen in z.B. link16.exe und dann ins bin-Verzeichnis kopieren.
Dann linkst Du die OBJ-Datei mit link16 DasProgramm.obj;
Das Semikolon am Ende der Zeile verhindert die Abfrageprozedur des Linkers.
Nochmals die Anweisungen zum Übersetzen:
ml /c DasProgramm.asm link16 DasProgramm.obj;
So funktioniert es bei mir 100%-ig.
Ciao...