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.exewww.fixedsys.com/contextam 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