problem z IDT i GDT
| rafal1mi | 04.05.2007 12:00:38 | |
![]() | Witam mam taki kod [c] int main(void) { print("hello", 3); disable_irq(0); sti(); for(;;) ; } [/c] [c] static unsigned int cached_irq_mask = 0xffff; define __byte(x,y) (((unsigned char *)&(y))[x])define cached_21 (__byte(0,cached_irq_mask))define cached_A1 (__byte(1,cached_irq_mask))void disable_irq(unsigned int irq) { unsigned int mask = 1 << irq; cached_irq_mask |= mask; if (irq & 8) { outb(cached_A1,0xA1); } else { outb(cached_21,0x21); } } [/c] a sam start = [asm] [BITS 32] EXTERN _main [SECTION .text] GLOBAL _start _start: cli mov esp,kstack+4096 mov ax,0x10 mov ds,ax mov es,ax mov fs,ax mov gs,ax lgdt [gdt_descr] lidt [idt_descr] jmp .1 .1: push dword 0 push dword 0 push dword 0 push dword L6 EXTERN _main push dword _main L6: hlt [SECTION .bss] kstack: resd 1024 [SECTION .data] gdt_descr: dw 256*8-1 dd _gdt GLOBAL _gdt _gdt: dd 0,0 dd 0x0000FFFF,0x00CF9A00 dd 0x0000FFFF,0x00CF9200 dd 0,0 times 254 dd 0,0 idt_descr: dw 256*8-1 dd _idt GLOBAL _idt _idt: times 256 dd 0,0 [/asm] problem polega na tym ze mimo iz zablokowalem irq0 to maszyna sie resetuje, jak ustawialem przerwanie na cos to tak samo bylo. bledy z bochsa
Jak naprawic dziada ? | |
| Nevar | 05.07.2007 01:20:09 | |
![]() | 00003166057i[CPU0 ] WARNING: Encountered an unknown instruction (signalling illegal instruction) 00003166057e[CPU0 ] interrupt(): gate descriptor is not valid sys seg 00003166057e[CPU0 ] interrupt(): gate descriptor is not valid sys seg Błąd jest sygnalizowany w lini pierwszej. Prubowano wykonac instrukcje "nielegalnie". Może to oznaczać, że chodzi o instrukcje uprzywilejowaną którą chcesz wykonać z priv3 lub coś w tym stylu, ale nie jestem tego pewien. W każdym razie następnie jest pruba obsłużenia wyjątku, a następnie wyjątku od wyjątku :P i za trzecim razem to już jest reset. Reset wynika z tego iż nie masz prawdopodobnie ustawionych wyjątków. A błąd generuje to co opisałem wyżej. Najlepiej zapoznać się z możliwosciami debuggera w bochs, ale do tego trzeba znac assemblera. | |

