Anfänger : MASM & Visual C++



  • Hallo an alle die das hier lesen.
    Ich bin Schüler und wir sollen in 3er-Gruppen ein Referat über eine Programmiersprache unserer Wahl halten. Meine 2 Mitreferenden waren so "intelligent" und mussten Assembler auswählen, da die beiden aber eigentlich überhaupt nichts machen muss ich mich jetzt um alles kümmern 😞 .
    Normalerweise programmieren wir erst Java, deswegen ist dieses Thema Neuland für mich.

    Letze Woche habe ich mir das Buch "Assembler: Maschinennahes Programmieren von Anfang an. Mit Windows-Programmierung" über Amazon bestellt, was mir schon einige Grundkenntnisse vermittelt hat.
    Dort habe ich auch ein paar Beispiele gefunden, welche ich jetzt programmieren sollte. //8086-Programme funktionieren doch auf allen x86 Intel Prozessoren wie dem C2D, habe ich das richtig verstanden?

    In vielen Foren wird einem der MASM von Microsoft empfohlen, welcher in Visual Studio 2008 enthalten ist. Über MSND konnte ich das Paket beziehen und habe das ganze installiert..

    So,jetzt fängt das Problem an 🙄
    Ist nun in dem Visual Studio Paket, auch ein Linker enthalten?
    Also ist es möglich, einfach den Text in den Editor zu schreiben und diesen dann zu assemblieren?

    Wie erstelle ich in Visual Studio 2009 überhaupt eine .asm Datei?
    Unter "Datei"-->"Neu"-->"Datei" finde ich keine Option für eine Assemblerdatei.

    Ich hoffe,das ihr mir helfen könnte.
    Bis Di. um 17 Uhr wäre gut,dann komme ich nach hause und kann gleich mit dem programmieren loslegen 🙂 .

    Mfg der hilfsbedürftige Schüler^^



  • Es ist zwar richtig, dass das Visual Studio 2008 den MASM-Compiler mit an Board hat (unter "Pfad\Microsoft Visual Studio 9.0\VC\bin"); er bietet jedoch keine IDE für ihn.

    Soll heißen, du wirst deinen Code in einem beliebigen Text-Editor schreiben und dann selber kompilieren müssen.
    Du kannst auch andere Objekte linken. Dafür kannst du die link.exe aus selbigem Verzeichnis benutzen.

    Du solltest dir vielleicht das MASM32-Package downloaden. Hier hast du einen ganz nützlichen Editor und nützlichen Quellcode, den du benutzen kannst.
    Sind auch ein paar Beispiele dabei.

    Hier mal was ganz einfaches:

    INCLUDE C:\masm32\include\masm32rt.inc			
    
    TITLE HelloWorld
    
    .CODE
    main:
      print "Hello World", 13, 10   
      inkey
      exit
    
    END main
    

    Kompilierst und linkst du folgendermaßen:
    ml /c /coff HelloWorld.asm
    link /SUBSYSTEM:CONSOLE HelloWorld.obj



  • Danke für die Informationen, konnte das Referat zum Glück noch verschieben.
    Werd das heute gleich testen, ich hoffe es funktioniert 🙂 .



  • Entschuldigt mir die Doppelpost, aber irgendwie funktioniert zB der Linker vom MASM32 Paket nicht. Es erscheint kurz ein Fenster (sieht wie die Eingabeaufforderug aus) und dan schließt es sich sofort wieder.
    Sprich es ist unmöglich etwas zu linken 😞 .

    Kann es daran liegen das ich Win7 Professional x64 nutze ?
    Wenn ja kennt ihr einen passenden Assembler& Linker?
    Ist es mit einem 64Bit Betriebssystem überhaupt möglich ein 16Bit Programm zu nutzen, meistens findet man ja genau für diesen Bereich Beispiele.

    Mfg Hilfsbedürftiger_Schüler



  • Du schliesst also aus den Tatsachen, dass dein Linker ein normales Konsolenprogramm und die Standardeinstellung in Windows seit Win2K ist, diese zu schliessen, sobald beendet, dass der Linker nicht funktioniert? 😕
    Mach mal die Eingabeaufforderung auf und rufe den Linker dort mit dem Parameter "/?" auf, um eine Funktionsuebersicht zu erhalten.

    16Bit-Programme laufen nicht mehr nativ auf 64Bit-Systemen. Aber auch Windows 7 bringt AFAIK eine VM mit, mit der die Programme ausgefuehrt werden koennen.



  • So ich glaub ich habs zum laufen bekommen, lesen sollte man können *hust* .
    Ich habe das Beispiel von "FrEEzE2046" jetzt harrgenau so in den Editor von MASM hineinkopiert, habe dort dann auf "Projekt->Assemble ASM File" geklickt und bekam diese Fehlermeldung:

    Assembling: C:\masm32\helloworld.asm
    C:\masm32\helloworld.asm(1) : error A2088: END directive required at end of file
     Datentr„ger in Laufwerk C: ist Windows
     Volumeseriennummer: 4676-499D
    
     Verzeichnis von C:\masm32
    
    17.01.2010  16:26                 0 helloworld.asm
                   1 Datei(en),              0 Bytes
                   0 Verzeichnis(se), 49.510.793.216 Bytes frei
    

    Ich hoffe das ihr mir helfen könnt^^.

    Mfg Hilfsbedürftiger_Schüler



  • 17.01.2010 16:26 0 helloworld.asm
    1 Datei(en), 0 Bytes
    0 Verzeichnis(se), 49.510.793.216 Bytes frei

    Die Datei scheint ja leer zu sein (0 Bytes). Ich kenne diesen Editor von MASM nicht, weil er auf meinem Rechner leider gleich beim Starten abstürzt... weiss nicht einmal, wie er aussieht.



  • Mir ging's beim Empfehlen des MASM32-Package auch eher um die Include-Files, die für dich ziemlich viel Arbeit erleichtern.

    Kopier den Code mal in einen Editor deiner Wahl und kompilier / linke wie von mir beschrieben.

    Du versuchst offensichtlich die falsche Datei zu kompilieren. Hast du vor dem kompilieren die Datei gespeichert?



  • der VC++ funktioniert nicht richtig wenn man sich nicht als Admin anmeldet,
    vielleicht gilt das für die Masm32Package auch?

    Unter 64Bit würde ich mit dem gcc und Linux arbeiten. Wird recht aktuell gehalten, ...für ein Referat über 64bitAssembler und opensource... 😉

    Für 16bit Assembler und ein Referat darüber ist debug ideal, weil die meisten Mitschüler debug sicher auch aufrufen können/Codebeispiele zuhause ausprobieren können.
    Eine brauchbare Einführung in das Debug Programm ist von Günter Born:
    http://freenet-homepage.de/gborn/Library/EinfASM.pdf
    ->Kapitel 7
    oder für den Anfang das Tut von Prof.Dr.H.Weber:
    http://swlx01.hs-esslingen.de/vorl/rt2/debug.pdf

    Praktisches Anschauungsbeispiel ist z.B. eine einfache Division mit Restanzeige oder die Einfachheit eines Fibonacci-Algorithmus in Assembler

    darüberhinaus:
    Zum VC++ gibt es eine sehr gute Hilfeseite:
    http://homepages.fh-giessen.de/~hg13025/aufgaben.htm

    Das größte Problem mit Assembler heute ist, dass du immer gute Hardwareinfos zu den Schnittstellen brauchst, und dass diese Hochzeit für Assembler eigentlich in den 80ern war. So ist Assembler eine Programmierprache der 80er Jahre und der einheitlichen Schnittstellencomputer wie c64 und co.
    Zu den wichtigsten Infos für Asm Programmier gehört die Interruptliste von
    Ralf Brown:
    http://www.cs.cmu.edu/~ralf/files.html
    (auch ein Kind der 80er Jahre)

    Aber schwieriger als eine Hochsprache ist Assembler nicht, nur eben wenig standardisiert/dokumentiert.
    Beispiel: Angenommen, du wolltest einen Additiven Synthesizer in Assembler
    schreiben und für die Obertonverarbeitung die leistungsfähige Grafikkarte
    mißbrauchen.
    Bis du dich durch die Dokumentationen und Apis, die du brauchst, durchgearbeitet hast, vergehen vielleicht Jahre, und manches bleibt undokumentiert...Herrschaftswissen...
    Da nimmt man besser C++ oder Java, hierfür gibt es heute Dokus und Apis und Bücher mit Spezialthemen und tutorials an jeder
    Straßenecke.
    😉

    P.S.:
    bei z.B.: http://www.phatcode.net/downloads.php?id=280
    kann man sich das Tasm-Packet herunterladen. Das Tasm Packet bringt 32bit und 16bit Assembler und Debugger mit und einige sehr gute Code-Beispiele.
    Für Linux und Windows zusammen, ist Nasm ganz interessant.
    Eine schöne Einführungsseite für Assembler mit Nasm bietet Dr.Erhard Henkes:
    http://www.henkessoft.de/Assembler/Assembler.htm



  • Also, dass es im Visual Studio 2008 keine IDE für Assembler geben soll, ist ja wohl ein Gerücht! Erzählt dem armen Assembler-Anfänger doch nicht so einen Quatsch. Vorrausgesetzt es handelt sich bei der Visual Studio Version mindestens um eine Professional oder höher (also nicht Express) kann man in der IDE Assemblerprojekte bearbeiten und sogar kompilieren und linken.

    Für alle, die das nicht glauben, hier ein kleiner Test, der das ganze beweisen soll:
    - Visual Studio starten
    - neues Projekt anlegen (z.B. C++ Konsolenanwendung, leeres Projekt)
    - fügt eine "Quelltext" - Datei hinzu (z.B. 'test.asm')
    - im Projektmappenexplorer Datei mit rechter Maustaste anklicken und "Eigenschaften" auswählen
    - Unter "Konfigurationseigenschaften/Allgemein" findet man rechts den Eintrag "Tool"
    - "Tool" anklicken, das daraufhin zur ComboBox wird und dort kann man unter anderem den Eintrag "Microsoft Macro Assembler" auswählen.

    Man kann sogar Haltepunkte setzen und den integrierten Debugger zur schrittweisen Ausführung benutzen.

    Happy Programming!



  • Dr. GUI schrieb:

    - "Tool" anklicken, das daraufhin zur ComboBox wird und dort kann man unter anderem den Eintrag "Microsoft Macro Assembler" auswählen.

    Ich verfüge beruflich sogar über die Team System Version und kann selbst dort bei bestem willen keinen Eintrag für den Microsoft Macro Assembler finden.
    Hast du evtl. dir eine eigene "Custom Build Rule" gebastelt? Mit dieser kann man natürlich seinem Code jedem erdenklichen Compiler zu führen.



  • Der Thread ist zwar schon etwas älter, aber ich habe ihn über Google gefunden und vielleicht hat ja noch jemand das selbe Problem.

    Deshalb hier die Lösung:

    -> Rechtsklick auf das Projekt
    -> Buildanpassungen
    -> Dort die bereits vorhandene masm.targets aktivieren
    -> Nun kann man tatsächlich unter Tool (Elementtyp in der deutschen Version) den "Microsoft Macro Assembler" auswählen

    Gruß, Iodun


Log in to reply