Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2018, 21:38   #1
Вопрос
 
Регистрация: 15.04.2018
Сообщений: 9
По умолчанию Не хватает ума разобраться с PML4

Всем привет, вытащил из книги Руслана Аблязова такой вот код:
Код:
; переменные
     PML4_addr equ 1FC000h
     PDPE_addr equ 1FD000h
     PDE_addr  equ 1FE000h

; заносим в память PML4
     mov dword [PDE_addr], 010000011b ; PS or Present or Write
     mov dword [PDE_addr+4], 0
     mov dword [PDPE_addr], PDE_addr or 3 ; Present or Write
     mov dword [PDPE_addr+4], 0
     mov dword [PML4_addr], PDPE_addr or 3 ; Present or Write
     mov dword [PML4_addr+4], 0
Код рабочий, но вот не могу понять как он работает, сразу поясню, я новичок, потому прошу не пинать за незнание ассемблера

Вот, например фрагмент кода:
Код:
    mov dword [PDPE_addr], PDE_addr or 3 ; Present or Write
    mov dword [PDPE_addr+4], 0
Я этот код понимаю так, заносим в память из переменной "PDPE_addr" адрес из переменной "PDE_addr", предварительно установив в бите №2 - 1, затем записывается в память по адресу "PDPE_addr+4" - 32 ноля.

Но ведь если в адресе, в третьем бите, ранее был ноль, то выйдет, что адрес станет не верным, да и формат таблицы получается странным сначала идут 32 бита адреса, затем 32 бита с нолями, так же не понятна ситуация с различными "служебными" битами, которые должны быть перед физическими адресами.

Прошу объяснить, где и что я не правильно понимаю
Вопрос вне форума Ответить с цитированием
Старый 15.04.2018, 21:51   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,694
По умолчанию

А теперь включаем мозг(!!!) и перечитываем то, что сами написали. То в переменную по адресу заносим, то вдруг адрес изменяем...
p51x на форуме Ответить с цитированием
Старый 15.04.2018, 22:04   #3
Вопрос
 
Регистрация: 15.04.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А теперь включаем мозг(!!!) и перечитываем то, что сами написали. То в переменную по адресу заносим, то вдруг адрес изменяем...
Вот зачем комментировать, если ты даже не понял о чём речь?

Последний раз редактировалось Вопрос; 15.04.2018 в 22:06. Причина: исправил повреждённый тег
Вопрос вне форума Ответить с цитированием
Старый 16.04.2018, 05:53   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Вопрос Посмотреть сообщение
Но ведь если в адресе, в третьем бите, ранее был ноль,
то выйдет, что адрес станет не верным,
5595.png

Вопрос, ..адреса в этих таблицах 32/64 битные, т.е. имеется выравнивание на 32-битную границу. Если первый адрес нуль, то следующий будет 20h,40h,60h,80h и т.д.. Если перевести их в бин, то 5-мл.бит всегда будут равны нулю, и ЦП об этом знает - при вычислении адреса он просто игнорирует их.
Код:
20h = 001.00000
40h = 010.00000
60h = 011.00000
80h = 100.00000
          +---+---> биты выравнивания адреса
В этих/бесхозных битах кодируются различные атрибуты, вот их список...

5596.png

В примере идёт [OR 3], значит взводится бит(3) PWT - Page_Write_Through, что означает сквозная запись, в противоположноcnm отложеной Write_Back.

5594.png
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 16.04.2018, 09:22   #5
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
значит взводится бит(3) PWT - Page_Write_Through,
..вернее наоборот - взводятся биты 0 и 1 (3=11b),
и если посмотреть на таблицу - это биты Present и RW, указаны в комменте кода
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 16.04.2018, 17:10   #6
Вопрос
 
Регистрация: 15.04.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
..вернее наоборот - взводятся биты 0 и 1 (3=11b),
и если посмотреть на таблицу - это биты Present и RW, указаны в комменте кода
Спасибо, именно то, что мне нужно было, особенно, таблицы понравились
Вопрос вне форума Ответить с цитированием
Старый 16.04.2018, 17:32   #7
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

таблицы из манов интела vol.3
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться с задачей на ассемблере (GAS Linux) (первая программа, схожу с ума?) Пиф Помощь студентам 0 05.03.2013 16:29
не хватает пинов sklit Компьютерное железо 2 13.02.2012 21:35
Доведение до ума БД Kabelschik Фриланс 7 22.01.2012 00:14
не хватает памяти Dimarik Общие вопросы C/C++ 5 17.09.2009 00:16
Не хватает практики на C++ Rembo Свободное общение 11 04.08.2008 18:36