assembler auf 64bit



  • Hallo,
    irgendwie ist es ja doch schon stressig Assembler zu lernen bzw. erstmal die richtige Umgebung zu haben.

    Ich habe mir ein Buch gekauft, welches auf den TASM baut.
    Funktionierte auch alles gut, bis mein Notebook kaputt ging und ich ein 64er hatte.

    Hab dann einfach versucht, paar Alternativen zu nehmen.
    Selbst da musste ich ständig irgendwie was umfummeln oder andere Synthax benutzen.

    Sehr schade.
    Denn generell habe ich total Lust auf Assembler. Aber ich brauche auch irgendwie ein festen roten Faden an den ich mich die ersten Monate orientieren kann. Aber alle Tutorials nutzen irgendwie was verschiedenes.

    Ist es überhaupt möglich auf 64 vernünftig zu entwickeln? (Assembler)
    Denn selbst wenn ich es mit Alternativen zum assembeln hinebekommen habe, konnte ich die .exe nicht starten, da ein Kompalibitätsproblem bwzgülich meines 64bit kam.



  • Versuch mit Visual Studio (c++) zu arbeiten, hier haste das meiste beisammen, weitgehend kompatibel, Arbeitshilfen, Debugger, Assembler, Linker, Make usw.

    Was man aber beachten sollte, ist, das der 64bit Modi ein wenig anders funktioniert, und man diese Unterschiede zwischen 16bit/32Bit/64bit kennen sollte wie auch die Arbeitsweisen.

    Einen recht guten Aufbau zum Verständnis der Windowsprogrammierung bieten u.a. Petzold, Richter, Russinovich/Solomon (und deren Programme).

    Viele Programmiertechniken abgucken mit Debuggern und Ida - aber free-ida kann natürlich kein 64Bit (aber 128 Bit, immerhin).

    Einen roten Faden musst du dir weitgehend selber erstellen. Wo willst du genau hin, was möchtest du gerne programmieren? Wie sehen die Arbeitsschritte aus?

    Falls dir einfach nur Progammierpraxis fehlt, schnapp dir ein C Buch z.B. vom Erlenkötter, eine Liste von Algorithmen und programmier die Beispiele nach Assembler um und denk dir auch selber ein paar Beispiele aus.

    Für anspruchsvollere bzw. speziellere Thematiken brauchst du meist Spezialliteratur.



  • Ok erstelle und assembeliere nun auch über VS.
    Bekomme trotzdem Fehlermeldung wie
    1>.\test.asm(6) : error A2006:undefined symbol : DGROUP

    .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

    Es muss doch möglich sein, bei einem 64bit auch die ganzen kleinen alten Beispiele laufen zu lassen? 😞



  • hgfds schrieb:

    Es muss doch möglich sein, bei einem 64bit auch die ganzen kleinen alten Beispiele laufen zu lassen? 😞

    Nein, das ist nicht möglich:
    - 16 Bit DOS-Code wird von Windows nicht mehr ausgeführt (-> Emulator: z.B. DOSBox)
    - zum erstellen brauchst du einen 16Bit-Linker, der nicht im Visual Studio enthalten ist.
    - DOS ist tot! - verschwende deine Zeit nicht mit so einem Misst.
    - es ist empfehlenswert mit 32Bit Code unter Windows anzufangen. Der Umstieg auf 64 Bit ist dann sehr leicht.
    - einen sehr guten Einstig in die Win32-Assmbler Programmierung bieten Iczelions berühmte Win32Asm tuorials (die orginal Seite gibt es leider nicht mehr)



  • hgfds schrieb:

    Ok erstelle und assembeliere nun auch über VS.
    Bekomme trotzdem Fehlermeldung wie
    1>.\test.asm(6) : error A2006:undefined symbol : DGROUP

    Es ist sehr hilfreich, die Masm-Syntax gut zu kennen, um solche Fehlermeldungen zu vermeiden.
    Aber im 64-Bit-Mode gibt es auch keine Kompatibilität zu 16 Bit Code.
    Normalerweise sollte Windows die Kompatibilität anbieten, aber stattdessen nimmt man lieber Dosbox von Linux Programmierern, das hat wohl auch damit zu tun, dass Linux/Unix schon früher mit 64Bit vertraut war.

    Joachim Rhode ( http://www.amazon.de/Assembler-Grundlagen-Programmierung-mitp-Professional/dp/3826614690 ) hat auf seiner Internetseite auch einige der Iczelion-Tutorials auf deutsch übersetzt:
    http://www.joachimrohde.com/cms/xoops/modules/articles/index.php?cat_id=2



  • Ok, gibt es denn gute 64bit Tutorials, die auch von Anfang bis "Ende" (also die Grundlagen mit Beispielen) einmal durchgehen? 😕



  • also es würde mir schon ein tutorial reichen, wo ich anschließend das Know-How habe um einfache C++ Operationen / Algorithmen nachzuprogrammieren



  • hannox schrieb:

    einfache C++ Operationen / Algorithmen

    das sind z.B.?



  • Also so, dass ich alle grundlegene Sachen wie Schleifen, Conditions, Rechenoperation etc. in Assembler nachbilden kann.

    Problem ist nur, alle Tutorials sind älter und funktionieren nicht auf MASM 64 bit



  • wwg schrieb:

    hannox schrieb:

    einfache C++ Operationen / Algorithmen

    das sind z.B.?

    Hallo,

    ich schreibe auch alles mit MASM.
    Einige Windowsfunktionen habe ich ebenfalls selbst mit MASM erstellt, da der
    Aufwand recht gering ist und ein bisschen lernen kann ja nicht schaden 😉

    Dazu zählen:
    LEN() = Stringlänge
    itoa = Integerzahl nach ASCII
    atoi = ASCII nach Integer
    UCase() = Alles in Großbuchstaben
    LCase() = Alles in Kleinbuchstaben
    Instr() = Zeichen in einer anderen Zeichenkette suchen (war etwas anspruchsvoller)
    Replace() = Ersetzen einzelner Zeichen in einem String durch ein anderes Zeichen
    ntoa() = IP Adresse in ASCII String umwandeln

    Gruß, Nicky



  • Also die Grundlagenstichworte zu 64Bit findet man u.a. (auf deutsch) hier http://www.complang.tuwien.ac.at/ubvl/amd64/amd64h.html und das reicht normalerweise, wenn man gewisse Grundlagen verstanden hat - und diese kann man auch mit 16 Bit erwerben (oder notfalls auch in 8 Bit, aber dann nicht unbedingt Intel-kompatibel).

    Algorithmen findet man in verschiedenen Assemblergrammatiken und Beispielen, aber lernen würde ich erstmal den Algorithmus mit Papier und Bleistift, und dann nach Assembler übersetzten, dann spielt auch die Grammatik nicht mehr so die große Rolle.

    Für (für Microsoft) Masm gibt es auch Beispiele für ML und Infos zur Syntax: http://msdn.microsoft.com/en-us/library/afzk3475(v=vs.110).aspx
    Algorithmen für 32bit findest du zuhauf, zwar in verschiedenen Grammatiken, aber das macht (fast) nix, kleinere Programme (32Bit, auch 16Bit)mit Ida(Free) anschauen, oder auf z.B. auch Beispiele auf diversen masm32-Seiten).
    (oder einfach mal dieses Forum durchstöbern, inklusive Faq, da hier ja fast immer Einsteiger oder unbeschriebene Blätter nachfragen.

    Aber für den Anfang scheint es mir erstmal wichtiger zu sein, sich mit ML und dem Compilieren besser vertraut zu machen.

    Am besten machst du dir erstmal eine Mappe mit Beispielen nach Schwierigkeitsgrad geordnet inklusive mit einer Liste mit Stichworten, was du schon gelernt hast, und was du als nächstes Lernen möchtest.
    Viele Einsteiger, die hier reinschreiben, haben Probleme beim Compilieren, das ist aber meist nur Kleinkram.

    Und Seiten wie diese http://www.lomont.org/Math/Papers/2009/Introduction to x64 Assembly.pdf helfen dir möglicherweise auch über die ersten Schritte weiter. Nicht abschrecken lassen.



  • Danke für die ausführliche Antworten.

    @supernicky: ja genau in die Richtung wollte ich auch. Einfach paar kleine eigene Sachen schreiben

    @nachfeuer:
    Möchte ich ja aber ich komme ja nicht mal dazu, ein normales Programm zum laufen zu bringen.

    Sprich
    - datenregister laden
    - variabel lesen
    - ausgeben

    .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



  • Ah hab jetzt erst dein Link geöffnet.
    Dort sehe ich die MASM Symbol Reference. Da finde ich bestimmt die Alternative zu meinem DGROUP Problem


Anmelden zum Antworten