Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 06.08.2006, 19:26   #1
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Обмен значениями двух переменных (только двух переменных)

У всех на форумах есть, надо вот и тут тоже напостить...

есть несколько способов обмена значениями двух переменных:

метод первый:
a=a+b
b=a-b
a=a-b
(точно также работает и с умножением)

__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 12.08.2006, 16:41   #2
jimon
 
Сообщений: n/a
Re: Обмен значениями двух переменных (только двух переменных)

я тут решил поигратся с етой штукой
(ну от нефиг делать)

на asm именно такой алгоритм можно представить как :
mov ax,[a]
mov dx,[b]

add ax,dx //a = a+b

mov cx,ax //b = a-b
sub cx,dx
mov ax,cx

sub ax,dx //a = a-b

mov [a],ax
mov [b],dx
самый низкий уровень программирования
ето система даже не asm
а набор мнемоник который показывает как работает проц со стеком
при таких операциях
push a
push a
push b
//в стеке <- b,a,a

add //складывание a+b в стеке
//в стеке <- a+b,a

push a
//в стеке <- a,a+b,a

sub // (a) - (a+b)
//в стеке <- b,a

pop a //замена b в a
//в стеке <- a

pop b
//в стеке пусто
но вот правильный кодер на asm не парится и пишет сразу :
push [a]
push [b]
pop [a]
pop [b]
учитесь юзать стек господа

ASM РУЛИТ !
 
Ответить с цитированием
Старый 12.08.2006, 17:32   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Обмен значениями двух переменных (только двух переменных)

Очередь LIFO на нижнем уровне - рулит!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 12.08.2006, 18:17   #4
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Радость Re: Обмен значениями двух переменных (только двух переменных)

Сообщение от jimon
учитесь юзать стек господа
ЖЖОШ

задание было именно без юзания порсторонних средств, а так можно и файлы заюзать (типа там сохранить а потом прочитать), можно еще через буфер клавы пропустить и через ДМА, а еще можно в видеопамять записать, и через звуковуху можно(проиграть два байта и записать их)... но это все не то, что я хотел...

еще есть вариант с "XOR"...
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 12.08.2006, 18:19   #5
jimon
 
Сообщений: n/a
Re: Обмен значениями двух переменных (только двух переменных)

хе
я тебе расписал на asm твой алгоритм (не твой правда)
предложил свой

в итоге мое и твое в любом случае юзает стек, какие проблеммы ?
 
Ответить с цитированием
Старый 28.02.2007, 13:37   #6
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Обмен значениями двух переменных (только двух переменных)

А если я так делаю, я неправильный кодер?
mov ax,a
xchg ax,b
(Offline)
 
Ответить с цитированием
Старый 28.02.2007, 15:13   #7
jimon
 
Сообщений: n/a
Re: Обмен значениями двух переменных (только двух переменных)

alcoSHoLiK

возьмем хотя бы инфу по 486 машинам (там хотя бы расписано сколько тактов занимают команды)

смотрим суда :
http://www.penguin.cz/~literakl/intel/m.html
http://www.penguin.cz/~literakl/intel/x.html
у тебя mov accum,mem ... 1 такт
и xchg accum,reg .. 3 такта
в суме 4 такта

если юзать push pop (мой метод) то
http://www.penguin.cz/~literakl/intel/p.html
выходит 4*2 + 6*2 = 20 тактов в суме
Хотя если работать с регистрами - то 10 тактов

довольно интересно ... знаеш мне понравилось
видимо чем больше я знаю, тем больше я знаю что ничего не знаю
кстати интересно компиляторы такую оптимизацию делают ?
 
Ответить с цитированием
Старый 28.02.2007, 15:34   #8
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Обмен значениями двух переменных (только двух переменных)

Получается тогда, что в этой ситуации стек вообще неэффективно использовать. Даже xor'ом быстрей будет:
mov ax,a    ;1 такт
xor ax,b     ;2 такта
xor b,ax     ;3 такта
xor ax,b     ;2 такта
В сумме - 8.
(Offline)
 
Ответить с цитированием
Старый 28.02.2007, 15:51   #9
jimon
 
Сообщений: n/a
Re: Обмен значениями двух переменных (только двух переменных)

но тогда ето нужно будет писать как inline функцию... или вообще как дефайн
 
Ответить с цитированием
Старый 28.02.2007, 16:11   #10
c0mrad
Разработчик
 
Регистрация: 08.06.2006
Сообщений: 412
Написано 13 полезных сообщений
(для 4 пользователей)
Re: Обмен значениями двух переменных (только двух переменных)

ASM РУЛИТ !
Даешь это в бинарном коде !
(Offline)
 
Ответить с цитированием
Старый 28.02.2007, 16:34   #11
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Обмен значениями двух переменных (только двух переменных)

1110 1011 0000 0101 1001 0000 0101 0000 0000 0000 0110 0000 0000 0010 1110 1010 0001 0000 0011 0000 0001 0010 1110 1000 0111 0000 0110 0000 0101 0000 0001 1100 0011
Это мой вариант с xchg.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
История двух свингов ingko Личное творчество 8 07.02.2009 13:58
Как по координатам двух точек найти ф-ю прямой? ABTOMAT Математика 3 11.12.2007 15:06
Удаление переменных и извлечение имени перемменной из другой перемменной zheland 2D-программирование 11 18.10.2007 22:56
Плавный переход двух текстур в 3ds Max Round 3D Моделирование 4 15.12.2006 17:29


Часовой пояс GMT +4, время: 18:21.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com