Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - [MM]

Seiten: [1] 2 3 ... 7
1
Lowlevel-Coding / 64Bit Debugger gesucht
« am: 16. October 2008, 21:13 »
Hallo,
ich suche derzeit nach einem guten, freien 64Bit Debugger, der sowohl 64Bit Befehle assemblen als auch disassemblen kann. Derzeit benutze ich den WinDbg von Microsoft. Der kann in der 64Bit-Version zwar 64Bit Befehle disassemblen, assemblen kann er allerdings nur 32Bit.

Hat da einer von euch eventuell einen Tipp für mich?
2
Lowlevel-Coding / Re: 64Bit Integer mit FPU oder 32Bit CPU
« am: 28. April 2008, 14:59 »
Hallo.

Zitat
Vielleicht trifft nicht alles für den Einsatzzweck, der dir im Sinn steht, zu, aber da der anscheinend geheim ist, kann ich nur raten.
Geheim ist er nicht, ich will nur 64-Bit Operationen mit 386er Befehlen durchführen, und wollte mal gucken, ob das nicht auch elegant mit der FPU geht. Aber um keine Fragen offen zu lassen: Das ganze benötige ich für einen neuen Compiler, den ich grad bastle.

Daher will ich meine 64-Bit auch nicht aus einem GPR laden, sondern immer aus dem Speicher, weswegen das kein Nachteil wäre.
Und die Manuals von Intel kenne ich bereits ;-)

Ich hab mal fix ein Beispielprogramm gebastelt, was leider beweist, dass es nicht funktioniert, wie ich mir das gewünscht hätte:
fnstcw [20]
mov byte ptr [21],0F ; Control Word auf Truncate und 64-Bit Precision setzen
fldcw [20]
fild qword ptr [0] ; Laden von 123456789ABCDEF1
fild qword ptr [8] ; Laden von 11
fmul st,st(1)
fistp qword ptr [10] ; Speichert 8000000000000000

Das Ergebnis der Multiplikation ist danach 8000000000000000, eine echte 64-Bit Multiplikation hätte natürlich 3579BE02468ACE01 geliefert.
So wie es aussieht hatte ich das Truncate/Chop-Flag falsch verstanden. Die Rundung erfolgt nicht bei der Berechnung, sondern erst beim zurück-Konvertieren in einen Integer...

Außerdem sind Shift und andere Bit-Operationen mit der FPU nicht möglich, so dass kein Weg daran vorbei führt 64-Bit Berechnungen mit 2 32-Bit Registern zu machen (auf einem 386).

PS: Es werden übrigens keine Bits verschwendet, da man keine 80Bit-Floats im Speicher ablegt (80 Bit ist nur die Registerbreite die intern in der FPU verwendet wird), sondern reine 64-Bit Integer, aber das sollte auch aus meinem Programm ersichtlich sein ;-).
3
Lowlevel-Coding / Re: 64Bit Integer mit FPU oder 32Bit CPU
« am: 27. April 2008, 12:28 »
Ich weiß, dass sie umgewandelt werden (habe ich auch in meiner Frage geschrieben), aber sie werden in einen interne 80-Bit Float umgewandelt, und dieser kann einen 64-Bit Integer ohne Verlust speichern, da Bits 0-63 die Mantisse sind, Bits 64-78 der Exponent und Bit 79 das Vorzeichen. Durch das setzen des RC (Rounding Control) Flags auf 2 (chop) schneidet die FPU die Ergebnissen, die über den darstellbaren Bereich hinausgehen würden, ab, so dass kein Exponent benötigt wird.
Es lässt sich so also eine Integer-Arithmetik abbilden!

PS: Und mit den Befehlen FILD (Load Integer) lässt sich ein 16, 32 oder 64-Bit Integer aus dem Speicher in die FPU laden und mit FISTP (Store Integer and Pop) lässt sich ein 16, 32 oder 64-Bit Integer in den Speicher zurück schreiben (und vom Registerstack popen).
4
Lowlevel-Coding / 64Bit Integer mit FPU oder 32Bit CPU
« am: 27. April 2008, 00:27 »
Hallo, ich möchte auf meiner 32Bit CPU gerne mit 64Bit Integers arbeiten (in Assembler). Daher bin ich am Überlegen, was besser geeignet ist:
Alle Rechenoperationen zweistufig mit 32Bit Registern durchzuführen oder die 64Bit Integer für die Berechnung in die FPU zu laden.
Die Integer werden zwar in die Floating-Point Register der FPU geladen, können dort aber ohne Genauigkeitsverluste für Berechnungen benutzt werden und lassen sich ohne Probleme danach wieder als Integer auslesen (ohne manuelle Konvertierung).

Hat da einer von euch schon mal Erfahrungen mit gesammelt und kann mir eventuell einen Tipp geben, was schneller geht?
5
Lowlevel-Coding / Re: Möglichkeiten des Textmodes??
« am: 21. December 2006, 19:32 »
Wenn interesse besteht kann ich mal ein kleines Beispielprogramm hochladen mit dem man den aktuellen Zeichensatz auslesen und als PCX oder gleich als C-Struct speichern kann. Ein Codebeispiel aus meinem OS zum setzen eines Zeichensatzes hätte ich auch noch...

PS: Hat sich zwar noch keiner gemeldet, aber ich hab trotzdem mal schnell die Sachen zusammengesucht (das Beispiel ist zwar nicht aus meinem OS, aber dafür läuft es auch unter DOS):

http://www.mmcoding.eu/projects.php#fontman
6
OS-Design / Re: Hauptspeicher defragmentieren
« am: 25. October 2006, 20:07 »
Mir ist auch klar, dass es mit Sprachen wie C/C++ eigentlich möglich sein sollte den Arbeitsspeicher zu defragmentieren, jedoch dann gibt es immer mal wieder Programme wie zB "Multi Platform RAM Defragmentation" die behaupten sie würden es doch können:
http://ramdefrag.sourceforge.net/#about
Leider sind ihre Informationen darüber WIE sie es machen eher vage...
Ich habe aber so den Verdacht, dass sie lediglich etwas im virtuellen Speicher aufräumen.
7
OS-Design / Re: Hauptspeicher defragmentieren
« am: 25. October 2006, 18:30 »
Genau das meine ich ja, wie soll das überhaupt funktionieren, dass man den Heap defragmentiert, wenn man einen mit C Kernel hat, wo man nicht weiß wer wie oft wohin zeigt?
8
OS-Design / Hauptspeicher defragmentieren
« am: 24. October 2006, 20:36 »
Hallo, ein bekanntes Problem bei Betriebssystemen ist ja die Fragmentierung des Hauptspeichers, wenn es lange genug läuft. Bei dem Speicher, der von den User-Prozessen belegt wird ist das ganze ja weniger schlimm, da dieser vom System ja oft nur als 4kB Pages betrachtet wird, aber was ist mit dem Heap des Kernels? Wenn das System mehrere Tage läuft und einige tausend malloc und free Operationen ausgeführt hat dürfte es schon recht schwierig werden einen größeren zusammenhängenden Block zu allocieren. Nun habe ich mal irgendwo gelesen, dass zB Linux die Möglichkeit hat den Speicher zu "defragmentieren". Ist so etwas eigentlich bei einem in C geschriebenen Kernel möglich, oder ist damit womöglich nur das Defragmentieren der Page-Tabelle gemeint?
9
Lowlevel-Coding / Groß- und Kleinschreibung bei 8.3 Dateien
« am: 16. September 2006, 22:36 »
Hallo, man kann ja auch bei Dateien die per 8.3 (also im DOS-Format) gespeichert wurden zB zwischen test.txt und TEST.TXT unterscheiden und zwar ganz ohne zusätzlich lange Dateinamen zu verwenden, wie es zB bei Test.txt von Nöten wäre. Ich hab da mal etwas rumgespielt und herrausgefunden, dass dabei das Byte 0xC in dem Directory-Eintrag eine Rolle spielt. In sämtlichen Dokumentationen sind jedoch die 10 Bytes nach dem Attributsbyte als Platzhalter markiert. Hat da Jemand genauere Informationen drüber?
Wie ich herausgefunden habe gibt es folgende Einstellungsmöglichkeiten:
Bei Files:
0x00 TEST.TXT
0x10 TEST.txt
0x08 test.TXT
0x18 test.txt

Bei Dirs:
0x08 dir
0x00 DIR
10
Lowlevel-Coding / Gap3 bei einer 720kb Floppy
« am: 01. September 2006, 11:59 »
Hm, 0x1B und 0x54 sind aber auch schon die Werte für eine 1.44 mb Diskette, aber wollen wir den Leuten von Intel mal glauben, danke.
11
Lowlevel-Coding / Gap3 bei einer 720kb Floppy
« am: 30. August 2006, 14:22 »
Hallo, kann mir einer sagen welche Länge ich für die GAP3 Bereiche bei einer 720kb Floppy-Disk einstellen muss (zum Formatieren und zum lesen/schreiben)? Alle anderen Werte sind klar: 2 Heads, 80 Tracks und 9 Sektoren/Track.
Danke schonmal im Voraus.
12
Lowlevel-Coding / Farbtabelle im Textmodus setzen
« am: 28. July 2006, 21:39 »
hm, nett, da steht auch wieso das so ist, danke.
13
Lowlevel-Coding / Farbtabelle im Textmodus setzen
« am: 28. July 2006, 20:46 »
Hallo, ich habe ein Problem beim Setzen der Farbtabelle im Textmodus. Ich benutze zum Setzen der Farbe den folgenden Code:
outb(0x3c8,farbnr);
outb(0x3c9,r);
outb(0x3c9,g);
outb(0x3c9,b);

Wenn ich nun zB in einer Schleife die Farben 0-15 (die 16 Fordergrundfarben) auf Graustufen (0-63 je r,g,b) setzen will, so funktioniert das für alle Farben wunderbar, außer für die Farbe mit dem Index 6. Die bleibt weiterhin braun.
Kann mir einer Sagen nach welchem Muster die Farben im Textmodus verteilt sind in der Farbtabelle?
14
Lowlevel-Coding / Zeichenbreite im Textmodus
« am: 28. July 2006, 12:51 »
@bitmaster: Die sind aber auch alle nur 8x?, wobei man das ? über das Einstellen der Scanlines frei zwischen 1 und 31 einstellen kann, wenn man keine Interrupts benutzt, sondern das per Ports macht.
15
Lowlevel-Coding / Zeichenbreite im Textmodus
« am: 28. July 2006, 02:13 »
Naja, ich bin eigentlich schon mehr interessiert am Textmodus und habe mich einfach gefragt, ob man nicht die Zeichenbreite von 8 Pixeln irgendwie auch ändern kann (hab ich aber auch noch nirgends gesehen).
16
OS-Design / Implementierung des Exception-Handlers
« am: 27. July 2006, 15:01 »
Naja, was man nun genau in dem Handler-Thread machen sollte weiß ich auch nicht, aber viel wichtiger finde ich, dass das System an einer solchen Stelle schonmal nicht mehr abstürzen kann.

Und was meinst du mit "einem Stack für alles"? Meinst du damit den Stack des Kernels? Wenn der voll ist, dann ist natürlich aus, aber zumindest hat man dann noch die Chance den Exception-Task eine freundliche Fehlermeldung ausgeben zu lassen  :wink:
17
OS-Design / Implementierung des Exception-Handlers
« am: 27. July 2006, 14:23 »
Hm, ärgerlich, was  :wink:
Zumindest das Problem mit der Exception 10 entsteht gar nicht erst, wenn man eh nur Software-Multitasking macht, aber das mit dem Stack ist schon irgendwie ärgerlich, wobei ich da noch mehr Probleme sehe: Angenommen man hat Teile des für den Stack vorgesehenen Speicher ausgelagert, und bei nem Push kommt es nun zum Page-Fault, dann kann ich auch keinen Handler per Interrupt-Gate aufrufen, da dies wieder einen Page-Fault verursachen würde...
Ich sehe da keine Alternative zu einem Task-Gate, du etwa?
18
OS-Design / Implementierung des Exception-Handlers
« am: 27. July 2006, 11:49 »
Naja, aber wie bahendeltst du dann einen solchen Fehler, wenn du dein Exception-Handling einfach nur per Interrupt-Gate machst?
19
OS-Design / Implementierung des Exception-Handlers
« am: 27. July 2006, 11:19 »
Aber wenn ich mich recht erinnere gibt es lediglich einen Doppel-Fehler, aber auch dieser könnte dann bei einem vollen Stack nicht bearbeitet werden, was einen richtigen Absturz zur Folge hätte oder übersehe ich da was?
20
OS-Design / Implementierung des Exception-Handlers
« am: 27. July 2006, 10:27 »
Das mag zwar sein, aber mir ist noch ein Problem bei dem Exception-Handling per Interrupt-Gate eingefallen: Was macht man beim Stack-Overflow? Der Stack ist bereits voll und dann versucht der Interrupt noch was drauf zu pushen, mit dem Task-Gate kein Problem, aber mit dem Interrupt-Gate?
Seiten: [1] 2 3 ... 7

Einloggen