Здраствуйте. Учусь по статьям wasm.ru и sasm.narod.ru... Всё было отлично, пока не начал разбираться с включение страничной организацией памяти. В своем примере использую код из sasm.narod.ru Код (Text): use 16 xor eax,eax mov edx,eax mov ax,ds shl eax,4 mov ebx,eax mov dx,EndCode add eax,edx mov dx,ax and ax,0f000h sub dx,ax cmp dx,0 je spdbr_1 add ah,10h spdbr_1: mov cr3,eax sub eax,ebx mov [Page_Directory],ax Код (Text): use 32 SetPaging: mov ax,ds mov es,ax mov di,[Page_Directory] xor eax,eax mov cx,1024 + 1024 cld push di rep stosd pop di mov eax,cr3 add eax,4096 mov al,3 stosd add di,4096 - 4 xor eax,eax mov al,3 mov cx,256 spag_1: stosd add eax,4096 loop spag_1 mov eax,cr0 bts eax,31 mov cr0,eax ret Page_Directory dw 0 Но ни**** не работает..... Помогите плиз кому не лень или скиньте рабочий исходник(желательно на Fasm). Ато уже запарился
Первый кусок кода я не особо понял, да и особо не вникал... Но как-то не всё, или мне кажется. Я делаю так (кажется проще): Код (Text): set_pages: .set_cat: mov edi,100000h;base address mov eax,101007h;base address of tab stosd mov cx,1023 xor eax,eax .fill_cat_nulls: stosd loop .fill_cat_nulls mov eax,00000007h mov ecx,1024*8 ;32Mb .fill_page_table: stosd add eax,1000h loop .fill_page_table ;End; mov eax,00100000h;1 Mb mov cr3,eax mov eax,cr0 or eax,80000000h mov cr0,eax ret
Вот код для установки идентичного отображения первых 4 мег физической памяти и рекурсивного отображения каталога. Код (Text): PF_PRESENT equ 1 PF_WRITABLE equ 2 PF_APL equ 4 PAGE_LOCAL equ (PF_PRESENT+PF_WRITABLE+PF_APL) ... ; df = 0, es = data sel call .GetPage ; page dir mov ebx,eax call .GetPage ; 1st page tab (it is temporary) mov edi,eax mov ecx,1024 mov eax,PAGE_LOCAL @@: stosd add eax,1000h loop @b lea eax,[edi-1000h+PAGE_LOCAL] mov edi,ebx stosd ; set 1st PDE mov ecx,1022 xor eax,eax rep stosd lea eax,[ebx+PAGE_LOCAL-PF_APL] stosd ; set last PDE mov cr3,ebx mov eax,cr0 or eax,80000000h mov cr0,eax ...
Igor1024 У мня не пашет.... Пришли плиз полный исходник если есть. Как написано этот кусок находит ближайший выравненный на границу 4кб адрес после кода загрузчика и сохраняет его физический адрес.