Assembler Tutorial

Wie die Überschrift schon verrät suche ich ein gutes Assemblertutorial.

Ich habe die Suche benutzt aber mit den Ergebnissen kann ich noch nicht viel anfangen, da es bei mir an viel grundlegenderen Problemen scheitert.
Z.B. schaffe ich es nicht, ein eigentlich funktionstüchtiges Programm zu assemblieren zu linken und auszuführen.

Wie geht das?

Ich benutze MASM, weil ich nicht wusste, woher ich TASM bekomme.

Folgendende Code soll ausgeführt werden:
Code:
.model small
.stack
.data
message   db "Hello world, I'm learning Assembly !!!", "$"

.code

main   proc
   mov   ax,seg message
   mov   ds,ax

   mov   ah,09
   lea   dx,message
   int   21h

   mov   ax,4c00h
   int   21h
main   endp
end main

Ich klicke dann immer auf Build All aber es erscheint immer ein Assembly error. Compile Ressource File und Assemble ASM File spucken das selbe aus.

Wäre nett wenn ihr mir helfen könntet.

MFG
Ace
 
Hallo AceKiller73,

Original von AceKiller73
Wie die Überschrift schon verrät suche ich ein gutes Assemblertutorial.

Ich kann Dir das Buch vom "RoRoRo" - Verlag empfehlen:

http://www.terrashop.de/Buch/Assemb...-Reiner-Backer-ISBN-3499612240/art/49961224A/

Original von AceKiller73
Ich benutze MASM, weil ich nicht wusste, woher ich TASM bekomme.

TASM:

http://www.vetusware.com/download/TASM 3.0/?id=3431

http://www.assembler.my100megs.com/


Original von AceKiller73
Folgendende Code soll ausgeführt werden:
Code:
.model small
.stack
.data
message   db "Hello world, I'm learning Assembly !!!", "$"

.code

main   proc
   mov   ax,seg message
   mov   ds,ax

   mov   ah,09
   lea   dx,message
   int   21h

   mov   ax,4c00h
   int   21h
main   endp
end main

Ich hätte es folgendermaßen geschrieben:

Code:
.model small
.stack
.data
message   db "Hello world, I'm learning Assembly !!!"
                db "$"

.code

main   proc
   mov   ax,seg message
   mov   ds,ax

   mov   ah,9
   mov   dx, offset message
   int   21h

   mov   ax,4Ch
   int   21h
main   endp
end main

Änderungen:
Ich habe das "$" in eine neue Zeile gepackt => db "$"
Dazu habe ich bei mov ah,9 die "0" raus genommen.
Bei mov ax,4Ch habe ich die 00 entfernt und das C Groß geschrieben.

Alles in allem hätte ich den Code komplett so geschrieben:
Code:
DATEN      SEGMENT
message   db "Hello world, I'm learning Assembly !!!"
                 db "$"

DATEN      ENDS

CODE       SEGMENT                                   ;Anfang des CODE Segments

                ASSUME CS:CODE,DS:DATEN    ;CODE und DATEN zuordnen

Anfang:   mov   ax,DATEN
                mov   ds,ax
               
               mov   dx,offset message
               mov   ah,9
               int   21h

               mov   ah,4Ch
               int   21h
CODE     ENDS
              END Anfang

Ist teilweise aus dem oben empfohlenen Buch übernommen, ich persönlich finde es gut und übersichtlicher, kannst es ja mal ausprobieren und ggf. Optimieren/Anpassen.

Grüße

Zephyros
 
Du versuchst ein 16-Bit Programm mit dem 32-Bit MASM Teil zu assemblieren und zu linken. Ein "beliebter" Fehler am Anfang ;)
http://www.codingcrew.de/masm32/masm32_faq.php#27122003

Du brauchst also
ML.exe
http://download.microsoft.com/download/vb60ent/Update/6/W9X2KXP/EN-US/vcpp.exe
(ist ein selbstextrahierendes Archiv, kann man auch mit 7Zip oder ähnlichem Öffnen)
Link.exe
http://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe
(ist auch ein Archiv - gebraucht wird nur die Link.exe).
am besten in einen extra ordner wie "DOSenMASM" platzieren:

Assemblieren:
ml.exe /c hello.asm
Linken:
link.exe hello.obj

oder auch
ml.exe hello.asm (sofern der alte Linker im selben Ordner ist, wird dieser automatisch genutzt).


Dein obiger Code lässt sich jedenfalls damit ohne Änderungen assemblieren.
 
Nur so am Rande:
Ich habe von dem verlinkten rororo-Buch auch schon einige Empfehlungen gelesen und es mir daher auch neulich zugelegt. Ganz idiotensicher scheint es aber auch nicht zu sein. Ich bin bei der 1. Übung praktisch in dieselbe Falle getappt wie du (16 vs. 32 bit). Mit ein bisschen Recherche lässt sich das Linker-Problem schnell lösen, aber in Übung 2 kommt auch schon die nächste Hürde: es lässt sich keine *.lst erstellen. Zumindest bin ich noch nicht dahintergekommen, wie ;) (Wenn mir jemand sein Wissen hier mitteilen würde, würde mich das enorm freuen, Google ist da nämlich nicht so ergiebig :( )
Lange Rede, kurzer Sinn: Da ich selbst das ganze Buch noch nicht durchgeackert habe, will ich mir darüber kein Urteil erlauben, aber eine absolut idiotensichere Lösung ist es wohl auch nicht. Man muss sich offenbar darauf gefasst machen, dass man sich erstmal eine Weile im Netz umgucken muss, bis man Fehler fixen kann. Ob da das Preis-Leistungs-Verhältnis gegenüber auch nicht perfekten, aber kostenlosen Tuts besser ist, muss jeder selbst entscheiden...
 
Zurück
Oben