Announcement

Collapse
No announcement yet.

Mnemonic QuellCode in MaschinenCode umwandeln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mnemonic QuellCode in MaschinenCode umwandeln

    Moin.
    Es gab mal ein Tutorial auf Tutorials.de mit dem Titel -> Back to the Roots <- welches sehr gut vermittelt hat wie man Mnemonics mit Hilfe bestimmter Tabellen aus der Intel Developer Manual in MaschinenCode umwandelt.
    Wenn jemand weiß wo das zu finden ist würde ich mich über einen Link freuen.
    Ansonsten kann das vielleicht jemand hier nochmal vermitteln.
    Ich währe dafür sehr dankbar.
    Wegen Rechtschreibfehler tut es mir leid aber ich bin Legastheniker und bemühe mich richtig zu schreiben.

  • #2
    Hallo,

    wenn du nach Assembler-Compiler suchst wirst du das auch finden. Zum selbst programmieren ist das auch nicht so schwer, da jedes Mnemonic durch einen Lookup in die Maschinen-Code-Tabelle ersetzt werden kann. Ein Compiler für Hochsprachen ist da im Vergleich wesentlich aufwändiger.

    mfG Gü

    PS: wäre und nicht währe
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Ich habe schon so viel gesucht. Seit über 10 Jahren immer mal wieder. Bin was Google und suchen im i-Net angeht aber alles andere als gut.
      Eigentlich hatte ich mir das Tutorial auch ausgedruckt, nur leider ohne Bilder. Das heißt der Autor hat in bestimmten Tabellen etwas markiert und sich im Text darauf bezogen und das kann ich jetzt nicht mehr verstehen.

      Was die 1 zu 1 Übersetzung angeht, muss man da nicht jeden Befehl mit jeder Variation einzeln aufschreiben? Weil so etwas zu schreiben hab ich mal angefangen es dann aber nach ner gewissen zeit bzw. menge Befehle gelassen. Wenn ich verstehen könnte wenigstens die Varianten der einzelnen OpCodes zu errechnen wäre das nicht mehr ganz so viel Arbeit.
      Wegen Rechtschreibfehler tut es mir leid aber ich bin Legastheniker und bemühe mich richtig zu schreiben.

      Comment


      • #4
        Hallo,

        wenn es dieses Tutorial nicht mehr gibt, so vergiss dieses einfach ;-)
        Das "schöne" am www ist doch dass es genügend Information gibt. Falls du mit Google nicht zu den gewünschten Ergebnissen kommst, so kannst du auch eine andere Suchmaschine probieren.

        Mit "Mnemonics" meinst du schon Assembler-Code? Assemblers And Loaders. hat mehr Detail, aber die Idee von Assembler ist eben ein 1:1-Mapping von Befehlen, da add fürs Addieren leihter zu merken ist als 10011100 (als Beispiel).

        Mehr als einen einfachen Parser, der Zeile für Zeile durchgeht, und Tokens per Aufteilen der Zeile nach Leerzeichen durchführt und diese Token dann per Lookup in der Tabelle ersetzt ist es nicht. Gut für Register und Speicherzugriffe ist der Lookup nicht gedacht, da die Speicheradressen anders ermittelt werden können, aber das ist nur + und - Rechnen.

        Um dann ein ausführbare Einheit zu erhalten sind je nach Betriebssystem unterschiedliche Formate (ELF, EXE, etc) zu erstellen.

        Worauf willst du genau hinaus?

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Moin.
          Erstmal Danke für die Antwort und entschuldige die späte Reaktion.
          Das was ich verstehen möchte ist: Welcher Assembler Befehl ergiebt welche Bitfolge. Diese Bitfolge zu zu ermitteln ist mein Ziel. Da ich leider kaum Englisch kann bringt mir die Developer Manual von Intel nur wenig. Wenn es diese auf Deutsch gäbe, würde ich sicher besser zurecht kommen.
          Jeden Befehl mit jeder variation einzeln vor zu schreiben kann doch nicht wirklich die Lösung sein oder?

          zB MOV AX,BX = Bitfolge
          MOV BX,AX = Bitfolge
          MOV BX,CX = Bitfolge
          MOV CX,BX = Bitfolge
          MOV AX,CX = Bitfolge
          MOV CX,AX = Bitfolge
          usw.

          Und das für jeden Befehl...?

          In der Intel Developer Manual wird doch erläutert wie es geht, soweit ich das verstanden habe, nur eben auf Englisch.

          Der PC auf dem ich jetzt schreibe ist ein Win10 Rechner. Zum Entwickeln hab ich aber noch ältere PCs bzw. würde mit VMs versuchen zu arbeiten.

          Gruß HeXaGoN
          Wegen Rechtschreibfehler tut es mir leid aber ich bin Legastheniker und bemühe mich richtig zu schreiben.

          Comment


          • #6
            Hallo,

            ohne Englisch-Kenntnisse wird es schwer werden, da dies eben die Sprache der Programmierer-Welt ist.

            zB MOV AX,BX = Bitfolge
            Es ist eher so:
            MOV AX, BX = "Bitfolge für MOV" "Bitfolge für AV", "Bitfolge für BX"

            AX und BX sind Register, also Speicherplätze direkt im Prozessor.
            MOV ist der Befehl, der den Inhalt von BX in AX schreibt.
            In einer Hochsprache könnte das z.B. so aussehen:
            [highlight=c]
            int b = 42; // 42 -> BX
            int a = b; // BX -> AX
            [/highlight]
            Es kommt hier aber sehr darauf an was der Compiler macht, bzw. ein guter Compiler wird, aufgrund Constant Propagation, die 42 gleich nach a bzw. AX schreiben und BX erst gar nicht verwenden.

            In der Intel Developer Manual wird doch erläutert wie es geht
            Klar, denn als Hersteller eines Prozessors müssen sie ja dessen Befehle dokumentieren, damit diese auch angewandt werden können. Für andere Prozessor-Hersteller gibt es ähnliche Manuals. Vllt. findest du ja ein Manual in deutscher Sprache.

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment

            Working...
            X