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-Konsole

    assembler 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.JPG

    Tutorial: http://www.robsite.de/tutorials.php?tut=assembly
    Assembler Einführung Thomas Peschko

    Und 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


Anmelden zum Antworten