Посл.ответ |
Сообщение |
Ранг: 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.06↘0 Статус: Участник
|
Создано: 05 августа 2006 07:48 · Личное сообщение · #3
Прошу прощение, слаб в этом, но если подобное сделать не на асме, а на Дельфи к примеру, то, имхо, компилятор оптимизирует сей код в xor. Поэтому не забудьте отключить оптимизацию.
| Сообщение посчитали полезным: |
Ранг: 1288.1 (!!!!), 273thx Активность: 1.29↘0 Статус: Участник
|
Создано: 05 августа 2006 08:17 · Личное сообщение · #4
NaumLeNet пишет:
Прошу прощение, слаб в этом, но если подобное сделать не на асме, а на Дельфи к примеру, то, имхо, компилятор оптимизирует сей код в xor. Поэтому не забудьте отключить оптимизацию.
Хм. Это проверено на практике? Никогда об этом не задумывался, дельфы нету под рукой...Проверьте кто-нить ради интереса.
| Сообщение посчитали полезным: |
Ранг: 23.8 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 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.29↘0 Статус: Участник
|
Создано: 05 августа 2006 08:47 · Личное сообщение · #6
Угу, гавно оптимизатор
| Сообщение посчитали полезным: |
Ранг: 48.8 (посетитель) Активность: 0.03↘0 Статус: Участник
|
Создано: 05 августа 2006 10:44 · Личное сообщение · #7
BUGOR какая версия Delphi и какой отладчик?
| Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник 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.01↘0 Статус: Участник
|
Создано: 05 августа 2006 10:54 · Личное сообщение · #9
darkeagle
6.0
А что от отладчика что-то тоже зависит?
| Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 05 августа 2006 11:00 · Поправил: theCollision · Личное сообщение · #10
<--- Меня глюкануло --- > соррри человеку!
----- My love is very cool girl. | Сообщение посчитали полезным: |
Ранг: 23.8 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 05 августа 2006 11:03 · Личное сообщение · #11
theCollision
[offtop]
А ты повнимательнее тему перечитай и головой подумай, тогда может поймёшь, что я просто констатировал факт, поэтому кончай флуд.
[/offtop]
| Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник 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.12↘0 Статус: Участник John Smith
|
Создано: 05 августа 2006 14:31 · Личное сообщение · #13
Народ, откройте книги по алгебре логики и найдёте ещё много интересного.
----- Недостаточно только получить знания:надо найти им приложение | Сообщение посчитали полезным: |
Ранг: 3.2 (гость) Активность: 0=0 Статус: Участник
|
Создано: 05 августа 2006 15:06 · Личное сообщение · #14
Вообще мене конкретно нужна была математическая реализация, просто не во всех языках присутствуют те или иные операторы, иногда приходится выкручиваться подобным образом, а вообще на сколько я понял все логические операции можно представить в виде комбинации И-НЕ иил ИЛИ-НЕ
Всем спасибо кто откликнулся!
| Сообщение посчитали полезным: |
Ранг: 123.7 (ветеран) Активность: 0.1↘0 Статус: Участник 1nn0$/100
|
Создано: 05 августа 2006 18:48 · Личное сообщение · #15
Ara пишет:
Угу, гавно оптимизатор
Кому не влом, протестьте на VC++ 6. Сам смогу протестить только завтра.
----- Blame the victim! | Сообщение посчитали полезным: |
Ранг: 260.9 (наставник) Активность: 0.12↘0 Статус: Участник John Smith
|
Создано: 05 августа 2006 21:08 · Личное сообщение · #16
1nn0cent
Старье
MiniM пишет:
а вообще на сколько я понял все логические операции можно представить в виде комбинации И-НЕ иил ИЛИ-НЕ
Да, читай по этому поводу книги по алгебре логики и булевой алгебре. В универе год терзали сменой одной логической операции на другую. Теория автоматов рулит
----- Недостаточно только получить знания:надо найти им приложение | Сообщение посчитали полезным: |
Ранг: 122.3 (ветеран) Активность: 0.05↘0 Статус: Участник
|
Создано: 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.01↘0 Статус: Участник
|
Создано: 06 августа 2006 06:44 · Личное сообщение · #19
В Delphi оптимизация просто условная, чтобы не говорили, что её вообще нет
| Сообщение посчитали полезным: |
Ранг: 26.7 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 06 августа 2006 21:04 · Личное сообщение · #20
Еще раз убедился, что компилятор Дельфи отстаивается. В принципе, "каждому - свое", и в своей области применения (СУБД) он, может быть и хорош.
darkeagle, не имеет значения. Borland/Inprise не меняла ничего существенного в компиляторе аж со времен Delphi 2, что послужило одной из причин закрытия проекта. Более того, ребята к последней "классической" версии 7.0 SP1 так и не удосужились пофиксить многочисленные ошибки компилера и VCL.
Все же, что они выпустили после (v8, v2005, v2006) суть один сплошной глюкодром. Учите С++, бразы!
| Сообщение посчитали полезным: |
Ранг: 4.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 06 августа 2006 21:58 · Личное сообщение · #21
По-мойму
xor al,cl в языке высокого уровня эквивалентно
al-cl если работать с hex-цифрами то точно
| Сообщение посчитали полезным: |
Ранг: 158.4 (ветеран), 123thx Активность: 0.14↗0.49 Статус: Участник
|
Создано: 06 августа 2006 22:06 · Личное сообщение · #22
_dk_ пишет:
xor al,cl в языке высокого уровня эквивалентно
al-cl если работать с hex-цифрами то точно
ага, щас xor - это суммирование без переноса в старшие разряды.
| Сообщение посчитали полезным: |
Ранг: 4.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 06 августа 2006 22:09 · Личное сообщение · #23
Может ты и прав но я после этого оператора наблюдал такие изменения:
al = 4F
cl = 2h
xor al,cl
al = 4D
Конечно может совпадение а может...
| Сообщение посчитали полезным: |
Ранг: 158.4 (ветеран), 123thx Активность: 0.14↗0.49 Статус: Участник
|
Создано: 06 августа 2006 22:11 · Личное сообщение · #24
совпадение
| Сообщение посчитали полезным: |
Ранг: 26.7 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 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.12↘0 Статус: Участник John Smith
|
Создано: 07 августа 2006 00:01 · Личное сообщение · #26
SubV
лол, ну как обычно без изврата простейшие операции не проверить
----- Недостаточно только получить знания:надо найти им приложение | Сообщение посчитали полезным: |
Ранг: 4.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 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.01↘0 Статус: Участник
|
Создано: 07 августа 2006 00:43 · Личное сообщение · #28
_dk_ пишет:
Конечно может совпадение а может...
Откуда в логике могут быть совпадения???
al = n
cl = n
xor al,cl ; al <= 0
Ещё одно доказательство, что xor == sub ))
_dk_ пишет:
Так на Visual c можно ассемблеровский код вставлять
К счастью, вижуал не оптимизирует ассемблерный код.
| Сообщение посчитали полезным: |
Ранг: 260.9 (наставник) Активность: 0.12↘0 Статус: Участник 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.12↘0 Статус: Участник John Smith
|
Создано: 07 августа 2006 01:17 · Личное сообщение · #30
Кста, если мне не изменяет память эта функция называется сумма по модулю два. Эх. романтика, если то, я на ней курсач делал. Для сложения самое то конечно
----- Недостаточно только получить знания:надо найти им приложение | Сообщение посчитали полезным: |