( Вход | Регистрация | Поиск )

C/C++ и assembler, C/C++ и assembler
Дата обновления: 13.07.2006 - 15:26, перейти к новому сообщению

·Штуцер
Группа: Наши Люди

Сообщений: 363
Такая задачка: есть некий прибор, подключеный к паралельному порту. Нужна функция, считывающая данные с порта в массив. И маленькая, но неприятная особенность - считывать нужно побитово, не побайтово. Сама прога написана на С++. Думаю, без асемблера здесь никак. Буду очень благодарен за помощь.


Ответов(1 - 4)

·yah
Группа: Наши Люди

Сообщений: 2.336
QUOTE(Штуцер @ 12.07.2006 - 15:08)
Сама прога написана на С++



Может выложишь искходники, все-таки легче будет.



·CraZy_JumPeR
Группа: Пользователи

Сообщений: 112
В С++ есть битовые поля.

QUOTE
Элементы структуры или объединения могут быть определены как битовые поля шириной от 1 до 16 бит, знаковые или беззнаковые. Общая форма описания битового поля:
имя_типа  имя_поля : ширина;
Допустимые типы битовых полей - int, char, unsigned int, unsigned char. Ширина битового поля - целое число от 0 до 16. Идентификатор поля может быть пропущен, в этом случае заданное число бит размещается в памяти, но будет недоступно. Для знаковых полей старший левый бит интерпретируется как знак. Над элементами битовых полей не может быть выполнена операция взятия адреса &.
Пример:
struct  Date
{ unsigned int Day:5;
  unsigned int Mon:4;
  unsigned int Year:7;} Start ={1,9,98};


Другой вопрос, чё с ними делать.:) Обратиться к ним мне так и не удалось, сколько я ни пыхтел, хотя я далеко не высшая программистская инстанция. Может тебе и удастся.
Да и нужно это было для курсача, так что выход был таким:
CODE
unsigned char* DecToBin(int Dec, int k)
{
unsigned char* res;
res = new unsigned char[k];
for (int i = 0; i < k; i++) res[i] = 0;
int lg;
for (; Dec > 0; )
{
 lg = (log(Dec)/log(2) + 0.000001);
 res[k - lg - 1] = 1;
 Dec -= pow(2,lg);
}
return res;
}




·Штуцер
Группа: Наши Люди

Сообщений: 363
Спасибо, CraZy_JumPeR, полезная инфа. Но все-таки, есть в С++ функция, считывающая с порта 1 бит? А если нет, то как реализовать ее, сишную, на асемблере?


·ZaHack
Группа: Заблокированные

Сообщений: 1.252
QUOTE(Штуцер @ 13.07.2006 - 15:18)
... Но все-таки, есть в С++функция, считывающая с порта 1 байт? ...



QUOTE
...Нужна функция, считывающая данные с порта в массив. И маленькая, но неприятная особенность - считывать нужно побитово, не побайтово.


Так тебе нужно побайтово или все-таки побитово??? Определись наконец!