Ich bin leider nicht so ein Informatik Ass

.
Also:
Ich weiß noch folgendes:
wir mussten einen Assembler schreiben,
aber da war nichts von wegen EAX oder so. Wir haben da was anderes gewählt, ich weiß nur leider nicht mehr was.
Und intostr ist ja irgendwie dazu da, etwas als Text oder Zeichenkette oder so zu transformieren, damit es von Delphi angezeigt werden kann.
Ich wäre wirklich sehr dankbar, wenn mir jemand einfach mal eine Lösung geben könnte, die ich dann mir selbst nachvollziehen und erschließen kann.
Diese ganzen Anleitungen gehen häufig viel zu weit, oder sind unverständlich oder sind mit diesem EAX usw.
---
Moderiert von
Narses: Beiträge zusammengefasst---
Mein Lehrer nannte es: unsauber, was wir programmieren sollten, vermutlich meinte er damit, dass dieser Teil anders ausgedrückt wird:
| Zitat: |
2.1 Grundlagen Assembler
Wie bereits vorhin angesprochen werde ich hier nur auf einige ASM-Grundlagen eingehen, und diese auch nur im Schnelldurchlauf abhandeln. Am Ende dieses Crashkurses findet Ihr einige Links, von denen Ihr noch mehr Informationen zu ASM beziehen könnt.
Jeder Prozessor (CPU) verfügt generell über ein sogenanntes Rechenwerk, welches dem Computer ermöglicht zu Rechnen, d.h. zu Addieren, Subtrahieren, Multiplizieren und Dividieren. Zusätzlich können natürlich auch logische Bedingungen erstellt und geprüft werden. Das Steuerwerk der CPU dekodiert die Grundbefehle die wir eingegeben haben und entscheidet was zu tun ist, es ist also ein weiterer wesentlicher Bestandteil jedes Computers. Jetzt bedarf es natürlich noch einiger Speicherplätze, wo wir Daten ablegen können und aus denen die CPU Daten wieder einlesen kann. Diese Speicherplätze nennt man Register. Jedes Register ist 32 Bit groß (Win32), es können also genau 32 Ziffern (0 oder 1) in einem Register abgelegt werden. Diesen Überbegriff Register unterteilt man in drei Untergruppen: Allgemeine Register: EDI, ESI, ESP, EBP, EBX (der Inhalt dieser Register muss während der Arbeit mit Inline ASM erhalten bleiben) und EAX, ECX, EDX (diese Register können beliebig verändert werden)
Segmentregister: CS (Codesegment), DS (Datasegment), SS (Stacksegment), ES (beliebig), FS (beliebig), GS (beliebig)
Sonstige: EIP (Instruction Pointer) und EF (Flags)
Als nächstes möchte ich hier den Stack erwähnen. Der Stack ist eine Art Schmierzettel, ein Teil des Hauptspeichers, in welchem nicht mit festen Adressen gearbeitet wird. Man kann dort Daten bei Bedarf zwischenspeichern und zu einem späteren Zeitpunkt wieder auslesen. Die Daten werden nicht von oben auf den Stack gelegt, sondern unten an den Stack angehängt. Der Stack wächst von oben nach unten. Generell sollte man die Register EAX, ECX und EDX immer sichern (siehe POP und PUSH in Kapitel 2.2). Zu guter Letzt möchte ich an dieser Stelle noch das Flag Register erwähnen. Das Flag-Register ist ein spezielles Register von 16 Bits, welche man Flags nennt. Jedes von ihnen hat eine Spezialaufgabe und kann mit einem Wert gefüllt werden. Hat eines den Wert 1, spricht man von einem gesetzten Bit, ist es 0, nennt man es gelöscht. Das soll für den Anfang an dieser Stelle reichen, eventuell werde ich weitere Grundlagen bei den praktischen Angelegenheiten noch einmal etwas näher erklären. |
Ich brauche das aber anders!!
Ich selbst bin kaum fähig Formeln usw. mir selbst zu erschließen, deswegen wäre ich sehr dankbar, wenn hier jemand das mal posten könnte, damit ich das dann nachvollziehen kann.
Es geht hier um keine Aufgabe aus dem Unterricht oder so, sondern um einen freiwilligen Lernkurs an der Schule.
Moderiert von
Narses: Quote-Tags hinzugefügt.
---
Moderiert von
Narses: Beiträge zusammengefasst---
Mhm, das hilft mir nicht so wirklich weiter, der Quellcode lautet dann ja:
Delphi-Quelltext
1: 2: 3: 4:
| function Addiere(X, Y : Integer) : Integer; asm ADD EAX, EDX end; |
Was genau mach diese Funktion jetzt? Man ruft die Funktion auf, übergibt die beiden Werte X und Y und die Funktion gibt die Summe der beiden Zahlen zurück. Wie das ganze jetzt funktioniert, dazu bedarf es einiger Erklärungen: Die Funktion Add kennen wir ja bereits, der Wert aus dem zweiten Operanden wird zu dem ersten Operanden addiert. Jetzt mag sicher mancher fragen, wie und warum kommen die Werte X und Y jetzt in die Register EAX und EDX? Die Antwort is recht simpel, dafür ist Delphi zuständig. Die Variablen aus der Funktionsdeklaration werden beim Funktionsaufruf in die Register geschrieben. Dabei wird zuerst das Register EAX, dann EDX und schließlich ECX bedient. Weitere Variablen werden auf dem Stack abgelegt.
Habt ihr ne Idee, wie mein Lehrer das gemeint haben könnte?
Ich hatte das Gefühl wir programmieren in Pascal und schieben dann da irgendwie nen assembler rein...
Moderiert von
Narses: Delphi-Tags hinzugefügt