реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как разбить 2 байта по байту))
zltigo
сообщение Oct 19 2008, 15:16
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(lks @ Oct 19 2008, 15:29) *
Вроде бы так должно быть? smile.gif

Отнюдь sad.gif
Цитата
union LOG { unsigned char aa[2], unsigned int dd; }ff;

int штука коварная и непереносимая в некоторых случаях. В Вашем случае 'unsigned short'
И зачем делать union c обезличенным массивом sad.gif
union my_short {
unsigned short dd;
unsigned char lo;
unsigned char hi;
} ff;
И вообще, если не описывать union каждый раз, то
typedef union my_short {
unsigned short dd;
unsigned char lo;
unsigned char hi;
} my_short_t;

my_short_t ff;

Цитата
unsigned int big;

unsigned short big;
Цитата
dd.ff = big;

ff.dd = big;
С точностью до наоборот. И вообще промежуточная переменная big просто лишняя - надо сразу использовать ff.dd
Цитата
bb = ff.aa[0];
cc = ff.aa[1];

bb = ff.lo;
cc = ff.hi;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 20 2008, 07:08
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zltigo @ Oct 19 2008, 18:16) *
union my_short {
unsigned short dd;
unsigned char lo;
unsigned char hi;
} ff;
Код
union   my_short {
    unsigned short dd;
    struct
    {
        unsigned char lo;
        unsigned char hi;
    };
} ff;


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 20 2008, 08:04
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Сергей Борщ @ Oct 20 2008, 09:08) *
Код
union   my_short {
    unsigned short dd;
    struct
    {
        unsigned char lo;
        unsigned char hi;
    };
} ff;

Да, конечно! ерунду написал sad.gif.Вдогонку - для переносимости на не 8bit платформы надо структуру еще паковать....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
g-gabber
сообщение Oct 22 2008, 08:07
Сообщение #19





Группа: Новичок
Сообщений: 8
Регистрация: 17-10-08
Пользователь №: 41 022



__asm{
mov ax,[value]
movzx ecx,al
movzx edx,ah
}
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 22 2008, 08:25
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(g-gabber @ Oct 22 2008, 10:07) *
__asm{
mov ax,[value]
movzx ecx,al
movzx edx,ah
}

К чему этот ASM i386 экзерсис, тем более, что разбивкой на БАЙТЫ тут и не пахнет?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
g-gabber
сообщение Oct 22 2008, 08:49
Сообщение #21





Группа: Новичок
Сообщений: 8
Регистрация: 17-10-08
Пользователь №: 41 022



Цитата(zltigo @ Oct 22 2008, 10:25) *
К чему этот ASM i386 экзерсис, тем более, что разбивкой на БАЙТЫ тут и не пахнет?

Упс, то что он под AVR пишет я не увидел,
А вобще, под x86 это самый быстый способ разбрать 2 байтовый int по байтам.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 22 2008, 18:18
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(g-gabber @ Oct 22 2008, 10:49) *
А вобще, под x86 это самый быстый способ разбрать 2 байтовый int по байтам.

1) в ASM ничего бить вообще не надо - все и так доступно, ибо система адресации
позволяет произвольный доступ.
2)написанная ASM вставка есть вещь в себе и использовать ее из С вообще нельзя.
3) Это не для x86 а для 386, как минимум
4) int вообще-то на 386 не двухбайтовый
5) разбили не по байтам а по 32bit
6)movzx не эффективная по производительности команда, посему и насчет быстрый это не так.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
g-gabber
сообщение Oct 23 2008, 12:20
Сообщение #23





Группа: Новичок
Сообщений: 8
Регистрация: 17-10-08
Пользователь №: 41 022



Цитата(zltigo @ Oct 22 2008, 20:18) *
1) в ASM ничего бить вообще не надо - все и так доступно, ибо система адресации
позволяет произвольный доступ.
2)написанная ASM вставка есть вещь в себе и использовать ее из С вообще нельзя.
3) Это не для x86 а для 386, как минимум
4) int вообще-то на 386 не двухбайтовый
5) разбили не по байтам а по 32bit
6)movzx не эффективная по производительности команда, посему и насчет быстрый это не так.


1) То что ASM тут не любят я уже понял,
2) В теме нигде не написанно какой компилятор используется.
3) x86 для меня линейка процессоров, про < 386 я даже и не вспоминал,
4) Какого размера int зависит от компилятора и того как её задекларировать,
Например VS C++ иногда использует int для храния 2 байт(16 бит), а long для 4 байт(32 бит),
5) Я тоже разбивал по 32 битным регистрам (ecx, edx).
6) А с этим я могу поспорить,,,
movzx занимает 3 такта, значит
Код
movzx ecx,al
movzx edx,ah

займёт 6 тактов,

Возьмём код который предложил Палыч.
Код
b= A&0xFF;
c= A>>8;

теперь переведём его в asm, получается следующее:
Код
mov ecx,eax; 1 такт
and  ecx.0xff; 1 такт
mov edx,eax; 1 такт
shl   edx,8 ; 3 такт


По сути получается одно и тоже, но у меня 2 команды, а тут 4, и не нужно забывать что процессору нужно на 2 команды больше обработать,

Инофрмацию я брал от сюда http://www3.itu.edu.tr/~kesgin/mul06/intel/index.html
За базу я брал 486,

p.s. А вообще, давайте жить дружно!

Сообщение отредактировал g-gabber - Oct 23 2008, 12:23
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 23 2008, 20:31
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(g-gabber @ Oct 23 2008, 14:20) *
1) То что ASM тут не любят я уже понял,

Совершенно не верно. Я люблю, и судя по Вашему экзерсизу, простите, знаю его много лучше. Не любю применение ASM ни к селу ни к городу особенно ввиде инлайновых вставок часто сносящих крышу оптимизатору.
Цитата
2) В теме нигде не написанно какой компилятор используется.

Достаточно того, что используется КОМПИЛЯТОР
Цитата
3) x86 для меня линейка процессоров, про < 386 я даже и не вспоминал,

Ну, ну...
Цитата
4) Какого размера int зависит от компилятора и того как её задекларировать,
Например VS C++ иногда использует int для храния 2 байт(16 бит), а long для 4 байт(32 бит),

Глупости не надо говорить, поскольку "про < 386 я даже и не вспоминал".
Цитата
6) А с этим я могу поспорить,,,
movzx занимает 3 такта, значит
Код
movzx ecx,al
movzx edx,ah

займёт 6 тактов,

А чего тут спорить, если
xor edx,edx
mov dl,ah
короче на любезных Вашему сердцу пентиумах, не говоря уже о 386 с его 6 тактами на каждый movzx.
Причем mov и xor на пентиумах конверизируются, а movzx - нет. Короче полный облом с попыткой писать на ASM sad.gif
Цитата
p.s. А вообще, давайте жить дружно!

Легко smile.gif, если будете более обдуманно писать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
g-gabber
сообщение Oct 23 2008, 21:30
Сообщение #25





Группа: Новичок
Сообщений: 8
Регистрация: 17-10-08
Пользователь №: 41 022



Цитата(zltigo @ Oct 23 2008, 22:31) *
Совершенно не верно. Я люблю, и судя по Вашему экзерсизу, простите, знаю его много лучше. Не любю применение ASM ни к селу ни к городу особенно ввиде инлайновых вставок часто сносящих крышу оптимизатору.

Достаточно того, что используется КОМПИЛЯТОР

Ну, ну...

Глупости не надо говорить, поскольку "про < 386 я даже и не вспоминал".

А чего тут спорить, если
xor edx,edx
mov dl,ah
короче на любезных Вашему сердцу пентиумах, не говоря уже о 386 с его 6 тактами на каждый movzx.
Причем mov и xor на пентиумах конверизируются, а movzx - нет. Короче полный облом с попыткой писать на ASM sad.gif

Легко smile.gif, если будете более обдуманно писать.



CPUID без инлайна не вывозишь.
А вообще не хочу спорить ... уверен стажа у меня больше ...
Лучше помогите мне настроить xds560 и OMAP ...

Сообщение отредактировал g-gabber - Oct 23 2008, 21:32
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 06:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01554 секунд с 7
ELECTRONIX ©2004-2016