Source Code Assemblieren
-
Kann man Assembler Source Code wirklich nur übe DOS Compilieren (Assembilieren )
Weil ich find das irgendwie ziemlich mühsam ....Da geht es bei C++ ja leichter F9 drücken und los gehts^^
-
assembler schrieb:
Kann man Assembler Source Code wirklich nur übe DOS Compilieren (Assembilieren )
Nein. Viele Assembler laufen auch unter DOS, die wenigsten laufen aber nur unter DOS (genauer gesagt faellt mir gerade gar keiner ein).
Du meinst wahrscheinlich die Konsole -> Unterschied: DOS / MS-DOS und Windows32-Konsoleassembler schrieb:
Weil ich find das irgendwie ziemlich mühsam ....
Wieso? So ziemlich alle Compiler und Linker sind eigentlich auch nur Konsolenprogramme. Auch fuer C++.
assembler schrieb:
Da geht es bei C++ ja leichter F9 drücken und los gehts^^
An sich nicht, bzw. das hat nichts mit c++ zu tun.
Um diesen Kniff auszufuehren, braucht es ein Programm, das das Druecken von F9 erkennt und daraufhin den Compiler mit den entsprechenden Parametern aufruft - praktisch dir also nur die Tipparbeit in der Konsole automatisiert abnimmt.
Das passiert meistens ueber eine sogenannte IDE (zu Deutsch integrierte Entwicklungsumgebung), also der aufgemotzte Editor, in den du deinen Code eintippst.
Sowas gibt es auch speziell fuer Assembler... meist aber eher frickelig.
Eine andere Moeglichkeit, eingaben in der Konsole zu automatisieren, sind Konsolenskripte. In Windows (und frueher in DOS) sind das sog. Batch-Dateien.
Um ein solches Skript zu erstellen, reicht es eigentlich, die Konsolenbefehle, die ausgefuehrt werden sollen, in eine (Text)datei zu schreiben und dieser die Endung .bat zu verpassen. Ein Doppelklick auf diese Datei fuehrt dann die darin stehenden Befehle aus.
-
Ah ok.
Ich hätte da noch eine und zwar hab ich mir diesen Assembler runtergeladen:
Turbo Assembler Version 4.1
Bisher funktionierte keiner der Source Codes aus den Tutorials die ich hatte
DATEN SEGEMENT MELDUNG DB "HALLO !","$" DATEN ENDS STAPEL SEGEMENT BYTE STACK DW 128 DUP (?) STAPEL ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATEN,ES:NOTHING,SS:STAPEL START: MOV AX, DATEN MOV DS,AX MOV DX, OFFSET MELDUNG MOV AH, 9H INT 21H MOV AH,4CH INT 21H CODE ENDS END START
Fehlermeldung vom TASM.exe : http://img-up.net/?up=errgMiRz3.JPG
Fehlermeldung vom TASM32.exe : http://img-up.net/?up=erorrDrAt4Rf.JPGTutorial: http://www.robsite.de/tutorials.php?tut=assembly
Assembler Einführung Thomas PeschkoUnd in dem Ordner da wo ich den Assembler habe da gibt es einmal eine TASM32.exe und eine TASM.exe ich habs mit beide probiert aber geht nicht
-
Schau dir deinen Code und den im Tutorial nochmal genau an. Der im Tutorial funktioniert jedenfalls.
TASM.exe ist ein DOS-Programm fuer RealMode, kann nur recht wenig Speicher nutzen.
TASM32 ist die Windows-Version, kann mehr speicher nutzen und braucht nicht im DOS-Emulator von Windows zu laufen. Davon ab sollten beide gleich sein.
-
Hat funktioniert :>
thx
Aber das Programm geht immer sofort wieder zu bei C++ da gibt es ja die Befehle
getchar();
System("PAUSE");Aber wie geht das bei Assembler ?
Hier ist der Source Code
DATEN SEGMENT MELDUNG DB "Hallo Welt!","$" DATEN ENDS STAPEL SEGMENT BYTE STACK DW 128 DUP (?) STAPEL ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATEN,ES:NOTHING,SS:STAPEL START: MOV AX, DATEN MOV DS, AX MOV DX, OFFSET MELDUNG MOV AH, 9H INT 21H MOV AH, 4CH INT 21H CODE ENDS END START
-
Für dein Programm unter der Konsole aus. Dafür musst du aber im selben Verzeichnis sein.
-
Jo hat funktioniert :>
Aber wie geht das dann bei Windows Anwendungen ich hab das mal versucht mit dem TASM32 zu Assemblieren das funktioniert auch ohne Probleme nur das mit dem TLINK32 funktioniert dann nicht.
Fatal: 16 bit segments not supported in module hallo.asm
Wie kann ich das denn jetzt für 32 bit Datein machen?
Ich hab vor ein paar Tagen mir einfach mal ein paar Tutorials angeguckt und bei irgendeinem Tutorial stand das man erst dem Programm sagen muss das es als 32 bit Anwendung ausgeführt werden soll.
Nur leider weiss ich nicht mehr den Befehl und auch nicht mehr in welchem Tutorial das war ...
-
Immer langsam...
assembler schrieb:
Aber wie geht das dann bei Windows Anwendungen ich hab das mal versucht mit dem TASM32 zu Assemblieren das funktioniert auch ohne Probleme nur das mit dem TLINK32 funktioniert dann nicht.
Irgendwo musst du da was falsch verstanden haben.
Erstmal: TASM und TASM32 koennen an sich genau das Gleiche. Dh. ein DOS-Programm bleibt ein DOS-Programm, egal ob du es nun mit einem unter Windows, Linux oder DOS laufenden Assembler assemblierst.
Dein Quellcode stellt nun mal ein 16Bit DOS-Programm dar. Daraus kannst du nicht einfach so durch Benutzen eines anderen Assemblers, Linkers oder irgendwelcher Optionen ein 32Bit oder Windows-Programm machen.
Maschinencode und damit Assembler ist nun mal sehr direkt systemabhaengig.assembler schrieb:
Fatal: 16 bit segments not supported in module hallo.asm
Fuer DOS-Programme musst du tlink benutzen.
assembler schrieb:
Wie kann ich das denn jetzt für 32 bit Datein machen?
Ich hab vor ein paar Tagen mir einfach mal ein paar Tutorials angeguckt und bei irgendeinem Tutorial stand das man erst dem Programm sagen muss das es als 32 bit Anwendung ausgeführt werden soll.
Nur leider weiss ich nicht mehr den Befehl und auch nicht mehr in welchem Tutorial das war ...
Das ist wie gesagt wegen der Systemabhaengigkeit in Assembler etwas schwierig.
Mit einem Befehl ist es da nicht getan.
In deinem Fall 16Bit DOS-Programm vs. 32Bit Windows-Programm faengt das bei der unterschiedlichen Bitbreite des Codes, die du dem Assembler mitteilen musst, an und hoert bei komplett unterschiedlichen APIs zur Kommunikation mit dem Betriebssystem und anderen Programmformaten auf.Deshalb mein Rat: Mach dir darueber erstmal keinen Kopf. Nimm es hin, dass dein Code fuer 16Bit DOS ist und bleib nahe an dem, was das Tutorial macht.
Wenn du damit fertig bist, vielleicht ein bissel in diesem Ramen herumgespielt und in etwa ein Gefuehl fuer x86 Assembler und die x86 CPU bekommen hast, kannst du dich ja dann weiter orientieren. Der TASM eignet sich zum Erstellen von Windows-Programmen zB. eh nur bedingt...
-
Unter Windows kannste deine Message nicht mehr mit Interupts ausgeben, dafür brauchst du die Win32 API. Probiers mal mit der Messagebox
push 0 push offset Meldung push offset Caption push 64 call MessageBoxA push 0 call ExitProcess
Caption musst du noch im Datensegment angeben
-
ok thx