Assembler können!



  • Hallo an alle!
    Wie kann man am besten Assembler lernen?
    Ich habe mir das Buch "Assembler Eine strukrurierte Einführung"
    von Reiner Backer gekauft ist alles soweit gut aber macht auch Sinn
    nun aber wollte ich selber etwas programmieren hat nicht geklappt.
    Ich verstehe nicht ganz warum ich etwas von AX nach DS verschieben
    muss und dass es da Offset gibt und den Befehlszeiger IP (keine Ahnung warum er einen Befehl zeigen muss), die ganzen
    Flags. ich habe im Klartext das Zusammenspiel des ganzen noch nicht
    so richtig kapiert. Wer kann mir das bitte einwenig verständlicher erklären. Oder was kann ich sonst machen um es zu vertshen?
    Ich hoffe jemand kann behilflich sein

    Danke



  • Tauboga schrieb:

    Ich verstehe nicht ganz warum ich etwas von AX nach DS verschieben
    muss

    Damit hinterher in DS der gleiche Wert wie in AX steht. Warum genau hängt von der Situation ab.

    und dass es da Offset gibt

    Ich geh mal davon aus du programmierst im 16bit Real Modus. Den Offset gibt es, weil die Konstrukteure des 8086 Prozessors es für eine geniale Idee hielten. Die Meinung teile ich allerdings nicht. Sie hätten gleich eine 32 bit Addressierung benutzen sollen. Wäre damals aber vielleicht auch teurer gewesen. Wer weiss.

    und den Befehlszeiger IP (keine Ahnung warum er einen Befehl zeigen muss),

    Der Prozessor muss nun mal wissen, welchen Befehl er als nächstes ausführen soll. Also muss er irgendwo speichern an welcher Stelle im Programm er gerade ist. quasi ein Lesezeichen.

    die ganzen
    Flags.

    Die sind wichtig für die mathematische Operationen, Vergleiche, usw.



  • DrZoidberg schrieb:

    und dass es da Offset gibt

    Ich geh mal davon aus du programmierst im 16bit Real Modus. Den Offset gibt es, weil die Konstrukteure des 8086 Prozessors es für eine geniale Idee hielten. Die Meinung teile ich allerdings nicht. Sie hätten gleich eine 32 bit Addressierung benutzen sollen. Wäre damals aber vielleicht auch teurer gewesen. Wer weiss.

    [/quote]
    Hm... Wenn du Offset nur mit 16Bit RM assoziierst, wie nennst du die Addressbildung dann im PM?
    Ist IMHO auch Selector:Offset 😕

    BTW:
    @Tauboga: Hattest du nicht vor ca. 1Jahr bereits hier gepostet, weil du Assembler lernen wolltest? AFAIK warst du hier frueher auf jeden Fall schonmal aktiv... 😕



  • DrZoidberg danke für die so genaue Beschreibung.
    Könntest du mir bitte die Sache mit Offste einwenig genauer erklären?
    (Übrigens wärst du bereit mir gegen Entgelt Assembler zu teachen?
    Praktisch übers Netz via email in Form von Hausaufgaben )

    Grüße



  • Tauboga schrieb:

    DrZoidberg danke für die so genaue Beschreibung.
    Könntest du mir bitte die Sache mit Offste einwenig genauer erklären?

    Hatten wir das ganze nicht gerade erst in http://www.c-plusplus.net/forum/viewtopic.php?t=45802 🙄



  • @Tauboga:
    Hast du dir die Mikroprozessortechnik durchgelesen??? Wenn nicht solltest du es nachholen.
    Also deine Fragen verstehe ich nicht. Ich benutze das Buch selbst auch und dort sind deine Fragen alle sehr genau beschrieben, wie alles andere auch, für so ein kleines Taschenbuch, ist es IMHO sehr gut.
    Vor allem die Frage zum IP, die AW von DrZoidberg ist selbige wie auf Seite 70 sogar ne ganze Seite wurde dem ding gewidmet. Du solltest dir auf Seite 45 nochmal den Abschnitt über das Steuerwerk durchlesen. Da ist das gesamte Befehlsregister erklärt (Stichwort: Befehlsadreßregister).
    Auf die Frage zu der Offset-Adresse hast du bereits eine Erklärung, s. angegebenen Thread von TriPhoenix.
    Naja, hier nochmal. Der Offset ist eine Längenangabe, die anzeigt wie weit die Variablen und Befehle von ihrem Ursprungsort entfernt sind. Mit dem Offset kann der Computer die Variablen und Maschinenbefehle addressieren und lesen (Seite 28).
    Ansonsten solltest du dir die Bücher hier mal ansehen. Franzis hat mich nicht überzeugt, nachdem ich es mir mal ausgeliehen hatte und Addison-Wesley habe ich mir noch nicht angesehen, wobei die scheinbar ganz gut sind. Naja, ob ich mir noch ein Buch mit sämtlichen Erklärungen hole weiß ich nicht, aber auf jedenfall die Referenz und ein Buch zur WinApp-Programmierung.

    Code-Hacker



  • Nobuo T schrieb:

    Hm... Wenn du Offset nur mit 16Bit RM assoziierst, wie nennst du die Addressbildung dann im PM?
    Ist IMHO auch Selector:Offset 😕

    Wie kommst du darauf, dass ich Offset nur mit dem 16Bit Modus assoziiere?
    Ich habe mich halt nur auf den 16Bit Modus beschränkt, weil ich dachte, dass Tauboga sich bisher nur damit beschäftigt hat.



  • DrZoidberg schrieb:

    Den Offset gibt es, weil die Konstrukteure des 8086 Prozessors es für eine geniale Idee hielten. Die Meinung teile ich allerdings nicht. Sie hätten gleich eine 32 bit Addressierung benutzen sollen.

    IMHO sagt dieser Absatz genau das aus.
    Man beachte die angedeuteten Unterscheidung zw. "Offset" und "32bit Addressierung".



  • Zu den 32-Bit hätte ich ein paar fragen, wo ich mir allerdings demnächst auch noch ein Buch zu hole:

    1. Man kann z.B. EAX doch direkt einen 32-Bit-Wert zuweisen oder?
    2. Ändert sich etwas an den Befehlen bei 32-Bit?

    Ändert sich sonst noch etwas in der Programmierung?

    Code-Hacker



  • Code-Hacker schrieb:

    1. Man kann z.B. EAX doch direkt einen 32-Bit-Wert zuweisen oder?

    Jup, ebenso EBX, ECX etc.

    1. Ändert sich etwas an den Befehlen bei 32-Bit?

    Prinzipiell erstmal nicht, außer dass jetzt alles 32-bit-Zahlen sind

    Ändert sich sonst noch etwas in der Programmierung?

    Nun, unter 32-Bit-Betriebssystemen gibts diese DOS-Interrupt (int21h) und BIOS (int 10h) natürlich nicht mehr. Da muss man dann andere Funktionen aufrufen (OS-abhängig) und direkt mit der Hardware via in/out darf man auch nur noch in den seltensten Fällen.
    Man hat dafür im 32-Bit-Modus einige neue Adressierungsmöglichkeiten, so kann man im 16-Bit-Modus sowas nicht machen: mov eax, [ebx+ecx*4+0x12345678]
    Die Grundidee bleibt also die gleiche beim 32-BIt-Assembler, nu ein paar Sachen muss man sich umgewöhnen 🙂



  • assembler unter win32 ist langweilig. das ist der unterschied !!!



  • "Da muss man dann andere Funktionen aufrufen "
    Was wäre Pendant zu DOS-Interrupt (int21h) und BIOS (int 10h)
    unter 32-Bit-Betriebssystemen ??
    Grüße



  • die WinAPI funktionen. http://msdn.microsoft.com



  • Wenn mans ganz weit treibern will kann man sogar unter Windows NT/2000/XP etwas ähnliches machen, da gibts den Interrupt 2Eh (oder so ähnlich), der die Kernelservices zur verfügung stellt. Ist aber _ziemlich_ low-level 🙂



  • @Tri:
    Thx!
    Das mit der WinAPI habe ich auch gelesen, da ist auch ne Hilfe beim MASM32 dabei oder kann man sich noch runterladen wo einige drin sind und ganz gut erklärt sein sollen, stand auf der HP.
    Naja, dann werde ich mich wohl mal damit beschäftigen sobald ich Zeit habe, da ich bisher nur den MASM 6.11 hatte, weil wir den in der Schule benutzen um unsere Programme damit evtl. mal optimieren zu können, wo DOS an sich ja auch reicht, für Berechnungen, wenn man WinApps erstellen will, dann sieht das natürlich anders aus.
    EDIT: Achja, wenn man bei MS nach Assembler bzw. MASM sucht, dann findet man auch 2 Windows-Beispiele mit den 16-Bit-Registern.

    @antwort::
    Was ist an der 32-bit programmierung langweilig? Sag nicht nur das es so ist, nenn auch Gründe! Wenn du diese nicht nennst oder nennen kannst, dann gehe ich davon aus das du wenn überhaupt 16-Bit kannst und einfach nur ein wenig prollen willst. Lieber sagen was man kann und zu dem stehen was man nicht kann, dann kommt man nicht in die mißliche Lage das wenn es darauf ankommt sagen zu müssen "Ich kann das nicht" oder andere Ausreden.

    Code-Hacker


Anmelden zum Antworten