Проблемы со страничной организацией памяти

Тема в разделе "WASM.OS.DEVEL", создана пользователем Toxasoft, 17 май 2011.

  1. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Здраствуйте.
    Учусь по статьям wasm.ru и sasm.narod.ru...
    Всё было отлично, пока не начал разбираться с включение страничной организацией памяти.

    В своем примере использую код из sasm.narod.ru
    Код (Text):
    1. use 16
    2.  
    3.         xor     eax,eax
    4.         mov     edx,eax
    5.         mov     ax,ds
    6.         shl     eax,4
    7.         mov     ebx,eax      
    8.                              
    9.         mov     dx,EndCode
    10.         add     eax,edx        
    11.  
    12.         mov     dx,ax
    13.         and     ax,0f000h      
    14.         sub     dx,ax
    15.         cmp     dx,0          
    16.                              
    17.         je      spdbr_1
    18.  
    19.         add     ah,10h      
    20.  
    21. spdbr_1:
    22.         mov     cr3,eax  
    23.  
    24.         sub     eax,ebx    
    25.                                
    26.         mov     [Page_Directory],ax
    Код (Text):
    1.        
    2. use 32
    3. SetPaging:
    4. mov     ax,ds
    5.         mov     es,ax
    6.         mov     di,[Page_Directory]
    7.  
    8.         xor     eax,eax
    9.         mov     cx,1024 + 1024
    10.         cld
    11.         push    di
    12.         rep     stosd      
    13.                              
    14.                                
    15.         pop     di
    16.  
    17.         mov     eax,cr3      
    18.         add     eax,4096  
    19.  
    20.  
    21.         mov     al,3      
    22.         stosd                
    23.  
    24.  
    25.         add     di,4096 - 4    
    26.  
    27.         xor     eax,eax      
    28.         mov     al,3      
    29.         mov     cx,256      
    30.                            
    31.  
    32. spag_1:
    33.         stosd
    34.         add     eax,4096
    35.         loop    spag_1
    36.  
    37.         mov     eax,cr0
    38.         bts     eax,31
    39.         mov     cr0,eax
    40. ret
    41. Page_Directory dw 0
    Но ни**** не работает..... Помогите плиз кому не лень или скиньте рабочий исходник(желательно на Fasm).
    Ато уже запарился
     
  2. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Первый кусок кода я не особо понял, да и особо не вникал... Но как-то не всё, или мне кажется.
    Я делаю так (кажется проще):
    Код (Text):
    1. set_pages:
    2.  
    3.  .set_cat:
    4.         mov edi,100000h;base address
    5.         mov eax,101007h;base address of tab
    6.         stosd
    7.  
    8.         mov cx,1023
    9.         xor eax,eax
    10.  
    11.  .fill_cat_nulls:
    12.         stosd
    13.         loop .fill_cat_nulls
    14.  
    15.  
    16.         mov eax,00000007h
    17.         mov ecx,1024*8  ;32Mb
    18.  
    19.  .fill_page_table:
    20.         stosd
    21.         add eax,1000h
    22.         loop .fill_page_table
    23.  
    24.  
    25.         ;End;
    26.         mov eax,00100000h;1 Mb
    27.         mov cr3,eax
    28.         mov eax,cr0
    29.         or eax,80000000h
    30.  
    31.         mov cr0,eax
    32.  
    33.         ret
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Вот код для установки идентичного отображения первых 4 мег физической памяти и рекурсивного отображения каталога.
    Код (Text):
    1. PF_PRESENT equ 1
    2. PF_WRITABLE equ 2
    3. PF_APL equ 4
    4.  
    5. PAGE_LOCAL equ (PF_PRESENT+PF_WRITABLE+PF_APL)
    6.  
    7.   ...
    8.  
    9. ; df = 0, es = data sel
    10.  
    11.   call .GetPage ; page dir
    12.   mov ebx,eax
    13.  
    14.   call .GetPage ; 1st page tab (it is temporary)
    15.   mov edi,eax
    16.   mov ecx,1024
    17.   mov eax,PAGE_LOCAL
    18. @@:
    19.   stosd
    20.   add eax,1000h
    21.   loop @b
    22.  
    23.   lea eax,[edi-1000h+PAGE_LOCAL]
    24.   mov edi,ebx
    25.   stosd ; set 1st PDE
    26.   mov ecx,1022
    27.   xor eax,eax
    28.   rep stosd
    29.   lea eax,[ebx+PAGE_LOCAL-PF_APL]
    30.   stosd ; set last PDE
    31.  
    32.   mov cr3,ebx
    33.   mov eax,cr0
    34.   or eax,80000000h
    35.   mov cr0,eax
    36.  
    37.   ...
     
  4. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Igor1024 У мня не пашет.... Пришли плиз полный исходник если есть.

    Как написано этот кусок находит ближайший выравненный на границу 4кб адрес после кода загрузчика и сохраняет его физический адрес.
     
  5. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Тема закрыта извините за неудобства..... Ошибку исправил, но так и не понял где она была))).