Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Descriptor $ Flag G

1.2K
08 сентября 2006 года
piroman17
175 / / 20.07.2006
Приведённый ниже код должен создавать дескриптор, флаг G (Гранулярность) каторого должен быть равен 1. Дескриптор создаёт а вот при дальнейшей работе становиться понятно что гранулярности там нету :mad: . Пожалуйста помогите! В чём моя ошибка!

Код:
set_descriptor_G  proc  near
; Создаёт дескриптор.
; DS:BX = дескриптор в GDT
; EAX = адрес сегмента
; EDX = предел сегмента
; CL = байт прав доступа (access_rights)

  push  eax
  push  ecx    ; Регистры EAX и ECX мы будем использовать.


  push  cx    ; Временно сохраняем значение access_rights.

  mov  cx,ax    ; Копируем младшую часть адреса в CX,
  shl  ecx,[COLOR="Green"]16[/COLOR]    ; и сдвигаем её в старшую часть ECX.

  mov  cx,dx    ; Копируем младшую часть предела в CX.
        ;  Теперь ECX содержит младшую часть
        ;  дескриптора (т.е. первые 4 байта -
        ;  см. рис. 4-1).
  mov  [ bx ],ecx  ; Записываем младшую половину дескриптора в GDT.
  shr  eax,[COLOR="Green"]16 [/COLOR]   ; EAX хранит адрес сегмента, младшую часть
        ;  которого мы уже использовали, теперь будем
        ;  работать со старшей, для чего сдвигаем её в
        ;  младшую часть EAX, т.е. в AX.
  mov ch,ah
  mov cl,[COLOR="green"]11000000b[/COLOR] G-Flag & use32
  shl ecx,[COLOR="green"]16[/COLOR]

  mov  cl,al    ; а биты адреса с 16 по 23 - в младший байт.
  pop  ax    ; Возвращаем из стека в AX значение
        ;  access_rights
  mov  ch,al    ; и помещаем его во второй (из четырёх)
        ;  байт ECX.
        ; Всё, дескриптор готов. Старшую часть
        ;  предела и биты GDXU мы не устанавливаем и
        ;  они будут иметь нулевые значения.
  mov  [ bx + [COLOR="green"]4[/COLOR] ],ecx  ; Дописываем в GDT вторую половину
          ;  дескриптора.
  add  bx,[COLOR="green"]8[/COLOR]    ; Переводим указатель в GDT на следующий
        ;  дескриптор.
  pop  ecx
  pop  eax

  ret

endp
1.2K
13 сентября 2006 года
piroman17
175 / / 20.07.2006
????????????
252
14 сентября 2006 года
koderAlex
1.4K / / 07.09.2005
ясно , что ничего не ясно . ) ты как потом гранулярность проверяешь ? Вместе с гранулярность ты use32 устанавливаешь - оно работает ?
1.2K
14 сентября 2006 года
piroman17
175 / / 20.07.2006
[QUOTE=koderAlex]ясно , что ничего не ясно . ) ты как потом гранулярность проверяешь ? Вместе с гранулярность ты use32 устанавливаешь - оно работает ?[/QUOTE]


Гранулярность я проверяю так:

 
Код:
mov ES,[COLOR="Green"]11000b[/COLOR]                     ;селектор ссылается на нужный дескриптор
mov ES:[[COLOR="green"]1FFFFh[/COLOR]],word ptr [COLOR="green"]01h[/COLOR] ;Запись туда
;Здесь возникает исключение


use32 - не знаю может это именно use32 не фурычит
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог