Assembler

Hab mir gestern ein buch aus der bücherei über assembler ausgeliehen das buch beschreibt das programmieren in assembler mit dem masm.
Das erste programm läuft schon nicht (vielleicht weil es schon ein etwas älteres buch ist).

Der Fehler ist:

D:\Test.asm (11):error A2006: undefinied symbol: DATA

Der Code:

.model Small
.stack 100h

.DATA

Meldung DB "Hallo Welt$"

.CODE

Start:
mov ax,DATA
mov ds,ax
mov dx,OFFSET Meldung
mov ah,09h
int 21h
mov ah,4ch
int 21h
END start



Ich hab bis jetzt eigentlich nur den debug von mircosoft benutzt war mir
aber zu umständlich also wollt ichs mal damit probieren kann mir jemand da was sagen was da falsch in dem buch ist (alles original abgetippt).
 
Benutzt Du den mitgelieferten masm assembler? Oder eher ein Packet wie MASM32?
Wenn MASM32: kurz und knapp verlinkt http://board.codingcrew.de/viewtopic.php?t=218
(weil fast alle damit ein Problem bei 16-bit Programmen haben ;) )

ansonsten sollte statt mov ax, DATA ein mov ax,@DATA stehen.
(und damit klappts bei mir auch)
@data ist ein vordefinierter Symbol, der den Namen des Datensegments enthält (steht zumindest in meiner Refernz so)
 
deinem code nach ist das ein dos-programm. lern lieber gleich win32asm. eine deutsche übersetzung des tollen iczelion win32asm tutorial findest du hier und masm32 hier.
 
Wo du es gerade sagst wenn ich das ätt zeichen machen will startet das programm von masm32 (ähh). Ich kann nirggens das ättzeichen mehr machen selbst hier nicht er startet dann das masm32.


Leiche:
In diesem buch fängt es mit dos an und geht dann in die windows umgebung
torotzdem danke.
 
Wo du es gerade sagst wenn ich das ätt zeichen machen will startet das programm von masm32 (ähh). Ich kann nirggens das ättzeichen mehr machen selbst hier nicht er startet dann das masm32.

Geh auf deinen Desktop. Such die MASM32 Editor-Verknüpfung.
Rechtsklick -> Eigenschaften -> Tastenkombination STRG+ALT+@ löschen.
 
Original von CDW
Benutzt Du den mitgelieferten masm assembler? Oder eher ein Packet wie MASM32?

Ich benutz das Packet masm32

Original von CDW
Wenn MASM32: kurz und knapp verlinkt http://board.codingcrew.de/viewtopic.php?t=218
(weil fast alle damit ein Problem bei 16-bit Programmen haben ;) )

Hab so gemacht wie da beschreiben doch dann diese fehlermeldung:

Assembling: d\Bit.asm
d:\Bit.asm (17): error A2117: /AT switch requires the tiny memory model
d:\Bit.asm(10):error A2118: cannot have segment address reference with tiny model
Linking...

Original von CDW
ansonsten sollte statt mov ax, DATA ein mov ax,@DATA stehen.
(und damit klappts bei mir auch)
@data ist ein vordefinierter Symbol, der den Namen des Datensegments enthält (steht zumindest in meiner Refernz so)


Wenn ich das normal ändere und in dem masm32 editor assemble&linke
kommt das:

D:\Bit.asm(10): error A2006: u8ndefined symbol: DGROUP
D:\Bit.asm(17): warning A4023: with/coff switch,leading underscore required for start adress: start

Original von +++Atho
Klicke auf desktop...

Danke hat funktioniert.
 
Assembling: d\Bit.asm
d:\Bit.asm (17): error A2117: /AT switch requires the tiny memory model
d:\Bit.asm(10):error A2118: cannot have segment address reference with tiny model
Linking...
AT und TINY sind jeweils nur zu verwenden wenn Du eine COM haben willst. Ansonsten eben:
\masm32\bin\ml /c %1.asm
\masm32\bin\link16 %1.obj, %1.com
für die DOS-EXE benutzen

D:\Bit.asm(10): error A2006: u8ndefined symbol: DGROUP
Asche über mein Haupt - ich benutze ja dafür die alte ML.EXE. Bei Deiner neuen musst Du sie so aufrufen:
ml /omf /Zm deineasmdatei.asm
aufrufen. /Zm schaltet in die Kompatibilität zu MASM 5.10 um und /OMF ist das alte Object Module Format.
 
Original von CDW
D:\Bit.asm(10): error A2006: u8ndefined symbol: DGROUP
Asche über mein Haupt - ich benutze ja dafür die alte ML.EXE. Bei Deiner neuen musst Du sie so aufrufen:
ml /omf /Zm deineasmdatei.asm
aufrufen. /Zm schaltet in die Kompatibilität zu MASM 5.10 um und /OMF ist das alte Object Module Format.


Wenn ich es so mache klappt zwar die assembler aber der linker meldet einen fehler
(wäre es vielleicht einfacher wenn ich mit einem älteren buch übe die ältere ml zu gebrauchen, wo hast du die her?)

Sonst der Fehler:

Link: warning LNK4044: unrecongnize option "z2"; ignored
Link: error: Segment reference in fixup record
Bit.obj: fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
 
Linkst Du auch mit dem 16-Bit Linker? (IMHO macht QUEDIT aus dem MASM32 Packet automatisch den normal aufruf). Also ich habs getestet und es klappt - assemblieren und linken. Wo ich die alte ML habe: k.A mehr ;). Kann ich Dir aber per mail schicken - schick mir einfach per mail oder PM deine mail adresse zu.
 
Original von CDW
Linkst Du auch mit dem 16-Bit Linker? (IMHO macht QUEDIT aus dem MASM32 Packet automatisch den normal aufruf). Also ich habs getestet und es klappt - assemblieren und linken.

Also ich hab das jetzt so gemacht hab dos eingabe gestartet pfad + ml /omf /zm bit.asm
eingegeben. Mehr net.


Wo ich die alte ML habe: k.A mehr ;). Kann ich Dir aber per mail schicken - schick mir einfach per mail oder PM deine mail adresse zu.

Hab ich dir geschickt.


--------------------edit--------------------------------------------------------

bin auf den link in der email gegangen und hab alles so gemacht wie da beschrieben.Jetzt kommt kein fehler mehr.
Aber wenn ich die exe datei ausführe geschieht nichts.
Liegt das irgentwie daran das ich was beim linken falsch gemach hab?
Da stand nämlich:

Run bit.exe: (ich hab einfach eingabe gedrückt)
Lib:

usw.
 
Aber wenn ich die exe datei ausführe geschieht nichts.
geschiet da nichts oder kommt nur kurz ein schwarzes Fenster ? Im zweiten Fall sollte man die Exe aus der Eingabeaufforderung aufrufen - dann kann man auch das "hallo Welt" lesen.
 
Zurück
Oben