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

Отправлено misyachniy 13 сентября 2001 г. 10:54
В ответ на: Потому что устройства редко могут выдавать отправлено Александр Гайворонский 10 сентября 2001 г. 17:41

Система адресации памяти и устройств ввода вывода линейная.

Т.е. например слово расположенное по адресу 20h это два байта
по адресам 20h и 21h

Если производиться чтение/запись слова по четному адресу то контроллер шины проверяет ответ от устройства -MEM CS16 или -I/O CSI6.

Так например код

mov dx,20h
in ax,dx

Может выполнятся как написано(если устройство подтверждает 16-битную пересылку -I/O CSI6)
или за два цикла по шине.

Что для программиста можно представить:

mov dx,20h
in al,dx
shl ax,8
inc dx
in al,dx
dec dx

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

Я к стати игрался с другим аспектом.

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

Например в регистр 3D4h записывается индекс(номер регистра к которому обращаемся) а
затем записываются данные в регистр 3D5h.

Так как оба регистра 8 битные то

mov dx,3d4h
out dx,ax

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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru