fb18.de
/ Diplom Informatik
/ Unterbereich Grundstudium
/ Technische Informatik
T3 Blatt 3
Hi,
es wäre nett, wenn Ihr alle Eure Fragen in diesem Thread postet, und nicht zu jeder Unteraufgabe ein neues Topic aufmacht. Zum letzten Aufgabenzettel gab es 5 unterschiedliche Threads, das ist recht unübersichtlich [img]
http://unimatix.sternenvolk.de/gfx/22.gif[/img]
Danke
Aufgabe 3.2:
Leider kann man im Rechenzentrum die Aufgabe nicht komplett bearbeiten, weil das Kommando objdump unbekannt ist.
rzdspc34$ objdump -d template.o
bash: objdump: command not found
Und nun? Wenn die Aufgabe schon darin besteht, eine Datei runterzuladen und ein paar Kommandos in der Konsole einzugeben, dann sollte das auch funktionieren. Punktabzug waere hier nicht sehr nett. [img]
http://unimatix.sternenvolk.de/gfx/26.gif[/img]
Versuchs mit /opt/sfw/bin/gobjdump
Aber irgendwie vermute ich mal, dass die Aufgabe auf 'nem x86 geloest werden soll?
Und nun? Wenn die Aufgabe schon darin besteht, eine Datei runterzuladen und ein paar Kommandos in der Konsole einzugeben, dann sollte das auch funktionieren. Punktabzug waere hier nicht sehr nett. [img]http://unimatix.sternenvolk.de/gfx/26.gif[/img]
Wie Owen sagte, Sinn der Aufgabe ist es, den x86-Code dahinter zu sehen, also hilft die Sparc inner Uni nicht viel [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
Das ist schon alles ein wenig merkwürdig…
Sollen wir die Aufgaben jetzt womit machen, was nicht im RZ so recht funzen will…
Probier ichs mal zu Hause mit dem cygwin Teil, noch habe ich Hoffnung…noch… (meine gute Laune ist jetzt schon erschöpft)
Ich habs garnicht erst im Rechenzenrum versucht, nachdem ich das hier gelesen habe. Hab mir vorhin die Cygwin-Shell runtegeladen, morgen mal schauen wie das funktioniert, der erste Start hat mich erschaudern lassen…damit soll ich arbeiten??? Naja, muss wohl und wenn ich dann so auf die eine Folie von Veranstaltung 2 blicke: "niemand erwartet, dass Sie sich Details merken, x86-Assemblerprogrammierung ist grausam"
Sollen wir die Aufgaben jetzt womit machen, was nicht im RZ so recht funzen will…
Funzen tuts doch im RZ, nur dummerweise kommt da kein x86-Assembler raus, sondern Sparc-Assembler und das hilft fuer die Aufgabenblaetter nicht [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
Hab mir vorhin die Cygwin-Shell runtegeladen, morgen mal schauen wie das funktioniert, der erste Start hat mich erschaudern lassen…damit soll ich arbeiten???
Also die unix-Kommandozeile hier inner Uni sieht aber auch nicht anders aus.
Naja, muss wohl und wenn ich dann so auf die eine Folie von Veranstaltung 2 blicke: "niemand erwartet, dass Sie sich Details merken, x86-Assemblerprogrammierung ist grausam"
Das allerdings ist merkwuerdig, wenn man bedenkt, dass zwei x86-Aufgabenzettel drankommen [img]
http://unimatix.sternenvolk.de/gfx/22.gif[/img]
Hi,
ich hab eine Frage zu Aufgabe 3.4:
Muessen wir eventuelle Zustandscodes beruecksichtigen, oder sollen wir wirklich "nur" das Zweierkomplement der in %eax stehenden Zahl nach %ebx scheiben?
Danke!
Moment mal. Grundsaetzlich darf fuer das Studium nicht mal der Besitz eines Rechners vorausgesetzt werden. Also MUSS man die Aufgabe im RZ loesen koennen. Ausserdem hat nicht jeder eine Flatrate, also ist es schon uebertrieben, fuer eine Aufgabe extra ein Programm runterladen zu muessen.
Und an Uncle Owen:Mit dem Befehl gobjdump funktioniert es an der Uni. Danke
Also MUSS man die Aufgabe im RZ loesen koennen.
Tja, und letztes Jahr gabs Beschwerden, dass man die Aufgaben NUR im RZ lösen konnte (ausser man hatte ne SPARC zu Hause)…
ich hab eine Frage zu Aufgabe 3.4:
Muessen wir eventuelle Zustandscodes beruecksichtigen
Was meinst Du damit? Du musst natürlich irgendwie überprüfen, ob die Zahl in %eax positiv oder negativ ist…
oder sollen wir wirklich "nur" das Zweierkomplement der in %eax stehenden Zahl nach %ebx scheiben?
Du sollst den BETRAG von %eax nach %ebx schreiben. Ein movl %eax, %ebx reicht da also nicht aus, falls Du das damit meintest. Wenn %eax = 7 ist soll in %ebx = 7 stehen, und wenn %eax = -7 ist soll in %ebx ebenfalls 7 stehen und NICHT -7. Klar?
Gut, also nochmal zum besseren Verstaendnis… die Zahl in %eax ist im Zweierkomplement gespeichert, falls sie positiv ist einfach nach %ebx kopieren, falls negativ den Betrag kopieren. Hab ich das richtig verstanden?
Gut, also nochmal zum besseren Verstaendnis… die Zahl in %eax ist im Zweierkomplement gespeichert, falls sie positiv ist einfach nach %ebx kopieren, falls negativ den Betrag kopieren. Hab ich das richtig verstanden?
So funktioniert es (obwohl Deine Formulierung unglücklich ist - der Betrag wird schliesslich in beiden Fällen kopiert).
EDIT: die Zahlen 0x00000000-0x7FFFFFFF kannst Du einfach übernehmen, bei den Zahlen 0x80000000-0xFFFFFFFF musst Du noch das Vorzeichen umdrehen.
(Ach ja das heisst natürlich nicht, dass Du nur ein Bit umdrehen musst.) Jetzt sollte es verständlich sein.
EDIT: ich habe eben selbst mal ein bischen programmiert, also die einfachste Variante ist natürlich die mit einem bedingten Sprung (4 Befehle), es geht aber auch ohne, dann braucht man 6 Befehle. Aber vielleicht findet Ihr ja auch noch kompaktere Lösungen.
Moment mal. Grundsaetzlich darf fuer das Studium nicht mal der Besitz eines Rechners vorausgesetzt werden. Also MUSS man die Aufgabe im RZ loesen koennen. Ausserdem hat nicht jeder eine Flatrate, also ist es schon uebertrieben, fuer eine Aufgabe extra ein Programm runterladen zu muessen.
Cygwin könnte eventuell auf der Starthilfe-CD drauf sein. Alle weiteren Beschwerden bitte an TAMS [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img] Sparc-Code hilft jedenfalls nicht wirklich. Vielelicht haben ja sogar die paar Windows-Kisten die wir haben nen gcc drauf, wer weiß…
Ich hab mit jetzt diese programm da von
www.cygwin.com runtergeladen….
es installiert und dann mal gestartet..und also ich dann
gcc -O2 -S templete.c eingegeben hat, bekamm ich die anwort:
bash: gcc: command not found
was hab ich falschgemacht?
gcc -O2 -S templete.c eingegeben hat, bekamm ich die anwort:
bash: gcc: command not found
was hab ich falschgemacht?
Ich nehme an du musst den Windows-PATH noch ändern, der steht unter Windows 2000/XP in den Systemeinstellungen (Eigenschaften von Arbeitsplatz) irgendwo drin, unter Win 95/98/ME in der autoexec.bat. Wenn du nach c:\cygwin installiert hast muss da dazu: c:\cygwin\bin und c:\cygwin\usr\bin. Alternativ kannst du auch vermutlich mit /usr/bin/gcc oder /bin/gcc (kp wies konfiguriert war) arbeiten, denke ich.
Als Alternative empfehle ich noch
www.mingw.org das ist glaube ich noch etwas einfacher zu installieren. Oder gelich ein Linux [img]
http://unimatix.sternenvolk.de/gfx/15.gif[/img]
Ich stecke gerade bei Aufgabe 3.1.2 fest.
Was macht der Befehl xorl eigentlich genau. Ich habe nichts dazu gefunden.
Vergleicht der einfach zwei Register bitweise mit XOR, und speichert das in einem Register?
Also aus 0x11110000 und 0x10101010 mach einfach 0x01011010?
Grüsse Dosenwein
Vergleicht der einfach zwei Register bitweise mit XOR, und speichert das in einem Register?
Also aus 0x11110000 und 0x10101010 mach einfach 0x01011010?
ganz genau :)
hm, da kam mir jemand mit der antwort zuvor [img]
http://unimatix.sternenvolk.de/gfx/10.gif[/img]
Ich hab mit jetzt diese programm da von www.cygwin.com runtergeladen….
es installiert und dann mal gestartet..und also ich dann
gcc -O2 -S templete.c eingegeben hat, bekamm ich die anwort:
bash: gcc: command not found
was hab ich falschgemacht?
Genau das Problem habe ich auch. Das mit dem Windows-Path hat nicht gefunzt.
Das ist glaube ich auch kein Wunder, da bei dem ganzen Cygwin-Packet überhaupt nichts ähnliches wie gcc dabei war (Wenn ich meiner Windows Suchfunktion trauen darf)…
Haben noch andere dieses Problem? Wenn ja, warum steht cygwin dann auf dem Aufgabenblatt?? Oder habe ich da was falsches runtergeladen (geht eigentlich gar nicht, weil sooooooo ein großer Download-Button)?
Gruss Dosenwein
Genau das Problem habe ich auch. Das mit dem Windows-Path hat nicht gefunzt.
Das ist glaube ich auch kein Wunder, da bei dem ganzen Cygwin-Packet überhaupt nichts ähnliches wie gcc dabei war (Wenn ich meiner Windows Suchfunktion trauen darf)…
Dann hast du im Setup einfach den gcc nicht angeklickt ;) bintuils wären auhc ganz nützlich. Oder halt mal mingw probieren…
Haben noch andere dieses Problem? Wenn ja, warum steht cygwin dann auf dem Aufgabenblatt?? Oder habe ich da was falsches runtergeladen (geht eigentlich gar nicht, weil sooooooo ein großer Download-Button)?
Nope, ist ansich schon korrekt.
Was macht der Befehl xorl eigentlich genau. Ich habe nichts dazu gefunden.
XOR performs a bitwise XOR operation between its two operands (i.e. each bit of the result is 1 if and only if exactly one of the corresponding bits of the two inputs was 1), and stores the result in the destination (first) operand.
http://courses.ece.uiuc.edu/ece291/books/labmanual/inst-ref-general.htmlAber Achtung, das ist INTEL Syntax, siehe dazu den anderen Thread von mir (AT&T vs. INTEL).
Vergleicht der einfach zwei Register bitweise mit XOR, und speichert das in einem Register?
Im Prinzip schon, allerdings muss nur einer der beiden Operanden ein Register sein, der andere kann auch im Speicher liegen.
Bezüglich Aufgabe 3.2…
Kann man die Ausgabe von objdump -d irgendwie in einem File abspeichern?
In dieser Konsole von cygwin funktioniert nämlich kein Copy-Paste, sodas ich alles abtippen müsste um das einzuschicken… [img]
http://unimatix.sternenvolk.de/gfx/21.gif[/img]
Shell redirection in eine Datei ?
Also sowas in der Art
objdump -d template.o > logfile.txt
Sollte in jeder Konsole gehen (auch cmd.exe)
[img]
http://unimatix.sternenvolk.de/gfx/15.gif[/img] !
Danke, hat funktioniert, und ich bin endlich mit allem fertig…
Gruss Dosenwein
ich habe alles runtergeladen.
gcc-ada
gcc-core
gcc-g++
gcc-g77
gcc-gpc
gcc-java
gcc-obj
gcc-testsuite
gcc-3.3.1-tar.bz2
was muss ich den installieren???
Da haste Dir doppelte Arbeit gemacht, das letzte Paket enthaelt die ganzen anderen (eventuell bis auf -testsuite, aber die braucht man ja auch nicht). gcc braucht aber auf jedenfall noch binutils.
Aber warum willste das von Hand installieren? Linux-User haben das eh schon dabei (oder installieren es ueber apt/rpm/yast/whatever nach), Windows-User fahren mit cygwin besser (und koennen mit den sourcen, die Du runtergeladen hast, eh nichts anfangen).
ich habe alles runtergeladen.
gcc-ada
gcc-core
gcc-g++
gcc-g77
gcc-gpc
gcc-java
gcc-obj
gcc-testsuite
gcc-3.3.1-tar.bz2
was muss ich den installieren???
Wie runtergeladen? Das cygwin-system installeirt das slebst, ansonsten brauchst du einen funktionierenden Compiler um das zu kompilieren [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
kann man mir jetzt sagen was ich installieren soll? ich habe alles runtergeladen damit ich nicht vom netz installieren muss.
Vielleicht sagt Du erstmal, obs sich um Windows (welches?) oder Linux (welches?) handelt?
kann man mir jetzt sagen was ich installieren soll? ich habe alles runtergeladen damit ich nicht vom netz installieren muss.
www.cygwin.com -> downloaden und bei der installation binutils und gcc auswählen, oder
www.mingw.com da gibst auch nen download. Stand schon ein paar mal hier [img]
http://unimatix.sternenvolk.de/gfx/22.gif[/img]
binutils habe ich auch runtergeladen, insgesamt 300 MB
soll ich gcc oder gcc-mingw installieren?
natürlich WINDOWS :)))
Was ist daran natuerlich? Auf jedenfall kannst Du dann alles, was Du bis jetzt runtergeladen hast, wegschmeissen.
www.cygwin.org hilft Dir.
soll ich gcc oder gcc-mingw installieren?
Huch, cygwin hat beide? Dann ersteres, wuerd ich mal tippen… funktionieren tun wohl beide.
also ich habe es entpack aber funktionieren tut es nicht, kann keine cygwin.dll finden oder zeigt das es nicht win32 ist
also ich habe es entpack aber funktionieren tut es nicht, kann keine cygwin.dll finden oder zeigt das es nicht win32 ist
Du sollst es ja auch net entpacken sondern von
www.cygwin.com das setup runterladen und einfach dort die pakete auswäheln und installieren [img]
http://unimatix.sternenvolk.de/gfx/22.gif[/img]
ja welche denn,es sin 100 packete da!!!
soll ich als default texfile typ DOs oder unix nehmen?
ja welche denn,es sin 100 packete da!!!
*sigh* einfach gcc und binutils dazumarkieren. Das mitm Textfile würde ich so lassen wies dastand (so hats bei mir immer ganz gut geklappt).
in dem auswahl sehe ich kein gcc und binutils
alle packages stehen auf default. was soll ich dazu markieren und wo.
ach kann mir doch jemand sagen ich komm sonnst überhaupt nicht weiter
alle packages stehen auf default. was soll ich dazu markieren und wo.
ach kann mir doch jemand sagen ich komm sonnst überhaupt nicht weiter
Hab halt ekin Cygwin hier sondern ein schönes Linux :) Irgendwo konnte man die Pakete nach namen sortieren lassen, ansonsten sollten die unter delevoping oder so sein. Sonst versuch doch mal
www.mingw.org das paket ist wesentlich simpler im setup (wann wohl mal wer auf mich hört [img]
http://unimatix.sternenvolk.de/gfx/22.gif[/img])
und starten mit UNIX2DOS.EXE ??
und starten mit UNIX2DOS.EXE ??
Wen starten? Sofern der gcc ncoh nicht in deinem Windows-PATH eingetragen ist, da eintragen und dann eine ganz normale Kommandozeile aufmachen und die besagten Befehle eingeben. Die .C-Datei muss natürlich im selben Verzeichnis sein, in dem du die Befehle ausführst.
ich habe installier die datei die du mir gegeben hast, gcc ist irgendwie gar nicht dabei
und wenn ich gcc -O2 -S template.c eingebe sagt er das gcc nicht gefunden wird
ich habe installier die datei die du mir gegeben hast, gcc ist irgendwie gar nicht dabei
Da bin ich mri ziemlich sicher, dass da der gcc dabei ist :) Dürfte sich wieder in einem Verzeichnis wie bin oder usr/bin verstecken als gcc.exe, da bin ich ganz zuversichtlich [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
und wenn ich gcc -O2 -S template.c eingebe sagt er das gcc nicht gefunden wird
Dann liegt der gcc noch nicht im Windows-PATH, also das Verzeichnis in dem gcc.exe liegt.
tja da kommt ein schwarzes fenster und verschwindet wieder
tja da kommt ein schwarzes fenster und verschwindet wieder
Deswegen sollst du eine Kommandozeile aka Eingabeaufforderung aufmachen und darin wie im Tutorial gesagt die Befehle ausführen…
habe gemacht. es schreibt gg.exe no input files
habe gemacht. es schreibt gg.exe no input files
Dann hast dus noch nicht richtig aufgerufen wies beschrieben ist, vor alel mmuss die Datei in dem Verzeichnis leigen, in dem du mit der Kommandozeile arbeitest.
installieren von mingw hat geklappt, aber leider interessiert er sichanscheinend nicht für kommandozeilenparameter, egal was ich angebe (gcc -O2 -s template.c) ich bekomme keinen assembler raus, sondern a.exe
installieren von mingw hat geklappt, aber leider interessiert er sichanscheinend nicht für kommandozeilenparameter, egal was ich angebe (gcc -O2 -s template.c) ich bekomme keinen assembler raus, sondern a.exe
mal mit -S (großes S) versucht? Dem gcc ist das wichtig [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
ja, grad auch gemerkt… hab mich verlesen.
Äh, warum zum Teufel wird mein Avatar ncihtmehr angezeigt?
Äh, warum zum Teufel wird mein Avatar ncihtmehr angezeigt?
http://3773.rapidforum.com/topic=102483162041&reverse=1
So ich habe jetzt alles hingekriegt.
Mann könnte schon eine Anleitung dafür geben, dank Triphoenix und seinen Links geht das. Aber nicht jeder kann ganzen Tag im Forum sitzen. Und nicht jeder hat Vorkenntnisse,wie man zum Beispiel PATH erstellt.
Alsio weiss nicht wie für andere für mich war es zu wenig was in der Aufgabe steht. Ohne diesen Forum hätte ich es nicht geschaft.
Zu Aufgabe 4 nochmal, hat das "Zweierkomplement zu bedeuten, dass wir den Vorzeichenwechsel manuell machen müssen? Eigentlich gibts da ja nen Befehl für… *confused*
Zu Aufgabe 4 nochmal, hat das "Zweierkomplement zu bedeuten, dass wir den Vorzeichenwechsel manuell machen müssen? Eigentlich gibts da ja nen Befehl für… *confused*
Gute Frage eigentlich. Aber nirgendwo steht dass ihr irgendwie auf einen bestimmten Teil des x86-Satzes beschränkt seid, von daher denke ich ist das durchaus erlaubt.
kann man die Register so vertauschen?
movl (%ecx),%eax
movl (%ebx),%edx
movl (%eax),%ebx
movl (%edx),%ecx
Hieß es nicht "Keine weiteren Register außer eax und edx benutzen? :)
gib mir bitte ein tip wie ich es sonnst machen kann
Da ist doch schon ein Tip in der Aufgabenstellung.
xorl Src.Dest Dest=Dest^Src
ich finde kein Zusammenhang mit Vertauschen
Spiel einfach mal ein bisschen mit xor rum, mehr braucht man nicht.
ja wie soll ich den damit spielen, aus dem script lese ich das es ,dest gleich Dest hoch Source, bedeutet
wieso gibt es den keine Tutorium für T3
Achso, da liegt das Problem. XOR ist das (bitweise) exclusive Oder. Also ein Bit des Ergebnisses ist genau dann gesetzt, wenn es in GENAU EINEM der beiden Ausgangswerte gesetzt war. Aber das ist doch T1-Stoff? *confused*
Ich glaube da liegt auch ein Konfusionsfaktor des Skrpites drin (?), weil das ^, was ja generell als "hoch" steht, hier aus irgendwelchen nicht näher bestimmten gründen das XOR darsterllen soll…
Ich glaube da liegt auch ein Konfusionsfaktor des Skrpites drin (?), weil das ^, was ja generell als "hoch" steht, hier aus irgendwelchen nicht näher bestimmten gründen das XOR darsterllen soll…
Weils in den meisten Programmiersprachen so ist [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
Hmm, ich hab das mit den path setzten gemacht bei XP
Danke :)
also der befehl help und exit gehen…. aber gcc kennt das ding immer noch nicht *langsam kriese kriegt*
ich weiss was XOR ist
110xor010 ergibt 100
aber was hat das mit Vertauschen zu tun???
mal eine frage zu aufgabe 3.3
subl %edx, 4(%eax)
wahrscheinlich ist hier die rechte seite der zielausdruck, oder?
mal eine frage zu aufgabe 3.3
subl %edx, 4(%eax)
wahrscheinlich ist hier die rechte seite der zielausdruck, oder?
ja
ich weiss was XOR ist
110xor010 ergibt 100
aber was hat das mit Vertauschen zu tun???
Am besten experimentier ein wenig. Du hast xor und du hast nu zwei Register zur Verfügung. Da kann man nicht soviele verschiedene Dinge mit machen. Einfach mal ausprobieren [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
das habe ich ausprobiert
Xorl %eax,%edx 100, 110 %edx=010
Addl %edx,%eax eax=eax+edx=100+010=110
Subl %eax,%edx edx=edx-eax…das klappt jetzt nicht
ist es überhaupt richtig?
das habe ich ausprobiert
Xorl %eax,%edx 100, 110 %edx=010
Addl %edx,%eax eax=eax+edx=100+010=110
Subl %eax,%edx edx=edx-eax…das klappt jetzt nicht
ist es überhaupt richtig?
Wenns nicht klappt, offensichtlich nicht. Konzentrier dich mehr aufs xor [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
subl %edx,4(%eax)
Zielregister %eax, Wert 0x0000000c- 4*0x00000100
richtig?
Shell redirection in eine Datei ?
Also sowas in der Art
objdump -d template.o > logfile.txt
Sollte in jeder Konsole gehen (auch cmd.exe)
na ja, wenn ich mir das an in win editor an schau, hab ich das alles in eine zeile reinbeschreiben bekommen…
kann ich vorsichtshalber auch ein scrennshot von der consolenausgabe mitschicken (.jpg)? falls ein "nicht-windows-editor" genauso seltsam das textfile ausgibt?
na ja, wenn ich mir das an in win editor an schau, hab ich das alles in eine zeile reinbeschreiben bekommen…
kann ich vorsichtshalber auch ein scrennshot von der consolenausgabe mitschicken (.jpg)? falls ein "nicht-windows-editor" genauso seltsam das textfile ausgibt?
Dann nimm einen Editor, der die Unix-Zeilenschaltung versteht [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img] Die Frage solltest du an deinen Übungsleiter schicken [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]. Soferns um mich geht, mir reicht die AUsgabe von objdump, meine Programme kennen Unix-Zeilenschaltungen [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
// zensiert von Slater
so funktioniert das aber auch !!! oder täusche ich mich
In dem konkreten Fall ja. Aber nicht allgemein. Probier mal noch ein paar mehr Zahlen zum Test aus.
Wie waere es mit einem zweiten Thread namens "T3 Blatt 3 - Installationsfragen".
Irgendwie hat das ganze hier naemlich ziemlich wenig mit den Uebungsaufgaben zu tun.
Am besten waere natuerlich eine weitere Sektion in diesem Forum namens "Hilfe zur Linux installation/konfiguration" [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
Was ist eine Zeilenschaltung? Wenn ihr den Zeilenumbruch meint, den kann man wunderbar mit dos2unix und unix2dos konvertieren.
Was ist eine Zeilenschaltung? Wenn ihr den Zeilenumbruch meint, den kann man wunderbar mit dos2unix und unix2dos konvertieren.
Kram, ich meine ein \n (LF, Zeilenumbruch, "Enter") [img]
http://unimatix.sternenvolk.de/gfx/24.gif[/img]
Na also.
, den kann man wunderbar mit dos2unix und unix2dos konvertieren.
// zensiert von Slater
Huch? Falsche Loesungen sind auch nicht mehr erlaubt?
wer hätte das gedacht ;)
also ich hatte vorher auch schon mitüberlegt,
und mir fiel gar keine Möglichkeit ein,
3 Min. später hatte ich es dann ;)
und da Lamer ja schon seinen eigenen Text selber gelöscht hatte..
wie multipliziert man 16 mit ox10c?
wie multipliziert man 16 mit ox10c?
Im Notfall mit dem Windoof-Taschenrechner oder kcalc oder gnome-calc-tool [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
muss ich 16 auch in Hexadezimal umwandeln?
Grundgütiger, der Thread ist ja geradezu explodiert…
Zu Aufgabe 4 nochmal, hat das "Zweierkomplement" zu bedeuten, dass wir den Vorzeichenwechsel manuell machen müssen?
Nein. Es ist nur wichtig zu wissen, in welchem Format die Zahl vorliegt, damit man
a) sehen kann, ob sie negativ ist
b) den richtigen Algorithmus schreiben kann, um das Vorzeichen umzudrehen
Die Zahl in %eax könnte ja genau so gut im Einerkomplement stehen oder Vorzeichen und Wert getrennt speichern.
Wenn in %eax beispielsweise 0xFFFFFFFF steht, dann kann das heissen:
Zweierkomplement: -1
Einerkomplement: -0
Vorzeichen/Wert: -2147483647
Wenn in %eax also dieser Wert steht, soll als Ergebnis in %ebx eine 1 stehen, keine 0 und keine 2147483647. Klar?
Eigentlich gibts da ja nen Befehl für… *confused*
Und den kann man selbstverständlich benutzen, wenn man möchte.
kann man die Register so vertauschen?
movl (%ecx),%eax
movl (%ebx),%edx
movl (%eax),%ebx
movl (%edx),%ecx
So wirst Du mit Sicherheit den PC zum Absturz bringen, da Du völlig willkürlich auf Speicher zugreifst.
movl (%ecx),%eax
lies das Wort, das an der von %ecx referierten Adresse steht, und speichere es nach %eax
In %ecx steht an dieser Stelle irgendwas zufälliges. Mache Dir den Unterschied klar zwischen %ecx und (%ecx) - Stichwort "Adressierungsmodi".
wieso gibt es den keine Tutorium für T3
An jedem Übungstermin kannst Du Fragen zum nächsten Aufgabenblatt stellen (natürlich können wir Dir kein Kochrezept mit auf den Weg geben, aber das XOR nicht potenziert hätten wir Dir schon gesagt). Ansonsten: schliess Dich mit anderen Studenten kurz, und was genau so wichtig ist: besorg Dir Literatur!
weil das ^, was ja generell als "hoch" steht, hier aus irgendwelchen nicht näher bestimmten gründen das XOR darsterllen soll…
In C bedeutet ^ bitweises XOR. Für "hoch" gibt es in den bekannten imperativen Sprachen glaube ich gar kein "einzelnes Zeichen", dafür muss man immer Funktionen aufrufen.
wahrscheinlich ist hier die rechte seite der zielausdruck, oder?
Das ist in der AT&T Syntax
IMMER so! Bei Intel ist es genau umgekehrt.
wie multipliziert man 16 mit ox10c?
Wie multipliziert man im System b mit der Zahl b? Also im Dezimalsystem: wie multipliziert man mit 10? Im Binärsytem: wie multipliziert man mit 2 (binär 10!)?
Bitte schickt mir keine .o und erst recht keine .exe Dateien! Ich brauche lediglich den Assemblercode und den Objet Dump, das sind beides Textdateien mit Assemblerbefehlen in Klartext und keine Binärdateien.
Und vergesst nicht, mir auch noch den anderen Kram zu schicken, 3.2 ist nicht die einzige Aufgabe auf Blatt 3 [img]
http://unimatix.sternenvolk.de/gfx/22.gif[/img]
ich verstehe imer noch nicht ganz den Unterschied zwischen
%ecx und (%ecx)
ich verstehe imer noch nicht ganz den Unterschied zwischen
%ecx und (%ecx)
Ersteres ist Register-Adressierung, zweiteres Register-indirekte Adressierung (Folie 2-45)
ich verstehe imer noch nicht ganz den Unterschied zwischen
%ecx und (%ecx)
Du hast einen Speicher:
1000: 12345678
1004: 23456789
1008: 34567890
100C: 45678901
mov $1004, %ecx ; ecx = 1004
mov %ecx, %eax ; eax = ecx
mov (%ecx), %eax ; eax = speicher[ecx] = 23456789
low_level
1000: 12345678
1004: 23456789
1008: 34567890
100C: 45678901
mov $1004, %ecx ; ecx = 1004
incl 8(%ecx) ecx=23456789+8 +1
richtig?
objdump -d Ausgabe. Was ist damit gemeint. Die MAtrikelnummer?
1000: 12345678
1004: 23456789
1008: 34567890
100C: 45678901
mov $1004, %ecx ; ecx = 1004
incl 8(%ecx) ecx=23456789+8 +1
richtig?
nein.
Übersetz es doch einfach mal in Java:
%ecx => ecx
(%ecx) => speicher[ecx]
incl operand => (operand)++
damit wird
incl 8(%ecx) => speicher[ecx+8]++
low_level
1004 +8 gehe zum Zielregister 1012, und dann den Inhalt davon + 1
??
1004 +8 gehe zum Zielregister 1012, und dann den Inhalt davon + 1
??
Parse error.
Es ergibt den Java/C/C++-Code hinter dem "=>". Eine dieser Sprachen kannst Du doch, oder?
Aber ich hatte auch einen Fehler. Ich hab nämlich die Speicherstelle 1012 aus Versehen mit 100C bezeichnet. Sorry.
low_level
das kann ich glaube nicht. trotzdem vielen dank für die Hilfe
objdump -d Ausgabe. Was ist damit gemeint. Die MAtrikelnummer?
Die Ausgabe, die das Programm objdump mit den gegebenen Parametern auswirft.
Unimatix lesen, tools runterladen, leicht verdiente 40 Punkte in 10 Minuten [img]
http://unimatix.sternenvolk.de/gfx/6.gif[/img]
Unimatix lesen, tools runterladen, leicht verdiente 40 Punkte in 10 Minuten [img]http://unimatix.sternenvolk.de/gfx/6.gif[/img]
Jup, die Punktzahlen sehen dieses Mal wirklich derbe aus, weil alle Abgaben bis auf eine schonmal 40 Punkte für die gcc-Aufgabe bekommen haben [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
Mal ne kurze Frage:
Bei Aufgabe 3.3 gehe ich da bei jeder Befehlszeile von den oben angegebenen Ursprungswerten aus.
Oder wenn jetzt z.B. der Wert von %eax geändert wird. Wird dieser neuer Wert in den folgenden Befehlszeilen verwendet?
Ich gehe vom ersten Fall aus. Doch diese Frage kam plötzlich in mir auf.
thx
Hmm, soweit ich mich erinnern kann, kam dieser Fall auf dem Aufgabenblatt nicht vor (oder ich habs nicht gemerkt). Ich habs aber auch so wie Du gemacht, indem ich jede Zeile unabhaengig von den anderen betrachtet habe.
Es ist in dieser Aufgabe egal gewesen, es sollte nichts doppelt vorgekommen sein oder ich habe slebst einen fatalen Fehler gemacht [img]
http://unimatix.sternenvolk.de/gfx/28.gif[/img]
Aufgabe 3.4 [20 Punkte] :
Schreiben Sie ein Assembler-Programm, das den Betrag einer im Register %eax stehenden Zahl
(Zweierkomplement) nach %ebx schreibt. Der Wert in %eax soll nicht ver ¨andert werden.
_saveEAX:
movl %eax, %ebx ; Inhalt von eax nach ebx schreiben
je _neg ; Wenn Zahl negativ
_neg:
decl %ebx ; decrement ebx
notl %ebx ; bitwise negation
Haut das nicht so einfach auch hin??
Wenn ich das Ergebnis eines XORS in EBX packe
_saveEAX:
movl %eax, %ebx ; Inhalt von eax nach ebx schreiben
xorl %eax, %ebx ;
Was hab ich denn dann davon?
FBI, sie sind festgenommen. Sie wurden beim (Thread-)Leichenschänden beobachtet! Alles, was sie jetzt sagen kann vor dem TriBunal gegen sie verwendet werden. ;)
Blöde frage, aber ist das gerade Sparc oder Intel?
Sparc waere dieses Jahr, aber sieht mehr wie Intel aus? *confused*
Intel, aber in Zhangs AT & T Syntax !!!
Haeh? Zhang? Der liest doch dieses Jahr gar kein T3, sondern nur RS?
_saveEAX:
movl %eax, %ebx ; Inhalt von eax nach ebx schreiben
je _neg ; Wenn Zahl negativ
_neg:
decl %ebx ; decrement ebx
notl %ebx ; bitwise negation
Also das ist doch schon mal grober Unfug. Was soll denn ein bedingter Sprung nützen, welcher einfach nur zum nächsten Befehl springt, welcher also sowieso ausgeführt wird, auch wenn der bedingte Sprung nicht genommen wird?
Ausserdem: worauf soll sich das "jump if equal" denn überhaupt beziehen? Damit testet man jedenfalls nicht, ob die Zahl negativ ist…
_saveEAX:
movl %eax, %ebx ; Inhalt von eax nach ebx schreiben
xorl %eax, %ebx ;
Diese beiden Zeilen setzen ebx auf 0… auch nicht gerade das, was Du wolltest [img]
http://www.fb18.de/gfx/25.gif[/img]
Ach ja, ich sollte eigentlich cheken ob das Negative Flag gestzt ist oder?
Wird es denn gesetzt? Eigentlich doch heher nicht, denn eine 2er Komplementzahl ist ja so als negative Zahl dargestellt.
Also Leute wie checke ich nun, ob sie negativ ist? Ist es nicht so, dass bei negativen im 2er K. das vorderste Bit ne 1 ist????
Zitat:
_saveEAX:
movl %eax, %ebx ; Inhalt von eax nach ebx schreiben
xorl %eax, %ebx ;
Diese beiden Zeilen setzen ebx auf 0… auch nicht gerade das, was Du wolltest
Nee Quaark, in der Aufgabe stehts doch, in eax steht ne Zahl im 2er KOmplement, die wirs erst nach ebx kopiert, damit sie in eax bleiben kann, in ebx kann man damit weiter fummeln!
Haeh? Zhang? Der liest doch dieses Jahr gar kein T3, sondern nur RS?
Achte mal aufs Datum der Postings… [img]
http://www.fb18.de/gfx/22.gif[/img]
Ach ja, ich sollte eigentlich cheken ob das Negative Flag gestzt ist oder?
Das macht Sinn, ja.
Wird es denn gesetzt?
Es wird genau dann gesetzt, wenn das Ergebnis einer Operation negativ ist.
Eigentlich doch heher nicht, denn eine 2er Komplementzahl ist ja so als negative Zahl dargestellt.
Hä?
Also Leute wie checke ich nun, ob sie negativ ist?
orl %ebx, %ebx
movl %eax, %ebx
xorl %eax, %ebx
Diese beiden Zeilen setzen ebx auf 0… auch nicht gerade das, was Du wolltest
Nee Quaark, in der Aufgabe stehts doch, in eax steht ne Zahl im 2er KOmplement, die wirs erst nach ebx kopiert, damit sie in eax bleiben kann, in ebx kann man damit weiter fummeln!
Ja, aber das "Fummeln" bewirkt hier nur, dass ebx auf 0 gesetzt wird. Ein XOR mit zwei gleichen Werten als Operanden (in eax und ebx steht ja nach dem mov der gleiche Wert) ergibt immer 0.
Wie wäre es mit folgendem Code:
movl %eax, %ebx
movl %eax, %edx
sarl $31, %edx
xorl %edx, %ebx
subl %edx, %ebx
Rechne das doch mal mit mehreren Beispielen durch und dann melde Dich wieder [img]
http://www.fb18.de/gfx/25.gif[/img]
Haeh? Zhang? Der liest doch dieses Jahr gar kein T3, sondern nur RS?
Achte mal aufs Datum der Postings… [img]http://www.fb18.de/gfx/22.gif[/img]
Anonymer User erstellt am 05.01.2006 15:58
Das ist schon frisch hier in der neuesten Diskussion.
@Problemsteller: Intel bietet die Befehle JS und JNS (Jump if Sign und Jump if Not Sign), mit denen kannst du anhand des Negativ-Flags (Sign-Bit genannt) bedingte Sprünge ausführen. Das Sign-Flag wird nach Rechenbefehlen (wie add, sub, and, or, …) passend zum Ergebnis gesetzt.
Haeh? Zhang? Der liest doch dieses Jahr gar kein T3, sondern nur RS?
Achte mal aufs Datum der Postings… [img]http://www.fb18.de/gfx/22.gif[/img]
Ja, ich weiss. Trotzdem, was hat das in 'nem T3-Thread zu suchen?
Ich nehme mal an dass es eine der Zhang-Aufgaben von damals ist.
Stimmt. Kannst Du Dich etwa nicht mehr daran erinnern? [img]
http://www.fb18.de/gfx/25.gif[/img]
@Problemsteller: Intel bietet die Befehle JS und JNS (Jump if Sign und Jump if Not Sign), mit denen kannst du anhand des Negativ-Flags (Sign-Bit genannt) bedingte Sprünge ausführen. Das Sign-Flag wird nach Rechenbefehlen (wie add, sub, and, or, …) passend zum Ergebnis gesetzt.
Ah jo danke Tri.
Abri: Laut Aufgabe steht eine im 2er-Komplement dargetsllte Zahl im Register eax, dessen Betrag benötigt wird.
Ist diese Zahl negativ (aus irgendeiner Berechnung oder irgendwann mal aus dem Speicher geholt, was auch immer), wird dann auch das Sign-Flag gesetzt? Wenn ja ists ja ganz easy.
Aber ich denke eher, das wir die 2er Komplementdarstellung auseinanderreißen sollen, um aus einer eventuell negative Zahl den Betrag zu ermittel. Oder????
Laut Aufgabe steht eine im 2er-Komplement dargetsllte Zahl im Register eax, dessen Betrag benötigt wird.
Ist diese Zahl negativ (aus irgendeiner Berechnung oder irgendwann mal aus dem Speicher geholt, was auch immer), wird dann auch das Sign-Flag gesetzt? Wenn ja ists ja ganz easy.
Das Sign Flag speichert das Vorzeichen des Ergebnisses der letzten arithmetischen Operation. Du musst also irgendwas mit eax machen, was den Wert nicht verändert aber die Flags setzt. Beliebt sind:
orl %eax, %eax
andl %eax, %eax
addl $0, %eax
subl $0, %eax
cmpl $0, %eax
Danach kannst Du dann mit js (oder jns, je nach Bedarf) in Abhängigkeit vom Sign Bit springen.
Aber ich denke eher, das wir die 2er Komplementdarstellung auseinanderreißen sollen, um aus einer eventuell negative Zahl den Betrag zu ermittel. Oder????
Das könnte man natürlich machen (oberstes Bit isolieren etc.), ist aber nicht notwendig. Vertrau mir [img]
http://www.fb18.de/gfx/25.gif[/img]
EDIT: Auch wenn es dadurch um einiges eleganter geht, siehe die Lösung aus meinem letzten Post.