Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по поводу защищённого режима.  (Прочитано 7054 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Venena
Гость
« : 11-04-2004 10:01 » 

Здравствуйте.
Очень буду признательна, если кто-нибудь  мне поможет:)
 Дело в том, что мне требуется в защищённом режиме заполнить две строки GDT, каким-нибудь текстом.
Одна строка должна быть в ES, а другая в GS.
А где нужно это указывать???
(Извинияюсь, если как-нибудь непонятно формулирую вопрос, это потому что я ещё сама до конца понять не могу, чего же от меня надо преподавателю).
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 12-04-2004 07:03 » 

Venena, совершенно верно - непонятно...
GDT - Global Descriptor Table - хранит описатели сегментов памяти и прочее. "заполнить две строки GDT, каким-нибудь текстом" - это неправильно.

Мне кажется, был бы более логичным, такой вариант понимания вопроса: в ES и GS были загружены дескрипторы сегментов данных, хранимых в GDT, и в эти сегменты надо записать по одной строке.

Да бы нам не гадать, попробуй еще раз сформулировать вопрос.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Venena
Гость
« Ответ #2 : 12-04-2004 19:17 » 

Искренне удивляюсь вашему пониманию:))
Но, кажется, вы, RXL, правильно изложили мой вопрос...
(мне даже неудобно как-то..)
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 13-04-2004 10:11 » 

Venena, лучше на "ты" Улыбаюсь Мы тут все на "ты"

Код:

.code
test{
    mov es,номер_одного_дескриптора
    mov gs,номер_другого_дескриптора
; копирование первой строки
    mov esi,offset test_string1
    mov edi,0 ; смещение в целевом дескрипторе
    mov ecx,test_string1_size
    movsb
; копирование второй строки
    mov esi,offset test_string2
    mov edi,0 ; смещение в целевом дескрипторе
    mov ecx,test_string2_size
    mov ax,es ; из-за того, что команда movs не может менять целевой сегмент,
    push eax  ; то мы сохраняем значение ES и копируем в него GS
    mov ax,gs
    mov es,ax
    movsb
    pop eax
    mov es,ax
    ret
.data
test_string1  db "test1\0"
test_string1_size equ $-test_string1
test_string2  db "test2\0"
test_string2_size equ $-test_string2

Что понял - то написал.
Насчет выражения "$" я не уверен - может не сработать - давно уже не приходилось для x86 на ассемблере писать. Смысл "$" : текущий адрес компиляции.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Venena
Гость
« Ответ #4 : 13-04-2004 22:10 » 

Спасибо за помощь:)))
Теперь у меня хотя бы появилась возможность  обдумать, что же мне дальше делать со своей задачей ....
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines