Autor Beitrag
s1m0n767
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 24.02.11 17:35 
Guten Tag!


Ich habe ein großes Problem. Ich will das Programmieren von Assemblern lernen und zwar mit Hilfe von Delphi.


Als erste Aufgabe wurde mir von meinem Lehrer folgende gestellt:

Einen Assambler zum Addieren mit Hilfe des Grundbefehls Add.
Das Problem ist, dass ich nicht EAX oder ähnliches verwenden darf, ich muss alles "intostr" setzen.

Kann mir jemand von euch mal den kompletten Befehl von asm bis end; hier aufschreiben? (noch besser wäre ab function bis end;)
Ich kriege das einfach nicht richtig hin und kann dann so auch nicht an den nächsten Aufgaben weiterarbeiten! :(


Vielen Vielen Dank!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 24.02.11 18:16 
Hallo und :welcome:
user profile icons1m0n767 hat folgendes geschrieben Zum zitierten Posting springen:
Das Problem ist, dass ich nicht EAX oder ähnliches verwenden darf, ich muss alles "intostr" setzen.
Wie meinst du das? Wenn du eine Funktion hast, der du Parameter übergibst, dann liegt der erste in EAX (und das Ergebnis dann auch). Das ist so, also musst du den da auch herholen. Wie meinst du das also? :gruebel:

Eine Einführung zum Inline Assembler findest du hier:
www.delphipraxis.net...eiger-crashkurs.html
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1336
Erhaltene Danke: 119

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 24.02.11 18:22 
Hallo und :welcome: in der EE.

Kannst Du bitte die Quelltexte hier Posten die Du schon hast?
Was genau meint Dein Lehrer mit Assembler? IntToStr (falls du das gemeint haben solltest) hat mit Assembler erstmal nicht viel zu tun. Das macht aus einer Zahl ja einen String und hilft dir wenig. Es sei denn es soll darum gehen das nachzubilden was der Assembler Befehl ADD intern tut.

user profile icons1m0n767 hat folgendes geschrieben Zum zitierten Posting springen:
Kann mir jemand von euch mal den kompletten Befehl von asm bis end; hier aufschreiben? (noch besser wäre ab function bis end;)
Ich kriege das einfach nicht richtig hin und kann dann so auch nicht an den nächsten Aufgaben weiterarbeiten! :(

Nö, denke ich nicht. Wenn Du was lernen willst musst du es schn selber machen.

€: da war einer schneller :wink:

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?

Für diesen Beitrag haben gedankt: s1m0n767
s1m0n767 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 24.02.11 23:10 
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 user profile iconNarses: 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 user profile iconNarses: Quote-Tags hinzugefügt.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Eine Einführung zum Inline Assembler findest du hier:
www.delphipraxis.net...eiger-crashkurs.html

Mhm, das hilft mir nicht so wirklich weiter, der Quellcode lautet dann ja:
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 24.02.11 23:31 
user profile icons1m0n767 hat folgendes geschrieben Zum zitierten Posting springen:
Habt ihr ne Idee, wie mein Lehrer das gemeint haben könnte?
Da wirst du wohl fragen müssen. Einfacher wäre gewesen gleich zu fragen, wenn du etwas nicht verstanden hast. ;-)

user profile icons1m0n767 hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte das Gefühl wir programmieren in Pascal und schieben dann da irgendwie nen assembler rein...
Das nennt sich inline Assembler. Damit kannst du innerhalb eines Delphiprogramms auch eigenen Assemblercode einbauen. Eben wie die genannte Funktion.

Aus dem Pascal Code, wird letztlich auch Assemblercode erzeugt. Der Unterschied ist, dass er dort aus Code einer Hochsprache statt manuell erzeugt wird.

Für diesen Beitrag haben gedankt: s1m0n767
s1m0n767 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 24.02.11 23:35 
Alles klar, dann hoffe ich einfach, dass er einen sauber programmierten Assembler akzeptiert :D


Vielen Dank!