![]() |
|
|
![]()
|
|
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: нет Всего: 8 |
Нужна инфа, как действительно быстро работать с битами на асме, допустим у меня такой код, который я включаю в С++ прогу
те, я хочу выполнить xor dl со значением 7 бита из 1 записи массива array. учитывая, что этот код достаточно много повторяется - это сильно влияет на общую производительность программы, хотелось-бы сделать как-нибудь побыстрее... |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: нет Всего: 111 |
||||
|
||||
| WolfON |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: нет Всего: 8 |
Неет, мне-бы именно какие опкоды для этого дела лучше всего использовать, те какое их сочетание, а то я не шибко их хорошо знаю и таблица тактов мне не слишком поможет
Добавлено @ 22:17 Прсосто може есть какие-нибудь не явные способы это сделать допустим что-то вроде:
или
тока вот я не уверен, что это будет нормально работать... |
||||
|
|||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Посмортри главу 2.3.6 из Зубкова СВ по поводу команд bt, bts:
Также хотел заметить, что на быстродействие влияет также спаривание команд и многое другое. Ты привел слишком мало кода, чтобы особо что-то оптимизировать, но вот некоторые принципы: - не должно идти подряд командам, использующем один и тот же регистр, например: mov eax,[esi] xor edx,eax ; use eax inc ecx Лучше менять на: mov eax,[esi] inc ecx xor edx,eax Насчет прямо приведенного тобой кода можно порекомендовать: заранее хранить перевернутые байты в array, чтобы не делать shr al,7; или сделать то же самое в несколько команд: mov al,array[1] rol al,1 and al,1 xor dl,al -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: нет Всего: 8 |
Все-равно это по производительности почти идентично.....
Мне кажется можно как-=то с памятью поработать или... |
|||
|
||||
| ZeroMem |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 24.8.2004 Где: Комсомольск-на-Ам уре Репутация: нет Всего: нет |
Могу, конечно, ошибаться, но как я понял, тебе надо, допустим, из array[1] скопировать состояние 7-го в dl, а потом выполнить xor c этим элементом? Если так, то я бы действовал вот так(пишу прямо в страницую Могу ошибиться
mov al, byte ptr array[1] mov dl, 1 shr dl, 7 and dl, al Вот вроде где-то так я бы попробовал вытащить состояние 7-го бита. Но если я не ошибаюсь, то это состояние будет не на превом, а на седьмом месте Это сообщение отредактировал(а) ZeroMem - 19.5.2005, 15:27 |
|||
|
||||
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: нет Всего: 8 |
Ну это почти тоже-самое, что у меня
|
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Ну так, что никто незнает?
Позор.... Переформулирую вопрос: Как достать бит из памяти? Как достать бит из регистра? Только без shl и shr - они очень тормознутые. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
AND-ом по соотв. маске. Ясен пень. Или ВТ. Приведенный фрагмент кода слишком мал, чтобы понять где его можно оптимизировать. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: нет Всего: 8 |
Нужно проврить бит на соответствие в ергистре или в памяти и выполнить действие.
shl,shr - медленно |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
WolfON
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: нет Всего: 8 |
Ну тестом я тоже делал, просто вот как достать бит напрямую из памяти, без такого гимора?
|
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
WolfON
-------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| AISIN |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 27.1.2005 Где: Пушкино Репутация: нет Всего: 1 |
Вот тебе сразу на Си как извлечь бит!
Это сообщение отредактировал(а) AISIN - 12.7.2005, 13:19 --------------------
Внимание!!! Внимание!!!Запущена программа по завоеванию мира!!!Выполненно 0,000000000000000000000000000000000000000000000000000002% |
||||
|
|||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |