Aufgabenstellung 4.1

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabenstellung 4.1
Also, ich wollte mal zu der Aufgabenstellung von 4.1 was fragen, da ich diese sehr missverstaendlich formuliert finde.

In der Aufgabenstellung steht ja, dass ich die Loesung moeglichst klein machen soll, aber es steht nicht da, was klein heisst. Ist gemeint die Anzahl der Instruktionen soll moeglichst klein sein? oder das Programm wenn es assembled ist soll moeglichst wenig bytes haben? Ich weiss nicht was ich jetzt tun soll.

Und noch was anderes, unter der annahme dass das programm moeglichst wenig instruktionen haben soll, kann mir jemand die syntax erklaeren, weil intel syntax ist des nicht, da er z.B. mov eax, dword ptr [eax + 4*ecx] (ja, ich weiss dass ich des dword ptr weg lassen muss) nicht versteht was valide intel syntax ist. Die referenzierung erkennt er nicht. Daher waere ich sehr dankbar, wenn jemand der weiss wie die syntax lautet, mir das mitteilen koennte.


Hmm, also kurzes Programm bedeutet: kurzes Programm. Meinetwegen auch ein kleines Programm. Hauptsache man sieht den Unterschied zu MIPS.

Mit der Adressierungsart hast du Recht, wird von Jasmin (warum auch immer) nicht angeboten.

Wozu brauchst du aber ueberhaupt eine Basis, wenn das Array ab 0x0 beginnen soll?

Edit: mov [EAX+ECX*4], 4 geht sehr wohl. Siehe http://www.lrr.in.tum.de/~jasmin/tutorials_basic.html#addressing


Also, da du so ausweichend geantwortet hast, geh ich einfach mal davon aus dass wenig instruktionen gemeint sind. Und des mit der Basis war halt so gemeint, weil ich des ganze nicht davon abhaengig machen wollte dass es bei 0 anfaengt.

Noch ne frage, zaehlt stos und lods als komplexe adressierung?


So war’s gemeint.

Komplexe Adressierung bezieht sich eher auf die verwendete Adressierungsart des/der Operanden. Es reicht auch eine einfache cmp,j-schleife mit mov zum Speichern. Intel-Magie brauchts nicht.


aah, okay, ja gut der fasm hat die restriktion mit ecx * 4 statt 4 * ecx nicht …
Das erklaert warums nicht funkt, danke :wink:

naja gut, dann weiss ich aber nicht was daran komplex sein soll… hab schon zuviel asm gemacht glaub ich xD Ich rat einfach mal komplex is alles was wir bis jetzt nich verwenden durften, vielen dank dir seth.

Edit: noch ne frage, da du extra cmp+jmp gesagt hast, geh ich davon aus dass ich des ganze in der selben reihenfolge machen soll und nicht noch verkleiner durch ein loop stattdessen, richtig?


Komplex ist hier alles das, was die MIPS-Architektur nicht anbietet.
Machen kannst du alles, was funktioniert. Wir sind aber schon mit cmp+j zufrieden, falls das Ergebnis nicht einfach “MIPS auf Intel” ist, sondern die (einfachen, offensichtlichen) Moeglichkeiten der Arch. nutzt.


Ah noch kurze info an alle die diesen thread lesen, JASMIN ist ein bisschen komisch und wie ich oben schon geschrieben hatte, ist tatsaechlich
mov [eax + ECX * 4] nicht erlaubt.

ABER
mov [eax+ECX*4] geht, also die leerzeichen rauslassen facepalm.


Noch ne frage, muss ich den speicher auch anlegen? also halt auf masm syntax waere des halt so

name 10h dup (?)

wuerde jetzt ein 16 byte langes array uninitialisierter daten anlegen.
Hab jetzt fuer jasmin noch keine aequivalenten befehl gefunden.

Auch die ganzen meta-infos wie model flat und so versteht er nicht. (Ja ich weiss dass es nur ein model gibt, aber auch die dosseq und so kennt er nicht, des kenn ich aber auch nicht, also isses mir wurscht :wink: )
Ich lass sie jetzt dann einfach weg.


Hab ich auch weggelassen. Keine Ahnung wie das bei Jasmin funktioniert. :confused:


siehe 1.c

1 Like