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[6]: Программирование x86 в защищённом режиме
От: Andrew.W Worobow https://github.com/Worobow
Дата: 11.11.05 15:15
Оценка: +1 :))
Здравствуйте, SergH, Вы писали:

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

Всегда рад!


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


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

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


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

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


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

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


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

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

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


Я думаю, что скорее для упрощения взаимопонимания. Стандартная терминология — великая вещь.
Делай что должно, и будь что будет
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) — в курсе Вопрос в том, почему эту миссию возложили именно на контроллер клавиатуры. Я бы вообще специальный портик завёл
Делай что должно, и будь что будет
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.