OSDev http://osdev.su/ |
|
TSS прерывания и т.п. http://osdev.su/viewtopic.php?f=6&t=526 |
Страница 1 из 1 |
Автор: | scuter [ 11 апр 2012, 02:00 ] |
Заголовок сообщения: | TSS прерывания и т.п. |
всем доброговремени суток, скажите пожалуйста как грузить TSS команда LGDT воспринимает только 1 регистр, скажите это означает что таблица TSS может находится где угодно, а в регистре должен находится offset таблици команда LIDT тоже воспринимает 1 регистр, но это же прерывание туда надо сообщить номер прерывания, и абсолютный адрес куда надо прыгнуть(JMP) или как то оно по другому и кстати где в tss сохраняется состояние задачи и где карта доступа i/o перенаправление прерываний и ещё вопрос по TSS первые 8 селекторов заняты савсем не селекторами Код: base size DPL 0 0 0 0 0 0 c0000000 32-bit code c0000000 32-bit data 0 BFFFFFFF 3 32-bit code 0 BFFFFFFF 3 32-bit data 0 0 0 0 0 0 что это такое не могу понять дальше селекторы чередуются TSS, LDT причем первый из них почемуто пишется base 32-bit TSS далее хотелось бы узнать про IRQ -- как его программировать скажите хотя бы как переписать прерывание которое запускается или как узнать какое прерывание запускается, функции get_IRQ_INTER( IRQ_N) //return interupt number set_IRQ_INTER( IRQ_N, INTERUPT) (просто надо бы с клавиатурой и мышью подружиться) как запускать задачи по таймеру т.е. программирование таймера Код: 00000000060f9920 ffffff80 ffff6ff0 00000000 Real 3888274315 3888255676 0 2-ACTIVE EMT Yielder
00000000060f98a0 00000000 00000080 00000000 Real 3888274315 3888256653 0 2-ACTIVE CPU Load Timer 00000000060f8df0 00000000 fffe9cb0 00000000 VrSy 0 1199864031601 0 2-ACTIVE ACPI PM Timer 00000000060f71b0 00000000 00000000 00000000 Virt 0 0 0 1-STOPPED USB Frame Timer 00000000060f59d0 00000000 00000000 00000000 Virt 0 5000000 0 2-ACTIVE Audio timer 00000000060f5890 00000000 00000000 00000000 Virt 0 0 0 1-STOPPED SB16 timer 00000000060f5370 00000000 00000000 00000000 Virt 0 0 0 1-STOPPED PCNet Restore Timer 00000000060f52f0 00000000 00000000 00000000 Virt 0 0 0 1-STOPPED PCNet SoftInt Timer 00000000060f5270 00000000 00000000 00000000 Virt 0 0 0 1-STOPPED PCNet Poll Timer 00000000060f0910 00009010 00000000 00000000 Real 3888274315 3888255604 0 2-ACTIVE VGA Refresh Timer 00000000060e2aa0 00016350 fffff910 00000000 VrSy 0 990000000 0 2-ACTIVE MC146818 RTC/CMOS - Second2 00000000060e2a20 00000000 00000000 00000000 VrSy 0 0 0 1-STOPPED MC146818 RTC/CMOS - Second 00000000060e29a0 00000000 00000000 00000000 VrSy 0 0 0 1-STOPPED MC146818 RTC/CMOS - Periodic 00000000060e23b0 000006f0 00000000 00000000 VrSy 0 27462701 18 2-ACTIVE i8254 Programmable Interval Timer 00000000060e1950 00000000 00000000 00000000 VrSy 0 0 0 1-STOPPED APIC Timer #0 00000000060de820 00000000 00000000 00000000 Real 3888274316 0 0 1-STOPPED BlkCache-Commit |
Автор: | tlx [ 11 апр 2012, 07:04 ] |
Заголовок сообщения: | Re: TSS прерывания и т.п. |
Тебе для чего? Как глубоко будешь копать? Просто интересно. А вообше все ответы на твои вопросы в книге Зубова "Ассемблер для..." Чтобы ответить по коду желательно знать откуда он. |
Автор: | pavia [ 11 апр 2012, 08:43 ] |
Заголовок сообщения: | Re: TSS прерывания и т.п. |
Читайте. Статей много книг много. http://sasm.narod.ru/docs/pm/pm_main.htm http://ru.osdev.wikia.com/wiki/Intel_Manual_Part_3 Ошибочка, вы попутали регистры. Регистр LDTR указывает на LDT, а не на TSS. На TSS указывает регистр TR. Вернее сказать так LDTR как и TR содержит селектор сегмента из таблицы дескрипторов. В этой таблице дескрипторов и находится смещение. |
Автор: | Bargest [ 11 апр 2012, 14:20 ] |
Заголовок сообщения: | Re: TSS прерывания и т.п. |
Цитата: команда LDTR воспринимает только 1 регистр, Для загрузки TR используется команда ltr: Код: ltr ax И в AX находится селектор TSS, а её дескриптор - в GDT. Цитата: команда LIDT тоже воспринимает 1 регистр Тут грузится регистр, представляющий собой адрес таблицы и её предел. Сама таблица лежит в памяти и уже в ней описываются все прерывания. За подробным описанием - к документам Intel или AMD. |
Автор: | scuter [ 11 апр 2012, 14:52 ] |
Заголовок сообщения: | Re: TSS прерывания и т.п. |
tlx писал(а): Тебе для чего? Как глубоко будешь копать? для удавольствия. tlx писал(а): А вообше все ответы на твои вопросы в книге Зубова "Ассемблер для..." что то ответов я там не нашёл. pavia писал(а): Ошибочка, вы попутали регистры. Регистр LDTR указывает на LDT, а не на TSS. да действительно перепутал(LGDT). pavia писал(а): На TSS указывает регистр TR. Вернее сказать так LDTR как и TR содержит селектор сегмента из таблицы дескрипторов. В этой таблице дескрипторов и находится смещение. то есть в таблице TSS хронятся указатели на 104 байта состояния задач, ну а где хранится i/o map |
Автор: | pavia [ 11 апр 2012, 15:47 ] |
Заголовок сообщения: | Re: TSS прерывания и т.п. |
Цитата: то есть в таблице TSS хронятся указатели на 104 байта состояния задач, Неа имелось в виду таблица GDT. В ней указан базовый адрес сегмента TSS Вот читай. том 3, глава 6, регистр задачи Картинке найдёшь в оригинальном руководстве. i/o map находиться вот где: В сегмента TSS есть поле базового адреса карты в/в (I/O map) вот оно задает смещение карты считая от базы сегмента TSS. |
Автор: | scuter [ 11 апр 2012, 16:29 ] |
Заголовок сообщения: | Re: TSS прерывания и т.п. |
pavia писал(а): В сегмента TSS есть поле базового адреса карты в/в (I/O map) вот оно задает смещение карты считая от базы сегмента TSS. то есть сначало идут TSS сегмент а потом карты (I/O map), и в сегменте TSS пишется Сегмент состояния задачи (TSS). Описатель точки входа в задачу. Описатель TSS. Регистр задачи (Task register сокращённо TR). Флаг NT из регистра EFLAGS. только что нахоится в начале TSS Код: base size DPL 0 0 0 0 0 0 c0000000 32-bit code c0000000 32-bit data 0 BFFFFFFF 3 32-bit code 0 BFFFFFFF 3 32-bit data 0 0 0 0 0 0 что это? |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |