Page 33 of 77

Re: Помогите новичку

Posted: Fri May 25, 2012 11:25 am
by XVilka
я бы рекомендовал вместо "div eax,2" использовать "shr eax,1". По смыслу одно и то же, но работает в разы быстрее

Re: Помогите новичку

Posted: Fri May 25, 2012 10:47 pm
by Nable
По смыслу не то же самое, кстати. Ибо div ещё edx как на вход принимает, так и на выходе затирает.
Да, я КО, но всё же.
Мдя, а это уже выше написали, правда, без уверенности в голосе.

Re: Помогите новичку

Posted: Fri May 25, 2012 10:54 pm
by Mario
Мир сошел с ума - главный дизайнер проекта почти освоил ассемблер.

Re: Помогите новичку

Posted: Fri May 25, 2012 10:55 pm
by SoUrcerer
Напротив же, все хорошо.

Re: Помогите новичку

Posted: Sun May 27, 2012 1:48 pm
by Leency
mov ebx, 47<<16+100

"inc ebx" увеличит второе значение на 1, получим 101
вопрос: как увеличить число 47?

Re: Помогите новичку

Posted: Sun May 27, 2012 2:31 pm
by dunkaist
add ebx, 1 SHL 16

Re: Помогите новичку

Posted: Sun May 27, 2012 4:26 pm
by SoUrcerer
Или, что то же самое, add ebx, 1<<16

Re: Помогите новичку

Posted: Wed May 30, 2012 2:12 pm
by Leency
Spoiler:Чё-то мне захотелось изучить ассемблер... Он даже начал мне немного нравиться, а хуже всего то, что я даже уже думаю, что некоторые моменты в Си можно сделать проще. Может меня Марат заколдовал? :D
Хочу получить строку вида
mov ecx,20*65536+216 ; y and depth

Пишу код:

Code: Select all

	mcall 48,4
	mov ecx, eax
	shr ecx, 16
	add ecx, 216
Он не работает, что я делаю не так?

Re: Помогите новичку

Posted: Wed May 30, 2012 2:28 pm
by Albom
Leency wrote: shr ecx, 16
Может shl?

Re: Помогите новичку

Posted: Wed May 30, 2012 2:36 pm
by Leency
Точно, спасибо!
1) Я так понимаю shr сдвигает вправо?
2) можно ли как-то оптимизировать этот код/записать в однк строку?

Code: Select all

   mov ecx, eax
   shr ecx, 16
   add ecx, 216
вроде
lea ecx, [eax]*65536+216 ?

Re: Помогите новичку

Posted: Wed May 30, 2012 2:43 pm
by SoUrcerer
1) Именно, ты прав
2) lea загружает из памяти
то, что делает твой код:
a) eax=11223344; ecx=11223344
б) ecx=00001122
в) ecx = (00001122+216)
Если бы копировались младшие 2 байта из eax, то можно было бы сделать movzx ecx, ax вместо первых двух команд.

Re: Помогите новичку

Posted: Wed May 30, 2012 2:47 pm
by XVilka
lea можно использовать как сложение, например lea eax, [eax + 216]. Хотя в данном случае бесполезно

Re: Помогите новичку

Posted: Wed May 30, 2012 2:50 pm
by Mario
Мде... сразу видно мозг развращенный ЯВУ.

Re: Помогите новичку

Posted: Wed May 30, 2012 2:52 pm
by Leency
Mario wrote:Мде... сразу видно мозг развращенный ЯВУ.
Толсто. Долго ты ещё будешь дуться?

P.S. Радоваться надо - человек изучает православный асм.

Re: Помогите новичку

Posted: Wed May 30, 2012 2:54 pm
by Mario
Как только так сразу, после дождичка и на горе.