dlaczego jak chce wpsiac cso wprost do pamieci pod adres 0b800h
to dostaje General Protection Faultprosze o pomoc !
dlaczego jak chce wpsiac cso wprost do pamieci pod adres 0b800h
to dostaje General Protection Faultprosze o pomoc !
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:
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).Kod:mov ax,0b800h mov es,ax mov di,0 mov byte ptr es:[di],'M'
Ostatnio edytowane przez MateO : 07-16-2007 - 12:35
jakiego kompilatora uzywasz ?
DJGPP + NASM
zapis do wskaznika w C
i w asmieKod:static char *video=( char *) 0xb8000;
tez nie dzialaKod:mov ax,0b800h mov es,ax mov di,0 mov byte [es:di],'x'
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:
a mieszanie z nasmem na przyklad tak:Kod:#include <sys/farptr.h> #include <go32.h> _farpokeb( _dos_ds,0b8000, 'X');
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
wszystko dziala, dzieki mozna zamknac