Форум программистов, компьютерный форум, киберфорум
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
 Аватар для DKOI
24 / 24 / 0
Регистрация: 08.09.2010
Сообщений: 136

Задачка на пошевелить чуть-чуть мозгами (Нужно получить ноль, если в регистре ноль, и единицу в обратном случае)

11.12.2011, 00:38. Показов 3583. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В процессе написания кода столкнулся с одной задачей, которая показалась мне интересной и я хотел бы поделиться ей с вами и послушать альтернативные варианты реализации, коль таковые имеются.
В регистре есть число. Нужно получить ноль, если в регистре ноль, и единицу в обратном случае. Казалось бы, тривиально, таковым и является. Однако усложним задачу, запретив использовать условные и безусловные переходы. То есть, алгоритм, реализующий это без ветвлений. Мой вариант под катом, но советую в начале самим пошевелить мозгами Свои варианты пожалуйста также постите под кат.
ответ
Код AT&T x64.
Пусть исходное число лежит в %rax
Assembler
1
2
3
4
5
6
add %rax, %rax; складываем %rax с самим собой
pushf; кладем в стек регистр флагов
pop %rax; и достаем его в %rax
shr $6, %rax; переносим ZF в нулевой бит регистра
not %rax; инвертируем его значение
andq $1, %rax; и зануляем лишние биты
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.12.2011, 00:38
Ответы с готовыми решениями:

файл вещественных чисел, нужно поравить код совсем чуть-чуть
Вот написал, но работает только для целых чисел.Как сделать для файла с вещественными числами? #include <stdio.h> #include...

Немогу разобраться в программе нужно пожалуйста чуть чуть дописать её!
Уже вроде все написал.И должно работать!! Но не хочет рисовать незнаю почему, если кто нибудь исправит и все выше описанное заработает буду...

Если в матрице встречается ноль, то нужно обнулить столбец и строку, где находится этот ноль
Дан двумерный массив n на m. Если в массиве встречается ноль, то нужно обнулить столбец и строку ,где находится этот ноль.

27
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
28.06.2013, 08:23
Студворк — интернет-сервис помощи студентам
В принципе вот рабочий вариант, но при eax=0 выдаст исключение.
Assembler
1
2
cdq
idiv eax
Добавлено через 1 минуту
Thread
Опередил

Добавлено через 14 минут
Assembler
1
2
3
xor     ecx,ecx
cmpxchg ecx,ecx
setnz   al
Добавлено через 23 минуты
Assembler
1
2
3
4
popcnt eax,eax
popcnt eax,eax
popcnt eax,eax
popcnt eax,eax
Добавлено через 3 минуты
Assembler
1
2
popcnt eax,eax
setnz  al
0
3127 / 1717 / 273
Регистрация: 19.02.2010
Сообщений: 4,503
30.06.2013, 21:35
Цитата Сообщение от murderer Посмотреть сообщение
У меня меньше 3 строк не выходит
mov edx,1
test eax,eax
cmovne eax,edx
у cmov... второй аргумент может быть адресом данных в памяти. Т.е. сначала (да, "третьей строкой") заводим переменную с единичным значением, а потом её юзаем. Но проц при этом будет исполнять всего 2 команды.
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
30.06.2013, 22:55
Хм. А так?
Assembler
1
2
    bsr ecx, eax
    shr eax, cl
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16376 / 7688 / 1080
Регистрация: 11.11.2010
Сообщений: 13,768
01.07.2013, 04:53
Цитата Сообщение от Charles Kludge Посмотреть сообщение
bsr ecx, eax
shr eax, cl
это решение приводил murderer, здесь, но если верить Агнеру Фогу
BSF и BSR - хуже всего оптимизированные инструкции на PPlain и PMMX, которые занимают приблизительно 11+2*n тактов, где n равен количеству пропущенных нулей.
поэтому по скорости выиграет это
Assembler
1
2
3
4
5
6
7
8
9
10
    mov eax,789
    push 0
    push eax
    fild qword ptr [esp]
    fstp qword ptr [esp]
    pop ecx
    pop ecx
    shr ecx,20; изолируем экспоненту
    sub ecx,3FFh; переводим из смещенного кода
    shr eax,cl
0
01.07.2013, 09:36

Не по теме:

Цитата Сообщение от Mikl___ Посмотреть сообщение
это решение приводил murderer
А я не подглядывал, а когда нашёл, что я не первый, удалять мессагу было поздно. Надеюсь, меня не обвинят в плагиате.

0
01.07.2013, 10:02

Не по теме:

Цитата Сообщение от Charles Kludge Посмотреть сообщение
Надеюсь, меня не обвинят в плагиате.
:rofl:

0
01.07.2013, 10:09

Не по теме:

Цитата Сообщение от Charles Kludge Посмотреть сообщение
Надеюсь, меня не обвинят в плагиате.
Если в чём и можно обвинить всех, написавших в этом году в теме, так это в некрофилиипостинге.

0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
01.07.2013, 10:56
NEG EAX
SBB EAX,EAX
NEG EAX
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.07.2013, 10:56

Какие именно темы в математике нужно выучить, чтобы начать хоть чуть-чуть понимать математический анализ и всё остальное
Здравствуйте, не знаю в правильном ли я месте спрашиваю, но любой совет поможет. Я студент 1 курса, сегодня перевёлся на направление...

Когда я соединяю комп и телевизор через Tv-Out, кабель чуть чуть искрит.
Всем привет. Есть такой вопрос. Когда я соединяю комп и телевизор через Tv-Out, кабель чуть чуть искрит. Если я беру другой кабель, не...

Некорректно работает ListListener и еще чуть-чуть всякого стаффа
Всем привет! Я постигаю вощем java потихоньку... вот у меня возникло пара вопросов: 1)почему у меня два раза в JList записываются...

Много текста на одной странице или по чуть-чуть на нескольких?
В процессе оформления перечня и описания услуг на сайте компании я озадачился следующей вещью. Как лучше разместить информацию на сайте,...

Отнять последнюю строку от остальных (чуть-чуть исправить код)
Надо последнею строку матрицы отнять от всех остальных, у меня это получилось сделать, но в условии сказано что последняя строка должна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний против массовых профанаций
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru