Страница: 1 |
Страница: 1 |
Вопрос: Как поменять 2 переменные местами на ASM
Добавлено: 28.06.05 19:16
Автор вопроса: RomK aka Куций
Ламерский вопрос по АСМЕ (aka Assembler):
Как поменять местами 2 переменные (они же регистры),
без использования стэка или третьей переменной (регистра)???
"Обычная" форма замены двух переменных (без третьей):
a = a + b
b = a - b
a = a - b
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 28.06.05 20:03
xchg eax, ecx - мануалы читать!
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 28.06.05 20:06
ЗЫ
вот только с переменными такое не пройдет
Номер ответа: 3
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #3
Добавлено: 29.06.05 02:28
Модет XOR?
a = a Xor b
b = a Xor b
a = a Xor b
PS
Скорее не быстрей чем xchg
Номер ответа: 4
Автор ответа:
RomK aka Куций
Вопросов: 6
Ответов: 13
Профиль | | #4
Добавлено: 29.06.05 09:10
Вообще то я не знад, что есть встроеная команда.
Я предполагал, что ответом будет что-то типа:
mov bx,03
add ax,bx
; вот тут вот проблема, ведь я не знаю как
; написать такое eb = ea - eb
sub ax,bx
; ...
Номер ответа: 5
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #5
Добавлено: 29.06.05 12:07
; написать такое eb = ea - eb
neg ebx
add ebx,eax
Номер ответа: 6
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 29.06.05 18:08
Все равно тема почти офф-топовая, пофлеймить что-ль
За что люблю ассемблер, действие одно, а способов написать - уйма ))
xchg ebx, eax
sub ebx, eax
ЗЫ
Разумеется что способ хулигана лучше Он экономит два такта да и вообще красивый...
Этот вариант, соответственно, на два такта дольше выполняется, но он короче на целый байт )) т.е. занимает меньше места ))
Номер ответа: 7
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #7
Добавлено: 29.06.05 19:52
Я когда написал на асме первую прогу, сидел неделю оптимизировал её по размеру. Уменьшал Из 50 кб выдавил 48. Стоило ли? Имхо, нет Если что и оптимизировать, то только скорость.
Что для винта 50 или 48 кб? Никакой разницы. А сделать чтобы в два раза быстрее работало - это уже ощутимо, а порой просто необходимо.
Не видел ни одного, кто возмутился бы размером exe, а вот медленная работа многих раздражает.
А вариант с neg родился просто из математического подхода: вычитание - ни что иное, как сложение с отрицательным числом.
Номер ответа: 8
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #8
Добавлено: 30.06.05 01:53
это смотря где применять умение в программинге или реверсинге во втором случае лишний байт может очень выручить
Номер ответа: 9
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #9
Добавлено: 30.06.05 02:16
Я не увлекаюсь копательством в чужих прогах Да и червей всяких не пишу, где может понадобиться малый размер. Поэтому размер до лампочки
Номер ответа: 10
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #10
Добавлено: 14.07.05 13:43
Раз уж пошёл оффтоп...
Для меня размер exe имеет значение, особенно когда сравниваешь exe на delphi и на asm А если ужимать размер в asm, то большого смысла обычно всегда нет.. Скорость чаще важнее! И память не засорять, беречь её, родимую.. ))