Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема инициализации GDT 
:(
    Опции темы
Ant
Дата 30.10.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 3.9.2006

Репутация: нет
Всего: нет



Привет, народ! Есть код:

Код

org 7C00h

struc segment_descriptor limit_low, base_low, base_high0, type_and_permit, flags, base_high1
{
  .limit_low  dw ?
  .base_low   dw ?
  .base_high0 db ?
  .type_and_permit db ?
  .flags      db ?
  .base_high1 db ?
}

struc table_register  limit, base
{
  .limit      dw ?
  .base       dd ?
}

start:
    push    cs
    pop     ds

    call    open_A20
    call    disable_interrupts
    call    initialize_GDT
    call    set_pe

    mov     ax, 8                                           ;Вот эти строчки 
    mov     fs, ax                                          ;Вызывают перезагрузку процессора

  ;  mov     eax, 10000000
   ; mov     word [fs:eax], 1234h

  ;  mov     ax, 16
  ;  mov     ds, ax

  ;  xor     di, di
  ;  mov     si, message
  ;  mov     cx, message_l
  ;  rep     movsb
  ;  mov     ax, 0720h
  ;  mov     cx, rest_scr
  ;  rep     stosw

    q:
    jmp     q

ret

GDT:
    GDT0 segment_descriptor  <0,0,0,0,0,0>
    GDT_DATA  segment_descriptor <0ffffh, 0,0, 10010010b, 10001111b, 0>
    GDT_SCR segment_descriptor <4000, 0B800h, 0, 10010010b, 0, 0>
GDT_SIZE = $ - GDT

gdtr table_register  GDT_SIZE-1, 0

open_A20:
    in  al, 92h
    or  al, 2
    out 92h, al
    ret

initialize_GDT:
    call cs_to_eax
    add  eax, GDT0
    mov  [gdtr.base], eax
    lgdt [gdtr]
ret

disable_interrupts:
    cli
    in   al, 70h
    or   al, 80h
    out  70h, al
ret


set_pe:
    mov  eax, cr0
    or   al, 1
    mov  cr0, eax
ret

cs_to_eax:
    mov eax, 0
    mov ax, cs
    shl eax, 4
ret



message db 'H',1,'e',2,'l',3,'l',4,'o',5,',',6,' ',7,'w',8,'o',9,'r',10,'l',11,'d',12,'!',13
message_l = $ - message
rest_scr = (80*25) - (message_l / 2)

 


Я грешу на ошибки в GDT. Хотелось бы знать что не правильно?

Это сообщение отредактировал(а) Ant - 30.10.2007, 16:03
PM MAIL   Вверх
Ant
Дата 30.10.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 3.9.2006

Репутация: нет
Всего: нет



Все, сам разобрался.. Вся ошибка заключалась в корявом заполнении регистра GDTR
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0651 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.