Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 28.06.05 20:03
xchg eax, ecx - мануалы читать!

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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 ax,02
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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #10
Добавлено: 14.07.05 13:43
Раз уж пошёл оффтоп...

Для меня размер exe имеет значение, особенно когда сравниваешь exe на delphi и на asm :) А если ужимать размер в asm, то большого смысла обычно всегда нет.. Скорость чаще важнее! И память не засорять, беречь её, родимую.. :)))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам