FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Technische Informatik

T3 - Aufgabenblatt 1

T3 - Aufgabenblatt 1 2002-10-27 18:18
Labskaus
Moin!

Zu der Aufgabe mit der Bitdarstellung habe ich zwei Fragen: was ist die Charakteristik einer Zahl? Und was bedeutet der Bruch als Bytefolge? Kann ich so nix mit anfangen.

____________________________________________
bjorn: Überschrift mit T3 erweitert

Re: T3 - Aufgabenblatt 1 2002-10-27 18:31
Slater
viele menschen nix haben zettel..

Re: T3 - Aufgabenblatt 1 2002-10-27 19:03
Labskaus
viele menschen nix haben zettel..
Ist ja egal [img]http://www.sternenvolk.de/symb/7.gif[/img]
Hast Du ne Ahnung, wie man ne double Zahl per printf in Hexadezimaldarstellung ausgeben kann? habe

double d = 6.125; printf("%x\n", d);probiert aber das geht nicht, kommt immer 0 raus.


Re: T3 - Aufgabenblatt 1 2002-10-27 19:08
Labskaus
Moin!

Zu der Aufgabe mit der Bitdarstellung habe ich zwei Fragen: was ist die Charakteristik einer Zahl? Und was bedeutet der Bruch als Bytefolge? Kann ich so nix mit anfangen.

Für alle Suchenden, ich hab gerade was zur Charakteristik gefunden, ist zwar verwirrend aber egal -> http://quick.futureware.at/artikel/zahlen.htm

Re: T3 - Aufgabenblatt 1 2002-10-27 19:13
Labskaus
Noch ne andere Frage: double belegt ja 8 Bytes im Speicher. Gibt es keinen Ganzzahltyp, der ebenfalls 8 Byte braucht? int und long sind ja beide nur 4 Byte lang.

Re: T3 - Aufgabenblatt 1 2002-10-27 19:27
TriPhoenix
Noch ne andere Frage: double belegt ja 8 Bytes im Speicher. Gibt es keinen Ganzzahltyp, der ebenfalls 8 Byte braucht? int und long sind ja beide nur 4 Byte lang.

Ja den Typen gibts, heißt leider fast bei jedem COmpiler anders, so hat der M$-Compiler __int64, biem gcc soltle es long long sein (s. anderen Post [img]http://www.sternenvolk.de/symb/28.gif[/img])

Re: T3 - Aufgabenblatt 1 2002-10-27 19:35
TriPhoenix
Hast Du ne Ahnung, wie man ne double Zahl per printf in Hexadezimaldarstellung ausgeben kann? habe
Habs jetzt :)

Vorrausgesetzt du benutzt den gcc (ich habs auf dem 3.2er laufen lassen), geht das so:

#include <stdio.h> #include <string.h> int main() { double d = 6.125; long long l; memcpy(&l, &d, sizeof(double)); printf("%llx", l); return 0; }

Re: T3 - Aufgabenblatt 1 2002-10-27 23:02
Fred
double d = 6.125; long long l; memcpy(&l, &d, sizeof(double)); printf("%llx", l);
Schoener waere meines Erachtens
double d = 6.125; long long *l = (long long *)&d; printf("%016llx", *l);



Re: T3 - Aufgabenblatt 1 2002-10-29 12:12
Popcorn




……..

Die pinball.exe mit pinball, die lala.com mit lala, das loeschen.bat mit loeschen, aber die a.out mit a.out. Darauf soll man erst mal kommen… [img]http://www.sternenvolk.de/symb/22.gif[/img]

Re: T3 - Aufgabenblatt 1 2002-10-29 14:17
TriPhoenix
Die pinball.exe mit pinball, die lala.com mit lala, das loeschen.bat mit loeschen, aber die a.out mit a.out. Darauf soll man erst mal kommen… [img]http://www.sternenvolk.de/symb/22.gif[/img]

Aber doch nur unter Windows, wenn du in Unix ne pinabll.exe hast, musst du die auhc mit pinball.exe starten [img]http://www.sternenvolk.de/symb/28.gif[/img]

Re: T3 - Aufgabenblatt 1 2002-10-29 15:15
Popcorn
Ja, nun weiß ich das auch. Ich war nur auch bisher immer davon ausgegangen, dass wenn ich z. B. KDE mit "startkde" lade, ich eigentlich ein "startkde.bat" aufrufe. Das habe ich dann gleich mal für den ganzen Rest so weitergestrickt. Na ja. Was soll's.


Re: T3 - Aufgabenblatt 1 2002-10-30 14:01
Zaphod
Irgendwie komme ich nicht ganz mit diesen Formaten zurecht. Ich bin ja schon froh, dass ich ein double mit %f anzeigen kann, aber ich hab eben mal unter "man -s 3c printf" gesucht, und ich habe da nix gefunden, mit dem ich die Bitdarstellung, das Vorzeichen, die Charakteristik oder den Bruch als Bytefolge ausgeben konnte. Könnte mal jemand die entsprechenden Formatierungen auflisten?

Danke

Re: T3 - Aufgabenblatt 1 2002-10-30 16:35
TriPhoenix
Irgendwie komme ich nicht ganz mit diesen Formaten zurecht. Ich bin ja schon froh, dass ich ein double mit %f anzeigen kann, aber ich hab eben mal unter "man -s 3c printf" gesucht, und ich habe da nix gefunden, mit dem ich die Bitdarstellung, das Vorzeichen, die Charakteristik oder den Bruch als Bytefolge ausgeben konnte. Könnte mal jemand die entsprechenden Formatierungen auflisten?

Die musst du shcon selber extrahieren und dann mit %x anzeigen lassen [img]http://www.sternenvolk.de/symb/28.gif[/img]



Re: T3 - Aufgabenblatt 1 2002-11-01 17:47
Slater
mal angenommen, jemand sitzt an einem leeren win-xp rechner rum,
was brauch man denn für progrämmchen, um son c-code zu schreiben (naja das geht ja noch [img]http://www.sternenvolk.de/symb/23.gif[/img]), compilieren und ausführen zu lassen?,
am besten das gleiche noch für assembler mit,

ich such ja schon kräftig mit google, aber hinweise sind gern gesehen ;)

Re: T3 - Aufgabenblatt 1 2002-11-01 18:16
Zaphod
Entweder du speicherst deinen Code als Unix-Datei, transferrierst das per SSH zum Uni-Rechner, dort kompilierst du und führst aus, betrachtest deine Fehler und wiederholst das ganze, bis alles klappt, oder aber du "kaufst" dir MS Visual C++ hust und musst anschließend nur noch die Typen und das Dateiformat umwandeln, kannst aber "zuhause" ausführen und testen.

Re: T3 - Aufgabenblatt 1 2002-11-01 18:21
Slater
du kannst einem aber auch die laune vermiesen
[img]http://diablo2.ingame.de/d2forum/images/smilies/motz.gif[/img]
[img]http://diablo2.ingame.de/d2forum/images/smilies/motz.gif[/img]

was kleineres vielleicht?.. irgendwo?..

Re: T3 - Aufgabenblatt 1 2002-11-01 18:58
Faleiro
Hallo,

ich habe da mal nachgedacht :-)

Wenn ich die double-Zahl als Bytefolge darstellen soll, kann ich ja diese union-Geschichte aus der Uebung verwenden, um die double-Zahl als Array von 8 Chars ansprechen zu koennen. Ich habe dann folgende Zeile eingefuegt:
printf(" Bruch als Bytefolge = %d %d %d %d %d %d %d %d\n", u.c[0 ], u.c[1 ], u.c[2 ], u.c[3 ], u.c[4 ], u.c[5 ], u.c[6 ], u.c[7 ]);
Aber das ergibt nur:
Bruch als Bytefolge = 64 24 -128 0 0 0 0 0 Von der Menge der Zahlen her ist das schon mal richtig (das erste Byte kann ja wegfallen, das wird wohl sowieso nicht zur Speicherung der Zahl selbst genutzt, nehme ich an?). Und es sind auch wie auf dem Aufgabenzettel fuenf Bytes "leer". Sieht gut aus. Aber warum habe ich nicht die gleichen Werte?

Beim Vorzeichen und der Charakteristik komme ich auch nicht so recht weiter. Wer weiss Rat?

(Edit: Formatierung)

Re: T3 - Aufgabenblatt 1 2002-11-01 19:00
Faleiro
du kannst einem aber auch die laune vermiesen
[…]
was kleineres vielleicht?.. irgendwo?..
Tja, ich bin mit drei PuTTY-Instanzen mit rzdspc3 verbunden, eine fuer den Quelltext (im Editor "joe"), eine zum Kompilieren, eine fuer die man-page, welche aber nicht wirklich einfach zu verstehen ist…

(Wie funktioniert eigentlich der code-Tag? Bei mir gehts offenbar nicht.)

Re: T3 - Aufgabenblatt 1 2002-11-01 19:04
Slater
Bruch als Bytefolge = 64 24 -128 0 0 0 0 0

64 24 128 ist in hexa ja 40 18 80 also richtig, aber wo ist da der zusammenhang zu 6.125?, und das mit dem union kannst gerne auch mal zitieren [img]http://www.sternenvolk.de/symb/22.gif[/img]




Re: T3 - Aufgabenblatt 1 2002-11-01 19:11
Faleiro
schreib mal code statt CODE und bei [ ] tut leerzeichen wunder, aber im code-block ist das vielleicht nicht nötig,
64 24 128 ist in hexa ja 40 18 80 also schon richtig

Danke, habe Leerzeichen eingefuegt.

An die Hexadezimaldarstellung habe ich tatsaechlich nicht gedacht, aber es soll laut Zettel 8,80,0,0,0,0,0 herauskommen. Bei mir ist der erste Wert 18, und noch dazu habe ich ja keine 128, sondern eine -128…

Re: T3 - Aufgabenblatt 1 2002-11-01 19:13
Slater
na das ist ja wieder ein ganz andere ecke, die ich auch noch nicht zu interpretieren weiss, aber es kommt doch heraus was bei "Bitdarstellung" stehen soll!, das ist doch ein erfolg ;)

von dem minus-zeichen mal abgesehen ;)

Re: T3 - Aufgabenblatt 1 2002-11-01 19:14
Faleiro
union { double d; long long ll; char c[8 ]; } u; Man beachte das "u;" hinter der schließenden Klammer.
Nun kann man die selben Speicherzellen z.B. mit u.d als double ansprechen oder mit u.ll als longlong-Zahl oder mit u.c[1 ] das zweite Byte als Char…

(Edit) Achtung, Verbesserung: Das Minuszeichen kann man wegbekommen, indem man unsigned char statt nur char verwendet. Grr. Und die 18 statt 8 ist bestimmt ein Tippfehler, der hat sich das Blatt wohl ohne Hilfe eines Compilers ausgedacht, schliesslich fehlt hinten ohnehin eine ",0", welche wir ergaenzen sollten mit Kuli :-/

Re: T3 - Aufgabenblatt 1 2002-11-01 19:23
Slater
also ich seh wie gesagt noch nicht durch, muss jetzt aber weg,

wie hängen 6.125 und deine zahlen zusammen?, kannst das noch mit anderen beispielen rauskriegen (1, …)

na dann

Re: T3 - Aufgabenblatt 1 2002-11-01 21:49
Fred
wie hängen 6.125 und deine zahlen zusammen?,
6.125 ist eine Fliesskommazahl, die wir mit doppelter Genauigkeit speichern (double). Eine Zahl von diesem Typ double belegt 8 Byte 64 Bit Speicher, dabei geht ein Bit fürs Vorzeichen drauf (das Bit 63), elf Bit für den die Charakteristik (62-52) und 52 Bit für die Mantisse (51-0). Das ganze ist nach irgend nem IEEE Standard genormt.
Da diese 8 Bytes hintereinander im Speicher liegen, kannst Du sie auch als solche ansprechen und in Ganzzahlarithmetik verarbeiten, also z.B. per printf als Integer ausgeben, bitweise maskieren (and, or…) oder schieben. Wenn Du z.B. das Vorzeichenbit extrahieren willst, nimmst Du dir das erste der acht Bytes (SPARC) bzw. das letzte (INTEL) und schiebst es 7 Bits nach rechts.
Bei der Charakteristik ist es ein wenig komplizierter, hier musst Du erst zwei Bytes zu einem 16-Bit-Halfword zusammenfügen, um 4 nach rechts verschieben und anschliessen das überflüssige Vorzeichenbit ausmaskieren (sonst gibt's falsche Charakteristik bei negativen Zahlen).
Bruch als Bytefolge = 64 24 -128 0 0 0 0 0
Nein, hier hast Du einfach die 8 Bytes ausgegeben. Du sollst aber lediglich die Mantisse ausgeben, das sind 6 ganze Bytes und ein halbes. Wer 0x18 statt 0x08 rausbekommt hat nicht richtig ausmaskiert und noch Teile der Charakteristik im Bytebruch. Das richtige Ergebnise lautet 0x08, 0x80, 0, 0, 0, 0, 0. Der erste Wert kann auch nie grösser als 0x0F sein, ist ja nur ein halbes Byte.

Übrigens funktioniert der "Trick" mit der Union SO nur auf SPARC Rechnern, auf intel Rechnern muss man die Reihenfolge umdrehen. Siehe hierzu auch Seite 7 in dieser netten Einführung.
Bruch als Bytefolge = %d %d %d %d %d %d %d %d
Wieso gibst Du double-Werte aus???


Re: T3 - Aufgabenblatt 1 2002-11-01 23:14
TriPhoenix
Entweder du speicherst deinen Code als Unix-Datei, transferrierst das per SSH zum Uni-Rechner, dort kompilierst du und führst aus, betrachtest deine Fehler und wiederholst das ganze, bis alles klappt, oder aber du "kaufst" dir MS Visual C++ hust und musst anschließend nur noch die Typen und das Dateiformat umwandeln, kannst aber "zuhause" ausführen und testen.

Ach was, warum denn Geld ausgeben. Gibt doch soviele schöne Compiler auf der Welt, z.B. den GCC (erhältlich im cygwin-paket, welches open source ist). ALternativ mal einen Blick z.B. auf www.c-plusplus.de werfen, die haben da eine Liste von freien Compilern.

Das dumme mit zu Hause testen ist leider, dass der Normaluser wohl einen Intel-Archuitektur-Rechner hat und wie schon vorher gepostet, hat Intel leider beschlossen die Bits in einer Zahl falschrum zu speichern, d.h. die Programme die zuahuse laufen werden gerade nicht auf ner Sparc laufen weil da die Bits genau andersrum liegen [img]http://www.sternenvolk.de/symb/28.gif[/img]

Re: T3 - Aufgabenblatt 1 2002-11-01 23:49
Slater
Ach was, warum denn Geld ausgeben. Gibt doch soviele schöne Compiler auf der Welt, z.B. den GCC (erhältlich im cygwin-paket, welches open source ist). ALternativ mal einen Blick z.B. auf www.c-plusplus.de werfen, die haben da eine Liste von freien Compilern.
ist da alles dabei, also die standard-bibliotheken und kann man programme laufen lassen, usw. tralala?,
schau ich mir mal an, wenn ich nicht mehr so müde bin

Das dumme mit zu Hause testen ist leider, dass der Normaluser wohl einen Intel-Archuitektur-Rechner hat und wie schon vorher gepostet, hat Intel leider beschlossen die Bits in einer Zahl falschrum zu speichern, d.h. die Programme die zuahuse laufen werden gerade nicht auf ner Sparc laufen weil da die Bits genau andersrum liegen [img]http://www.sternenvolk.de/symb/28.gif[/img]
na das kann man ja mit if & else ganz schnell umdrehen [img]http://www.sternenvolk.de/symb/24.gif[/img]

so, ich war nun so schlau den link von Labskaus ganz am anfang mal zu klicken, da steht wirklich sehr ausführlich wie die zahlen gespeichert werden [img]http://images.rapidforum.com/images/i14.gif[/img], naja hat Fred nun auch verraten,

ok noch ein paar fragen, obwohl ich bisher eh nur in die luft programmieren kann:

1. zu charakteristik: wie komm ich an so ein half-word ran?

2. zu charakteristik: statt vorzeichen-bit auszumaskieren erst links schieben und dann 5 mal rechts, kommt das auch hin?

3. für vorzeichen einfach schauen ob die zahl positiv/ negativ ist müsste doch wohl reichen?

4. gibts irgendwo 'man printf' auch im netz?…



Re: T3 - Aufgabenblatt 1 2002-11-02 00:48
Faleiro
Bruch als Bytefolge = %d %d %d %d %d %d %d %d
Wieso gibst Du double-Werte aus???
Double-Werte? Ich hatte das mit %d in der Uebung aufgeschnappt, als der gute Mann die Folie versehentlich mal laenger als 5 Sekunden gezeigt hat ;-) Und es hat ja funktioniert, so halbwegs jedenfalls ;-) (inzwischen habe ich %x eingesetzt, das scheint fuer hex zu stehen, hoffe ich.
Ich probiere morgen weiteres, erstmal danke noch fuer deine Ausfuehrungen.

Re: T3 - Aufgabenblatt 1 2002-11-02 00:57
Fred
mal angenommen, jemand sitzt an einem leeren win-xp rechner rum, was brauch man denn für progrämmchen, um son c-code zu schreiben (naja das geht ja noch), compilieren und ausführen zu lassen?
Hol Dir den kostenlosen Borland Compiler 5.5.1, der ist zwar nur ein DOS-Compiler, kann aber natürlich auch Windows-Code erzeugen (wenn man das möchte, für ein paar einfache printf Übungen reicht DOS ja allemal).
Um den Compiler komfortabel aus einem Editor starten zu können empfehle ich den genialen Texteditor "Context". Da kannst Du unter Options/Environment Options/Execute Keys eine Taste zum Compilieren und eine zum Starten des Executables definieren. Syntax Highlighting für C++ (u.a.) beherrscht Context ebenfalls. Wenn Du Dir die Output Console des Compilers anzeigen läßt und Zeilennummern in Context einschaltest kann man wunderbar damit arbeiten.
Für beide Programme fliegen die Links unter Allgemeines irgendwo rum, ich such die gleich nochmal und schreib die hier rein.
ftp://ftpd.borland.com/download/bcppbuilder/freecommandLinetools.exe
www.fixedsys.com/context
am besten das gleiche noch für assembler mit
Einen Assembler, der SPARC-Code generiert, wird es für Win-XP Rechner wohl nicht geben, und falls doch wird er Dir nichts nützen, weil Du den Code nicht testen kannst. Oder willst Du nen x86 Assembler? Hat in T3 leider nix verloren…

oder aber du "kaufst" dir MS Visual C++ hust
Ich habe mir das mal für 10 Mark (oder Euro?) als Learning Edition gekauft, ich meine das darf man sogar kostenlos weitergeben. Kommt am Anfang immer son nerviger Hinweis bei den Compilaten, aber die IDE gefällt mir sehr gut. Bevor ich meine Programme zur Verfügung stelle, lasse ich sie halt als letztes nochmal durch den Borland Compiler laufen.

Das dumme mit zu Hause testen ist leider, dass der Normaluser wohl einen Intel-Archuitektur-Rechner hat und wie schon vorher gepostet, hat Intel leider beschlossen die Bits in einer Zahl falschrum zu speichern
Ich würde lieber "andersrum" als "falschrum" sagen. Für mich klingt es logisch, die niederwertigsten Bytes zuerst zu speichern. Oder Du hättest "falschrum" zumindest in Gänsefüsschen setzen können, also "\"falschrum\"" ;-)

na das kann man ja mit if & else ganz schnell umdrehen
Gibt es eigentlich ein Makro (heisst das so?), dass man mit "#ifdef" abfragen kann um zu testen, mit welcher Endianness der Computer arbeitet, auf dem man das Programm compiliert? if/else im Code selbst funktioniert zwar, aber so landet ja Code im Compilat, der niemals ausgeführt wird.

wie komm ich an so ein half-word ran
Um zwei Bytes zusammenzufügen nimmst Du das höherwertige, schiebst es um 8 Bit nach links und "orst" das niederwertige dazu. Ich benutze den Begriff "Halfword" übrigens gemäß der Sparc-Einführungsbroschüre, für mich war ein Word immer 16 Bit, aber auf Sparc muss das natürlich auch anders sein. Hier ein bischen Pseudo-Code:
unsigned char a, b; unsigned short c; c = (a<<8) | b; Danach ist c = 256*a + b. Du kannst statt einem unsigned short (16bit) auch einfach einen int nehmen, hauptsache es passen Zahlen von 0 bis 64k rein.

statt vorzeichen-bit auszumaskieren erst links schieben und dann 5 mal rechts, kommt das auch hin?
Vorausgesetzt Du schiebst in Bytes, das ist aber relativ gefaehrlich. Im obigen Beispiel ist (a<<8) ja auch nicht Null, weil ich es danach in einen unsigned short speichere. Beim Schieben ist es uebrigens extrem wichtig, in der union die chars als unsigned anzugeben, weil sonst bei Zahlen ab 0x80 nach einem Shift nach rechts nicht die Hälfte rauskommt, sondern eine größere Zahl als die Ursprüngliche. Beispielsweise ist -2/2 = 1, also 0xFE >> 1 = 0xFF —> 254/2 = 255;

für vorzeichen einfach schauen ob die zahl positiv/ negativ ist müsste doch wohl reichen?
Du meinst per if/else? Das ist langsamer als sich das Bit direkt durch eine Shift-Operation zu holen.

gibts irgendwo 'man printf' auch im netz?…
Einfach ein bischen googlen. Aber ausser %i %f %x und %s braucht man eigentlich fast nie was. Nochmal zusammenfassend was Du an aritmethischen Operationen brauchst:

Um n Bit nach links schieben (Multiplizieren mit Zweierpotenzen): x << n;
Um n Bit nach rechts schieben (Dividieren durch Zweierpotenzen): x >> n;
Bitweises oder (z.B. zum Zusammenführen von nebenstehenden Bits): a | b; // auf keinen Fall "||" statt "|" schreiben!
Bitweises und (z.B. zum Ausmaskieren von unerwünschten Bits): a & b; // auch hier nicht "&&" statt "&" benutzen!

Damit kannst Du Dir alle Informationen, die Du brauchst, aus den 8 Bytes holen.

NP: Death - Crystal Mountain




Re: T3 - Aufgabenblatt 1 2002-11-02 01:01
Fred
Bruch als Bytefolge = %d %d %d %d %d %d %d %d
Wieso gibst Du double-Werte aus???
Double-Werte? Ich hatte das mit %d in der Uebung aufgeschnappt, als der gute Mann die Folie versehentlich mal laenger als 5 Sekunden gezeigt hat ;-)
Mein Fehler [img]http://www.sternenvolk.de/symb/8.gif[/img] %d steht genau so wie %i für integers. Das kommt davon, wenn man zu selten in Manuals guckt [img]http://www.sternenvolk.de/symb/7.gif[/img]

NP: Death - Perennial Quest


Re: T3 - Aufgabenblatt 1 2002-11-02 01:18
Fred
http://www.cplusplus.com/ref/cstdio/printf.html
Man sollte double werte per %lf ausgeben, sonst geht die schöne doppelte Genauigkeit bei der Ausgabe flöten.

Re: T3 - Aufgabenblatt 1 2002-11-02 09:38
Slater
schon mal danke für die vielen infos [img]http://images.rapidforum.com/images/i14.gif[/img]

Einen Assembler, der SPARC-Code generiert, wird es für Win-XP Rechner wohl nicht geben, und falls doch wird er Dir nichts nützen, weil Du den Code nicht testen kannst. Oder willst Du nen x86 Assembler? Hat in T3 leider nix verloren…
wieso eigentlich nicht, da ist ein befehlssatz mit festgelegter funktionalität, das lässt sich doch sicher auch auf anderen prozessoren modellieren [img]http://www.sternenvolk.de/symb/22.gif[/img], na wohl zuviel verlangt, ausser mir braucht das halt keiner…, muss ich mir selber basteln [img]http://www.sternenvolk.de/symb/28.gif[/img]

na das kann man ja mit if & else ganz schnell umdrehen
Gibt es eigentlich ein Makro (heisst das so?), dass man mit "#ifdef" abfragen kann um zu testen, mit welcher Endianness der Computer arbeitet, auf dem man das Programm compiliert? if/else im Code selbst funktioniert zwar, aber so landet ja Code im Compilat, der niemals ausgeführt wird.

was meinst mit dem letzten satz?

ich meinte:
man kann ja die zahl 1 speichern und dann gucken ob die 1 oben oder unten steht,
wenn 'falsch' im sinne von unix, dann einfach den array spiegeln (na bei double bisschen komplizierter, aber zu lösen)

gibts irgendwo 'man printf' auch im netz?…
Einfach ein bischen googlen. Aber ausser %i %f %x und %s braucht man eigentlich fast nie was.
ha, diese hab ich allein hier auf der seite plus einer weitern quelle gefunden:
%lf %d %i %llx %016llx %x

%X %o %p

aber ich seh schon, alles irgendwelche modifer oder sonderlinge, da ist ne liste ganz nett

Re: T3 - Aufgabenblatt 1 2002-11-02 13:14
TriPhoenix
Das dumme mit zu Hause testen ist leider, dass der Normaluser wohl einen Intel-Archuitektur-Rechner hat und wie schon vorher gepostet, hat Intel leider beschlossen die Bits in einer Zahl falschrum zu speichern
Ich würde lieber "andersrum" als "falschrum" sagen. Für mich klingt es logisch, die niederwertigsten Bytes zuerst zu speichern. Oder Du hättest "falschrum" zumindest in Gänsefüsschen setzen können, also "\"falschrum\"" ;-)

Also wenn ich mir den Speicher angucke wo ich 0x12345678 gespeichert habe und dann liegt da 0x78 0x56 0x34 0x12 dann finde ich persönlich das falschrum [img]http://www.sternenvolk.de/symb/28.gif[/img]

Einen Assembler, der SPARC-Code generiert, wird es für Win-XP Rechner wohl nicht geben, und falls doch wird er Dir nichts nützen, weil Du den Code nicht testen kannst. Oder willst Du nen x86 Assembler? Hat in T3 leider nix verloren…
wieso eigentlich nicht, da ist ein befehlssatz mit festgelegter funktionalität, das lässt sich doch sicher auch auf anderen prozessoren modellieren [img]http://www.sternenvolk.de/symb/22.gif[/img], na wohl zuviel verlangt, ausser mir braucht das halt keiner…, muss ich mir selber basteln [img]http://www.sternenvolk.de/symb/28.gif[/img]
Also zu allererst gibt es sehr wohl die Möglichkeit, SPARC-Assemblat aufm x86 laufen zu lassen, gibt nämlich nen SPARC simulator [img]http://www.sternenvolk.de/symb/24.gif[/img] s.a. http://www.cs.unm.edu/~maccabe/tkisem/begin.html
Einen cross-assembler findet man bestimmt auch noch, shcilmmstenfalls versucht man einfach ein OpenSource-Proggy für sparc auf x86 zu kompilieren, evtl. könnte der gcc das schon schaffen

Gibt es eigentlich ein Makro (heisst das so?), dass man mit "#ifdef" abfragen kann um zu testen, mit welcher Endianness der Computer arbeitet, auf dem man das Programm compiliert? if/else im Code selbst funktioniert zwar, aber so landet ja Code im Compilat, der niemals ausgeführt wird.
Nicht wenn du nen vernünftig optimierenden Compiler hast, der sowas erkennt [img]http://www.sternenvolk.de/symb/28.gif[/img] Hab auch shcon gesucht nach Möglichkeiten, die einfachste scheint atm zu sein, im Code so etwas wie
#ifdef BIG_ENDIAN // big endian-code #else #ifdef LITTLE_ENDIAN // little endian code #else // garnichts ???? #endif #endif zu benutzen und dann beim kompilieren z.B.
gcc bla.c -DBIG_ENDIAN
zu machen…


Re: T3 - Aufgabenblatt 1 2002-11-02 14:45
Slater
Hol Dir den kostenlosen Borland Compiler 5.5.1, der ist zwar nur ein DOS-Compiler, kann aber natürlich auch Windows-Code erzeugen (wenn man das möchte, für ein paar einfache printf Übungen reicht DOS ja allemal).
Um den Compiler komfortabel aus einem Editor starten zu können empfehle ich den genialen Texteditor "Context". Da kannst Du unter Options/Environment Options/Execute Keys eine Taste zum Compilieren und eine zum Starten des Executables definieren.
so bin schon recht weit, hat lange gedauert path zu setzten und herauszubekommen, das man zum finden der bibliotheken diesen parameter für bcc32.exe braucht:
-I[…]\include\

ich krieg nun beim compilieren einer einfachen .c datei solchen output:

—————————
> Führe aus: D:\Programme\ConTEXT\ConExec.exe "D:\Programme\ccompiler\Bin\bcc32.exe" -Id:\programme\ccompiler\include\ "001.c"

Borland C++ 5.5.1 for Win32 Copyright © 1993, 2000 Borland
001.c:
Turbo Incremental Link 5.00 Copyright © 1997, 2000 Borland
Fatal: Unable to open file 'C0X32.OBJ'
> Führe aus
———————

meine fragen:
ist der linker wichtig, warum kriegt er kein file hin, kann/ muss man ihn ausschalten, wenn ja wie,

und schliesslich: was kommt dann in die einstellungen für den ausführknopf (welche exe aufrufen, welche parametern…)

ich werd mal weiter rumprobieren/ die help-datei durchforsten… [img]http://www.sternenvolk.de/symb/21.gif[/img]

Re: T3 - Aufgabenblatt 1 2002-11-02 14:49
Fred
Zuerst mal ne Beschwerde - ist bei Euch das Fenster auch zu Breit? Muss immer nach rechts und links scrollen zum lesen… [img]http://www.sternenvolk.de/symb/20.gif[/img]

Gibt es eigentlich ein Makro (heisst das so?), dass man mit "#ifdef" abfragen kann um zu testen, mit welcher Endianness der Computer arbeitet, auf dem man das Programm compiliert? if/else im Code selbst funktioniert zwar, aber so landet ja Code im Compilat, der niemals ausgeführt wird.
was meinst mit dem letzten satz?
Wenn man ne 1 speichert und dann schaut, ob die oben oder unten ist, hast Du ja in etwa folgenden Code:
union { unsigned long l; unsigned char c[ 4 ]; } u; l = 1; if (c[ 0 ] = 1) { // hier kommt jetzt intel-code } else { // hier kommt sparc code } Beide Codeblöcke werden compiliert und landen im fertigen Programm, obwohl nur einer davon jemals ausgeführt werden wird. Wenn es ein entsprechendes Makro gibt, kann man schreiben:
#ifdef LITTLE_ENDIAN // hier kommt jetzt intel-code #else // hier kommt sparc code #endif So wird bereits vor dem eigentlichen Compilieren der überflüssige Code rausgefiltet. Im eigentlichen Programm ist dann nur noch der notwendige Code drin und kein if/else! Es gibt viele vordefinierte Makros, mit denen Du z.B. testen kannst, auf welchem Betriebssystem Du gerade kompilierst. Natürlich kann man sich so ein Makro auch selbst definieren (per #define LITTLE_ENDIAN am Anfang des Programms), aber dann muss man das eben von Hand umschreiben, wenn man es auf ner Sparc kompiliert.

if/else im Code selbst funktioniert zwar, aber so landet ja Code im Compilat, der niemals ausgeführt wird.
Nicht wenn du nen vernünftig optimierenden Compiler hast, der sowas erkennt
Echt, so schlau sind die Compiler heutzutage? Dann ist das Thema ja gegessen.




Re: T3 - Aufgabenblatt 1 2002-11-02 14:58
Slater
Zuerst mal ne Beschwerde - ist bei Euch das Fenster auch zu Breit? Muss immer nach rechts und links scrollen zum lesen… [img]http://www.sternenvolk.de/symb/20.gif[/img]

ich nehm mal an das würde verschwinden, wenn Faleiro
in seinen die zeilenlänge auf 80 zeichen
beschränkt (@Björn kannst ja auch mal nachhelfen)

…code im compiler…

hmm ist das echt ein problem?, was ist das für ein programm,
bei dem immer jede zeile mindestens einmal durchlaufen wird?,
is doch eher selten,
wenn du ConTEXT startest wirst du wohl nie alle menüs in einer
sitzung mal benutzen ;)


@Fred hast mein vorheriges post gesehen?




Re: T3 - Aufgabenblatt 1 2002-11-02 15:16
Tzwoenn
Tja, ich bin mit drei PuTTY-Instanzen mit rzdspc3 verbunden, eine fuer den Quelltext (im Editor "joe"), eine zum Kompilieren, eine fuer die man-page, welche aber nicht wirklich einfach zu verstehen ist…

joe?!? Allen die über ne SSHell arbeiten kann ich nur den Midnight Commander empfehlen. Ist an den Norton Commander angelehnt und beherrscht vor allem Codehighlighting. Dazu muss man ihn aber mit "mc -c" starten, da er an der UNI - warum auch immer - standardmäßig auf monochrom konfiguriert ist.

Re: T3 - Aufgabenblatt 1 2002-11-02 15:22
Fred
so bin schon recht weit, hat lange gedauert path zu setzten und herauszubekommen, das man zum finden der bibliotheken diesen parameter für bcc32.exe braucht:
Du brauchst im BIN Verzeichnis zwei Dateien, ilink32.cfg und bcc32.cfg. Die sehen folgendermassen aus:

ilink32.cfg
———–
-L"c:\Borland\Bcc55\lib"

bcc32.cfg
———
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"

Die langen Minuszeilen sollen natuerlich nicht in die Dateien rein ;-)

Dann kannst Du Dir den Parameter sparen und das Kompilieren sollte klappen. Wichtig ist wirklich, dass Du die Dateien ins BIN-Verzeichnis legst und nicht (wie in irgendner readme von borland steht) ins bcc55 Verzeichnis.
Und natuerlich muss in der Autoexec.bat oder wo auch immer der Pfad zum BIN-Path drin sein, aber ich hatte das so verstanden, dass Du das schon hinbekommen hattest. Oh und bei Context musst Du da wo Du die Tasten definierst bei "Start in" %p angeben und bei "Parameters" %f. Und Capture Console Output hast Du ja meine ich schon aktiviert.

und schliesslich: was kommt dann in die einstellungen für den ausführknopf (welche exe aufrufen, welche parametern…)
"Execute" %F.exe <— GROSSCHREIBUNG WICHTIG!!!
"Start in" %p

Parameter brauchste keine, es sei denn, Dein selbstgeschriebenes Programm erwartet welche. Context startet jetzt immer diejenige EXE, welche zu dem gerade geöffneten Quelltext passt.


Re: T3 - Aufgabenblatt 1 2002-11-02 15:32
Slater
coole sache, schon gehts, wieso verheimlichst du das alles ;),
wie soll ich denn darauf kommen, oder steht das auf
irgendeiner wichtigen datei, die ich bequemer weise nicht
gelesen habe?…, cfg.dateien erstellen…, ausführen ohne
dateiaufruf…, so gar nicht java-like [img]http://www.sternenvolk.de/symb/28.gif[/img]
[ach na gut, wird ja ne exe erstellt]



Re: T3 - Aufgabenblatt 1 2002-11-02 16:07
Zaphod
So… jetzt mal die harten Fakten:

#include <stdio.h> union { double d; unsigned char c[ 8]; } u; int main() { int vorzeichen; int charakteristik; u.d = 6.125; vorzeichen = ((u.c[ 0] & 0x80) >> 7) & 0x01; // Bit 63, also das erste Bit in c[ 0] charakteristik = ( ( u.c[ 0] & 0x7f) * 128 + u.c[ 1] ) >> 3; //Bit 62-52 //Ausgabe der "Bitdarstellung" printf("Bitdarstellung von %f ist %x\n", u.d, u.c); //Ausgabe des Vorzeichens printf("Vorzeichen = %d\n", vorzeichen); //Ausgabe der Charakteristik: printf("Charakteristik = %d\n", charakteristik); //Ausgabe der Mantisse (Bit 51-0): printf("Bruch als Bytefolge = %x %x %x %x %x %x %x\n", u.c[ 1] & 0x0f, u.c[ 2], u.c[ 3], u.c[ 4], u.c[ 5], u.c[ 6], u.c[ 7]); return 0; }
Dooferweise will die Ausgabe nicht das anzeigen, was ich da gerne hätte, also falls da jemand weiter weiß.. schreibt!!!

Bitdarstellung von 6.125000 ist 20928 <–FALSCH!!
Vorzeichen = 0
Charakteristik = 1027 <–hoffentlich das was auf dem Zettel stand..(?)
Bruch als Bytefolge = 8 80 0 0 0 0 0

Grr.. von wegen 12 Bilder verwendet.. das waren nur die Indizes des Arrays.



Re: T3 - Aufgabenblatt 1 2002-11-02 16:24
Popcorn
Bitdarstellung von 6.125000 ist 20928 <–FALSCH!!
Vorzeichen = 0
Charakteristik = 1027 <–hoffentlich das was auf dem Zettel stand..(?)
Bruch als Bytefolge = 8 80 0 0 0 0 0
Hmm. Also die Charakteristik soll 1025 sein und bei mir (also schon auf der SPARC) zeigt er bei der Bitdarstellung nicht 20928, sonder 20a00 an. Sehr amüsant alles.

Re: T3 - Aufgabenblatt 1 2002-11-02 16:29
Zaphod
Meins läuft auch gerade auf der Sparc..
und wie ich sehe, soll da eigentlich 1025 rauskommen bei der Charakteristik… doof ist das

Re: T3 - Aufgabenblatt 1 2002-11-02 16:32
Slater
charakteristik = ( ( u.c[ 0] & 0x7f) * 128 + u.c[ 1] ) >> 3;
wieso denn 128 und >> 3,
da bleibt ja die erste 1 von der mantisse noch als niederste
stelle in deinem int, nimm doch 256 und >> 4



oder so ;), auf win läuft es, kannst mal auf sparc testen?

unsigned short c;
c = &#x28;&#x28;&#x28;u.ch[0 ]<<8) | u.ch[1 ]) << 1) >> 5;

edit
achtung: wie von Fred schon angekündigt klappt das leider
nicht mit negativen vorzeichen, bei zurückshiften kommt die
rausgeschoben 1 wieder, also nicht verwenden




Re: T3 - Aufgabenblatt 1 2002-11-02 16:39
Zaphod
patscht sich an die Stirn
yo… logisch.. also das mit der Charakteristik klappt wenn man die 256 und die 4 verwendet..
2^8.. naja.. Mathe war noch nie so mein Fach [img]http://www.sternenvolk.de/symb/15.gif[/img]

Re: T3 - Aufgabenblatt 1 2002-11-02 16:41
Zaphod
unsigned short c;
c = &#x28;&#x28;&#x28;u.ch[0 ]<<8) | u.ch[1 ]) << 1) >> 5;
hää?

Re: T3 - Aufgabenblatt 1 2002-11-02 16:47
Slater
unsigned short c;
c = &#x28;&#x28;&#x28;u.ch[0 ]<<8) | u.ch[1 ]) << 1) >> 5;
hää?

shiften benutzt du doch auch:
die ersten acht bit rein, 8 positionen nach links schieben,
die nächsten 8 rein, noch einmal nach links schieben, dann
ist die erste stelle raus (vorzeichen), und dann 5 mal nach
rechts, 1x wegen dem zusätzlichen linksschub, 4x wegen
mantisse wie bei dir ;)

edit
achtung: wie von Fred schon angekündigt klappt das leider
nicht mit negativen vorzeichen, bei zurückshiften kommt die
rausgeschoben 1 wieder, also nicht verwenden




Re: T3 - Aufgabenblatt 1 2002-11-02 16:49
Anonymer User
So sollte es richtig sein:
#include <stdio.h> void display(double number) { union { double d; unsigned char c[ 8 ]; long l[ 2 ]; } du; printf("\"Bitdarstellung\" von %.3lf ist 0x%08X%08X\n", du.d, du.l[ 0 ], du.l[ 1 ]); printf("\tVorzeichen = %d\n\tCharakteristik = %d\n\tBruch als Bytefolge = %X, %X, %X, %X, %X, %X, %X\n", du.c[ 0 ] & 0x80 ? 1 : 0, ((du.l[ 0 ] >> 20) & 0x7ff), du.c[ 1 ] & 0x0f, du.c[ 2 ], du.c[ 3 ], du.c[ 4 ], du.c[ 5 ], du.c[ 6 ], du.c[ 7 ]); } int main() { display(6.125); return 0; }
PS: Kann mir mal jemand sagen, wie man hier vernünftig code posten soll, wenn das board meint alles und jeden in irgendwelche depperten smilies verwandeln zu müssen???

Re: T3 - Aufgabenblatt 1 2002-11-02 16:51
Zaphod
So.. also meins klappt jetzt auch, wenn man in das union noch ein
long long ll;
einfügt, welches man dann hexadezimal ausgibt statt dem char-Array
[img]http://www.sternenvolk.de/symb/23.gif[/img]

Re: T3 - Aufgabenblatt 1 2002-11-02 17:12
Popcorn
Kann mir mal jemand sagen, wie man hier vernünftig code posten soll, wenn das board meint alles und jeden in irgendwelche
Also ich finde gerade noch bedenklicher, dass er beim "code" einfach den Text abbricht. Normalerweise wurde bei zu langen Zeilen einfach über den Bildschirmrand rausgeschrieben. Hmm. Schon blöd.

Re: T3 - Aufgabenblatt 1 2002-11-02 17:21
Slater
((du.l[ 0 ] >> 20) & 0x7ff),

kannst noch mal sagen wie da 1025 rauskommt?



Re: T3 - Aufgabenblatt 1 2002-11-02 17:29
Fred
vorzeichen = ((u.c[ 0] & 0x80) >> 7) & 0x01;
Das erste and ist ueberfluessig, weil Du die ausmaskierten Bits sofort nach rechts ins Nirvana schickst, und nach dem Shiften bleibt doch eh nur 1 Bit übrig, wozu dann das zweite and? Schreib einfach
vorzeichen = u.c[ 0 ] >> 7;
printf("Bitdarstellung von %f ist %x\n", u.d, u.c);
Du willst die 8 unsigned Chars ausgeben, statt dessen gibst Du aber die Adresse des Arrays aus. Benutze statt dessen:
printf("Bitdarstellung von %f ist 0x%02x%02x%02x%02x%02x%02x%02x%02x\n", u.d, u.c[ 0 ], u.c[ 1 ], u.c[ 2 ], u.c[ 3 ], u.c[ 4 ], u.c[ 5 ], u.c[ 6 ], u.c[ 7 ]); Zur Charakteristik: nimm lieber Bit-Operationen statt Multiplikation und Addition, ist "sauberer" und i.d.R. schneller.
noch einmal nach links schieben, dann ist die erste stelle raus (vorzeichen), […] bei zurückshiften kommt die rausgeschoben 1 wieder,
Nein! Das Vorzeichen ist nicht rausgeschoben worden, sondern befindet sich in Bit 17 nach dem Shiften nach Links um 1. Lediglich beim Shiften nach Rechts sind Bits wirklich "weg".
Kann mir mal jemand sagen, wie man hier vernünftig code posten soll, wenn das board meint alles und jeden in irgendwelche depperten smilies verwandeln zu müssen???
Das Problem hatten wir vor nem halben Jahr auch schon, als es zum ersten Mal mit Java losging… that sucks


Re: T3 - Aufgabenblatt 1 2002-11-02 17:34
Zaphod
vorzeichen = ((u.c[ 0] & 0x80) >> 7) & 0x01;
Das erste and ist ueberfluessig, weil Du die ausmaskierten Bits sofort nach rechts ins Nirvana schickst, und nach dem Shiften bleibt doch eh nur 1 Bit übrig, wozu dann das zweite and? Schreib einfach

vorzeichen = u.c[ 0 ] >> 7;
Klappt das denn? Ich kenne mich da nicht aus, aber kommt da nicht vielleicht von links was "aus dem Nirvana" herein? Daher wollte ich mit dem & 0x01 lieber sicher gehen. Ansonsten hast du recht.

Re: T3 - Aufgabenblatt 1 2002-11-02 17:39
MoKrates
Das Nirvana ist LEER. Da kommen nur Nullen wie Du her!

MoKrates

Re: T3 - Aufgabenblatt 1 2002-11-02 17:51
Slater
Nein! Das Vorzeichen ist nicht rausgeschoben worden, sondern befindet sich in Bit 17 nach dem Shiften nach Links um 1. Lediglich beim Shiften nach Rechts sind Bits wirklich "weg".
wieso kommt bei einer shortvariable nach einmal < und
dann einmal > das nach links geschobene bit wieder?,
wenn es gemerkt wird, wie viele werden gemerkt,
also wieviele bits sind noch extra da, und wozu?
und wie sieht das ganze bei long und int aus

fragen über fragen ;)

edit 2
allerdings ist das ja unsigned…,




Re: T3 - Aufgabenblatt 1 2002-11-02 18:01
Fred
((du.l[ 0 ] >> 20) & 0x7ff)
kannst noch mal sagen wie da 1025 rauskommt?
Auf SPARC Rechnern kommt 1025 raus, auf intel-Rechnern musst Du schreiben
((du.l[ 1 ] >> 20) & 0x7ff)
Ich kenne mich da nicht aus, aber kommt da nicht vielleicht von links was "aus dem Nirvana" herein?
Nein - wie sollte man auch sonst vernuenftig durch Zweierpotenzen Teilen können, wenn da munter zufällige Bits von links reinkommen?
Shiften nach Links erzeugt immer Nullen am rechten Rand. Shiften nach Rechts erzeugt bei unsigned Variablen ebenfalls immer Nullen. Bei signed Variablen wird das Sign-Bit in die freien Bits reinkopiert. Dazu lieber noch mal ein Beispiel bit zwei bitidentischen Zahlen, einmal unsigned und einmal signed interpretiert:
unsigned char 10011101 >> 3 = 00010011 157 / 8 = 19 signed char 10011101 >> 3 = 11110011 -98 / 8 = -12 Oder das Beispiel, als wir im Code noch "char" statt "unsigned char" stehen hatten: 10000000 wurde als -128 und nicht als 128 erkannt. Wenn man diese nun um 7 nach rechts schiebt (also durch 128 teil) ergibt das fuer den char 11111111 = -1 und für den unsigned char 00000001 = 1.
Ist dir die Funktionsweise des Zweierkomplements bei Ganzzahlen eigentlich klar? Also wie man negative Zahlen darstellt? x sei eine natürliche Zahl und Du möchtest -x darstellen. Dann ist -x diejenige Bitdarstellung, auf die man x dazuaddieren muss, damit 2 hoch n als Ergebnis rauskommt (mit n als Breite des Registers, z.B. 8 bei char). -x ist nichts anderes als die bitweise Umkehrung von x (das alleine nennt man Einerkomplement) mit anschliessendem Addieren von 1 (so wirds zum Zweierkomplement).



Re: T3 - Aufgabenblatt 1 2002-11-02 18:05
MoKrates
Ich schaetz mal, das ist C:

((du.l[ 0 ] >> 20) & 0x7ff)
(aus dem letzen komplett-code unten)

hier kommen ja von links die bits aus dem zweiten array-feld,
nein!
ist das nur so bei arrays so und kann man bei einfachen
variablen auf nullen hoffen?
Es kommen immer Nullen, auch in Array-Members.
Man unterscheidet niemals zwischen einer einfachen Variable und einem Array-Member. Das widerspraeche der Semantik.

und wieso kommt bei einer shortvariable nach einmal < und
dann einmal > das nach links geschobene bit wieder, wenn es
gemerkt wird, wie viele werden gemerkt, und wie sieht das
ganze bei long und int aus
Die kommen nicht wieder, und werden auch nicht gemerkt. Nie.

fragen über fragen ;)
beantwortet?

MoKrates

Re: T3 - Aufgabenblatt 1 2002-11-02 18:06
Slater
@Mokrates
jo hatte ich auch schon gelöscht ;)


Re: T3 - Aufgabenblatt 1 2002-11-02 18:41
Fred
wenn es gemerkt wird, wie viele werden gemerkt, also wieviele bits sind noch extra da, und wozu und wie sieht das ganze bei long und int aus
Zwischenergebnisse werden immer in 32 Bit berechnet (jedenfalls soweit ich das beurteilen kann), also als long bzw. int (die unterscheiden sich auf intel-Rechnern nicht). Das heisst, wenn Du es so ausdrücken willst, dass bei Shiftoperationen nach links auf char Variablen 24 Bits "gemerkt" werden, solange Du das Zwischenergebnis nicht wieder in einem char speicherst. Dazu wieder ein Beispiel:
unsigned char x = 0xa0; unsigned char y = (x<<2)>>2; // hier geht nix verloren unsigned char z = (x<<8); // hier gehen alle Bits verloren z = z>>8; // also ist z jetzt null Wenn wir uns den Kram in intel Assembler angucken schaut's so aus. Das Semikolon läutet Kommentare von mir ein, ausserdem sind die dazugehörigen C-Zeilen immer dazukommentiert:
; ; { ; unsigned char x = 0xa0; ; @13: mov al,-96 ; 160+96 = 256... na, klingelt's? :-) ; ; unsigned char y = (x<<2)>>2; ; ?live16387@32: ; EAX = x xor edx,edx ; edx = 0 mov dl,al ; die untersten 8 Bit aus eax holen shl edx,2 ; die 32 Bit nach links shiften ; dadurch gehen 2 uninteressante Bits verloren sar edx,2 ; sar = shift arithmetic right -> vorzeichenlos mov byte ptr [ebp-1],dl ; Zwischenergebnis in 8 Bit speichern ; ; unsigned char z = (x<<8); ; mov ebx,eax ; x laden shl ebx,8 ; in 32 Bit nach links shiften ; ; z = z>>8; hier soll Zwischenergebnis gespeichert werden... ; ?live16387@64: ; EBX = z xor eax,eax ; ...also müssen die oberen Bits auf null mov al,bl ; indem man alle löscht und 8 Bits holt sar eax,8 ; dann noch nach rechts shiften mov ebx,eax ; und speichern Der Code ist schon ziemlich gut optimiert, in der Zeile z = z>>8 hätte ich eigentlich erwartet, dass tatsächlich z im Speicher gesichert wird… Respekt Borland [img]http://www.sternenvolk.de/symb/18.gif[/img]


Re: T3 - Aufgabenblatt 1 2002-11-02 18:45
MoKrates
Ach deshalb hatte ich diese Probleme beim Zitieren ,)

MoKrates

Re: T3 - Aufgabenblatt 1 2002-11-02 18:57
Zaphod
Also Fred… echt Respekt! Was du in T alles weißt..

Also Mo… echt Respekt! Was du in T alles besser weißt [img]http://www.sternenvolk.de/symb/25.gif[/img]
(nimm's mir nicht übel, du hast ja recht [img]http://www.sternenvolk.de/symb/25.gif[/img])

Re: T3 - Aufgabenblatt 1 2002-11-02 18:59
MoKrates
Ich nehm Dir nix uebel! Auch ich muss eine Nemesis haben [img]http://images.rapidforum.com/images/i14.gif[/img][img]http://images.rapidforum.com/images/i14.gif[/img][img]http://images.rapidforum.com/images/i14.gif[/img]
Saftsack! [img]http://www.sternenvolk.de/symb/24.gif[/img]

MoKrates

Re: T3 - Aufgabenblatt 1 2002-11-02 20:21
Fred
Das Nirvana ist LEER. Da kommen nur Nullen wie Du her!
MoKrates
Wieso musst Du die Leute immer gleich so anfahren? Dieses Forum dient dem gepflegten und fröhlichen Wissensaustausch und sollte nicht dazu missbraucht werden, Mitstudenten wegen mangelnder Kenntnis zu beschimpfen. Wenn jede Frage so eine Reaktion hervorruft traut sich ja bald niemand mehr eine Frage zu stellen…?
Sei froh, dass ich hier nicht der Moderator bin [img]http://www.sternenvolk.de/symb/7.gif[/img]

NP: Death - In Human Form



Re: T3 - Aufgabenblatt 1 2002-11-02 20:32
MoKrates
Ich fahr nicht "Die Leute" an, sondern nur Zaphod. Und das, weil wir uns gut kennen. Der versteht das.
Trotzdem danke fuer den Hinweis.

MoKrates

Re: T3 - Aufgabenblatt 1 2002-11-02 20:39
Fred
Ich fahr nicht "Die Leute" an, sondern nur Zaphod. Und das, weil wir uns gut kennen. Der versteht das.
Trotzdem danke fuer den Hinweis.
MoKrates
Okay, wie schon im ICQ gesagt alles klar, wusste ich nicht, es sei Dir verziehen [img]http://www.sternenvolk.de/symb/10.gif[/img][img]http://www.sternenvolk.de/symb/7.gif[/img][img]http://www.sternenvolk.de/symb/10.gif[/img]


Re: T3 - Aufgabenblatt 1 2002-11-03 01:40
Tzwoenn
*die Speicherriegel aus seinem Mainboard reiß, hüpfenderweise drauf rumtrampel und laut fluch*

edit: *festgestellt hat, dass nicht seiner, sondern der Speicher auf dem Sparc via SSH so blöd ist*

Re: T3 - Aufgabenblatt 1 2002-11-03 01:50
Tzwoenn
; ; { ; unsigned char x = 0xa0; ; @13: mov al,-96 ; 160+96 = 256... na, klingelt's? :-) ; ; unsigned char y = (x<<2)>>2; ; [...] (sich den Rest mit Rücksicht auf die werte Leserschaft schenk, Anm. d. Autors)

Nur ein Wort: Respekt, Fred.

PS: Was hast du diesmal getrunken? [img]http://www.sternenvolk.de/symb/15.gif[/img]


Re: T3 - Aufgabenblatt 1 2002-11-03 13:25
Fred
PS: Was hast du diesmal getrunken? [img]http://www.sternenvolk.de/symb/15.gif[/img]
Ich habe bloss am Freitag mit Buttkus ein "bischen" Sangria getrunken… aber gekotzt habe ICH nicht [img]http://www.sternenvolk.de/symb/7.gif[/img]


Re: T3 - Aufgabenblatt 1 2002-11-03 19:05
Tzwoenn
War nen klasse Vortrag heute… dafür, dass ich die ganze Zeit kurz vorm Einpennen war, hab ich ertaunlich viel mitbekommen.

Re: T3 - Aufgabenblatt 1 2002-11-03 21:50
Fred
War nen klasse Vortrag heute…
Danke fuer die Blumen! Jetzt muss ich nur noch regelmaessig Hingehen und krieg meinen Schein. Geiles Gefuehl [img]http://www.sternenvolk.de/symb/6.gif[/img]
dafür, dass ich die ganze Zeit kurz vorm Einpennen war, hab ich ertaunlich viel mitbekommen.
Regelmaessiges Proseminar-Einschlafsyndrom oder einfach zu wenig gepennt wegen etwas zu intensiver Party-Angelegenheiten am Wochenende?

NP: Spiral Architect - Excessit


Re: T3 - Aufgabenblatt 1 2002-11-03 23:55
Labskaus
Er wird natürlich behaupten letzteres, aber wir wissen ja alle, daß Referate im Prinzip stets langweilig sind und keinen interessieren ausser den Vortragenden und den Gruppenleiter (oder in der Schule den Lehrer) :-)
Aber war mein Vortrag nicht supertoll? Egal, hauptsache alles schon hinter sich [img]http://www.sternenvolk.de/symb/28.gif[/img]

Re: T3 - Aufgabenblatt 1 2002-11-04 01:03
Tzwoenn
Regelmaessiges Proseminar-Einschlafsyndrom oder einfach zu wenig gepennt wegen etwas zu intensiver Party-Angelegenheiten am Wochenende?

Wenn ich Donnerstag Nacht, respektive eher Freitag 6 Uhr morgens mit nem Movinghead in der Hand von ner 6m Leiter gekippt wär, hätte es mich nicht weiter verwundert… das Wochenende selber war auch nicht so erholsam… naja, wozu gibs die Uni, wenn nicht zum schlafen. Ich guck grad noch mal, ob die Bilder schon online sind. Danach ab ins Bett. Nacht

Re: T3 - Aufgabenblatt 1 2002-11-04 13:44
Fred
das Wochenende selber war auch nicht so erholsam… naja, wozu gibs die Uni, wenn nicht zum schlafen.
Du machst irgendwas falsch
Gehst Du denn zu den Vorlesungen und pennst da auch ein, oder bleibst Du lieber zu Hause (so wie ich gerade)? [img]http://www.sternenvolk.de/symb/7.gif[/img]


Re: T3 - Aufgabenblatt 1 2002-11-05 00:54
Tzwoenn
das Wochenende selber war auch nicht so erholsam… naja, wozu gibs die Uni, wenn nicht zum schlafen.
Du machst irgendwas falsch
Gehst Du denn zu den Vorlesungen und pennst da auch ein, oder bleibst Du lieber zu Hause (so wie ich gerade)? [img]http://www.sternenvolk.de/symb/7.gif[/img]

Ich besuch nahezu alle Vorlesungen. Nur wenn ich arbeiten muss, setz ich mich mal früher von der Uni ab. In diesem Sinne gelte ich wohl als mustergültiger Student… *gg* Dass ich mal nen paar VLs verpenne, steht auf nem anderen Blatt.