|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
06.08.2006, 19:26
|
#1
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
Обмен значениями двух переменных (только двух переменных)
У всех на форумах есть, надо вот и тут тоже напостить...
есть несколько способов обмена значениями двух переменных:
метод первый:
(точно также работает и с умножением)
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
12.08.2006, 16:41
|
#2
|
|
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
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Обмен значениями двух переменных (только двух переменных)
Очередь LIFO на нижнем уровне - рулит!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
12.08.2006, 18:17
|
#4
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
Re: Обмен значениями двух переменных (только двух переменных)
Сообщение от jimon
учитесь юзать стек господа
|
ЖЖОШ
задание было именно без юзания порсторонних средств, а так можно и файлы заюзать (типа там сохранить а потом прочитать), можно еще через буфер клавы пропустить и через ДМА, а еще можно в видеопамять записать, и через звуковуху можно(проиграть два байта и записать их)... но это все не то, что я хотел...
еще есть вариант с "XOR"...
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
12.08.2006, 18:19
|
#5
|
|
Re: Обмен значениями двух переменных (только двух переменных)
хе
я тебе расписал на asm твой алгоритм (не твой правда)
предложил свой
в итоге мое и твое в любом случае юзает стек, какие проблеммы ?
|
|
|
28.02.2007, 13:37
|
#6
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Обмен значениями двух переменных (только двух переменных)
А если я так делаю, я неправильный кодер?
|
(Offline)
|
|
28.02.2007, 15:13
|
#7
|
|
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
|
Дэвелопер
Регистрация: 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
|
|
Re: Обмен значениями двух переменных (только двух переменных)
но тогда ето нужно будет писать как inline функцию... или вообще как дефайн
|
|
|
28.02.2007, 16:11
|
#10
|
Разработчик
Регистрация: 08.06.2006
Сообщений: 412
Написано 13 полезных сообщений (для 4 пользователей)
|
Re: Обмен значениями двух переменных (только двух переменных)
Даешь это в бинарном коде !
|
(Offline)
|
|
28.02.2007, 16:34
|
#11
|
Дэвелопер
Регистрация: 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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:21.
|