Переход в long mode. PAE.

Тема в разделе "WASM.X64", создана пользователем exst, 11 янв 2009.

  1. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    exst
    Не знаю такого, можно ссылочку. Я знаю еще про PSE-36 режим, где на адрес приходится 36 бит. Он недоступен в 64 битном режиме. Состоит из PDE и Page Offset. Страницы размером в 4 мегабайта. Всего в PDE 1024 элемента. Позволяет адресоваться в 64 гигабайта виртуального адресного пространства.
     
  2. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    AMDшная документация): http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf

    Я читал про PSE36 режим. Там вроде сразу все 64 ГБ недоступны. Там какой-то свой хитрый механизм.
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    exst
    Угу , не посмотрел у AMD. У интела не нашел такого. Амд извратились, как обычно :)
    Мой AMD Turion 64 X2 Mobile не поддерживает такое.
     
  4. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Я полагаю, что поддержка включена в новую Барселону. Ни Athlon X2 4400, ни Intel E8500 не держат) Проверял)

    Оффтоп: Если по хорошему... Весь Х86 - это такая помойка... Совместимость со старьем до добра не доведет...
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    exst
    Поправлюсь.
    Во первых Поддерживают эти процы AMD K10 family. А следовательно это Phenom II, Phenom X4, Phenom X3 ну и конечно же Operton (он уж точно поддерживает.
    Плюс по ссылке http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6587615
    видно что солярка уже в курсе дела.
    Да и еще, удалось узнать сведения:
    IA64 (Itanium) поддерживает 4gb страницы :) Так что интел не в проигравших , в какой-то мере)
     
  6. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    вот мои наработки по части перехода в 64 битный режим. просто переходим в long mode и выводим сообщение, без прерываний и установки TSS. FASM
    Код (Text):
    1. format MZ
    2.  
    3. entry  ALL_CODE:start
    4.  
    5.  
    6.      STACK_BASE_ADDRESS      equ 08000h
    7.      PM_CODE_BASE_ADDRESS   equ 010000h
    8.      PM_CODE_SIZE equ PM_CODE_END - PM_CODE_BASE_ADDRESS
    9.  
    10.      ;LM_CODE_BASE_ADDRESS   equ 100000h
    11.      ;LM_CODE_SIZE equ LM_CODE_END - LM_CODE_BASE_ADDRESS
    12.  
    13.      CODE_SELEKTOR  equ 8h
    14.      DATA_SELEKTOR  equ 10h
    15.      CODE64_SELEKTOR equ 18h
    16.  
    17.      PML4_addr equ 100000h
    18.      PDPE_addr equ 101000h
    19.      PDE_addr  equ 102000h
    20.  
    21. heap 0
    22.  
    23. segment ALL_CODE use16
    24.  
    25. start:
    26.      mov AX,3
    27.      int 10h
    28.  
    29.      in  AL,92h
    30.      or  AL,2
    31.      out 92h,AL
    32.  
    33.      xor EAX,EAX
    34.      mov AX,ALL_CODE
    35.      shl EAX,4
    36.      add EAX, PROTECTED_MODE_ENTRY_POINT
    37.      mov [CS:ENTRY_OFF],EAX
    38.  
    39.      xor EAX,EAX
    40.      mov AX,ALL_CODE
    41.      shl EAX,4
    42.      add EAX, GDT
    43.  
    44.      mov dword [CS:GDTR+2],EAX
    45.      lgdtfword [CS:GDTR]
    46.  
    47.      cli
    48.      in  AL,70h
    49.      or  AL,80h
    50.      out 70h,AL
    51.  
    52.      mov EAX,CR0
    53.      or  AL,1
    54.      mov CR0,EAX
    55.  
    56.      db  66h
    57.      db  0EAh
    58. ENTRY_OFF dd PROTECTED_MODE_ENTRY_POINT
    59.      dw  CODE_SELEKTOR
    60.  
    61. align 8
    62. GDT:
    63.     NULL_descr  db      8 dup(0)
    64.     CODE32_descr    db      0FFh,0FFh,00h,00h,00h,10011010b,11001111b,00h
    65.     DATA_descr  db      0FFh,0FFh,00h,00h,00h,10010010b,11001111b,00h
    66.     CODE64_descr    db      00h, 00h,00h,00h, 00h,10011000b,00100000b,00h
    67.     GDT_size    equ     $-GDT
    68.  
    69. label GDTR fword
    70.         dw      GDT_size-1     
    71.         dd      ?
    72.  
    73. use32
    74. PROTECTED_MODE_ENTRY_POINT:
    75.     mov ax, DATA_SELEKTOR
    76.     mov ds, ax
    77.     mov es, ax
    78.     mov ss, ax
    79.     mov esp, STACK_BASE_ADDRESS
    80.  
    81.     call delta
    82.    delta:
    83.     pop ebx
    84.     add ebx, PM_CODE_START-delta
    85.  
    86.     mov esi, ebx
    87.     mov edi, PM_CODE_BASE_ADDRESS
    88.     mov ecx, PM_CODE_SIZE
    89.     rep movsb
    90.  
    91.  
    92.     mov eax,PM_CODE_BASE_ADDRESS
    93.     jmp eax
    94.  
    95.  
    96. PM_CODE_START:
    97. ORG PM_CODE_BASE_ADDRESS
    98.  
    99.     mov esi, message1
    100.     mov edi, 0B8000h
    101.     mov ecx, mess1end-message1
    102.     rep movsb
    103.  
    104.     mov eax, cr4
    105.     bts eax, 5   ; PAE = 1
    106.     mov cr4, eax
    107.  
    108.     mov dword [PDE_addr], 010000011b    ; PS or Present or Write
    109.     mov dword [PDE_addr+4], 0
    110.     mov dword [PDPE_addr], PDE_addr or 3    ; Present or Write
    111.     mov dword [PDPE_addr+4], 0
    112.     mov dword [PML4_addr], PDPE_addr or 3   ; Present or Write
    113.     mov dword [PML4_addr+4], 0
    114.  
    115.     mov eax, PML4_addr
    116.     mov cr3, eax
    117.  
    118.     mov ecx, 0xC0000080 ; EFER
    119.     rdmsr
    120.     bts eax,8  ; EFER.LME = 1
    121.     wrmsr
    122.  
    123.     mov eax, cr0
    124.     bts eax, 31 ; PG = 1
    125.     mov cr0, eax
    126.  
    127.     jmp CODE64_SELEKTOR:LM_CODE_START
    128. use64
    129. LM_CODE_START:
    130.     mov rsi, message2
    131.     mov rdi, 0B80A0h
    132.     mov rcx, mess2end-message2
    133.     rep movsb
    134.     jmp $
    135.  
    136. message1 db "W5e5 5i5n5 5p5r5o5t5e5c5t5e5d5 5m5o5d5e5!5"
    137. mess1end:
    138.  
    139. message2 db "W5e5 5i5n5 5l5o5n5g5 5m5o5d5e5!5"
    140. mess2end:
    141.  
    142. PM_CODE_END:
    конечно, довольно таки черезжопный подход, но тем не менее
     
  7. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    насчёт VirtualBox 2.1.2 и PAE опасения подтвердились. Программа, которая работала на Bochs и на реальном процессоре не работает на VirtualBox (страница 0xB8000 я мэпил на 4 разных виртуальных адреса, один адрес был 48 битный).
    В общем, не рекомендую.
     
  8. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    в х64 команда push gs ложит в стек 32 или 64 бита.
    просто у intel написано по умолчанию 32 битный операнд