Assembly - .data, .code und Register ...?

So bin ich heute morgen gepostet, eine verwirrte Frage über die Montage und ich erhielt einige große echte Hilfe, die ich wirklich zu schätzen.

Nun bin ich ab zu bekommen in der Montage-und fange an zu verstehen, wie es funktioniert.

Dinge, die ich fühle, ich verstehe okay umfassen den stack, interrupts, Binär/hex, und im Allgemeinen, was die meisten grundlegenden Operationen (jmp, push, mov, etc).

Konzepte, die ich bin kämpfen, um Sie zu verstehen und möchte mit helfen, sind unten - es wäre eine riesige Hilfe, wenn Sie könnten-Adresse eine der folgenden Optionen:

  1. Was genau ist passiert in der .data-Abschnitt? Sind die Variablen, die wir deklarieren?
  2. Wenn dem so ist, können wir Variablen deklarieren, die später in den code-Bereich? Wenn nicht, warum nicht? Wenn ja, wie, und warum verwenden wir die Daten Abschnitt dann?
  3. Was ist ein register? Wie tut es vergleichen, um eine variable? Ich meine, ich weiß, es ist ein Ort, speichert Sie ein kleines Stück von Informationen, die... aber das klingt genau wie eine variable zu mir.
  4. Wie erstelle ich ein array? Ich weiß, das scheint ziemlich zufällig, aber ich bin neugierig, wie würde ich gehen, etwas zu tun wie dieser.
  5. Gibt es irgendwo eine übersicht der gängigen Praktiken für das, was jedes register verwendet werden soll? Ich verstehe immer noch nicht vollständig, aber haben bemerkt, einige Leute sagen, zum Beispiel, dass ein bestimmter register sollte verwendet werden, um speichern 'Rückgabewerte' von Verfahren - ist es, eine umfassende oder zumindest informative Liste von solchen Praktiken?
  6. Einer der Gründe, ich ' m learning assembly, um besser zu verstehen, was passiert hinter meiner high-level-code. In diesem Sinne - wenn ich in c++ Programmieren, ich bin auch oft Gedanken über den stack und den heap. In Assembler weiß ich, was der stack ist - wo ist der 'Haufen'?

Einige Infos: ich benutze masm32 mit WinAsm als IDE, und ich arbeite auf Windows 7. Ich habe viel Vorherige Erfahrung in der Programmierung in höheren Sprachen wie c++/java.


edit: Danke für die Hilfe an alle, sehr informativ wie immer! Tolle Sachen! Eine Letzte Sache, obwohl ich Frage mich, was der Unterschied ist zwischen der Stack-Pointer und der Base-pointer, oder ESP und EBP. Kann mir jemand helfen?

edit: ich denke ich verstehe es jetzt... ESP zeigt immer auf die Spitze des Stapels. Sie können jedoch Punkt EBP an, was Sie wollen. ESP wird automatisch behandelt, aber Sie können tun, was Sie wollen mit EBP. Zum Beispiel:

push 6
push 5
push 4
mov EBP, ESP
push 3
push 2

In diesem Szenario EBP verweist nun auf die Adresse halten 4, aber ESP zeigt nun auf die Adresse Betrieb 2.

In einer realen Anwendung 6, 5, und 4 hätte eine Funktion Argumente, während 3 und 2 können lokale Variablen innerhalb der Funktion.

InformationsquelleAutor der Frage Cam | 2010-03-01

Schreibe einen Kommentar