|
Как разбить 2 байта по байту)) |
|
|
|
 |
Ответов
|
Oct 22 2008, 18:18
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 23 2008, 12:20
|
Группа: Новичок
Сообщений: 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
|
|
|
|
|
Oct 23 2008, 20:31
|

Гуру
     
Группа: Свой
Сообщений: 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  Цитата p.s. А вообще, давайте жить дружно! Легко  , если будете более обдуманно писать.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
Xenom0rph Как разбить 2 байта по байту)) Oct 17 2008, 11:24 Палыч Например:
unsigned int A;
unsigned char b, c;
b= A... Oct 17 2008, 11:29 Xenom0rph Цитата(Палыч @ Oct 17 2008, 15:29) Наприм... Oct 17 2008, 11:59  Палыч Цитата(Xenom0rph @ Oct 17 2008, 14:59) У ... Oct 17 2008, 12:07   Xenom0rph Цитата(Палыч @ Oct 17 2008, 16:07) Ошибоч... Oct 17 2008, 12:54 lks Цитата(Палыч @ Oct 17 2008, 15:29) или че... Oct 19 2008, 13:29  zltigo Цитата(lks @ Oct 19 2008, 15:29) Вроде бы... Oct 19 2008, 15:16   Сергей Борщ Цитата(zltigo @ Oct 19 2008, 18:16) union... Oct 20 2008, 07:08    zltigo Цитата(Сергей Борщ @ Oct 20 2008, 09:08) ... Oct 20 2008, 08:04 Огурцов На чем пишем ?
В WinAVR/GCC можно сделать так
#d... Oct 17 2008, 12:02 Demeny Цитата(Xenom0rph @ Oct 17 2008, 15:24) Во... Oct 17 2008, 12:09 Палыч Цитата(Demeny @ Oct 17 2008, 15:09) Не ну... Oct 17 2008, 12:21 DiMomite В CVAVR надо писать так: eeprom unsigned char a[10... Oct 17 2008, 22:52 Xenom0rph Цитата(DiMomite @ Oct 18 2008, 02:52) В C... Oct 18 2008, 10:25 smalcom вроде небыло варианта
unsigned int uiA = 0xABCD
u... Oct 19 2008, 02:00 zltigo Цитата(smalcom @ Oct 19 2008, 04:00) врод... Oct 19 2008, 09:42 smalcom ЦитатаОчень жаль, что теперь "eсть" sad.... Oct 19 2008, 11:49 zltigo Цитата(smalcom @ Oct 19 2008, 13:49) ...и... Oct 19 2008, 13:07 g-gabber __asm{
mov ax,[value]
movzx ecx,al
movzx edx,ah
} Oct 22 2008, 08:07 zltigo Цитата(g-gabber @ Oct 22 2008, 10:07... Oct 22 2008, 08:25  g-gabber Цитата(zltigo @ Oct 22 2008, 10:25) К чем... Oct 22 2008, 08:49   g-gabber Цитата(zltigo @ Oct 23 2008, 22:31) Совер... Oct 23 2008, 21:30
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|