Willkommen auf Planet-Liebe

diskutiere über Liebe, Sex und Leidenschaft und werde Teil einer spannenden Community! :)

jetzt registrieren

Informatik: Maschinencode und Assembler

Dieses Thema im Forum "Musik, Filme, Computer und andere Medien" wurde erstellt von NiveaBoy, 7 September 2005.

  1. NiveaBoy
    Verbringt hier viel Zeit
    192
    101
    0
    vergeben und glücklich
    Hi, vielleicht gibt es hier ja eine Informatikstudenten oder sonst jemanden der mir da helfen kann.

    Was ein Assembler macht ist mir klar. Maschinencode kenn ich auch.

    Nun zu der Frage die mich beschäftigt.

    Also am anfang als es noch keine Assembler, Compiler, Programmiersprachen gab, wurde damals ja in Maschinencode programmiert, bzw. Lochkarten gesteckt.

    Dann dachte sich ein schlauer Fuchs, vereinfachen wir doch mal die Programmierung. Darauf hin wurde also die Assembler Sprache entwickelt.
    Diese greift ja auf eine Befehlstabelle und eine Symbol bzw. Adressentabelle zurück.
    Nur wie kann man denn bitte einem Rechner in Nullen und Einsen klar machen, dass er die Eingabe mit diesen Tabellen abgleicht.
    Beziehungsweise kann ich garkeine Eingabe machen weil diese überhaupt nicht definiert ist. Wie soll denn eine Recheneinheit die nur 0,1 kenn den Befehl "SETZE_OP2" mir einer Datenbank vergleichen. Er muss ja nicht wissen was "SETZE_OP2" bedeutet aber er muss diese Schrift in 0, 1 zerlegen können damit er ihn vergleichen kann.

    Oder einfach gefragt wie kann ich mit Nullen und Einsen eine Symboltabelle anlegen?

    Wenn ich zum Beispiel den Code 0100 0011 habe muss die Recheneinheit wissen dass es sich bei 0100 um einen Befehl handelt und bei 0011 um eine Adresse einer Variable. Also müsste man ja mit 0,1 eine Syntax erstellen.
    Erste binäre Zahl ist ein Befehl, zB. "SETZTE_OP2". Nur wie macht man der recheneinheit klar dass es zur Speicheradresse 0011 gehen soll und den da gespeicherten Wert dem Operator 2 zuordnen soll.

    Danke im Vorraus.
     
    #1
    NiveaBoy, 7 September 2005
  2. Trogdor
    Trogdor (40)
    Verbringt hier viel Zeit
    472
    101
    0
    nicht angegeben
    Ich hoffe ich verstehe Deine Frage jetzt richtig, aber wie ein bestimmtes Wort im Speicher in Anweisungen dekodiert wird, ist der Befehlssatz des Prozessors, der bei dessen Entwicklung festgelegt wird.
    Da wird dann Festgelegt, welche Bits eines Wortes im Speicher Anweisungen an das Rechenwerk sind, und welche festlegen, woher die Operanden kommen.

    Hier ist zum Beispiel das Befehlsformat des DLX-Prozessors beschrieben.
     
    #2
    Trogdor, 7 September 2005
  3. NiveaBoy
    Verbringt hier viel Zeit Themenstarter
    192
    101
    0
    vergeben und glücklich
    ok ich hoffe ich verstehe deine Antwort jetzt richtig.

    Das Rechenwerk weiss über den Befehlssatz welche der binärzahlen jetzt andweisungen und welche Speicherandressen sind.

    Also sagen wir mal er soll den Befehl 0110 ausführen, dann weiss er auf Grund seines Befehlssatz was er zu tun hat, oder wie?

    Wenn man einmal einen Assembler hat, kann man ja Texteignaben machen, aber wie kann man denn ohne mögliche Texteignabe nur mit Nullen und Einsen ein Prgramm programmieren (hier jetzt den Assembler)?

    Wobei der Assembler ja die Schriftzeichen über ASCII Codieren kann, dann ären sie ja auch für das Rechenwerk lesbar.

    Ich weiss das die Fragen vielleicht nicht wirklich gut gestellt sind, aber ich kann es leider nicht besser beschreiben.
     
    #3
    NiveaBoy, 7 September 2005
  4. Scheich Assis
    Verbringt hier viel Zeit
    967
    113
    51
    vergeben und glücklich
    Also es geht im Groben so:

    Es gibt eine Operationscode-Liste, bei der jeder binäre Code für eine Operation steht, zb:

    00000001 Lade aus dem Speicher
    00000010 Schreibe in den Speicher
    00000011 Addiere zu dem Speicher
    00000100 Subtrahiere

    ...


    Wenn das Programm in den Hauptspeicher geladen wird, stehen dort an bestimmten Adressen Befehle. Durch einen Zähler merkt sich das Programm, mit welcher Adresse es fortfahren soll. Der Befehl enthält immer eine Aktion und eine Adresse: zb 1 für Laden und 234 für die nächste HS Adresse. Das bedeutet, wenn das Programm "1234" aus dem HS liest, bedeutet das, dass jener Wert aus der Adresse "234" in den Zwischenspeicher geladen werden soll. Wenn "2234" gelesen wird heißt das, dass der aktuelle Wert aus dem Zwischenspeicher in den Hauptspeicher mit der der Adresse "234" geschrieben werden soll.


    Alles klar ? :zwinker: Es geht auf unterster Ebene nur um verschieben von Informationen von einem Speicher in den Nächsten und das Lesen von fest vorgesetzten Befehlen.


    greetz, der Scheich
     
    #4
    Scheich Assis, 7 September 2005
  5. CharlySchneider
    Verbringt hier viel Zeit
    463
    103
    5
    Single
    Man schreibt ein Programm, indem man ein Befehlswort (bestehend aus 0en und 1en) nach dem anderen eingibt, in welcher Form auch immer. Die Befehlsworte entsprechen durch den Befehlssatz einer festgelegten Syntax, und es ist auch festgelegt, welche Bits eines Wortes der Befehl sind und was die restlichen Bits des Befehls bedeuten.

    Der Altair 8800, einer der ersten Mikrocomputer, z.B., wurde über 8 Schalter programmiert, mit denen man Zahlen (gut, in dem Fall warens Oktalzahlen) eingeben konnte. Jede Zahl in ihrer Binärform war ein Befehl mit allen notwendigen Informationen (welcher Befehl, welche Werte, welche Speicheradressen, welche Register).

    Um ihm Texteingabe beizubringen, naja, brauchst du erstmal eine Übersetzung von der Eingabe der Tastatur in Zahlen (brauchst du eh, was anderes als Binärzahlen kann der Rechner ja nicht - man kann z.B. einfach jedes unterschiedliche Signal von der Tastatur durchnumerieren, und schon hat man eine implizite Tabelle). Dann bastelst du mit den Prozessorbefehlen eine Reihe von Abfragen mit bedingten Sprüngen (wenn der Wert im Register 12 demjenigen des Buchstaben 'a' entspricht, dann springe zur Anweisung 0x0912...) und veranlaßt, daß bei einer Eingabe von Text Blah(16) der Maschinencode 010001011 irgendwo hin geschrieben (oder gleich ausgeführt) wird (der dann seinerseits wieder genau die Semantik hat, die man durch den Befehl Blah(16) erreichen wollte)

    Gnarf: Scheich zu schnell, Charles zu lahm :bier:
     
    #5
    CharlySchneider, 7 September 2005
  6. NiveaBoy
    Verbringt hier viel Zeit Themenstarter
    192
    101
    0
    vergeben und glücklich
    Aber woher weiss er was "00000001" beudeutet? Ok über den Befehlssatz, aber wie kann man dem Rechenwerk das eigentlich ja nur Ja/Nein versteht begreiflich machen dass er den Inhalt des Speichers zur Verfügung stellen soll?

    Eigentlich komme ich da nur drauf weil ich nächste woche die Klausur
    "Informaitk im Maschinenbau" schreibe. Das Skript ist 300 Seiten lang und behandelt alles nur sehr oberflächlich. Stoffmäß haben wir gemacht was ein Informatiker in 4 Jahrne macht. Leider kratzt das Skirpt immer nur an der Oberfläche vorbei, jedoch liegt es in meinem Naturell alles verstehen zu wollen.
     
    #6
    NiveaBoy, 7 September 2005
  7. CharlySchneider
    Verbringt hier viel Zeit
    463
    103
    5
    Single
    Das geht über Elektrotechnik :zwinker:

    00000001 bedeutet, du hast 8 Leitungen, davon hat die letzte / rechte Strom, alle anderen nicht. Durch ein paar tolle einfache Schaltungen (AND, OR etc) kannst du ja veranlassen, daß Strom auf dieser einen Leitung dazu führt, daß auf den Speicher zugegriffen wird (wie das im Detail geht, krieg ich nicht mehr zusammen, hatte Rechnertechnologie nicht :zwinker: aber es geht). Das funktioniert wieder ähnlich, die Speicheradresse sind wieder Leitungen mit 0 oder 1 (Strom oder aus), was dann beim Speicher wieder über primitive Schaltungen in die physikalische Adresse übersetzt wird - das führt dann dazu, daß auf den Speicherbus der Inhalt von dem angegebenen Speicherblock gelegt wird (wieder Strom / aus) und daß der dann z.B. durch ein OR in ein leeres Register geschrieben wird (das sind Flip-Flops, die ein Strom oder aus beibehalten).

    In Wirklichkeit gibt es weder Zahlen noch Buchstaben, sondern nur Strom oder kein Strom :bier:
     
    #7
    CharlySchneider, 7 September 2005
  8. CharlySchneider
    Verbringt hier viel Zeit
    463
    103
    5
    Single
    also, ich versuch mal, mir was auszudenken...

    Nehmen wir das Beispiel 00000001 ist Lade aus dem Speicher.

    Wenn man das letzte Bit jeweils mit jedem anderen Bit mit XOR verknüpft und diese 7 XOR-Ergebnisse dann mit AND verknüpft (b1 AND (b2 AND (b3 AND (b4 AND (b5 AND (b6 AND b7)))))), dann ist das letzte Ergebnis nur dann 1, wenn das Wort 00000001 war, ansonsten 0. So kann man den Befehl erkennen. (XOR bedeutet: 1, wenn beide Bits unterschiedlich sind, sonst 0; AND bedeutet: 1, wenn beide Bits 1 sind, sonst 0. Die Teile kann man irgendwie verdrahten.)

    Gehen wir mal davon aus, es gibt eine 4-bit Adressleitung zum Speicher, und der Ladebefehl heißt eigentlich 00000001 0001 , wobei 0001 die Speicheradresse ist.

    Man könnte diese 1, die sagt, es ist ein Ladebefehl, auf 4 Leitungen aufsplitten, so daß man 1111 bekommt. Indem man diese 1111 und die Speicheradresse 0001 mit AND verknüpft, kommt man auf die Speicheradresse. Wenn man keinen Ladebefehl hat, hätte man statt der 1111 eine 0000, und es gäbe keine Speicheradresse (0000).

    So... gehen wir weiter davon aus, daß in einer Speicheradresse 4-bit stehen und daß die zurück zum Prozessor sollen. Erstmal muß man die Dinger finden:

    Man könnte für jede Speicheradresse ihre jeweilige Kombination von 4-bit bereits anliegen haben (0001 für die erste, 0010 für die zweite etc). Man verknüpft die einkommende Adresse mit allen diesen vorhandenen Speicheradressen mittels XOR und negiert das Ergebnis - wenn es 1111 ist, ist es die richtige Adresse, sonst 0000. Man verknüpft als nächstes den Inhalt jeder Speicherzelle mit dem Ergebnis des zugehörigen XOR, also:

    (Adresse_gesucht XOR Adresse) AND Inhalt_Adresse_. Das ist 0000, wenn es die falsche Adresse war, und der Inhalt, wenn es die richtige Adresse war. Alle diese Ergebnisse verknüft man mit AND und legt sie auf den Speicherbus, also die Leitung zum Prozessor.

    Ist jetzt natürlich völlig bescheuert und naiv und ineffizient, könnte aber klappen... so als Idee, wie man sowas angehen kann.
     
    #8
    CharlySchneider, 8 September 2005
  9. NiveaBoy
    Verbringt hier viel Zeit Themenstarter
    192
    101
    0
    vergeben und glücklich
    danke dass du die soviel Mühe gegeben hast. So langsam verstehe ich wie das funktioniert.
     
    #9
    NiveaBoy, 8 September 2005

jetzt kostenlos registrieren und hier antworten
Die Seite wird geladen...

Ähnliche Fragen - Informatik Maschinencode Assembler
DerRabauke
Musik, Filme, Computer und andere Medien Forum
27 Oktober 2009
4 Antworten