Frage zu Assembler und der Syntax


  • Mod

    Hier liegt wohl ein gewaltiger Irrtum vor: Assembler selbst ist bereits eine Hochsprache und wird von Prozessoren nicht direkt ausgeführt. Es muss erst übersetzt werden. Das Ergbebnis dieses Übersetzungsvorgangs kannst du dir angucken, indem du eine Executable mal mit einem Editor öffnest. Das nennt man dann Maschinensprache und hat mit einem Text nichts mehr zu tun.



  • In was wird denn dann Assembler übersetzt ?

    Und in das was Assembler übersetzt wurde das ist doch dann im Endeffekt auch wieder nur Text. ^^

    Mehr lies sich auf aus dem 16Bit Assembler Programm nicht rauskopieren 😞

    Also ist das jetzt richtige Maschienen Sprache und wie kann die CPU z.b. damit was Anfangen ?

    MZ     ! ÿÿ        >    ûqjr                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¸ ŽØº  ´	Í!´LÍ!hallo$
    


  • SeppJ schrieb:

    Hier liegt wohl ein gewaltiger Irrtum vor: Assembler selbst ist bereits eine Hochsprache und wird von Prozessoren nicht direkt ausgeführt. Es muss erst übersetzt werden. Das Ergbebnis dieses Übersetzungsvorgangs kannst du dir angucken, indem du eine Executable mal mit einem Editor öffnest. Das nennt man dann Maschinensprache und hat mit einem Text nichts mehr zu tun.

    Und auch hier liegst du noch falsch weil Executables meistens noch Header und Footer dran haben 🤡

    @void**: Wenn dich der Aufbau eines gesamten Computers interessiert könnte ich dir eine Vorlesung an meiner Universität empfehlen bzw. allgemein das dort empfohlene Buch ans Herz legen: https://www.auto.tuwien.ac.at/courses/viewDetails/12 (allerdings benötigst du nur die ersten Kapitel, der Rest ist aber dann auch interessant).

    MfG SideWinder



  • Ty ich werde mal nach dem Buch schauen.



  • void** schrieb:

    Ty ich werde mal nach dem Buch schauen.

    Ich habe noch einmal schnell hineingeblättert. Evtl. werden dort die elektrotechnischen Grundlagen zu kurz und die Betriebssystemlandschaft zu lang beschrieben um für dich als "Top-Treffer" zu gelten. Schau dich also auch nach Alternativen um!

    MfG SideWinder


  • Mod

    void** schrieb:

    In was wird denn dann Assembler übersetzt ?

    Und in das was Assembler übersetzt wurde das ist doch dann im Endeffekt auch wieder nur Text. ^^

    Nein, das sind dann nur noch elektronische Zustände die auf den Leitungen liegen.

    Mehr lies sich auf aus dem 16Bit Assembler Programm nicht rauskopieren 😞

    Also ist das jetzt richtige Maschienen Sprache und wie kann die CPU z.b. damit was Anfangen ?

    Ja, das ist eine Interpretation von Maschinensprache als Text. (Bis auf die Einschränkung, dass Executables auch noch ein bisschen Inhalt jenseits von Maschinensprache haben). Etwas übersichtlicher wird das, wenn man die Maschinensprache als Zahlen interpretiert (weil man im text sonst so viele nicht-druckbare Zeichen hat:

    E8 03 58 03 1A 90 04 1B 03 80 7C BA 04 19 03 E6 03
    

    Das kannst du dir dann so vorstellen, dass wenn da eine 03 steht, dann ist das in binär 110. Das heißt im Prozessor liegen dann auf der zweiten und der dritten Leitung Spannung und auf allen anderen nicht. Zumindest wenn man es sehr vereinfacht darstellt.



  • Trifft vielleicht noch genauer das was du themenmäßig suchst: http://www.lrr.in.tum.de/public/TeachingETIWS09

    MfG SideWinder



  • void** schrieb:

    In was wird denn dann Assembler übersetzt ?

    Und in das was Assembler übersetzt wurde das ist doch dann im Endeffekt auch wieder nur Text. ^^

    Mehr lies sich auf aus dem 16Bit Assembler Programm nicht rauskopieren 😞

    Also ist das jetzt richtige Maschienen Sprache und wie kann die CPU z.b. damit was Anfangen ?

    MZ     ! ÿÿ        >    ûqjr                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ¸ ŽØº  ´	Í!´LÍ!hallo$
    

    Wie wird Text auf einem Computer gespeichert? In dem man eine Kodierung hat, die bestimmten Zahlenwerten eine bestimmte Bedeutung (zB einen Buchstaben) zuordnet. Computer können nämlich nur Zahlen abspeichern. Im Normalfall sogar nur in binärer Darstellung. Ein Assembler wandelt den Assemblercode aber nicht in eine "übliche" Textdarstellung um, sondern in ein Format, dass einfacher für die Verarbeitung in der CPU ist(*). Deshalb ist der von dir kopierte Abschnitt natürlich auch wenig sinnvoll, da du einfach das Format versucht hast als Text zu interpretieren, was natürlich zu "Kraut und Rüben" führt. (Wenn du dir den Inhalt anschauen willst, dann nimm entweder einen Hexeditor, der dir die Zahlenwerte darstellt, oder einen Disassembler, der dir den Maschinencode wieder versucht in Assembler darzustellen).

    Wie der Maschinencode genau aussieht, hängt natürlich von der CPU ab. Aber prinzipiell gesehen stecken da Werte drin, die die genaue Operation angeben und ggf. noch Parameter, wie Register, Speicheradressen oder Literals. Das ganze wird von der CPU aus dem Speicher geladen und der Decoder liest aus dem Befehl aus, wie was in der CPU angesteuert werden soll. Das ist dann aber alles in Hardware realisiert (und basiert im Endeffekt auf Milliarden von Transistoren).

    Irgend wie hatte ich mal einen Link zu einem Online CPU Emulator, der die ganzen Vorgänge schön visualisiert hat. Leider finde ich den jetzt nicht mehr (habe aber dafür einen gefunden, der in Javascript/HTML5 einen 6502 auf dem Transistorlevel visualisiert http://www.visual6502.org/JSSim/index.html. Ziemlich 🕶. Aber leider nicht so hilfreich für die Diskussion)

    (*) genauer gesagt wird heute um den Maschinencode noch einiges drumrum geschrieben, da man ja heute Betriebssysteme hat, die das starten der Anwendung dann übernehmen und den Maschinencode auslesen (ggf. noch dynamisch linken) und in den Speicher laden.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Assembler verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • void** schrieb:

    In was wird denn dann Assembler übersetzt ?

    Und in das was Assembler übersetzt wurde das ist doch dann im Endeffekt auch wieder nur Text. ^^

    ...

    *lol* Irgendwie muss ich dabei gerade an die super geheimen .exe-Codes von autoexec.bat denken. 😃



  • Das hier http://www.visual6502.org/JSSim/index.html sieht ja sehr Interessant aus leider sagt mir das ganze gar nix. ^^

    Und wofür ist dieser Hex Editor da auf der Rechten Seite ?

    Ich hab da einfach mal irgendwelche Werte eingeben und dann auf den Start Button geklick aber ich konnte keine veränderungen festellen. ( Warscheinlich weil ich 0 Ahnung davon habe ^^ )

    Das ganze ist ein sehr Interessantes Thema aber anscheind auch extrem kompliziert. 😞

    Aber ich versuch trotzdem mal so ein paar Grundlagen davon zu verstehen.
    Etwas ahnung von Digitaltechnik hab ich ja aus der Schule.



  • void** schrieb:

    Hallo,

    Wieso kann man z.b. die meiste Hardware nur mit Assembler ansprechen ?

    Das stimmt so nicht, die "Hochsprachen" sind ja dafür da, die Hardware auf andere Weise anzusprechen als mit Assembler oder mit Hexcodeeingaben. Wie würde Windows funktionieren, wenn es mit seinem Hochsprachencode keinen Einfluss auf "die Hardware" hätte?

    void** schrieb:

    Warum hat Assembler z.b. eine Syntax wie:

    mov eax,1
    push eax

    Hat Assembler solch eine Syntax bekommen weil es früher dadurch einfach leichter zu kennzeichnen war welchem Bauteil man welche Stromimpulse gesendet hat ?

    Die beiden Befehle bewirken unterschiedliche Arbeitsweisen, darum heißen sie anders. Inwieweit Push und Pop jetzt so heißen und nicht Stacki und Stacko oder Blitz etc. weiß ich auch nicht so genau, man kann es sich aber denken, wenn man die Arbeitsweise des Stacks kennt.

    mov eax,1 könnte man direkt mit Schaltern realisieren, die Schalterstellungen werden binär codiert:

    1011100000000001000000000000000000000000
    

    nun gibt es aber beim Pentium über 1000 unterschiedliche Befehle. Viel Spaß beim Bearbeiten komplexer Programme...
    Eine kleine Hilfe ist das Hexadezimalzahlensystem,
    mov eax,1 hexcodiert:

    B801000000
    

    schon besser, denn ein Hexwert kann 4 Bits zusammenfassen. Zum Editieren von Spielständen sehr praktisch. Aber viel Spaß beim Bearbeiten oder Erstellen oder gar Braindebuggen komplexer Progamme...

    der Befehl

    mov eax,1
    

    zeigt auf den ersten Blick, worum es geht.
    Push eax zeigt Insidern sofort worum es geht.
    Assemblerroutinen versteht man dagegen nicht gleich auf den ersten Blick, man braucht Dokumentation. Da diese oft vergessen wird: viel Spaß beim Bearbeiten komplexer Programme, die nicht gut strukturiert und dokumentiert sind, vor allem, wenn die Maschinen selbst ganz unterschiedlich sein können oder das Betriebssystem direkte Hardwarezugriffe z.B. auf Ports und Prozessormodes weitgehend aussperrt.

    Programmierung und Programmierschnittstellen an sich, hängen meistens direkt mit der Hardware oder dem Betriebssystem der Doku und dem Mainstream usw. zusammen.
    Ein bißchen seltsam ist die Hello World praxis in einer von Audio und Video und Mathematik bestimmten Multimediarechenwelt.

    Kennt hier jemand eigentlich den Song Jasmine and Rose?
    http://www.youtube.com/watch?v=HdIGw8k19n4

    Mir ist in diesem Zusammenhang aufgefallen, das die Bekanntschaft mit Jasmin http://www.lrr.in.tum.de/~jasmin/ und Jazelle http://en.wikipedia.org/wiki/Jazelle gar keine so schlechte ist.

    (Und ein Geheimnis ist (pssst!) Asm Grundlagen lassen sich leichter lernen als Hochsprachengrundlagen. Manche Hochsprachengrundlagen lassen sich leichter verstehen, wenn man Asm-Grundlagen schon kann.(/pssssssst)



  • void** schrieb:

    Das hier http://www.visual6502.org/JSSim/index.html sieht ja sehr Interessant aus leider sagt mir das ganze gar nix. ^^

    Und wofür ist dieser Hex Editor da auf der Rechten Seite ?

    Ich hab da einfach mal irgendwelche Werte eingeben und dann auf den Start Button geklick aber ich konnte keine veränderungen festellen. ( Warscheinlich weil ich 0 Ahnung davon habe ^^ )

    Jo, das Ding ist toll. 🙂

    Auf der rechten Seite siehst du den Inhalt eines an die CPU angeschlossenen RAM in Form von Hex-Zahlen. Die CPU faengt dann an, ganz oben Links bei Adresse 0 den RAM auszulesen und das Gelesene auszufuehren.
    In der Grafik links kannst du dann eine Darstellung des DIE der CPU sehen. Leitungen, auf denen eine "1" liegt, werden darin scheinbar rot dargestellt...
    Den Code im RAM kannst du dann Schritt fuer Schritt ausfuehren lassen und dir zusaetzlich ueber der Darstellung des RAM ansehen, was in den Registern steht.



  • Ich meinte mit Assembler natürlich Maschinencode sorry.
    Der Unterschied von der Komplexität ist der:
    Es ist recht einfach einen Chip zu bauen der eine Zahl in ein register schiebt. Es ist sehr kompliziert einen Chip zu bauen der a) Text versteht b) variablennamen auf register und Speicher abbildet und c) dann noch kompliziertere ausdrücke wie a=b=0; verarbeitet
    Deshalb kann der Prozessor

    mov eax,1
    

    (bzw. den maschinenbefehl dazu, also eine Zahl) d.h. lege an das Register eax so Strom an dass nachher eine 1 drinsteht aber nicht

    a=1;
    

    (was zur Hölle ist a und überhaupt was sollen diese 4 Zahlen 0x61 0x3D 0x31 0x3B bedeuten)

    void** schrieb:
    Hallo,

    Wieso kann man z.b. die meiste Hardware nur mit Assembler ansprechen ?

    Das stimmt so nicht, die "Hochsprachen" sind ja dafür da, die Hardware auf andere Weise anzusprechen als mit Assembler oder mit Hexcodeeingaben. Wie würde Winddows funktionieren, wenn es mit seinem Hochsprachencode keinen Einfluss auf "die Hardware" hätte?

    Mit Hochsprachen kann man Hardware ansprechen weil der Compiler den text in Maschinensprache übersetzt (auch wenn man natürlich in manchen Einsatzbereichen Assembler nutzen _muss_ weil es (noch) keine Funktionen zum Ansprechen gibt.
    Die Teile die auf die Hardware zugreifen sind übrigends in assembler geschrieben 😉
    Es gibt dann halt eine Schnittstelle zwischen dem Hochsprachencode und dem Assemblercode



  • Man, habt ihr Probleme 🙂
    Ich würde vielleicht gerne wissen, warum man die Syntax so gemacht hat, dass man zum Teil von rechts nach links lesen muss...
    Warum "mov eax, 1" und nicht "mov 1, eax" 😕 wobei man natürlich irgendwie noch zwischen Displacements unterscheiden muss, was bei AT&T Syntax mit $-Zeichen gemacht wird: "mov $1, %eax" (Konstante) und "mov 1, %eax" (Displacement).
    Und dann habe ich noch ein Problem, warum vergessen viele nach dem Komma ein Leerzeichen zu setzen 😕
    Warum "mov eax,1" und nicht "mov eax, 1" 😕 Ich finde ein Komma ohne Leerzeichen danach irgendwie störend... ja, es stört den Lesefluss...



  • Das is ja nur ne Frage des Assemblers, du kannst dir jederzeit einen Assembler schreiben der das andersrum macht.
    AT & T Syntax ist zum Beispiel

    movb $0x61, %al
    

    Intel Syntax ist dagegen das bekannte

    mov al,61h
    

    Das ist deshalb so rum weil der Maschinencode dafür auch so rum ist.
    Die Befehle oben sind in x86-Maschinensprache

    0xB0 0x61
    

    (Big- und little Endian nicht beachtet)



  • linux_c89 schrieb:

    ... du kannst dir jederzeit einen Assembler schreiben der das andersrum macht.

    Ne, ich kann das nicht, einen Assembler (x86) schreiben ist zu kompliziert für mich 🙂 Habe es mal versucht und aufgegeben...



  • naja vielleicht isses besser erstmal einen für eine RISC-Architektur zu schreiben (und den Assembler simpel zu halten)
    Ich meinte vor allem das es viel leichter ist einen Assembler zu schreiben als einen Compiler



  • wieso soll sich abc.w gleich einen assembler neu schreiben müssen, und vor allem wenn es den schon längst gibt?

    @abc.w
    was ist denn ein displätzchen? haben wir schon weihnachtszeit? 😃
    und sollen wir dich jetzt immer abc. w nennen, weil es sich einfach besser liest?
    😉



  • wieso soll sich abc.w gleich einen assembler neu schreiben müssen, und vor allem wenn es den schon längst gibt?

    Aus Übungsgründen er hat ja auch gesagt dass ers probiert hat
    Ich habe bisher nur Programme geschrieben dies schon gibt weil ich mir die nötigen Programmierkenntnisse antrainieren muss


Anmelden zum Antworten