Assembler - Hexadezimal



  • Nur eine kurze Frage:
    Habe ich das richtig verstanden, dass in Assembler einfach nur statt der Zahlenwerte Befehle angegeben werden, aber sonst die Programmierung gleich ist?
    Also zum Beispiel, dass EB 0C (müsste es sein) als mov geschreiben wird?
    Ich stelle die Frage deshalb, weil ich einfach ein bisschen Hexadezimalprogrammierung lernen möchte, um zu wissen wie das prinzipiell funktioniert.
    Also kann ich Assembler lernen und dann die Befehle einfach durch die entsprechenden Hex-Zahlen ersetzen?



  • Im Grunde richtig (obwohl es "den" mov-Befehl uebrigens so nicht gibt - die opCodes sind stark von den Operanden abhaengig).
    Natuerlich vereinfacht der Assembler die Arbeit noch ueber die blosse Verwendung von Mnemonics hinaus (zB. Labels, Datenstrukturen, Offsetberechnungen, etc.).
    Je nach Dateiformat kommen zudem noch header dazu (zB. bei .exe-Dateien).



  • Heißt also wenn man Assembler kannn, kann man noch nicht Hexadezimal programmieren?
    Kennnnt jemand ein Hexadezimal Tutorial, "nur" für so einfache Dinge, wie Variablen, Ein- und Ausgabe, Schleifen und Bedingungen (if)?



  • Ein Tutorial zum hexadezimalen Programmieren gibt es, vermute ich, nicht... man kann sich auch so in Assembler das Leben schwer machen... 😉



  • Dussel schrieb:

    Heißt also wenn man Assembler kannn, kann man noch nicht Hexadezimal programmieren?

    Prinzipiell: korrekt.
    Praktisch: nein.
    Soll heissen, wenn du tatsaechlich halbwegs Assembler gelernt und die Prinzipien dahinter verstanden hast (und nicht nur selbst meinst, du koenntest es, weil du ein paar Beispiele aus Tutorials abgetippt/assembliert, und eine "Hello World"-Bootdiskette zusammengec&pt hast), kannst du dir zu deinem Assemblerquellcode Befehlsreferenzen und Dokumentationen ueber deine CPU besorgen und deinen Quellcode auch selbst in Binaerwerte uebertragen und mit einem HexEditor zusammentippen.
    Ich orakel schonmal: Bis du Assembler kannst, wird dir die Lust auf dein Vorhaben vergangen sein. 😉

    Einen so komplexen Befehlssatz wie den der x86 ohne die Mnemonics als Gedaechtnisstuetze/Uebersicht benutzen zu wollen, ist praktisch wohl kaum moeglich => kein "Hexadezimal programmieren" ohne Assembler.



  • Wie schon geschrieben wollte ich nur so die Grundlagen mal lernen. Zum richtigen Programmieren benutze ich natürlich C++ als Hochsprache. Und mir gefällt ehrlich gesagt Hexadezimal besser als Assembler(natürlich nur für kleine Programme). Lieber eine schwierigere Zeile, als einige etwas einfacher zu verstehende Zeilen für z.B. ein "Hallo Welt" Programm. 😉
    PS: Zur Ehrenrettung: EB ist jmp, 0C steht für 12Byte ("Hello World$") und BA, B4 und B8 sind verschiedene Typen von mov. 🙂



  • Dussel schrieb:

    Und mir gefällt ehrlich gesagt Hexadezimal besser als Assembler(natürlich nur für kleine Programme).

    Hexadezimal ist ein Zahlensystem, keine Programmiersprache. Und niemand kann Programme in Hexadezimalwerten schreiben ohne vorher Assembler gelernt zu haben. Wenn du Assembler kannst, kannst du dir deine Programme ja mal mit einem Hexeditor ansehen und schauen, wie der Assembler deinen Quelltext übersetzt hat und ein paar Teile auswendig lernen. Aber wenn du dann Programme mit dem Hexeditor schreibst, wirst du immer in ASM denken. Der Unterschied ist bloß, dads du den Code halt schon im Kopf übersetzt, anstatt das den Assembler machen zu lassen. Also lerne erstmal Assembler und schau dir dann die Opcodes an.

    Aber Nobuo T hat das Problem mit den Dateiformaten ja schon angesprochen. Mit einem Hexeditor wirst du realistisch gesehen nur COM Dateien schreiben können. Außer du kopierst dir die entsprechenden Headerteile und bearbeitest sie, was auch schon wahnsinnig viel Arbeit ist.



  • Mit Hexadezimal meine ich natürlich Maschinencode in Hexadezimalschreibweise.
    Auch wennn mir ALLE davon abraten, lerne ich das jetzt ein bisschen. Mir geht's halt darum zu lernen, wie das auf Prozessorebene abläuft. Ich will natürlich keine großen Programme schreiben, deshalb reichen auch com Dateien.
    Ich habe halt im Moment nicht viel zu tun, es sind Ferien (NRW) und ein bisschen geistige Herausforderung ist auch mal nicht schlecht. 😉



  • Naja, von Prozessorebene lernst du dabei aber sicher noch am wenigsten...



  • Auch wennn mir ALLE davon abraten, lerne ich das jetzt ein bisschen...

    Ich glaube, dir ist die Komplexität und, ich fürchte, die Sinnlosigkeit der Aufgabe noch nicht so bewusst, wie den anderen.
    Überleg dir einfach, wieviel du damit erreichst und welche Programme damit geschrieben werden können... ich glaube, das beste Programm, was du damit schreiben kannst, ist ein Programm, das ein Paar Register mit irgendwelchen Daten lädt, vielleicht ein Paar Flags setzt bzw. abfragt, vielleicht auch ein Paar Register miteinander addiert und sonst nichts...
    Selbst bei kleinen Programmen wünscht man sich bald, z.B. mindestens eine Ausgabe auf dem Bildschirm zu haben, ok, im DOS-Fenster kann man das mit dem int 21, unter Linux mit dem entsprechenden Systemaufruf schaffen, aber wie dem auch sei, bald benötigt man irgendwelche Funktionen aus irgendwelchen Bibliotheken, und da merkst du dann, dass du viele Tage in eine Sache investiert hast, wo man mit Assembler vielleicht weniger als 1 Minute benötigen würde...



  • Vor allem musst du dir überlegen:

    Computer sind dumm und machen die dummen Aufgaben.
    Genau soetwas ist der Assembler. Er geht nach festen Regeln vor und macht stur nach einem bestimmten Muster ein Schritt nach dem anderen. Genau für solche stupide Aufgaben wurde der Assembler erfunden. Warum sollte man das also selbst machen wollen? Wenn du etwas mehr über den Prozessor erfahren willst kauf dir ein Buch. Da wirst du schlauer draus, als mit einer Instruction-Tabelle die Befehle rauszusuchen und in Hexa zu umzuwandeln. Ich sehe da wirklich keinen tieferen Sinn drin.
    Im Übrigen: Wenn du wirklich mehr über Prozessoren (an sich) erfahren willst ist Asm eh nich ganz der richtige Ansatz. Das einzige was du da im großen mitbekommst: CPU holt sich den Befehl, plötzlich sind die Register anders... das wars. 🙂
    CPU bedeutet so sachen wie: ALU, Register, Steuerwerk, Pipelines, Adresswerk, Mikroprogramme, Schaltwerke, Schaltnetze, Gatter, Transistoren usw...
    (Falls du interesse hast kann ich gern mal die Literatur raussuchen, die uns unser Prof empfohlen hatte, aber vielleicht meinst du doch was anderes)

    Anderes Beispiel: Ich habe mich mal für den Aufbau einer BMP-Datei interessiert.
    Deswegen hab ich sicher noch lang nicht plötzlich mit dem Hexeditor Bilder gemalt.
    -> Wieder so eine dumme Aufgabe für den Computer. Vielmehr hat es mir gebracht eine Doku über das BMP-Format zu lesen...

    Also: Einmal lesen, kapieren und gut ist. Und das in vieel kürzerer Zeit.



  • Habe nicht so viel Zeit...
    Ich will mit diesem Programmen nur ein paar Texte auslesen, was eingeben, Springen, und bedingte Aweisungen ausführen. Keine großen Programme schreiben. Aber trotzdem danke für die Mühe mir das auszureden. 😃 Ich habe jetzt eine Methode und werde schon merken, wenn mir das zu aufwändig wird. 😉


Anmelden zum Antworten