[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]

Отправлено vladimir 08 мая 2001 г. 11:44
В ответ на: так в том то и дело,что если адрес порта не кратен 4 и обращение ведется байтами,то декодировать нужно и младшие,и при это данные могут пойти по ad[31..24] например,если порт например 53-й!! отправлено Малян 05 мая 2001 г. 01:47

Если хочется экономить ножки для дешифрации то нужно выкручиваться на ассемблере:

Port50 DD ? ; здесь храниться значения портов 50,51,52,53

Ввод байта из порта 53 прост

mov dx,50h ; адрес порта
in eax,dx ; считали двойное слово
shr eax,24d ; результат в al. Можно сдвинуть циклически "rol eax,8"

Вывод посложнее:
Нужно обнулить старший байт, и туда вписать новое значение

mov dl,value ; байт для вывода в порт 53
shr edx,24d ; теперь он на нужном месте
mov eax,Port50 ; старое значение портов 50,51,52,53
and eax,0ffffff ; очистили место порта 53
or eax,edx ; новое значение порта 53
mov dx,50h ; адрес порта
out dx,eax ; порты 50,51,52 остались прежними, порт 53 изменился

Естественно порты 50,51,52,53 должны принадлежать проектируемому устройству. В противном случае нужна полная дешифрация.

При таком обращении порт 50 всегда на D0..D7, 51 на D8..d15 итд.

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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru