· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Можно ли соптимизировать (туплю конкретно :(

<< . 1 . 2 . 3 . 4 . >>

Посл.отвђт Сообщенiе


Дата: Июн 11, 2004 22:24:30

А никто не пробовал запихнуть
if(temp1=='1'){ Flag1++; Flag3++; }
if(temp2=='1'){ Flag2++; Flag3 = 1; }
в С'шный компилятор от MS и Intel, интересно что они скажут по этому поводу..


Я имел ввиду способны ли оптимизирующие компиляторы это соптимизировать, хотелось бы видеть результат..


Дата: Июн 11, 2004 22:28:05 · Поправил: volodya

Я скомпилю это мгновенно, но я не понимаю смысла Flag3 = 1... 8-(


Дата: Июн 11, 2004 22:51:46 · Поправил: S_T_A_S_

Если я нигде не ошибся, то можно так:
	mov	al, '1'		
	xor	edx, edx	
	xor	ecx, ecx	
	cmp	temp1, al	
	setz	dl		
	cmp	temp2, al	
	setz	cl		
	sub	al, '0'		
	and	edx, eax	
	and	ecx, eax	
	add	Flag1, edx	
	add	Flag2, ecx	
	or	edx, ecx	
	add	Flag3, edx


Дата: Июн 11, 2004 23:24:12

S_T_A_S_

Вроде не ошибся, мне нравится, только в начале нужно
mov eax, '1'

или
xor eax, eax
mov al, '1'


Дата: Июн 11, 2004 23:33:58

S_T_A_S_
Только не проще ли заменить
  sub al, '0'
  and edx, eax
  and ecx, eax
  add Flag1, edx
  add Flag2, ecx

на
  mov Flag1, edx
  mov Flag2, ecx


Дата: Июн 11, 2004 23:47:20 · Поправил: S_T_A_S_

Да, что-то я перемудрил, лучше так:
    
    	cmp	temp1, '1'	
    	setz	al		
    	cmp	temp2, '1'	
    	setz	cl		
    	and	eax, 1		
    	and	ecx, 1		
    	add	Flag1, eax	
    	add	Flag2, ecx	
    	or	eax, ecx	
    	add	Flag3, eax	


> Только не проще ли заменить..

Чёт я не пойму, надо увеличисвать Flag или просто в 1 устанавливать?


Дата: Июн 12, 2004 00:36:26

В TRUE устанавливать ;-)
Во, так в самый раз!
Всем спасибо за идеи, вопрос кажется исчерпан :-)


Дата: Июн 12, 2004 00:38:37

Хотя, блин, опять не пойму, зачем делать
  and al, 1
  and cl, 1


Дата: Июн 12, 2004 02:11:24 · Поправил: S_T_A_S_

Ну если те надо просто изменить 0 на не-0, тогда, конечно and al, 1 не надо, можно и add Flag, reg заменить на mov Flag, reg.
Дык такое уже постили - coban2k, например. Вот немного переделанный вариант:
    
    	cmp	temp1, '1'	
    	setz	al		
    	cmp	temp2, '1'	
    	setz	cl		
    	mov	Flag1, al	
    	mov	Flag2, cl	
    	or	al, cl		
    	mov	Flag3, al	


Дата: Июн 12, 2004 02:36:30

> Дык такое уже постили - coban2k

Да, почти такое, но побайтно я не сравнивал чей вариант короче, в данном случае конечно нужна оптимизация по размеру.

> Вот немного переделанный вариант

Ты всё-таки предлагаешь сделать один флаг размером BYTE, ну можно в принципе.


Дата: Июн 12, 2004 02:45:28

Asterix

А почему он будет BYTE? Это мы просто меняем младший байт у DWORD'а ;-)
Кстати, с тем вариантом по размеру сравнивать не надо - там ошибка.


Дата: Июн 12, 2004 03:00:21 · Поправил: Asterix

S_T_A_S_
Кстати, с тем вариантом по размеру сравнивать не надо - там ошибка.

Ok. Я не программлю без отладчика, так что все ошибки всплывут ;-)

> А почему он будет BYTE? Это мы просто меняем младший байт у DWORD'а ;-)
А команда setz разве не с байтом работает, masm не будет ругаться?


Дата: Июн 12, 2004 03:20:52 · Поправил: S_T_A_S_

Asterix

Кстати, у темы очень правильное название - это про меня.
Ошибка была у меня, щас (вроде бы ;-) исправил :)

    команда setz разве не с байтом работает, masm не будет ругаться?.
Дык, напиши BYTE PTR.


Дата: Июн 12, 2004 03:51:12

S_T_A_S_
> Ошибка была у меня, щас (вроде бы ;-) исправил :)

Я вдумчиво прошёлся по твоему варианту(предыдущему) вроде не было ошибок никаких..


Дата: Июн 12, 2004 05:15:16

Были - если Flag1=1, но Flag2=0, то Flag3 не устанавливался.

<< . 1 . 2 . 3 . 4 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.067