[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено misyachniy 28 марта 2003 г. 11:39
В ответ на: Ответ: А при каких адресах данные пишутся в старшие разряды? Что будет, если использовать нечетные адреса отправлено Selya 28 марта 2003 г. 10:51

Простарнство адресов ввода/вывода точно такое же как и пространство памяти.

Так как обмен по PCI стандартно 32 битный, то при записи в порт
или в память всегда выставляется адрес кратный 4(как SM уже сказал)
Ножки A0 и A1 всегда в нуле.

[pre]
Если адрес порта тоже кратен 4 то данные попадают в D[7..0]
Если остаток от деления на 4 равен 1 то в D[15..8].
2 - соответственно D[23..16].
3 - соответственно D[31..24].

Для того чтобы карточка разобралась куда идет запись, и существуют
биты выбора байта.

Если используется команда "out dx,ax" и при этом адрес(число в DX ) оканчивается на 11 в двоичном выражении, то будут сформированы два
цикла.
Вначале записан al, который попадет в D[31..24],
затем ah, который попадет в D[7..0]
Что будет похоже на следующий ассемблерный код

out dx,al
mov al,ah
inc dx
out dx,al

При команде "out dx, eax" также возможна подобная ситуация.
Для предотвращения этих ситуаций, базовый адрес выдаваемый BIOS
всегда кратен 4 (PCI 2.1 стр 196).

Таким образом, чтобы данные попали в старшие разряды(автор вопроса подразумевал D31..D24?) нужно обращатся командой

out DX,AX

При этом DX должен иметь адрес оканчивающийся на 10 в двоичной ситеме.

Или "out DX, EAX" (в dx адрес оканчивающийся на 00).
При этом в старшие разряды попадет старшая половина EAX.

[/pre]


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru