1

Тема: Питання по NOR

Доброї ночі.

1.

#define nor(a, b) ((!a) && (!b))

генерує логічне порівняння та стрибок (TEST/JNx), але у практичному сенсі одного біту на x32 якось замало.

2.

#define nor(a, b) ((~a) & (~b))

генерує not/and.

Що юзати? Практично годиться 2-й варіант, але not/and.. чи я щось упустив? Чи 1-варіант можна додатково розкручувати (зробити поверх іще додатковий шар логіки)?

Подякували: 0xDADA11C7, valerian2

2 Востаннє редагувалося ADR (15.04.2016 04:26:15)

Re: Питання по NOR

Все залежить від того, який nor вам потрібний: логічний чи побітовий)

але у практичному сенсі одного біту на x32 якось замало.

А ось це не зрозумів.

Подякували: koala, 0xDADA11C7, anakin, leofun014

3

Re: Питання по NOR

Воно нічого не генерує, крім макровизначення. Підсуньте йому об'єкт класу із перевизначеними операторами ~,!,&,&& і переконайтеся.
ADR вже сказав про логіку і бітові операції.
Питання про кількість байт залежить від того, що вам треба - економити пам'ять чи вписатися в параграф. На одній змінній багато не зекономите, і взагалі тут ніде не сказано саме про 32 біти.
Ну і по де Моргану (!((a) || (b))) та (~((a) | (b))) відповідно простіші за ваші макро (а ще хтось каже, що теорія математичної логіки програмістам не потрібна).

Подякували: quez, 0xDADA11C7, anakin, leofun014

4

Re: Питання по NOR

anakin написав:

генерує логічне порівняння та стрибок

Якщо ви знаєте як має бути, то можна створити інлайн ассемблерну хвункцію або макрос. В GCC навіть можна взаємодіяти з алокатором регістрів, щоб компілер сам визначався чи зберігати регістри перед викликом асемблерної вставки, чи ні.

5

Re: Питання по NOR

ADR, я думав так: використовувати логічний варіант, і при нагоді праці із даними >1 біту (у моєму випадку 32), працювати із кожним бітом окремо. Але виходить замкнуте коло - своїм же 1-бітовим and (як приклад) я не зможу накласти маску на усі 32, тоді залишається системний and і заодно втрачається сенс виведення своїх примітивів.

koala, спершу я запхав це діло у функцію, тому й зробив висновок про те, що воно мені там генерує. Про спрощений варіант знаю https://upload.wikimedia.org/math/7/4/b/74b09e66e071e5287fbfbdc5df9cfd66.png Мені закортіло віртуальний АЛП створити, тому економити тут, гадаю, нема чого. Мене взяли сумніви, що у бітовому варіанті генеруються інструкції, які я можу застосувати напряму без виведення із стрілки: навіщо мені nor(a, a), якщо я нативно можу зробити not a?

0xDADA11C7, це я на інтерв'ю автора vmprotect натрапив, там він згадував стрілки Пірса. На Сішці поки для економії нервів прототипую..

Алгебра логіки у даний момент і у практичному сенсі новий горизонт для аматора на зразок мене :) Я не вважаю що це непотрібні навички. Були б мої знайомі веб-мавпи математично підковані, то замість "приниження" на форумі я б звісно спитав у них.

Подякували: 0xDADA11C71