Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 10.11.05 12:39
Оценка: 87 (10)
Привет!

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

http://sergh.pisem.net/protected.html

Читайте и пишите отзывы, буду благодарен.

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

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

P.S. Формат этого дела не журнальный, да и тема больно далека от RSDN Magazine, поэтому остальная команда интереса пока не проявила.
Делай что должно, и будь что будет
Re[6]: Программирование x86 в защищённом режиме
От: Andrew.W Worobow https://github.com/Worobow
Дата: 11.11.05 15:15
Оценка: +1 :))
Здравствуйте, SergH, Вы писали:

SH>Спасибо за поддержку.

Всегда рад!


SH>Пару слов про стиль изложения и подобное.


Согласен, сам читаю лекции, доходчивый стиль очень важен. НО! Заметил в последнее время странную реакцию среди студентов, они мне говорят — "А нам не надо доходчивей, нам надо под диктовку, чтоб конспект получился"... Правда не все, а только процентов 90

SH>Во-вторых, про стиль. На комиссии мне сказали, что научные работы так не пишут.


Вот здесь бы хотелось поддержать этих господ, но хочу сразу заметить, что сам считал абсолютно также как и Вы. А почему поддержать, забавно но излишняя научность, она как бы набивает нам цену... Вот ведь врачи даже латынь специально применяют, чтоб их юзеры не очень "врубались" в написанное... Да и если послушать экономистов и юристов, то сплошь спец. термины... Например аквизиция, авераж, ностро-конто... И нам так тоже нужно...
Не все кто уехал, предал Россию.
Re: Программирование x86 в защищённом режиме
От: Сергей Мухин Россия  
Дата: 10.11.05 15:10
Оценка: :))
Здравствуйте, SergH, Вы писали:

Убедительная просьба следить за объемом цитирования — модератор

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


т.е. разарабатывать можно, а работать уже нельзя!
---
С уважением,
Сергей Мухин
Re[4]: Программирование x86 в защищённом режиме
От: Andrew.W Worobow https://github.com/Worobow
Дата: 11.11.05 12:27
Оценка: +2
Здравствуйте, Геннадий Майко, Вы писали:

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


В мире очень много на самом деле вещей, которые по сути являясь простыми не переходят в головы изучающих в этом простом виде. Иногда это происходит из-за нарушения порядка изучения материала, иногда из-за одной единственной неверно высказанной учителем связки понятий, иногда в результате невнимательности ученика. Причём учитель/преподаватель подчас в этом не виноват — он просто например забыл как что-то в своём предмете "не понимать"... Бызовые знания у него сместились вверх на один уровень... И в результате обучаемый выучил но не понял....

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


Вот в качестве примера, могу привести случай со мной, изучая FORTRAN я ну никак не мог понять что делает оператор FORMAT, не мог понять какие действия он выполняет, что выводит, или что форматирует... А ведь написали бы в книжке, "ничего он не делает это просто такое обьявление данных" и всё было бы понятно...
Не все кто уехал, предал Россию.
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[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[7]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 14.11.05 10:10
Оценка: 4 (1)
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Согласен, сам читаю лекции, доходчивый стиль очень важен. НО! Заметил в последнее время странную реакцию среди студентов, они мне говорят — "А нам не надо доходчивей, нам надо под диктовку, чтоб конспект получился"... Правда не все, а только процентов 90


Как говорил Страуструп, объектно ориентрированный язык программирования это тот, на котором удобно писать в объектно ориентированном стиле. Я старался писать курс по которому удобно заниматься в режиме понимания. Потому что хочу поддерживать те тенденции, которые считаю правильными. И потому что сам по другому заниматься не люблю и не умею

AWW>Вот здесь бы хотелось поддержать этих господ, но хочу сразу заметить, что сам считал абсолютно также как и Вы. А почему поддержать, забавно но излишняя научность, она как бы набивает нам цену...


Это курс для внутреннего использования Когда неофит прошёл первую степень посвящения, его приняли в клан, учитель кончает говорить занудные и непонятные вещи, а начинает учить конкретным техникам

А терминологию я даю всю, без неё никуда — как потом нормальные руководства понимать?

AWW>Вот ведь врачи даже латынь специально применяют, чтоб их юзеры не очень "врубались" в написанное...


Я думаю, что скорее для упрощения взаимопонимания. Стандартная терминология — великая вещь.
Делай что должно, и будь что будет
Re[5]: Программирование x86 в защищённом режиме
От: Геннадий Майко США  
Дата: 11.11.05 12:59
Оценка: +1
Здравствуйте, SergH,

ГМ>>Увы, мне кажется, что использовать это в учебном процессе студентов ВУЗов, бессмысленно и вредно.


SH>Ваши аргументы? Мне правдо интересно.

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

Кроме того, Вы рассказываете о достаточно устаревших вешах и довольно часто сознательно ограничиваете изложение (и Вы это опять прекрасно понимаете).

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

C уважением,
Геннадий Майко.

P.S. Обратите внимание, что я не утверждаю, что знать язык ассемблера или архитектуру процессоров семейства Intel x86 — это плохо.
Re[6]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 11.11.05 13:28
Оценка: +1
Здравствуйте, Геннадий Майко, Вы писали:

ГМ>Потому что Вы предлагаете учить студентов тому, что им практически никогда не потребуется в их дальнейшей работе (и Вы это прекрасно понимаете).


ГМ>Будуюших работодателей куда более интересуют знания студентов в областях общего программирования, а не маргинальные, узкоспециализированные знания.


Во-первых, 90% курсов такие Вы давно не учились в институте, наверное.
Во-вторых, объясните мне, что такое "общее программирование". Я правда не понимаю.
В-третьих, да, на практике всё это вряд ли потребуется. И я это не только понимаю, я это честно пишу. В курсе для студентов я бы конечно этот абзац убрал Но может очень помочь приходящее в процессе изучения понимание механизмов. До изучения защищённого режима реализация ОС казалась мне магией — известный мне реальный режим процессора не поволял реализовать ничего подобного.

ГМ>Кроме того, Вы рассказываете о достаточно устаревших вешах


Опять же, вещи приходят и уходят, механизмы остаются. Потому что более-менее остаются задачи. Когда процессорами будут решаться совершенно другие задачи, будут другие механизмы. А то, что постарше обычно проще.

Кроме того, в институте для лаб установят x64 только лет через пять.

ГМ>и довольно часто сознательно ограничиваете изложение (и Вы это опять прекрасно понимаете).


Я сознательно ограничиваю там, где вижу неважное. Это, конечно, моя ответственность. Но опять же, я считаю, что механизмы важнее деталей. Понимая общую картину читать ингеловский гайд гораздо легче, а от туда можно узнать про самые новые детали.

ГМ>Этим самым Вы забираете у (будующих) студентов время, которое может быть ими потрачено на изучение других дисциплин


Убирая подробности я как раз сохраняю время

Но я понял Ваше мнение. Но то же можно сказать про матанализ. От меня мой работодатель не требует умения брать интегралы Я, кстати, уже почти и не помню как это делать. Убрать из курса?

ГМ>P.S. Обратите внимание, что я не утверждаю, что знать язык ассемблера или архитектуру процессоров семейства Intel x86 — это плохо.


Обратил. Знать хорошо, но преподавать плохо Это понятно, знать древне-греческий полезно, но если меня будут им грузить в институте, я оттуда убегу Просто я не считаю это древне-греческим.
Делай что должно, и будь что будет
Re[4]: Программирование x86 в защищённом режиме
От: Stanky  
Дата: 12.11.05 11:05
Оценка: +1
> Fasm в 32х битном режиме и MSVC компилируют iretd в опкод CF без
> префиксов.
>
Да, согласен — тут очень многое зависит от самого кмпилятора, но и его можно обмануть, например так:
...
RM_Seg  segment para public "CODE" use16
        assume cs:RM_Seg, ds:RM_Seg, ss:Stack

Main    proc
...
;Записываем в IDT дескриптор обработчика прерывания
...
Main    endp

Hanler  proc
...
    iretd
Hanler  endp

RM_Seg  ends
...

В точке входа мы переведём процессор в защищённый режим, и установим 32-х разрядный сегмент кода. Так как код обработчика написан в 16-ти разрядном сегменте кода, то iretd будет преобразованно именно в то, что я раньше приводил. Поэтому в этом аспекте нужно быть достаточно внимательным, либо использовать только iret, либо писать всё, что будет в 32-х разрядном режиме работать в отдельном сегменте, что собственно и является верным решением.
...
RM_Seg  segment para public "CODE" use16
        assume cs:RM_Seg, ds:RM_Seg, ss:Stack
Main    proc
...
;Записываем в IDT дескриптор обработчика прерывания
...
Main    endp
RM_Seg  ends


PM_Seg  segment para public "CODE" use32
        assume cs:PM_Seg, ds:PM_Seg, es:PM_Seg
Hanler  proc
...
    iretd
Hanler  endp
PM_Seg  ends
...
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re: Программирование x86 в защищённом режиме
От: Pushkoff Украина  
Дата: 10.11.05 16:33
Оценка:
Бегло просмотрел вроде нормально... перечитаю скажу точнее...
Re: Программирование x86 в защищённом режиме
От: Conr Россия  
Дата: 10.11.05 16:40
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Привет!


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


SH>http://sergh.pisem.net/protected.html


SH>Читайте и пишите отзывы, буду благодарен.

Если честно, то очень напоминает Юрова, точнее пересказ своими словами глав из его книжки Assembler
Это не в коем разе не критика, бо как он читается сложнее, но может стоит дать на него ссылку для более подробной информации?
Re[2]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 10.11.05 17:10
Оценка:
Здравствуйте, Conr, Вы писали:

C>Если честно, то очень напоминает Юрова, точнее пересказ своими словами глав из его книжки Assembler


Я Юрова не читал
А что похоже — так тут сложно придумать что-то новое, защищённый режим всё-таки уже разработан.

C>Это не в коем разе не критика, бо как он читается сложнее,


О! Это было моей главной целью.

C>но может стоит дать на него ссылку для более подробной информации?


Во введении я даю аж пять разных ссылок Юрова, правда, среди них нет.
Делай что должно, и будь что будет
Re: Программирование x86 в защищённом режиме
От: AndreyStr  
Дата: 10.11.05 18:10
Оценка:
Архив с примерами не качается...
Re: Программирование x86 в защищённом режиме
От: gear nuke  
Дата: 11.11.05 01:19
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Не надо мне сообщать, что это всё устарело и нафиг никому не нужно. Я сам знаю что никому не нужно


Это нужно! работу с IDT для организации шлюзов в ядро никто пока не отменял .

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

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

Прошу прощения, что замечаний по делу нет — почитаю на выходных.
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: Программирование x86 в защищённом режиме
От: OpenGL  
Дата: 11.11.05 03:21
Оценка:
Здравствуйте, SergH, Вы писали:


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


В самом начале )))) Компьютеры бывают разные, в том числе и на процессорах PowerPC (Apple), а там нет защищенного режима. Я конечно понимаю что речь идет о х86, но тогда корректнее было бы написать что "покупая процессор".
Re: Программирование x86 в защищённом режиме
От: Геннадий Майко США  
Дата: 11.11.05 07:31
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Привет!


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


SH>http://sergh.pisem.net/protected.html


SH>Читайте и пишите отзывы, буду благодарен.

--
Прежде чем писать отзывы, было бы все таки интересно узнать, что это такое — бакалврская работа? проект учебника или учебного пособия для какой-то дисциплины? методическое пособие по лабораторным работам? цикл статей? конспект для самообразования? что-то другое?

С увадением,
Геннадий Майко.
Re[2]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 11.11.05 08:42
Оценка:
Здравствуйте, AndreyStr, Вы писали:

AS>Архив с примерами не качается...


Сорри, теперь качается.
Делай что должно, и будь что будет
Re[2]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 11.11.05 08:52
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

ГМ>Прежде чем писать отзывы, было бы все таки интересно узнать, что это такое — бакалврская работа?


Полтора года назад тогдашняя версия "этого" была сдана в качестве бакалаврской. Тема звучала примерно так: "Разработка курса лаборатоных работ по теме ...." Тогда было написано только две первых главы, причём совсем не так, а гораздо хуже Поставили 3 за неуважение к аттестационной комиссии Впрочем, оба подопечных (я и ещё один студент) моего руководителя получили 3, а все остальные получили выше, так что я считаю, что ответственность за оценку примерно 50 на 50.

ГМ>проект учебника или учебного пособия для какой-то дисциплины? методическое пособие по лабораторным работам?


Типа того. От "учебника" отличается практической ориентированностью, от "методического пособия" — полноценной, а не урезанной теоретической частью.

ГМ>цикл статей?


Нет, это скорее книжка. Присутствуют ссылки вперёд-назад, введение...

ГМ>конспект для самообразования? что-то другое?


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

OGL>В самом начале )))) Компьютеры бывают разные, в том числе и на процессорах PowerPC (Apple), а там нет защищенного режима. Я конечно понимаю что речь идет о х86, но тогда корректнее было бы написать что "покупая процессор".


Этот эпиграф — это же глум, в чистом виде Пародия на маркетинговые лозунги. Ты когда-нибудь видел, чтобы Intel в своей рекламе упоминала PowerPC?
Делай что должно, и будь что будет
Re[3]: Программирование x86 в защищённом режиме
От: OpenGL  
Дата: 11.11.05 10:10
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, OpenGL, Вы писали:


OGL>>В самом начале )))) Компьютеры бывают разные, в том числе и на процессорах PowerPC (Apple), а там нет защищенного режима. Я конечно понимаю что речь идет о х86, но тогда корректнее было бы написать что "покупая процессор".


SH>Этот эпиграф — это же глум, в чистом виде Пародия на маркетинговые лозунги. Ты когда-нибудь видел, чтобы Intel в своей рекламе упоминала PowerPC?


Нет не видел. Но дело то не в этом )))
Re[3]: Программирование x86 в защищённом режиме
От: Геннадий Майко США  
Дата: 11.11.05 11:36
Оценка:
Здравствуйте, SergH,
ГМ>>Прежде чем писать отзывы, было бы все таки интересно узнать, что это такое — бакалврская работа?

SH>Полтора года назад тогдашняя версия "этого" была сдана в качестве бакалаврской. Тема звучала примерно так: "Разработка курса лаборатоных работ по теме ...." Тогда было написано только две первых главы, причём совсем не так, а гораздо хуже Поставили 3 за неуважение к аттестационной комиссии

--
И это хорошо, что не поставили "неуд.".
Я бы вообще ее не допустил к защите


ГМ>>проект учебника или учебного пособия для какой-то дисциплины? методическое пособие по лабораторным работам?


SH>Типа того. От "учебника" отличается практической ориентированностью, от "методического пособия" — полноценной, а не урезанной теоретической частью.

--
Увы, мне кажется, что использовать это в учебном процессе студентов ВУЗов, бессмысленно и вредно.

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

С уважением,
Геннадий Майко.
Re[4]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 11.11.05 11:40
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

ГМ>И это хорошо, что не поставили "неуд.".

ГМ>Я бы вообще ее не допустил к защите

Я рад, что вас там не было

ГМ>Увы, мне кажется, что использовать это в учебном процессе студентов ВУЗов, бессмысленно и вредно.


Ваши аргументы? Мне правдо интересно.
Делай что должно, и будь что будет
Re[5]: Программирование x86 в защищённом режиме
От: Геннадий Майко США  
Дата: 11.11.05 13:26
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>В мире очень много на самом деле вещей, которые по сути являясь простыми не переходят в головы изучающих в этом простом виде. Иногда это происходит из-за нарушения порядка изучения материала, иногда из-за одной единственной неверно высказанной учителем связки понятий, иногда в результате невнимательности ученика. Причём учитель/преподаватель подчас в этом не виноват — он просто например забыл как что-то в своём предмете "не понимать"... Бызовые знания у него сместились вверх на один уровень... И в результате обучаемый выучил но не понял....

--
Не буду с этим спорить...


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

--
Это тоже иногда полезно.
Но все это не повод, для того что бы таким образом писать учебные пособия для студентов (и, как я понял, наши позиции в этом совпадают, нет?).

Я специально хотел уточнить позицию автора в первом своем письме, потому что буде это цикл статей для какого-то журнала или сайта, то тогда бы критика другая

С уважением,
Геннадий Майко.
Re[5]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 11.11.05 13:39
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>В мире очень много на самом деле вещей, которые по сути являясь простыми не переходят в головы изучающих в этом простом виде. Иногда это происходит из-за нарушения порядка изучения материала, иногда из-за одной единственной неверно высказанной учителем связки понятий, иногда в результате невнимательности ученика. Причём учитель/преподаватель подчас в этом не виноват — он просто например забыл как что-то в своём предмете "не понимать"... Бызовые знания у него сместились вверх на один уровень... И в результате обучаемый выучил но не понял....


AWW>Одним словом популяризация это правильно, и я например поставил "плюсы" именно за это... Причем будучи противником упрощенного изложения профессиональных знаний. Но на мой взгляд базовые вещи болжны излогаться в форме "чтива", это правильно.... А вот сложные, сугубо профессиональные, не должны упрашаться даже при ответах на форумах. Иначе человек решит поставленую работодателем задачу, но решать её не научится... Это как в поговорке про рыбу и удочку...


Спасибо за поддержку.
Пару слов про стиль изложения и подобное.

Во-первых, если вспоминать бакалаврскую, там был раздел, который я здесь исключил — критика существующих курсов. Суть заключалась в том, что всё, что я до сих пор читал по этой теме написано людьми, прекрасно знающими предмет, но не желающими напрячься, чтобы изучающему было понятнее. Проще всего написать энциклопедию а-ля Гук (это не критика Гука, он и не претендует на то, что пишет учебники) — свалить все данные в кучу, разбирайтесь сами. А то, что для понимания того, что написано на первой странице надо уже прочитать 13-ю автора не волнует. Читать такие книжки можно только в несколько проходов, каждый раз отрывая новые смыслы и взаимосвязи. Назвать это "пониманием" язык не поворачивается. И уж точно ни у кого не было попытки объяснить зачем всё это нужно. Возможно, кому-то (тому самому инженеру, который и так всё поймёт) это кажется очевидным, но если об этом "очевидном" нигде не написано, новичёк про это так никогда и не узнает.

Я поставил перед собой задачу написать курс, в котором:
— по возможности объясняется "зачем"
— ссылки вперёд обозначены явно и не критичны для понимания, то есть курс можно читать последовательно и только один раз, ничего не теряя
— вся "лишняя" информация отброшена на как можно дальше. Есть главное, а есть второстепенное, главное необходимо осознать, а второстепенное потом будет легко запомнить. Если потребуется. Если грузить как можно больше информации, главное потеряется.
— на всё, что можно, есть работающие примеры

Во-вторых, про стиль. На комиссии мне сказали, что научные работы так не пишут. Я тогда промолчал (комиссия, все дела, я застенчивый..) Сейчас могу ответить, что пишу не научную работу, а для людей. Мне нужно не научно, а понятно. Примеры "легкого" стиля среди признанных мастеров — ну например Мартин Фаулер пишет довольно свободно. Кроме того, писать научно — это занудно и противно мне самому Может быть это и недостаток, но писать иначе мне правда сложно. И, извиняюсь за скромность, лучшего изложения защищённого режима я пока не встречал.
Делай что должно, и будь что будет
Re[6]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 11.11.05 14:06
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

ГМ>Я специально хотел уточнить позицию автора в первом своем письме, потому что буде это цикл статей для какого-то журнала или сайта, то тогда бы критика другая


Сорри, а можно другую критику тоже озвучить?

Где принципиальная разница между студентами и читателями пока не вижу, но с удовольствием оставлю этот вопрос за границами обсуждения. У меня всё равно нет полномочий вводить новые курсы.
Делай что должно, и будь что будет
Re[7]: Программирование x86 в защищённом режиме
От: Геннадий Майко США  
Дата: 11.11.05 14:09
Оценка:
Здравствуйте, SergH,

ГМ>>Потому что Вы предлагаете учить студентов тому, что им практически никогда не потребуется в их дальнейшей работе (и Вы это прекрасно понимаете).


ГМ>>Будуюших работодателей куда более интересуют знания студентов в областях общего программирования, а не маргинальные, узкоспециализированные знания.


SH>Во-первых, 90% курсов такие Вы давно не учились в институте, наверное.

--
Это так.
Когда передо мной стоял выбор о том, какой курс читать своим студентам, я предпочел предложить курс "Методы проектирования", основанный на одноименной книге Дж.К.Джонса, чем, например, "Системное программирование для Windows".


SH>Во-вторых, объясните мне, что такое "общее программирование". Я правда не понимаю.

--
Посмотрите, например, книги Кнута ("Искуство программирования") или Вирта ("Алгоритмы и структуры данных").


ГМ>>Этим самым Вы забираете у (будующих) студентов время, которое может быть ими потрачено на изучение других дисциплин


SH>Убирая подробности я как раз сохраняю время


SH>Но я понял Ваше мнение. Но то же можно сказать про матанализ. От меня мой работодатель не требует умения брать интегралы Я, кстати, уже почти и не помню как это делать. Убрать из курса?

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



ГМ>>P.S. Обратите внимание, что я не утверждаю, что знать язык ассемблера или архитектуру процессоров семейства Intel x86 — это плохо.


SH>Обратил. Знать хорошо, но преподавать плохо

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

С уважением,
Геннадий Майко.
Re[8]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 11.11.05 14:22
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

ГМ>Когда передо мной стоял выбор о том, какой курс читать своим студентам, я предпочел предложить курс "Методы проектирования", основанный на одноименной книге Дж.К.Джонса, чем, например, "Системное программирование для Windows".


Но ведь и "Системное программирование" читают.. Чего нам только не читали

ГМ>Посмотрите, например, книги Кнута ("Искуство программирования") или Вирта ("Алгоритмы и структуры данных").


Я ожидал большего. Алгоритмы бузусловно важно.. но тоже в основном в специфической области программирования. Это ни в коем случае не "общее программирование". Хотя, конечно, ближе к нему чем x86. Но опять же, предлагаю не обсуждать этот вопрос в этой ветке. Хотите — создайте тему в "Образовании", там и поспорим.

ГМ>Вероятность того, что Вам (или кому-то другому) в практической деятельности таки да придется брать интегралы, гораздо выше того, что Вам придется написать программу, переводящую процессор в защищенный режим


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

ГМ>Увы, это так.

ГМ>Это слишком узко для того, чтобы включать в официальный курс обучения студентов, IMHO. Куда лучше получать такую информацию после окончания института самостоятельно или на соответсвующих курсах.

Ладно, по этому вопросу мы с Вами разошлись. Имхо, это вопрос не для этого форума, да и дискутировать сложно — ХО на ХО, как говорится. Я скажу, что конкретные знания всё-таки нужны, вы — нужны, но не такие, я — ну почему же не такие и т.п. Давайте оставим студентов в покое, скажите что-нибудь про сам текст
Делай что должно, и будь что будет
Re[7]: Программирование x86 в защищённом режиме
От: Геннадий Майко США  
Дата: 11.11.05 14:29
Оценка:
Здравствуйте, SergH, Вы писали:


ГМ>>Я специально хотел уточнить позицию автора в первом своем письме, потому что буде это цикл статей для какого-то журнала или сайта, то тогда бы критика другая


SH>Сорри, а можно другую критику тоже озвучить?

--
Так не честно, Вы меняет правила игры на лету

Если бы это позиционировалось Вами как цикл статей, то я бы лично вообще ничего не писал бы.

C уважением,
Геннадий Майко.
Re[8]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 11.11.05 14:39
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

ГМ>Так не честно, Вы меняет правила игры на лету

ГМ>Если бы это позиционировалось Вами как цикл статей,

Сорри, я просто действительно не отслеживаю разницы между студентами и нормальными читателями. Кроме того, что студентов можно заставить, поэтому для них можно писать скучно и непонятно

Ну вот есть книжка Зубкова по тому же ассемблеру. Это не цикл статей, это просто книжка. Это не курс для студентов, но по нему можно учиться. Типа "учебник-для-себя".

ГМ>то я бы лично вообще ничего не писал бы.


Значит я не прогадал Ваша притензия, насколько я понимаю, к теме курса как таковой. Я предлагаю исключить этот предмет из рассмотрения. Тема уже есть, поменять её на "Кройка и шитьё во второй полине 18-го века в северных районах Австрии" уже нельзя Мне интересны притензии к содержанию.
Делай что должно, и будь что будет
Re[9]: Программирование x86 в защищённом режиме
От: Геннадий Майко США  
Дата: 11.11.05 15:40
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, Геннадий Майко, Вы писали:


ГМ>>Так не честно, Вы меняет правила игры на лету

ГМ>>Если бы это позиционировалось Вами как цикл статей,

SH>Сорри, я просто действительно не отслеживаю разницы между студентами и нормальными читателями.

Кроме того, что студентов можно заставить, поэтому для них можно писать скучно и непонятно

SH>Ну вот есть книжка Зубкова по тому же ассемблеру. Это не цикл статей, это просто книжка. Это не курс для студентов, но по нему можно учиться. Типа "учебник-для-себя".

--
Да, примерно так.
Мне сложно представить именно учебник по архитектуре конкретного процессора или учебник по программированию для конкретного процессора или скажем, учебник по микросхемам серии К155. Но можно представить книги или цикл статей или data sheet/manuals об этом. Которые могут быть полезны для студентов (и, скорее всего, не столько для студентов, сколько для других категорий читателей) в их конкретной деятельности.
Но если эта информация включается в учебник, то должны быть и другие, альтернативные варианты; с описанием преимуществ и недостатков, областей применения, рекомендациями к использованию и т.п. Или преподаватель предлагает несколько источников — например, книгу Зубкова, цикл Ваших статей и "IA-32 Intel® Architecture Software Developer’s Manual", volume 1-3


SH>Значит я не прогадал Ваша притензия, насколько я понимаю, к теме курса как таковой. Я предлагаю исключить этот предмет из рассмотрения. Тема уже есть, поменять её на "Кройка и шитьё во второй полине 18-го века в северных районах Австрии" уже нельзя Мне интересны притензии к содержанию.

--
"К пуговицам претензий нет. Пришиты крепко." (М.Жванецкий)

С уважением,
Геннадий Майко.
Re: Программирование x86 в защищённом режиме
От: Stanky  
Дата: 12.11.05 08:49
Оценка:
Почитал немного, вроде неплохо...

Я бы добавил ещё такие моменты:
        call set_PE

        ;Будет выполнено, как xor ax,ax
        xor    ax,ax

        ; 32-разрядный дальний переход. Перключает содержимое cs из нормального
        ; для реального режима (адрес) в нормальное для защищённого (селектор).
        ; 32-разрядность нужна для потому, что смещение может занимать
        ; больше 16-ти разрядов.

        ; Базовый адрес целевого сегмента 0, поэтому смещение вычисляется и
        ; записывается время выполнения
        db      66h  ; префикс изменения разрядности операнда
        db      0EAh ; код команды дальнего перехода
pm_offs dd      0    ; смещение
        dw      8    ; селектор

next_command_PM:

        ; В данный момент сегмент кода - 4 Гб, базовый адрес 0, разрядность кода - 32 бита


        ;Будет выполнено, как xor eax,eax, потому что наш сегмен кода
        ;теперь интерпретируется процессором, как 32-х разрядный
        xor    ax,ax

        ;Потому, что код 32-х разрядный, то и смещение должно быть 32-х разрядным
        ;Либо должен присутствовать префикс переопределения разрядности опеанда
        db    0EAh
        dd    offset RealMode
        dw    16
RealMode:


Это я привёл случай, когда в дескрипторе кода для защищённого режима установлен разряд "D".
И ещё не совсем очевидный момент: когда мы в команде перехода указываем смещение, то это смещение относится именно к тому сегменту кода, который указан в переходе, а не к текущему.

И момент, который я раньше не понимал, да и сейчас не понимаю: если нам не нужен 32-разрядный код, а нужно сделать лишь малую часть в защищённом режиме, например снять ограниение в 64КБ с сегментов, то зачем нам загружать в cs новое значение?
Я всегда делал так:
;Отключить прерывания
    cli
;Перейти в защищенный режим
    mov    eax,cr0
    or     al,1
    mov    cr0,eax
;Настроить сегментные регистры
    mov    ax,SEL_DATA
    mov    ds,ax
    mov    es,ax
    mov    fs,ax
    mov    gs,ax
;Переключиться в реальный режим
    mov    eax,cr0
    and    al,0FEh
    mov    cr0,eax
;Разрешить прерывания
    sti

Объясните мне тупому, почему все это делают?

И про 20-ю адресную линию тоже не совсем понятно почему мы используем 92-й порт. Единственное, что я про него знаю — он управляет линиями клавиатуры, но все потроха (описание) я как-то ни разу не видел. Просто даётся код:
    mov    al,0D1h
    out    64h,al
    mov    al,0DFh
    out    60h,al

либо такой:
    in     al,92h
    or     al,2
    out    92h,al

Первый вариант мне понятен, так как при разборе с клавиатурой я видел, что к чему, но он у меня работал не везде... Почему? А вот со вторым вариантом броблем не возникало.
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[2]: Программирование x86 в защищённом режиме
От: Stanky  
Дата: 12.11.05 09:42
Оценка:
И ещё: у процессора нет команды iretd — это всего лишь указание компилятору, чтоб он сделал следующее:
    db    66h
    iret
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[2]: Программирование x86 в защищённом режиме
От: Stanky  
Дата: 12.11.05 09:43
Оценка:
И ещё: у процессора нет команды iretd — это всего лишь указание компилятору, чтоб он сделал следующее:
    db    66h
    iret

при работе в 32-х разрядном коде нужно использовать именно iret, так как iretd заставит процессор работать с ip, а не eip.
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[3]: Программирование x86 в защищённом режиме
От: gear nuke  
Дата: 12.11.05 10:51
Оценка:
Здравствуйте, Stanky, Вы писали:

S>И ещё: у процессора нет команды iretd — это всего лишь указание компилятору, чтоб он сделал следующее:

S>
S>    db    66h
S>    iret

S>при работе в 32-х разрядном коде нужно использовать именно iret, так как iretd заставит процессор работать с ip, а не eip.

Вот что говорит талмуд от Intel:

IRET and IRETD are mnemonics for the same opcode. The IRETD mnemonic (interrupt return double) is intended for use when returning from an interrupt when using the 32-bit operand size; however, most assemblers use the IRET mnemonic interchangeably for both operand sizes.


Fasm в 32х битном режиме и MSVC компилируют iretd в опкод CF без префиксов.
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: Программирование x86 в защищённом режиме
От: Stanky  
Дата: 12.11.05 11:31
Оценка:
Ну надо же, даже моя статья в этом труде освещена...

И очень бы хотелось попросить у автора книгу, любезно предоставленную Голубевым, по программированию i8259A. В своё время, когда я задавал вопрос про его программирование на форуме он вроде не нашёл её, а вопросы у меня так и остались...
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[2]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 14.11.05 09:21
Оценка:
Здравствуйте, Stanky, Вы писали:

S>Почитал немного, вроде неплохо...


Сенькс

S>Я бы добавил ещё такие моменты:

....

S>Это я привёл случай, когда в дескрипторе кода для защищённого режима установлен разряд "D".


Я решил оставить это до приложения. Глава про сегменты и так большая, грузить читателей ещё и этим я не стал. Тем более, что далее это нигде не используется, мне вполне хватает обычного 16-ти разрядного кода. Кроме того, если не использовать exe-программы, то "честно" сделать 32-х разрядный сегмент не получится.

S>И ещё не совсем очевидный момент: когда мы в команде перехода указываем смещение, то это смещение относится именно к тому сегменту кода, который указан в переходе, а не к текущему.


Это в смысле при длинном переходе? Ну да, но вроде это понятно..

S>И момент, который я раньше не понимал, да и сейчас не понимаю: если нам не нужен 32-разрядный код, а нужно сделать лишь малую часть в защищённом режиме, например снять ограниение в 64КБ с сегментов, то зачем нам загружать в cs новое значение?


Ты прав, низачем. Новое значение в cs нужно если собираемся работать с прерываниями/исключениями, поскольку в следующих главах я именно этим и занимаюсь, привёл такие примеры. В главе про сегменты первая программа, снимающая ограничение на fs не трогает cs, ей не нужно.

S>И про 20-ю адресную линию тоже не совсем понятно почему мы используем 92-й порт.


Вот понятия не имею Взял у Зубкова, проверил — работает Как клавиатура связана с памятью не знаю.
Делай что должно, и будь что будет
Re[2]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 14.11.05 09:25
Оценка:
Здравствуйте, Stanky, Вы писали:

S>Ну надо же, даже моя статья в этом труде освещена...




S>И очень бы хотелось попросить у автора книгу, любезно предоставленную Голубевым, по программированию i8259A. В своё время, когда я задавал вопрос про его программирование на форуме он вроде не нашёл её, а вопросы у меня так и остались...


Эээ... Тебе как, телепортнуть? Она у меня сейчас на столе лежит, спрашивай, если там будет ответ — отвечу Только давай в отдельной ветке или по почте.
Делай что должно, и будь что будет
Re[3]: Программирование x86 в защищённом режиме
От: Stanky  
Дата: 14.11.05 09:43
Оценка:
> Эээ... Тебе как, телепортнуть?
>
Можешь мне в Аську (117097693) постучаться?
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[3]: Программирование x86 в защищённом режиме
От: Stanky  
Дата: 14.11.05 09:43
Оценка:
> Вот понятия не имею Взял у Зубкова, проверил — работает
>
Аналогично.
Posted via RSDN NNTP Server 1.9
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[3]: Программирование x86 в защищённом режиме
От: Andrew S Россия http://alchemy-lab.com
Дата: 14.11.05 10:32
Оценка:
S>>И про 20-ю адресную линию тоже не совсем понятно почему мы используем 92-й порт.

SH>Вот понятия не имею Взял у Зубкова, проверил — работает Как клавиатура связана с памятью не знаю.


Все просто. Иначе вы второй мегабайт не увидите.

При вычислении физических адресов в системах с 8086/88-ми процессорами могла иметь место вполне стандартная ситуация, а именно: адресное переполнение, которое при наличии 20-разрядной шины адреса приводило к сворачиванию адресного пространства в так называемое кольцо. Это и происходило как раз во время упомянутого суммирования.

В процессорах следующего поколения (в 286-х был преодолен предел в 1 Мб адресного пространства) на выходе A20 устанавливалось значение «1», что соответствовало адресу из второго мегабайта памяти. При разработке процессоров и чипсетов машин класса IBM PC/AT в схему чипсета был введен специальный вентиль Gate A20. В то время его появление в наборе логики было, прежде всего, связано с обеспечением полной программной совместимости с предыдущим классом машин. Вентиль принудительно устанавливал нулевое значение на линии A20 адресной шины.

На первых машинах, где был реализован контроль и управление линией A20, управление последней осуществлялось через программно задаваемый бит контроллера клавиатуры 8042 (или 8742) (см. в следующих номерах раздел Keyboard). Позднее эту функцию возложили и на чипсет, что значительно ускорило скоростные характеристики ( Gate A20 Fast Control) системы.

Все это означало, что появление 32-разрядных процессоров не вызвало заметных изменений, поскольку специальный вход процессоров ( A20M — A20 Mask) остался. Упомянутый вход современного процессора есть не что иное, как маскирование бита A20 физического адреса для эмуляции адресного пространства 8086 в реальном режиме работы процессора. А это связано и с тем, что адресная линия A20 используется также для переключения из реального режима в защищенный. Иногда в описаниях эта ситуация объясняется так, будто существует категория пользователей, работающих со старым программным обеспечением. Именно для них эта опция и предназначена. То есть она связана с совместимостью со старым ПО. Хотя фразы о категориях пользователей встречаются все реже и реже, опция по-прежнему входит в стандартный набор BIOS Setup. Необходимо также отметить, что некоторые старые драйверы MS-DOS, например VDISK.SYS, могут блокировать линию А20, конфликтуя с драйвером HIMEM.SYS (это опять-таки из далекого прошлого).

Рассмотрим подробнее вопрос об эмуляции. Обычно программы для A20-операций используют обращения через BIOS или порты 60/64h, предназначенные для контроллера клавиатуры. Чипсет перехватывает эти обращения, тем самым эмулируя контроллер клавиатуры. В порт 64h записывается D1h, а в 60h — 02h. Контроль линии A20 осуществляется далее через порт 92h. А в некоторых случаях за это отвечают и контроллер клавиатуры, и чипсет, тогда линия A20 контролируется через порты 60/64h.

http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 14.11.05 10:43
Оценка:
Здравствуйте, Andrew S, Вы писали:

S>>>И про 20-ю адресную линию тоже не совсем понятно почему мы используем 92-й порт.


SH>>Вот понятия не имею Взял у Зубкова, проверил — работает Как клавиатура связана с памятью не знаю.


AS>Все просто. Иначе вы второй мегабайт не увидите.


Мы оба (я и Stanky) — в курсе Вопрос в том, почему эту миссию возложили именно на контроллер клавиатуры. Я бы вообще специальный портик завёл
Делай что должно, и будь что будет
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[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[4]: Программирование x86 в защищённом режиме
От: SergH Россия  
Дата: 22.11.05 14:33
Оценка:
Здравствуйте, gear nuke, Вы писали:

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

GN>

GN>

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


fixed,

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


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


fixed,

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


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


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