Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Регистры PCI - хочу понять

Автор: NOPA
Дата сообщения: 06.04.2016 14:31
Захотелось поиграться с значениями регистров PCI. В среде DOS + Intel pci.exe v. 2.0, зашел в конфигурационное пространство нужного устройства. Согласно даташиту, перешёл к нужным регистрам по смещению.
Но, кажется, я не понимаю этих значений. В моём случае, забиты значения F5 54, однако в даташите таких значений нет.
Вопрос такой - как понимать, например, значения из даташита: bits 3:2 ? Как на основании этого рассчитываются значения нужных регистров?
Автор: dimitriy7
Дата сообщения: 06.04.2016 14:38
NOPA

Цитата:
В моём случае, забиты значения F5 54, однако в даташите таких значений нет.

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


Цитата:
Вопрос такой - как понимать, например, значения из даташита: bits 3:2 ?

Так и понимать -- используется не всё слово, а отдельные биты.
Автор: NOPA
Дата сообщения: 06.04.2016 15:05
dimitriy7
Все равно непонятно. Я зашел в область конфигурации устройства. Согласно даташиту, нужные мне регистры доступны по сдвигу 90 и 91. Интересующая меня конфигурация описана "bits 3:2". Нужно по сдвигу 90 указать 03, а по 91 - 02 ? Но у меня даже не получается этого сделать, последнее значение не устанавливается.

Добавлено:
Принцип, кажется, понял. Вопрос - при формирования слова, младший бит нужно ставить в начало?
Автор: dimitriy7
Дата сообщения: 06.04.2016 16:36
NOPA

Цитата:
Нужно по сдвигу 90 указать 03, а по 91 - 02 ?

Нет, конечно...
Надо прочитать весь регистр (в вашем случае 2-байтный 0х90+0х91), затем работать с его отдельными битами. Потом записывать тоже целиком.
И не забывайте -- регистры могут быть разной длины, от 8 до 32 бит.


Цитата:
Вопрос - при формирования слова, младший бит нужно ставить в начало?

Нулевой -- младший.
7-й/15-й/31-й -- старший.
Всё как обычно.
Автор: NOPA
Дата сообщения: 06.04.2016 17:03
Немного ошибся с вопросом.

В двух регистрах записано значение F5 54. 54 - младший байт, нужно ли при формировании 16-битного слова ставить его в начало ( 0x54F5 )?

После перевода в двоичную систему, биты будут считаться справа налево?
Автор: dimitriy7
Дата сообщения: 06.04.2016 17:24
NOPA

Цитата:
В двух регистрах записано значение F5 54. 54 - младший байт, нужно ли при формировании 16-битного слова ставить его в начало ( 0x54F5 )?

Так считайте какой-нибудь стандартный регистр с известным значением и посмотрите, как ваша программа его показывает, в каком порядке...


Цитата:
После перевода в двоичную систему, биты будут считаться справа налево?

Нулевой справа, пятнадцатый слева, да.
Автор: NOPA
Дата сообщения: 06.04.2016 17:48
dimitriy7
Перевожу значение 0x54F5 в двоичный формат и получаю 15 символов. Если же наоборот, 0xF554, то символов 16. Как правильно?
Автор: dimitriy7
Дата сообщения: 06.04.2016 18:17
NOPA

Цитата:
Перевожу значение 0x54F5 в двоичный формат и получаю 15 символов. Если же наоборот, 0xF554, то символов 16

0х545f = 0101 0100 0101 1111
0хf554 = 1111 0101 0101 0100
Значит, ваша программка просто не показывает нуль в старшем разряде.


Цитата:
Как правильно?

Еще раз повторю -- ну считайте вы какой-нибудь заведомо известный регистр и посмотрите, в каком порядке ваша программа показывает байты...
Ну например подцепитесь к любому известному устройству и считайте пару слов 0х00+0х01 и 0х02+0х03 -- в них лежат ВенИД и ДевИД, и сравните с паспортными.

Страницы: 1

Предыдущая тема: Командная строка


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.