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.


Themen - Hauke

Seiten: [1] 2
1
Lowlevel-Coding / Booloader mit GRUB
« am: 06. September 2012, 12:22 »
Hallo

Ich wollte endlich mal GRUB, anstelle meins minimalistischen Bootloaders verwenden.

Ich weiß nicht, ob GRUB legacy richtig installiert ist.
Grub wird schon einmal gestartet und die befehle danach auch, nur /boot/grub/section1  oder /boot/grub/section2 gibt es nicht, was das Hauptproblem ist.
Hier (http://wiki.ubuntuusers.de/GRUB) steht auch , dass ab Ubuntu 9.10 die hier beschriebene GRUB legacy nicht mehr benutz wird.  (Ubuntu 12 habe ich installiert)
Ich kenne mich mit GRUB nur oberflächig aus.

Hier einmal installierte Pakete, die mit dem Suchbegriff „grub“ in verbinden stehen.
PaketInstallierte Versionneuste VersionBeschreibung
grub0.97-29ubuntu66   0.97-29ubuntu66    GRand Unified Bootloader (alte Variante)
grub-common1.99-21 ubuntu3.1   1.99-21 ubuntu3.1   GRand Unified Bootloader (common files)
grub-legacy-doc0.97-29ubuntu66   0.97-29ubuntu66   Dokumentation für GRUB (alte Version)
grub-pc-bin1.99-21 ubuntu3.1   1.99-21 ubuntu3.1   GRand Unified Bootloader, version 2 (PC/BIOS binaries)

Zur Sicherheit schicke hier noch mal die Konsolenausgabe und kurzes Shell skript nach http://www.lowlevel.eu/wiki/GRUB#Linux

0+0 Datensätze ein
0+0 Datensätze aus
0 Bytes (0 B) kopiert, 2,1922e-05 s, 0,0 kB/s
mkdosfs 3.0.12 (29 Oct 2011)
cp: Aufruf von stat für »/boot/grub/stage*“ nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für »kernel“ nicht möglich: Datei oder Verzeichnis nicht gefunden

#!/bin/sh
clear
nasm -f elf -o kernel_asm.o kernel.asm
gcc -m32 -ffreestanding -o kernel_c.o -c kernel.c -Wall -Werror -nostdinc
ld -T link.ld -o kernel.bin kernel_asm.o kernel_c.o

dd of=floppy.img bs=1024 seek=1440 count=0
mkdosfs floppy.img

sudo mount -oloop floppy.img /mnt
sudo mkdir /mnt/grub
sudo cp /boot/grub/stage* /mnt/grub
sudo cp kernel /mnt
sudo umount /mnt

Und die Ausgabe von GRUB
grub> device (fd0) floppy.img

grub> root (fd0)

grub> setup (fd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... no

Error 15: File not found

Im Netz und im Forum habe ich dazu nichts nützliches finden können.
2
Lowlevel-Coding / Paging und Speichermanagment
« am: 30. April 2010, 14:39 »
Hallo

Ich hab ein paar Fragen zum Paging und Speichermanagment.

Ich hab hier erst einmal Aufgeschrieben, wie ich mir mein Speichermanagement vorstelle.

Jeder Task bekommt eine eigene PageDirektory. (Natürlich auch PageTabellen)  Eine PageDirektory und PageTabellen für das OS um auf gesamten Speicher zugreifen zu können. Eifachhalber mape ich das hier Linear (Virtuelle Adresse ist dann gleich = Physischer, VA == PA) bei jeder Speicherzuweisung (vom erstellen von Tasks oder ähnlichem), wird in die OS PD eingetragen(mit gemappt). (weis nicht, ob das, dass Beste ist, jedoch währes was anderes komplizierter, denke ich).

Ein Problem habe ich da auch noch, für Interups brauch ich ja ein Stack (für andere OS Dinge wohl auch), bei der PD  mit dem linear gemappten. Ich denke das ich das so gelöst habe, das ich an den Untersten Einträgen (höchsten Adressen) der PD den Stack einrichte, der aber nicht (linear gemapt ist, bekommt Speicherseiten zugewiesen. (Aber das OS brauch ja nicht so viel Platz für den Stack).

Jetzt zum wichtigen Teil meiner Frage:
Mein Software Multitasking muss ich noch umschreiben, damit es auch fürs Paging geht.
Ich hab ein bisschen im Forum gelesen, das beim neu Laden vom CR3 (PD) Register, die Adressierung sich nicht sofort ändert (wegen dem Cache). Wie bekomme ich das hin, dass das CR3 Register geladen wird und nach dem iret Befehl an der Richtigen Speicherstelle Ausgeführt wird?
Ich muss ja für den nächsten Task seine PD laden (CR3 Register).
Das weis ich nicht, wie da genau gehen soll.  :?
3
Lowlevel-Coding / new Operator
« am: 09. February 2010, 12:07 »
Hallo

Ich wollte mal fragen, wie man den new Operator (und delete wohl auch) implementieren kann (K* = new K(...)), der Linker (ld) hat mir schon gesagt, dass die funktion _Znwm implementiert werden muss. (also dass er die Funktion _Znwm nicht gefunden hat).
Das funktioniert ja denke ich mal ähnlich wie bei den Statischen Construktor.

extern void(*_CTOR_LIST__)();
void(**constructor)() = &_CTOR_LIST__;
int total = *(int*)constructor;
constructor++;
while(total != 0)
{
(*constructor)();
total--;
constructor++;
}

Aber, wie ich das genau machen muss, weis ich nicht.
4
Lowlevel-Coding / c / c++ Debuggen
« am: 01. September 2009, 19:32 »
Ich suche eine möglichkeit besser zu debuggen sprich inerhalb von c / c++ Funktionen wie z. B. bei beim gdb mit exen möglich ist.
Ich hab gelesen, das dass in verbindung mit Qemu möglich ist, jedoch kenne ich mich mit Qemu nicht so richtig aus (ich benutze eigentlich bochs). Mit Qemumanger unter Windows ist das einfache starten ja nicht schwer nur wie der lokalen Server einrichtet wird weis ich nicht, nur dass ich irgendwie den –s Paramter hinneinbekommen muss.
Ein Konsolenbefehl, in dem ich –s hineingefügt habe sieht so aus, nur weis ich nicht wie ich merke, dass das funktioniert hat.
"D:\Programme\QemuManager\qemu\qemu.exe" -L "D:\Programme\QemuManager\qemu" -M "pc" -m 32 -cpu "qemu32" -vga cirrus -serial vc -parallel vc -name "h_os" -drivefile="D:\Programme\Bochs-2.3.7\h_os\h_os.img",index=0,if=floppy -boot a -soundhw es1370 -net nic,vlan=0,model=rtl8139 -net user,vlan=0  -vnc :1 -k de -usbdevice tablet -localtime
5
Lowlevel-Coding / Ringwechsel und VM86
« am: 17. March 2009, 14:48 »
Ich wollte den VM86 einbauen welcher ja  von einem Task (Prozess) mit der Privilegstufe 3 bewirkt werden muss, der dann VM86 startet (iret), denn der erste Versuch mit VM86 denn ich mittels Software Interrupt ausgelöst habe hat beim Befehl int 10h (im VM86) einen Absturz verursacht.  Meine Add Funktion für Tasks hab ich so abgeändert, dass nun auch die Privilegstufe mit einbezogen werden.  Doch jetzt wird ein Exceptions 13 ausgelöst.  Wenn ich jedoch Privilegstufe auf 0 setze geht alles
void f3(){while(1);}
Tasks.add(0x0 ,0xffffffff,(unsigned int) &t_f1,0,(unsigned int) f1,0, true);
Tasks.add(0x0 ,0xffffffff,(unsigned int) &t_f3,0,(unsigned int) f3,3, true);

unsigned short CTask::add(unsigned int base, unsigned int size, unsigned int tss_base ,                   unsigned int page_base, unsigned int start,unsigned char privileg , bool update)  //paging noch nicht enthalten
/// Code Segement
i = GDT->add(base,size,0x9A | ((privileg & 3) << 5),G); //G==3
p_tss->CS = (i << 3) | (privileg & 3);
/// Data Segement
i = GDT->add(base,size,0x92 | ((privileg & 3) << 5),G);
i = (i << 3) | (privileg & 3);
p_tss->DS = i;
p_tss->ES = i;
p_tss->FS = (privileg & 3);
p_tss->GS = (privileg & 3);
p_tss->EIP = start;
p_tss->EFLAGS = 0x90200;
p_tss->CR3 = page_base;
//noch schlecht
p_tss->ESP = 0x300000 + task_Eintraege * 0x10000;
p_tss->SS = i;//0x10;

Ist beim Rinwechsel noch etwas wichtiges zu beachten? :?
6
Lowlevel-Coding / Struktur an einer bestimmten Stelle kompilieren
« am: 08. November 2008, 11:18 »
Ich möchte gerne folgendes mit C/C++ Erreichen, und zwar will ich, dass eine Struktur  direkt vor einer Funktion kompiliert wird.
7
Lowlevel-Coding / Problem mit Zeiger auf Funktionen.
« am: 25. October 2008, 17:48 »
Ich habe folgende Struktur gemacht:
struct key_func
{
    int (*(Key_down)(unsigned char scan1, unsigned char scan2, unsigned char shift));
    int (*(Key_press)(unsigned char Ascii));
    int (*(Key_up)(unsigned char scan1, unsigned char scan2, unsigned char shift));
    unsigned char Activ;
}Key_Functionen;
Mit einer Add Funktion will ich jetzt der Struktur Funktionen zuweisen:
void Add(int Type, void Func())
{
    switch (Type)
    {
        case 1:   //Key_down
            Key_Functionen.Key_down = &Func;
            break;
        case 2:   //Key_press
            Key_Functionen.Key_press = &Func;
            break;
        case 3:   //Key_up
            Key_Functionen.Key_up = &Func;
            break;
    }
}
Hier weis ich nicht genau wie das geht.
8
Lowlevel-Coding / Problem mit IDT unter C/C++
« am: 20. October 2008, 16:41 »
Ich will mit C/C++ die IDT Laden. Im Boot Loader hab ich noch die Hardware Interrups umgeleitet:

irq:
mov al, 00010001b ;Das ICW in AL schreiben
out 0x20, al ;ICW an PIC1 senden
out 0xA0, al ;ICW an PIC2 senden

mov al, 0x20 ;AL auf 32 setzen
out 0x21, al ;ICW2 an ersten PIC senden
mov al, 0x28 ;AL auf 40 setzen
out 0xA1, al ;ICW2 an zweiten PIC senden

mov al, 00000100b ;Die IRQ2 Leitung auf 1 setzen
out 0x21, al ;An den Master-PIC senden
mov al, 2 ;Hier nun die NUMMER der IRQ-Leitung angeben
out 0xA1, al ;An den Slave-PIC senden

mov al, 00000001b ;Die Bits wie oben beschrieben setzen
out 0x21, al ;ICW4 an Master-PIC senden
out 0xA1, al ;ICW4 an Slave-PIC senden
retn
Und im C Kernel hab ich dazu folgenden Code:

struct idt_daten{
    unsigned short limit;
    unsigned int base;
  }  __attribute__((packed));

struct idt_entry
{
unsigned short offset_low;
unsigned short selector;
unsigned char zero;
unsigned char access;
unsigned short offset_high;
} __attribute__((packed));

struct idt_entry IDT[256];

void setup_IDT()
{
unsigned char i;
make_IDT(i,(unsigned int) int0,8,0x8E);
make_IDT(i,(unsigned int) int1,8,0x8E);



make_IDT(i,(unsigned int) int50,8,0x8E);

for(i = 51; i < 256; i++)
{
make_IDT(i,(unsigned int) int00,8,0x8E);
}
}


void make_IDT(unsigned char n, unsigned int iBase, unsigned short shSelector, unsigned char cAccess)
{
IDT[n].offset_low = ((iBase) && 0xffff);
IDT[n].selector =shSelector;
IDT[n].zero =0;
IDT[n].access = cAccess;
IDT[n].offset_high = ((iBase >> 16) & 0xffff);
}

void LoadIDT()
{
  struct idt_daten idt_ptr;
  idt_ptr.limit  = 256*8 - 1;
  idt_ptr.base  = (unsigned int)IDT;

  //IDT laden
  asm("lidt %0" : : "m" (idt_ptr));
}
Und eine Funktion im asm Teil.
_int50:
mov esi, 0xb8030
mov byte [esi], 'T'
mov byte [esi+1], 10
iret


Und der Aufruf in der Main Funktion:
setup_IDT();
LoadIDT();
asm("int $50");
Jedoch sehe ich kein Ergebnis auf den Bildschirm.
Woran kann das liegen?
9
Lowlevel-Coding / Problem beim Linken vom C++ Kernel
« am: 07. October 2008, 13:04 »
Ich wollte ein C++ Kernel zum laufen bringen, doch mit dieser Fehlermeldung kann ich nicht richtig deuten, weil ich mich mit dem Linken nicht so auskenne.

Die Fehlermeldung:
ld -T Link.ld -o Kernel.bin
Video.o:Video.cpp:(.text+0x294): undefined reference to `__ZN6CVideo6memcpyEPvPKvj'
Video.o:Video.cpp:(.text+0x2ce): undefined reference to `__ZN6CVideo6memsetEPvij'
Video.o:Video.cpp:(.text+0x309): undefined reference to `__ZN6CVideo6memsetEPvij'
Die Datei Link.ld:
/*Link.ld*/
OUTPUT_FORMAT("binary")
INPUT (kernel32.obj Kernel.o Video.o)
ENTRY(start)
SECTIONS
{
.text 0x10200 :
{
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
.data :
{
__CTOR_LIST__ = .; LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
*(.ctors) LONG(0) __CTOR_END__ = .;
__DTOR_LIST__ = .; LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
*(.dtors) LONG(0) __DTOR_END__ = .;
data = .; _data = .; __data = .;
*(.data)
. = ALIGN(4096);
}

.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}

end = .; _end = .; __end = .;
}
Die anderen Dateien sind die aus dem c++ Kernel Tutorial.
10
OS-Design / Was gibt es alles im LongMode nicht mehr?
« am: 05. October 2008, 15:05 »
Ich weis, dass es Hardware Multitasking nicht mehr gibt, auch den Virtual 8086 Mode soll es nicht mehr geben, können jetzt BIOS Funktionen noch irgendwie benutzt werden?
Und welche Sachen gibt es außerdem nicht mehr?
11
Lowlevel-Coding / Merkwürdiger c Fehler
« am: 04. October 2008, 14:02 »
Ich wollte den c Kernel weiter versuchen, das laden und linken funktioniert auch, aber er zeigt zwar etwas an, aber anderer Zeichen, mit einer anderen Länge.  Wenn ich jetzt statt der Schleife  n mal den Inhalt der Schleife stehen habe funktioniert es. Somit kann dass ja irgend wie kein Falscher Zeiger sein, sondern das weis ich ja nicht. Ich hoffe jemand hat eine Idee woran das liegen könnte.
So erstelle ich das (nur ein Teile)
gcc -ffreestanding -c -Os -Wall -o ckernel.obj kernel.c

Hier ist der Code:
int main()
{
int i=0;
char *Text = "Das ist ein Test"; 
char *Video = (char*)0xB8000; 

while(*Text) 

*Video++ = *Text;
*Video++ = 7;
Text++;
i++;
}
return i; //nur zur Überprüfung
}
12
Lowlevel-Coding / Frage zu assembler und c
« am: 03. February 2007, 15:59 »
Ich hab ein paar Frage in Bezug auf c (gcc) und assembler.
Unterstützt der gcc auch 16Bit Code? Ich hab nämlich Labels und Makros, die ich für 16Bit und 32Bit brauche also mit *.obj und extern und global. :?
Andre Frage was ist „return a;“ in assembler Code (ret)? :?
Und wo gibt man c bei einem Funktionsaufruf  die Parameter mit? :?
13
Lowlevel-Coding / C Kernel Main Funktion funktioniert nicht.
« am: 18. January 2007, 12:57 »
 Ich hab schon die Datein so programmiert, wie im Tutorial „C Kernel starten“, jedoch wird der Text nicht ausgegeben, aufrufen und zurückspringen tut er wohl, und in der Main Funktion ist er scheinbar auch. Nur auf den Bildschierm schreibt er nur ein

int main()
{
    char *Text = "Welcome to Protected Mode";
    char *VideoMem = (char*)0xB8000;
    while(*Text)
    {
        *VideoMem = *Text;
        *VideoMem++;
        *VideoMem = 7;
        *VideoMem++;
        *Text++;
    }
    return(0);
}

Und muss „*VideoMem++;“ nicht „VideoMem++;“ sein (wie die beiden anderen auch), die Adresse muss doch Höher werden und nicht der Wert an der Adresse, so würde das vielleicht eine Sinn machen, aber wenn ich es umändere ist das gleiche wie vorher. Ich weis nicht wo der Fehler ist. :?
14
Lowlevel-Coding / Frage zum Multitasking
« am: 05. January 2007, 16:33 »
Ich hab Multitasking im mein OS eingebaut. Taskwechsel macht er auch, aber nur einmalt und zwar, weil keine Hardware Interrups mehr aufgerufen werden. Ich frag mich nämlich wie der Taskwechsel funktionieren soll, denn der Timer Interrup lauft nicht bis zum ende durch so kann ja auch nicht sti und die Daten vom Stack geholt werden, ich weis nicht, wie das zu lösen ist und noch eine andere Frage was muss im TSS für das EFlag stehen, da muss ja auch das IF (Interrup Enable Flag) gesetzt sein.
 :?
15
Lowlevel-Coding / VESA Super VGA benutzen
« am: 17. June 2006, 14:48 »
Ich will die VESA Funktionen benutzen. Soweit hab ich auch kein Problem, aber wenn ich z. B. den Ganzen Bildschirm mit einer Farbe füllen will werden die unteren Punkte nicht angezeigt.
So sieht erst einmal der Test Code aus:
mov ax, 4f02h
mov bx, 103h
int 10h

;...
;In den PMode wird geschaltet
;...

mov esi, 0xA0000
mov ecx, 800*600
k:
mov byte [esi], 7
inc esi
loop k

h:
jmp h

Worin liegt der Fehler, dass die Letzten Punkte nicht gezeichnet werden? :?:
16
Lowlevel-Coding / Befehle des Linkers Ld.exe
« am: 21. May 2006, 17:38 »
Ich hab versucht ein C-Kernel zu schreiben mit Unterstützung verschiedener Tutorials, aber es funktioniert nicht, das heiß: nur der Teil der in C ist. Wenn der CALL aufruf zu ende ist und zurück gesprungen wird werden noch ASM Befehle ausgeführt. Dies funktioniert aber nur unter Bochs so beim echtem PC stürzt der Computer beim Aufruf der Main Funktion ab. Meiner Ansicht nach liegt der Fehler darin, dass die Dateien vom Linker falsch gelinkt werden, aber ich kenne mich nicht mit den Syntax des Linkers (ld.exe von Djgpp) aus. Wo kann ich genauere Beschreibungen zum Linker bekommen (alle Befehle & etc.) am besten direkte Links. Hab zwar schon etwas gefunden aber keine richtige Beschreibung.
Hier noch mal die Verlinkung die als Parameter mit dem Linker gestartet wird: (ld -T link.txt -o c32kernel.bin)
OUTPUT_FORMAT("binary")
INPUT(kernel32.obj ckernel.obj)
ENTRY(start)
SECTIONS
{
  .text  0x200 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}
17
Lowlevel-Coding / Problem mit Linken
« am: 04. April 2006, 12:56 »
Ich hab mir das Tutorial "C-Kernel" durchgelesen und nach einigen Problemen beim Linken im Forum gefunden, dass die kernel.c falsch sein soll und umgeändert.
void main()
{
   int i;
   char Text[] = "Welcome to Protected Mode";
   char *VideoMem = (char*)0xA8000;

   for(i = 0; Text[i] != 0; i++)
   {
      VideoMem[i] = Text[i];
      VideoMem[++i] = 7;
   }
}

Aber ich bekomme immer noch eine Fehlermeldung
CKernel.obj:kernel.c:(.text+0x2c): undefined reference to `_memcpy'
Aber ich weis nicht genau was der Linker damit meint.
Hier noch mal meine link.txt:
OUTPUT_FORMAT("binary")
INPUT(kernel32.obj ckernel.obj)
ENTRY(start)
SECTIONS
{
  .text  0x200 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}
18
Lowlevel-Coding / Was kann in der LDT eingetragen werden.
« am: 10. February 2006, 21:28 »
Was für Systemsegemente und normale Segemente können in der LDT eingetragen werden? :?:
19
Lowlevel-Coding / Problem mit Far Jump beim Multi Tasking
« am: 22. December 2005, 18:01 »
Ich habe Multi Tasking versucht zum Lauf zu bringen. Klappte nicht, daraufhin habe ich es nur mit dem Far Jump ausprobiert und Exception 13. Meine TSS und deren Deskriptor mehrfach nach  Fehlern durchsucht, aber irgendein Fehler muss drinnen sein, doch ich find ihn nicht.

Hier sind der Deskriptor zur TSS und TSS. Das System ist bei Adresse 0x10000
CodDesk. 1 von 0 – 4GB und DatDesk. 2 von 0 – 4GB
Desk. 6 und 7 sind Code und Daten Desks.


tss1ds: ;5
dw 0x68
dw tss1
db 1,10001001b
dw 0

tss1:
dd 0
dd 0x2FFFFF
dw 10000b,0
dd 0x3FFFFF
dw 10000b,0
dd 0x4FFFFF
dw 10000b,0
dd 0
dd 0  ;g+0x10000 ;EIP
dd 0x90200
times 4 dd 0
dd 0x5fffff
times 3 dd 0;10000b
dw 56,0
dw 48,0
dw 16,0
times 3 dw 56,0
dw 0,0
dd 0
dd 0


Wo ist der Fehler?
 :?:
20
Lowlevel-Coding / Taskwechsel
« am: 09. November 2005, 22:10 »
Ich versuch ja Multitasking in mein OS einzubauen.
Jedoch habe ich es immer noch nicht hin bekommen. Bei den Tabellen bin ich mir eigentlich sicher das sie richtig sind. Somit müsste der Fehler im Taskwechsel also im Timer Interrupt liegen. Und hier ist dann der Code:

IRQ_32:
pushad
push ds
cli
mov al, 0x20 ;EOI-Wert in AL ablegen
out 0x20, al ;EOI an Master-PIC senden

mov ax, 2
shl ax, 3
mov ds, ax
mov al, [status+0x10000]
and al, 1 ;Multitasking ?
jz nicht_mt
;task wechsel anfang
push eax
push esi
add dword [tasking_current+0x10000], 6 ;wert des aktuellen Tasks überspringen
mov esi, [tasking_end+0x10000] ;task-Tabelle-Ende laden
cmp esi, [tasking_current+0x10000] ;mit Position des zu ladenden Tasks vergleichen
jne scheduler_no_resetting ;falls nicht gleich, also das Ende noch nicht erreicht ist springen
mov dword [tasking_current+0x10000], tss_tabele +0x10000 ;Wie am Anfang
scheduler_no_resetting:
; hier haben wir in "Tasking_current" die Adresse der Daten des zu ladenen Tasks
mov esi, [tasking_current+0x10000]
add esi, 0x10002 ;auf richtige Adresse

push es
mov ax, 2
shl ax, 3
mov es, ax

lodsw
pop es
pop esi

push edi
mov edi,tss_switch_label
add edi, 5
add edi, 0x10000
push es
push ax
mov ax, 2
shl ax, 3
mov es, ax
pop ax
stosw
pop es
tss_switch_label:
jmp dword 0x1234:0x12345678
pop edi
pop eax
nicht_mt:
sti
pop ds
popad
iretd


(das erste Bit von „status“ benutze ich um Multitasking laufen zu lassen)
(Code beginnt ab 0x10000 Code- & Daten- desc. Von 0 – 4GB)

Worin liegt der Fehler oder ist doch alles richtig und es liegt vielleicht doch an einer Tabelle?:?:
Seiten: [1] 2

Einloggen