Pokaż wyniki 1 do 6 z 6

Temat: General Protection Fautl

  1. #1

    Domyślnie General Protection Fautl

    dlaczego jak chce wpsiac cso wprost do pamieci pod adres 0b800h
    to dostaje General Protection Fault prosze o pomoc !

  2. #2

    Domyślnie

    A co chcesz wpisać?

    General Protection Fault - błąd ten pojawia się kiedy program próbuje uzyskać dostęp do obszaru pamięci, do którego nie ma dostępu. Jeśli zdarzyła by się sytuacja, że program zarządzający zasobami pamięci pozwoli na zapis danych do obszaru pamięci, który nie jest przeznaczony dla tej aplikacji, system wymusi zamknięcie aplikacji lub menedżera pamięci. Błąd ten może wystąpić tylko, gdy procesor (z serii x86) pracuje w trybie chronionym czyli umożliwia adresowanie pamięci w większym zakresie niż 1MB.

    Segment pamięci ekranu w standardowym trybie tekstowym ma adres 0b800h (kolorowe karty graficzne) lub 0b000h (mono). Napisze Ci prosty przykład:

    Kod:
    mov  ax,0b800h
    mov  es,ax
    mov  di,0
    mov  byte ptr es:[di],'M'
    Program ten wyświetla literę "M' na "początku" ekranu. Litera "M" opisywana jest przez dwa bajty. W pierwszym podaje się numer ascii znaku, a w drugim - jego atrybuty (np. kolor).
    Ostatnio edytowane przez MateO : 07-16-2007 - 12:35

  3. #3
    Zarejestrowany
    May 2007
    Postów
    406

    Domyślnie

    jakiego kompilatora uzywasz ?

  4. #4

    Domyślnie

    DJGPP + NASM
    zapis do wskaznika w C
    Kod:
    static char *video=( char *) 0xb8000;
    i w asmie
    Kod:
    mov  ax,0b800h
    mov  es,ax
    mov  di,0
    mov  byte [es:di],'x'
    tez nie dziala

  5. #5
    Zarejestrowany
    May 2007
    Postów
    406

    Domyślnie

    no bo DJGPP dziala w trybie chronionym, w chronionym do pamieci odwoluje sie poprzez selektory.. poszukaj na google

    w C w DJGPP pojdzie np tak:
    Kod:
    #include <sys/farptr.h>
    #include <go32.h>
    
    _farpokeb( _dos_ds,0b8000, 'X');
    a mieszanie z nasmem na przyklad tak:
    Kod:
    // C
    unsigned short myds;
    myds = _dos_ds;
    
    ; asm
    extern _myds
    jakas_funkcja:
    mov fs,[_myds]
    mov ebx,0b8000
    mov byte [fs:ebx],'X'
    
    ret

  6. #6

    Domyślnie

    wszystko dziala, dzieki mozna zamknac

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj