Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2011, 19:42   #1
TotKtoNado
юзер
Форумчанин
 
Аватар для TotKtoNado
 
Регистрация: 22.12.2010
Сообщений: 245
По умолчанию назначение функций SHR и SHL

обьясните назначение функций shr и shl. И зачем нужно выполнять сдвиги?
TotKtoNado вне форума Ответить с цитированием
Старый 23.12.2011, 00:57   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
И зачем нужно выполнять сдвиги?
1)задача требует
2)быстрое умножение/деление на числа кратные двум(целочисленное умножение/деление)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.12.2011, 09:51   #3
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

Цитата:
Сообщение от TotKtoNado Посмотреть сообщение
обьясните назначение функций shr и shl. И зачем нужно выполнять сдвиги?
учите матчасть. битовый сдвиг - это одна из фундаментальных операций.
а ещё вы будете удивлены что есть ещё целых шесть команд сдвига sar, sal, rcl, rcr, rol, ror.
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 23.12.2011, 11:09   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

и это еще не всё! Есть также команды SHLD (Сдвиг двойного слова влево = SHIFT Left Double word) и SHRD (Сдвиг двойного слова вправо = SHIFT Right Double word),
а также PSLLx, PSLLDQ (Параллельный логический сдвиг влево = Parallel Shift Left Logical)
MMX psll(w/d/q) mmx, count(imm/mmx/m64)
SSE2 psll(w/d/q) xmm, count(imm/xmm/m128)
SSE2 pslldq xmm, count(imm)
MMX-команды сдвига (PSLL(w/d/q)) выполняют сдвиг каждого элемента данных (упакованных 16-, 32- или 64-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающие в результате сдвига младшие биты упакованных элементов операнда DEST заполняются нулями. Операнд COUNT может быть непосредственным значением либо находится в MMX-регистре или в памяти. Операнд DEST должен находиться в MMX-регистре.
SSE2-команды сдвига (PSLL(w/d/q)) выполняют сдвиг каждого элемента данных (упакованных 16-, 32- или 64-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающие в результате сдвига младшие биты упакованных элементов операнда DEST заполняются нулями. Операнд COUNT может быть непосредственным значением либо находится в XMM-регистре или в памяти. Операнд DEST должен находиться в XMM-регистре.
PSRLx, PSRLDQ (Параллельный логический сдвиг вправо = Parallel Shift Right Logical )
MMX psrl(w/d/q) mmx, count(imm/mmx/m64)
SSE2 psrl(w/d/q) xmm, count(imm/xmm/m128)
SSE2 psrldq xmm, count(imm)
MMX-команды сдвига (PSRL(w/d/q)) выполняют сдвиг каждого элемента данных (упакованных 16-, 32- или 64-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающиеся в результате сдвига старшие биты упакованных элементов операнда DEST заполняются нулями. Операнд COUNT может быть непосредственным значением, либо находится в MMX-регистре или в памяти. Операнд DEST должен находиться в MMX-регистре.
SSE2-команды сдвига (PSRL(w/d/q)) выполняют сдвиг каждого элемента данных (упакованных 16-, 32- или 64-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающиеся в результате сдвига старшие биты упакованных элементов операнда DEST заполняются нулями. Операнд COUNT может быть непосредственным значением, либо находится в XMM-регистре или в памяти. Операнд DEST должен находиться в XMM-регистре. Логический сдвиг содержимого XMM-регистра вправо на imm×8 бит величина сдвига задается не в битах (как обычно), а в байтах.
Mikl___ вне форума Ответить с цитированием
Старый 23.12.2011, 15:27   #5
TotKtoNado
юзер
Форумчанин
 
Аватар для TotKtoNado
 
Регистрация: 22.12.2010
Сообщений: 245
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
1)задача требует
2)быстрое умножение/деление на числа кратные двум(целочисленное умножение/деление)
но не проще просто умножать функциями mul и div?
TotKtoNado вне форума Ответить с цитированием
Старый 23.12.2011, 17:24   #6
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

битовые сдвиги нужны не только для умножения и деления
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 23.12.2011, 17:26   #7
TotKtoNado
юзер
Форумчанин
 
Аватар для TotKtoNado
 
Регистрация: 22.12.2010
Сообщений: 245
По умолчанию

Цитата:
Сообщение от haruhi Посмотреть сообщение
битовый сдвиги, нужны не только для умножения и деления
тогда для чего они нужны?

Последний раз редактировалось TotKtoNado; 23.12.2011 в 17:51.
TotKtoNado вне форума Ответить с цитированием
Старый 23.12.2011, 17:54   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
но не проще просто умножать функциями mul и div?
проще, но читаем внимательно:
Цитата:
2)быстрое умножение/деление на числа кратные двум(целочисленное умножение/деление)
Цитата:
тогда для чего они тогда нужны?
см первый пункт.
например еще при бинарных полях в структуре нужны.

вообще, раз они вам были не нужны, то значит не было такой задачи, где они нужны.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.12.2011, 18:19   #9
TotKtoNado
юзер
Форумчанин
 
Аватар для TotKtoNado
 
Регистрация: 22.12.2010
Сообщений: 245
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
проще, но читаем внимательно:
см первый пункт.
например еще при бинарных полях в структуре нужны.

вообще, раз они вам были не нужны, то значит не было такой задачи, где они нужны.
а если я захочу умножить не на два а на три. Как мне это проще сделать?
TotKtoNado вне форума Ответить с цитированием
Старый 23.12.2011, 18:25   #10
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

lea eax,[eax*2+eax]
Но помня одну из предыдущих тем - взять калькулятор.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: аппроксимация функций методом базиса из финитных функций Denna Помощь студентам 1 12.03.2012 19:23
Команда SHL firephenix Помощь студентам 1 20.03.2011 22:37
операция SHL Anohorett Общие вопросы C/C++ 2 02.12.2009 23:27
Построение графиков функций С++ (методы аппроксимации функций) amdbodia Общие вопросы C/C++ 0 24.05.2009 15:28
использование функций в качестве параметров других функций mono Помощь студентам 0 20.04.2009 18:25