Сейчас на форуме: zombi-vadim, zds (+4 невидимых)

 eXeL@B —› Программирование —› Альтернатива xor
. 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>
Посл.ответ Сообщение

Ранг: 3.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 августа 2006 03:18
· Личное сообщение · #1

Q:Как можно заменить команду xor, например через другие логические операторы или через +-*/?



Ранг: 3.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 августа 2006 04:09
· Личное сообщение · #2

О, сам нашел:
A xor B = (A and !B)or(!A and B) =
= (A or B) and (!A or !B)

Топик можно закрывать.




Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 05 августа 2006 07:48
· Личное сообщение · #3

Прошу прощение, слаб в этом, но если подобное сделать не на асме, а на Дельфи к примеру, то, имхо, компилятор оптимизирует сей код в xor. Поэтому не забудьте отключить оптимизацию.




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 05 августа 2006 08:17
· Личное сообщение · #4

NaumLeNet пишет:
Прошу прощение, слаб в этом, но если подобное сделать не на асме, а на Дельфи к примеру, то, имхо, компилятор оптимизирует сей код в xor. Поэтому не забудьте отключить оптимизацию.

Хм. Это проверено на практике? Никогда об этом не задумывался, дельфы нету под рукой...Проверьте кто-нить ради интереса.



Ранг: 23.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 05 августа 2006 08:37
· Личное сообщение · #5

Оптимизация включена:

b:=$111;
a:=$EEE;
a:=(a and not b) or (not a and b);


Такой код в отладчике превращается в такой:

MOV EAX,111
MOV EBX,0EEE
MOV EDX,EAX
NOT EDX
AND EDX,EBX
NOT EBX
AND EAX,EBX
OR EDX,EAX
MOV EBX,EDX
MOV EAX,EBX





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 05 августа 2006 08:47
· Личное сообщение · #6

Угу, гавно оптимизатор



Ранг: 48.8 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 05 августа 2006 10:44
· Личное сообщение · #7

BUGOR какая версия Delphi и какой отладчик?



Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 05 августа 2006 10:51 · Поправил: theCollision
· Личное сообщение · #8

харошая тема MiniM респект, я такую же последовательность как ты пришел в начале мая, с будуна когда голова не шарила, за то потом потрезвости не сумел соообразить почему результат такой же как при обычном xor ))

И еще учился на АСОИУ и у нас входил такие предметы как Теория автоматов, схемотехника из них понял, что все эл-устройства сводятся к логике И-НЕ, ИЛИ-НЕ, НЕ . А тем не менее все советские устройства умеют:
1. суммировать
2. вычитать ( можно заметить суммированием)
3. умножать( можно заменить смуммированием)
4. делить( можно заменить суммированием)
5. переводить в доп. код (НЕ и суммирование с 1)
6. XOR -ить

и много другое

Вопрос:
На мысли не навел?

P.S.:

<Topper> хм, в стояке слышно громыхание по трубам. авось, дадут воду....
<SeKToR> не, это сантехник матерясь пингует квартиры
<SeKToR> иди постучи, а то айпишник не выдадут

-----
My love is very cool girl.




Ранг: 23.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 05 августа 2006 10:54
· Личное сообщение · #9

darkeagle
6.0
А что от отладчика что-то тоже зависит?



Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 05 августа 2006 11:00 · Поправил: theCollision
· Личное сообщение · #10

<--- Меня глюкануло --- > соррри человеку!

-----
My love is very cool girl.




Ранг: 23.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 05 августа 2006 11:03
· Личное сообщение · #11

theCollision
[offtop]
А ты повнимательнее тему перечитай и головой подумай, тогда может поймёшь, что я просто констатировал факт, поэтому кончай флуд.
[/offtop]



Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 05 августа 2006 11:24 · Поправил: theCollision
· Личное сообщение · #12

MiniM
Исчо:
push ebx ; xor edx,eax
mov ebx,eax ; (A or B) sub (A and B)
or ebx,edx
and edx,eax
sub ebx,edx
pop ebx


-----
My love is very cool girl.





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 05 августа 2006 14:31
· Личное сообщение · #13

Народ, откройте книги по алгебре логики и найдёте ещё много интересного.

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 3.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 августа 2006 15:06
· Личное сообщение · #14

Вообще мене конкретно нужна была математическая реализация, просто не во всех языках присутствуют те или иные операторы, иногда приходится выкручиваться подобным образом, а вообще на сколько я понял все логические операции можно представить в виде комбинации И-НЕ иил ИЛИ-НЕ
Всем спасибо кто откликнулся!



Ранг: 123.7 (ветеран)
Активность: 0.10
Статус: Участник
1nn0$/100

Создано: 05 августа 2006 18:48
· Личное сообщение · #15

Ara пишет:
Угу, гавно оптимизатор

Кому не влом, протестьте на VC++ 6. Сам смогу протестить только завтра.

-----
Blame the victim!





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 05 августа 2006 21:08
· Личное сообщение · #16

1nn0cent
Старье

MiniM пишет:
а вообще на сколько я понял все логические операции можно представить в виде комбинации И-НЕ иил ИЛИ-НЕ

Да, читай по этому поводу книги по алгебре логики и булевой алгебре. В универе год терзали сменой одной логической операции на другую. Теория автоматов рулит

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 122.3 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 05 августа 2006 21:38
· Личное сообщение · #17

если нужна просто аналогичная зеркальная команда, то можно попробовать bswap
- изменение порядка следования байтов;

пример:

.486
mov ebx,1a2c345fhh
bswap ebx ;ebx=5f342c1ah




Ранг: 3.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 августа 2006 03:01
· Личное сообщение · #18

intty не, нужна была именно функция дающая такой же результат как и xor



Ранг: 29.5 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 06 августа 2006 06:44
· Личное сообщение · #19

В Delphi оптимизация просто условная, чтобы не говорили, что её вообще нет



Ранг: 26.7 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 06 августа 2006 21:04
· Личное сообщение · #20

Еще раз убедился, что компилятор Дельфи отстаивается. В принципе, "каждому - свое", и в своей области применения (СУБД) он, может быть и хорош.

darkeagle, не имеет значения. Borland/Inprise не меняла ничего существенного в компиляторе аж со времен Delphi 2, что послужило одной из причин закрытия проекта. Более того, ребята к последней "классической" версии 7.0 SP1 так и не удосужились пофиксить многочисленные ошибки компилера и VCL.

Все же, что они выпустили после (v8, v2005, v2006) суть один сплошной глюкодром. Учите С++, бразы!



Ранг: 4.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 06 августа 2006 21:58
· Личное сообщение · #21

По-мойму
xor al,cl в языке высокого уровня эквивалентно
al-cl если работать с hex-цифрами то точно



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 06 августа 2006 22:06
· Личное сообщение · #22

_dk_ пишет:
xor al,cl в языке высокого уровня эквивалентно
al-cl если работать с hex-цифрами то точно


ага, щас xor - это суммирование без переноса в старшие разряды.



Ранг: 4.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 06 августа 2006 22:09
· Личное сообщение · #23

Может ты и прав но я после этого оператора наблюдал такие изменения:

al = 4F
cl = 2h

xor al,cl

al = 4D

Конечно может совпадение а может...



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 06 августа 2006 22:11
· Личное сообщение · #24

совпадение



Ранг: 26.7 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 06 августа 2006 22:26
· Личное сообщение · #25

Вот, проверил специально:

unsigned int a = 0x111, b = 0xEEE;
a = (a & ~b)|(~a & b);
cout << a;

ессно, vc6 не стал городить заморочки с бинарными операциями. А зачем?

_main proc near
push 0FFFh // результат
mov ecx, offset unk_417ED0
call sub_4010A0 // cout
xor eax, eax
retn
_main endp




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 07 августа 2006 00:01
· Личное сообщение · #26

SubV
лол, ну как обычно без изврата простейшие операции не проверить

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 4.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 07 августа 2006 00:34
· Личное сообщение · #27

1nn0cent пишет:
Кому не влом, протестьте на VC++ 6. Сам смогу протестить только завтра.

Так на Visual c можно ассемблеровский код вставлять например:
int a=10, b=2;
_asm {
mov eax, a
mov ebx, b
xor eax,ebx
mov a,eax
}
printf("%x", a);

%x - Вывод числа в hex формате...



Ранг: 29.5 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 07 августа 2006 00:43
· Личное сообщение · #28

_dk_ пишет:
Конечно может совпадение а может...

Откуда в логике могут быть совпадения???
al = n
cl = n
xor al,cl ; al <= 0
Ещё одно доказательство, что xor == sub ))

_dk_ пишет:
Так на Visual c можно ассемблеровский код вставлять

К счастью, вижуал не оптимизирует ассемблерный код.




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 07 августа 2006 00:56 · Поправил: Rascal
· Личное сообщение · #29

Quantum
Таблица истинности:

x1 x2 y
0 0 0
0 1 1
1 0 1
1 1 0

Тое сть сложение без переноса бита в старший разряд. Никак не сложение, а вычитание это когда один операнд переводится в доп код, так что тоже неуместно, ибо физически в компе все операции вычитания заменяются на сложение и отрицание. Хотя если операнды однобитовые то можно говорить о сложении, но для нас это неуместно.

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 07 августа 2006 01:17
· Личное сообщение · #30

Кста, если мне не изменяет память эта функция называется сумма по модулю два. Эх. романтика, если то, я на ней курсач делал. Для сложения самое то конечно

-----
Недостаточно только получить знания:надо найти им приложение



. 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>
 eXeL@B —› Программирование —› Альтернатива xor
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати