Re[5]: Программирование x86 в защищённом режиме
От: Andrew S Россия http://alchemy-lab.com
Дата: 14.11.05 10:55
Оценка:
SH>Мы оба (я и Stanky) — в курсе Вопрос в том, почему эту миссию возложили именно на контроллер клавиатуры. Я бы вообще специальный портик завёл
Ну, во времена 286 особо не покидаешься ресурсами. Очевидно, там был просто свободный гейт.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Программирование x86 в защищённом режиме
От: Pavel Dvorkin Россия  
Дата: 14.11.05 10:56
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Привет!


SH>Выношу на суд общественности плод ночей бессонных Написано введение и первые пять глав, захотелось получить какую-нибудь обратную связь.


Что я могу (как преподаватель) сказать...

Мне кажется, такое было более уместно в качестве курса лет 15 назад. Тогда, действительно. все, кому не лень (я в том числе) развлекались самостоятельным переходом в защищенный режим. Радость была неимоверная — долой DOS 640 Kb ограничение и т.д. Помню, я еще устроил 32 битный режим в DOS за счет недокументированной фичи записи в теневой регистр GDTR и с командой LOADALL а ля himem.sys

Сейчас ИМХО все эти подробности мало кому понадобятся. Ну разве что разработчикам драйверов (и то не уверен) или же встроенных систем без штатных ОС. Для большинства (причем подавляющего) это просто не нужно. Примерно так же, как им не нужно знать, как выполнен процессор, какие там элементы и т.д. Разве что для общего образования, но тогда не нужны детали.

Я сам некую часть этого курса читаю в своем спецкурсе. Но эта часть ограничивается рассмотрением схемы организации памяти и общих вопросов работы прерываний. И это курс не программистский, а общеобразовательный для программистов. Я не ставлю себе задачи научить их программировать под ЗР, я лишь объясняю им, как устроена адресация в x86, благодаря чему существует виртуальная память и т.д. И вот в этом курсе я все время борюсь с желанием выбросить все селекторы, дескрипторы и GDT/LDT, а просто сказать, что, мол, есть логический 32 битный адрес, он во flat модели равен линейному, а дальше страничный механизм. Т.е. вполне сознательно выпустить этот кусок, который всего лишь запутывает и мало что дает. Пока что я это стремление в себе давлю и рассказываю все. Но не исключаю, что однажды все же на это пойду.

Выложить на сайт это все можно, конечно, может, стоит и дописать. Что же касается превращения этого в обязательный курс для студентов — я против.

Извини, что мнение в общем отрицательное, но, я полагаю, ты хотел, чтобы я сказал то, что думаю. Я и сказал
With best regards
Pavel Dvorkin
Re[2]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 14.11.05 11:51
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Мне кажется, такое было более уместно в качестве курса лет 15 назад.


Я тогда был слишком молодой

PD>Сейчас ИМХО все эти подробности мало кому понадобятся. Ну разве что разработчикам драйверов (и то не уверен) или же встроенных систем без штатных ОС. Для большинства (причем подавляющего) это просто не нужно.


Я об этом даже пишу в этом самом курсе.

PD>Я сам некую часть этого курса читаю в своем спецкурсе. Но эта часть ограничивается рассмотрением схемы организации памяти и общих вопросов работы прерываний. И это курс не программистский, а общеобразовательный для программистов. Я не ставлю себе задачи научить их программировать под ЗР, я лишь объясняю им, как устроена адресация в x86, благодаря чему существует виртуальная память и т.д. И вот в этом курсе я все время борюсь с желанием выбросить все селекторы, дескрипторы и GDT/LDT, а просто сказать, что, мол, есть логический 32 битный адрес, он во flat модели равен линейному, а дальше страничный механизм. Т.е. вполне сознательно выпустить этот кусок, который всего лишь запутывает и мало что дает. Пока что я это стремление в себе давлю и рассказываю все. Но не исключаю, что однажды все же на это пойду.


А тут есть такой момент. Я вот раньше читал в разных книжках про прерывания. Но пока мне не объяснили про ПКП и про то, как с ним работать, пока сам не попробовал — не понимал. Та же фигня с памятью. Может это я один такой уникум.. Но имхо на примере всегда доходит значительно лучше, чем абстрактно. И знания получаются проверенные, а не теоретические.

PD>Выложить на сайт это все можно, конечно, может, стоит и дописать.


Честно говоря, я пишу больше для себя, поэтому дописать стоит в любом случае. Даже если ты будешь возражать

PD>Что же касается превращения этого в обязательный курс для студентов — я против.


У меня всё равно нет таких полономочий. Давай так: оставим студентов и обязаловку. Есть некий курс, как я уже писал "учебник для себя". Курс уже есть, тему сменить нельзя. Мне интересно, насколько удачно у меня получилось изложить содержание.

PD>Извини, что мнение в общем отрицательное, но, я полагаю, ты хотел, чтобы я сказал то, что думаю. Я и сказал


Да, именно так. Если ты ещё раз выскажешься, но уже про содержание, я буду ещё более благодарен
Делай что должно, и будь что будет
Re[3]: Программирование x86 в защищённом режиме
От: Pavel Dvorkin Россия  
Дата: 14.11.05 13:20
Оценка:
Здравствуйте, SergH, Вы писали:

SH>А тут есть такой момент. Я вот раньше читал в разных книжках про прерывания. Но пока мне не объяснили про ПКП и про то, как с ним работать, пока сам не попробовал — не понимал. Та же фигня с памятью. Может это я один такой уникум.. Но имхо на примере всегда доходит значительно лучше, чем абстрактно. И знания получаются проверенные, а не теоретические.


Да, это специфика нынешнего времени. Лет 15 назад уважавший себя программист считал свои долгом что-нибудь в порты загнать и посмотреть, что из этого выйдет , И

mov al,20h
out 20h,al

я до сих пор помню . Но времена меняются...

PD>>Выложить на сайт это все можно, конечно, может, стоит и дописать.


SH>Честно говоря, я пишу больше для себя, поэтому дописать стоит в любом случае. Даже если ты будешь возражать


Ни в коем случае

SH>Да, именно так. Если ты ещё раз выскажешься, но уже про содержание, я буду ещё более благодарен


Это так просто не сделать. Все же и я кое-что забыл, так что надо вспоминать. Детальную критику не обещаю, а уж проверку кода — точно . Но, если время позволит, посмотрю подробнее.
With best regards
Pavel Dvorkin
Re[4]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 14.11.05 13:52
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Да, это специфика нынешнего времени. Лет 15 назад уважавший себя программист считал свои долгом что-нибудь в порты загнать и посмотреть, что из этого выйдет , И


PD>mov al,20h

PD>out 20h,al

PD>я до сих пор помню . Но времена меняются...


Не знаю... Имхо всегда, в любом деле, лучше один раз увидеть, чем сто раз услышать, и лучше один раз попробовать, чем сто раз увидеть. Только попробовав, можно убедиться, что вот — это и есть правильно, дошли до последнего уровня абстракции, наконец понимаем, что происходит. Слова про дескрипторы плохо воспринимаются, пока с ними не поработаешь.

PD>Это так просто не сделать. Все же и я кое-что забыл, так что надо вспоминать. Детальную критику не обещаю, а уж проверку кода — точно . Но, если время позволит, посмотрю подробнее.


Давай! Но код правильный
Делай что должно, и будь что будет
Re[2]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 17.11.05 18:09
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>

В частности, официальное руководство Intel – «IA-32 Intel® Architecture Software Developer’s Manual Volume 3: System Programming Guide» – занимает 836 страниц.

GN>ИМХО лучше убрать цыфры, Intel каждый год новые книжки издаёт .

thanks, fixed

GN>Прошу прощения, что замечаний по делу нет — почитаю на выходных.


(шёпотом) уже четверг...
Делай что должно, и будь что будет
Re[3]: Программирование x86 в защищённом режиме
От: gear nuke  
Дата: 20.11.05 08:47
Оценка: 24 (1)
Некоторые замечания:


В защищённом режиме не существует специального сегмента стека. В качестве сегмента стека может использоваться любой доступный для чтения и записи сегмент данных.


Сегменты стека тем не менее никуда не делись, так же как сегмент ES. Другой дело, что большенство ОС мспользуют flat модель, и адресация через большенство сегментых регистров идёт в одну и ту же память.

Разделение на "сегменты кода" и "сегменты данных" — оно довольно условное и определяет как трактуются младшие 3 бита поля Type в зависимости от старшего 4го.

Хотя дальше всё это и расписывается.



Формат дескриптора сегмента — "?? Пока неважно" — вместо этого ИМХО лучше всё же указать название полей для полноты картины. "Неважно" это или важно. То же касается и IDT. Особенно после слов "вот полное описание формата" .



MASM и TASM требуют использовать «fword» и считают его ключевым словом, а некоторые другие ассемблеры (не будем показывать пальцами) его наоборот не понимают и предпочитают просто word.


Как-то обидно за другие ассемблеры. fasm, например, понимает fword, и используется для написания "ОС" гораздо чаще, чем упомянутые 2 .



Поскольку обработчики исключений регистрируются в той же таблице и по тем же правилам, что и обработчики программных прерываний, выполнение команды int n с соответствующим значением n приведёт к вызову обработчика исключения (кстати, пример из главы «Программные прерывания», обрабатывающий нулевое прерывание – по совместительству исключение #DE, именно так и поступает). И поскольку (насколько я знаю) простого способа определить причину вызова изнутри обработчика не существует, скорее всего, обработчик примет всё за чистую монету.


В некоторых случаях это несложно сделать проверив опкод команды. В виндос кстати ошибочно предпологается, что int 3 всегда однобайтный опкод — про это можно будет в приложении упомянуть.




В орбщем, всё это не слишком важно.
На сколько я понимаю, смысл статей — показать, что вот есть такой защищённый режим, и дать читателю о нём представление. Конечно, можно говорить, что тема раскрыта не так, как в официальных мануалах, или есть книги, например, Юров. Но, как мне кажется, всё это лишнее — со своей задачей статьи справляются, если читатель заинтересуется вопросом — он сможет и мануалы почитать. А в отличие от книг, статьи в свободном даступе.

Единственное, что вероятно может добавить полезность — как-то упомянуть про распространённые ОС. Например, что мультизадачность в Windows NT реализована программно. Или как реализован flat режим.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[4]: Программирование x86 в защищённом режиме
От: Stanky  
Дата: 20.11.05 12:54
Оценка:
>

MASM и TASM требуют использовать «fword» и считают его ключевым
> словом, а некоторые другие ассемблеры (не будем показывать пальцами)
> его наоборот не понимают и предпочитают просто word.

>
Лично моё мнение на этот счёт — зачем так извращаться? Почему бы просто не сделать структуру?
Что-то вроде этого:
;*******************************************************************************
INTERRUPT_DESCRIPTOR struc
    wOffset_15_0    dw     0
    wSelector_15_0  dw     0
    bReserved       db     0

;Type:                     4
;Constant:                 1
;DescriptorPrivilegeLevel: 2
;Present:                  1
    bP_DPL_0_Type   db     0
    wOffset_31_16   dw     0
INTERRUPT_DESCRIPTOR ends
;*******************************************************************************



;*******************************************************************************
GDTR                 struc
    wLimit_15_0     dw     0
    dwBase_31_0     dd     0
GDTR                 ends
;*******************************************************************************



;*******************************************************************************
IDTR                 struc
    wLimit_15_0     dw     0
    dwBase_31_0     dd     0
IDTR                 ends
;*******************************************************************************


Или у каких-то компиляторов с этим проблемы?
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[5]: Программирование x86 в защищённом режиме
От: gear nuke  
Дата: 20.11.05 13:02
Оценка:
Здравствуйте, Stanky, Вы писали:

>>

MASM и TASM требуют использовать «fword» и считают его ключевым
>> словом, а некоторые другие ассемблеры (не будем показывать пальцами)
>> его наоборот не понимают и предпочитают просто word.

>>
S>Лично моё мнение на этот счёт — зачем так извращаться? Почему бы просто не сделать структуру?

Структура — не проще, она нагляднее.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[6]: Программирование x86 в защищённом режиме
От: Stanky  
Дата: 20.11.05 13:05
Оценка:
> Структура — не проще, она нагляднее.
> :
>
Нагляднее -> Проще.
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[4]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 21.11.05 11:25
Оценка:
Здравствуйте, gear nuke, Вы писали:

Спасибо!

GN>Сегменты стека тем не менее никуда не делись, так же как сегмент ES. Другой дело, что большенство ОС мспользуют flat модель, и адресация через большенство сегментых регистров идёт в одну и ту же память.


Имелось ввиду, что сегмент стека от сегмента данных ни чем не отличается. Он конечно есть, но он такой же.

GN>Разделение на "сегменты кода" и "сегменты данных" — оно довольно условное и определяет как трактуются младшие 3 бита поля Type в зависимости от старшего 4го.


С ними приходится по-разному обращаться. Сегмент кода в лучшем случае read-only, а может быть даже и не read вообще.

GN>

GN>Формат дескриптора сегмента — "?? Пока неважно" — вместо этого ИМХО лучше всё же указать название полей для полноты картины. "Неважно" это или важно. То же касается и IDT. Особенно после слов "вот полное описание формата" .

Имхо нет. Чем больше полей, тем сложнее понять, выделить среди всего этого главное. Особенно если про половину полей написано "объясню через три главы, пока забудьте". Если всё равно "забудьте" — зачем вообще писать?

GN>Как-то обидно за другие ассемблеры. fasm, например, понимает fword, и используется для написания "ОС" гораздо чаще, чем упомянутые 2 .


Ок, ткну пальцем Имелся ввиду a386 http://eji.com/a86/ Очень неплохой ассемблер, кстати, на нём у нас были лабы в институте Точнее, на a86, 386-й мне препод по блату дал Ни с кем не совместимый, но писать на нём удобнее.

GN>В некоторых случаях это несложно сделать проверив опкод команды.


Хе-хе

int 13
mov cs:[0], ax


После исключения типа Fault в стеке адрес ошибочной команды, после программного прерывания в стеке адрес следующей Наверное и это можно как-то разрулить... Но проще было разнести таблицы или завести флаг. Правда, флаг тоже не очень хорошо, так как будут проблемы с рекурсией.

GN>В виндос кстати ошибочно предпологается, что int 3 всегда однобайтный опкод — про это можно будет в приложении упомянуть.


А зачем такое предпологать? Там же анализировать ничего не надо вроде. Объясни.

GN>На сколько я понимаю, смысл статей — показать, что вот есть такой защищённый режим, и дать читателю о нём представление. Конечно, можно говорить, что тема раскрыта не так, как в официальных мануалах, или есть книги, например, Юров. Но, как мне кажется, всё это лишнее — со своей задачей статьи справляются, если читатель заинтересуется вопросом — он сможет и мануалы почитать. А в отличие от книг, статьи в свободном даступе.


Примерно так. Только, имхо, у Юрова хуже Я его читал только одну главу, которая на каком-то электронном магазине в свободном доступе лежала. Очень удачно, оказалась глава про ПКП. И не понравилась она мне, даже не могу сказать чем

GN>Единственное, что вероятно может добавить полезность — как-то упомянуть про распространённые ОС. Например, что мультизадачность в Windows NT реализована программно.


Вот как доберусь до многозадачности Скорее всего упомяну.

GN>Или как реализован flat режим.


Ты имеешь ввиду, установить сегменты на 0 и размер 4 Gb? Я решил добавть туда 32-х разрядности и оставил всё это на конец. Для честного 32-х разрядного flat режима нужно писать exe-программу, чтобы сделать 32-х разрядный сегмент кода. С учётом того, что нигде дальше эти возможности не используются, это слишком сложно.
Делай что должно, и будь что будет
Re[5]: Программирование x86 в защищённом режиме
От: gear nuke  
Дата: 21.11.05 13:49
Оценка:
Здравствуйте, SergH,

GN>>Сегменты стека тем не менее никуда не делись, так же как сегмент ES. Другой дело, что большенство ОС мспользуют flat модель, и адресация через большенство сегментых регистров идёт в одну и ту же память.


SH>Имелось ввиду, что сегмент стека от сегмента данных ни чем не отличается. Он конечно есть, но он такой же.


Ну это понятно — дальше так и расписано. В общем-то больше на придирки к словам похоже , но "не существует" — как-то категорично. ИМХО предпочтительнее что-то вроде "сегменты данных (к которым относится и сегмент стека)..." или как-то по другому изменить формулироваку. В мануалах так или иначе фагурируют и stack segments и data segments, в частности в 3.4.3.1 "CODE- AND DATA-SEGMENTS DESCRIPTOR TYPES".


GN>>Разделение на "сегменты кода" и "сегменты данных" — оно довольно условное и определяет как трактуются младшие 3 бита поля Type в зависимости от старшего 4го.


SH>С ними приходится по-разному обращаться. Сегмент кода в лучшем случае read-only, а может быть даже и не read вообще.


Так это не противоречит сказанному мной . Под read-only видимо подразумевается execute/read, а под не-read — execute-only?


GN>>Формат дескриптора сегмента — "?? Пока неважно" — вместо этого ИМХО лучше всё же указать название полей для полноты картины. "Неважно" это или важно. То же касается и IDT. Особенно после слов "вот полное описание формата" .


SH>Имхо нет. Чем больше полей, тем сложнее понять, выделить среди всего этого главное. Особенно если про половину полей написано "объясню через три главы, пока забудьте". Если всё равно "забудьте" — зачем вообще писать?


В контексте выделенного — обязательно всё писать . А то, что не важно, может быть мелким шрифтом?


GN>>Как-то обидно за другие ассемблеры. fasm, например, понимает fword, и используется для написания "ОС" гораздо чаще, чем упомянутые 2 .


SH>Ок, ткну пальцем Имелся ввиду a386 http://eji.com/a86/ Очень неплохой ассемблер, кстати, на нём у нас были лабы в институте


Какой богатый институт, покупает дорогие ассемблеры .

SH>Точнее, на a86, 386-й мне препод по блату дал Ни с кем не совместимый, но писать на нём удобнее.


Угу, почитал о "features make A86 and A386 the best", для своего времени неплохо, но чем-то напоминает ранние версии fasm .


GN>>В некоторых случаях это несложно сделать проверив опкод команды.


SH>Хе-хе


SH>
SH>int 13
SH>mov cs:[0], ax

SH>После исключения типа Fault в стеке адрес ошибочной команды, после программного прерывания в стеке адрес следующей Наверное и это можно как-то разрулить...

Так это уже не "некоторый" случай. Больше похоже, что специально запутать хотят .


GN>>В виндос кстати ошибочно предпологается, что int 3 всегда однобайтный опкод — про это можно будет в приложении упомянуть.


SH>А зачем такое предпологать? Там же анализировать ничего не надо вроде. Объясни.


Обработчик ntoskrnl!_KiTrap03 содержит такой участок:
        mov     ebx, [ebp+68h]  ; EIP после trap
        dec     ebx            ; Exception Address
        mov     ecx, 3
        mov     eax, 80000003h  ; Exception Code == STATUS_BREAKPOINT
        call    CommonDispatchException
Т.е. в юзермодное приложение приложение попадает адрес не после, а самой инструкции int 3. Причём, этот адрес будет валиден только если int 3 — однобайтный опкод.


GN>>Или как реализован flat режим.


SH>Ты имеешь ввиду, установить сегменты на 0 и размер 4 Gb?


Просто упомянуть про это, за счёт чего в современных ОС (виндос) flat делается. Тогда и писать, что информация из статей совсем бесполезна не придётся .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[6]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 21.11.05 14:40
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Так это не противоречит сказанному мной . Под read-only видимо подразумевается execute/read, а под не-read — execute-only?


Да.

GN>В контексте выделенного — обязательно всё писать . А то, что не важно, может быть мелким шрифтом?


Не, проще убрать про полный

GN>Какой богатый институт, покупает дорогие ассемблеры .


a86 — халявный, скачивается просто так. Вот за a386 надо платить, но мы его и не использовали.

GN>Угу, почитал о "features make A86 and A386 the best", для своего времени неплохо, но чем-то напоминает ранние версии fasm .


Надо посмотреть fasm.. Но по жизни я ассемблер использую мало, а тут нужно более-менее совместимый код.

GN>Так это уже не "некоторый" случай. Больше похоже, что специально запутать хотят .


А я ещё и наврал. Адрес в стеке будет указывать в бесконечность, в том смысле, что обработчик предположит наличие кода ошибки, которого там нет.. В общем, угадать конечно можно, но сложно и очень ненадёжно.

GN>Обработчик ntoskrnl!_KiTrap03 содержит такой участок:

GN>
GN>        mov     ebx, [ebp+68h]  ; EIP после trap
GN>        dec     ebx            ; Exception Address
GN>        mov     ecx, 3
GN>        mov     eax, 80000003h  ; Exception Code == STATUS_BREAKPOINT
GN>        call    CommonDispatchException
GN>

GN>Т.е. в юзермодное приложение приложение попадает адрес не после, а самой инструкции int 3. Причём, этот адрес будет валиден только если int 3 — однобайтный опкод.

Нда, интересно.. И зачем им это надо было? Непонятно. То есть понятно, что хотели упростить жизнь пользователям, но так-то зачем. Передать управление отладчику, он лучше знает размер своих точек останова, в крайнем случае разберётся, вариантов то всего два.

GN>Просто упомянуть про это, за счёт чего в современных ОС (виндос) flat делается. Тогда и писать, что информация из статей совсем бесполезна не придётся .


Ну да, наверное добавлю.
Делай что должно, и будь что будет
Re[7]: Программирование x86 в защищённом режиме
От: gear nuke  
Дата: 21.11.05 15:26
Оценка: 7 (1)
Здравствуйте, SergH, Вы писали:

SH>Надо посмотреть fasm.. Но по жизни я ассемблер использую мало, а тут нужно более-менее совместимый код.


Синтаксис fasm напоминает ideal в tasm. Или nasm. Но red tape ещё меньше, может генерировать непосредственно исполняемые файлы (com, pe, elf) или coff/mscoff объектники (а значит, запросто линкуется с тем же msvc). fasm не содержит каких-либо высокоуровневых конструкций (вроде .if в masm) но позволяет практически любые вещи (вплоть до С синтаксиса) реализовать за счёт макросов.

GN>>Обработчик ntoskrnl!_KiTrap03 содержит такой участок:

GN>>
GN>>        mov     ebx, [ebp+68h]  ; EIP после trap
GN>>        dec     ebx            ; Exception Address
GN>>        mov     ecx, 3
GN>>        mov     eax, 80000003h  ; Exception Code == STATUS_BREAKPOINT
GN>>        call    CommonDispatchException

GN>>Т.е. в юзермодное приложение приложение попадает адрес не после, а самой инструкции int 3. Причём, этот адрес будет валиден только если int 3 — однобайтный опкод.

SH>Нда, интересно.. И зачем им это надо было? Непонятно. То есть понятно, что хотели упростить жизнь пользователям, но так-то зачем. Передать управление отладчику, он лучше знает размер своих точек останова, в крайнем случае разберётся, вариантов то всего два.


На самом деле, предполагается, что вариант всего один — int 3 с опкодом CC. Intel в доках рекомендует использовать именно однобайтный опкод, поэтому и делается подобное допущение разработчиками ОС. На практике же можно двубайтный опкод использовать, тогда механизм работает криво — иногда из такого извлекают пользу. А отладчик — только частное использование int 3, можно и в своих программах применять.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[4]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 22.11.05 14:33
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Некоторые замечания:

GN>

GN>

В защищённом режиме не существует специального сегмента стека. В качестве сегмента стека может использоваться любой доступный для чтения и записи сегмент данных.


fixed,

В защищённом режиме не существует специального типа сегмента для стека. В качестве сегмента стека используется доступный для чтения и записи сегмент данных.


GN>Особенно после слов "вот полное описание формата" .


fixed,

Форматы тоже почти одинаковые, отличается только один бит (0-й бит пятого байта), тем не менее, для полноты картины, привожу описание:


GN> Или как реализован flat режим.


На самом деле это было Просто было спрятано так, что только самый винмательный из читателей мог надеяться заметить Упоминание про реальзацию плоского режима находилось в маленьком примечании сразу после кода примера. Вставил его до начала кода и переформулировал, теперь заметнее.
Делай что должно, и будь что будет
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.