Thread View: pl.comp.lang.asm
6 messages
6 total messages
Started by Andrzej Grażyński
Mon, 22 Mar 2010 17:13
Kolejna prosta zagadka
Author: Andrzej Grażyński
Date: Mon, 22 Mar 2010 17:13
Date: Mon, 22 Mar 2010 17:13
9 lines
1005 bytes
1005 bytes
W EAX jest liczba ze znakiem, należy umieścić w EAX wartość funkcji signum(EAX), czyli 1 gdy w EAX jest liczba dodatnia (czyli bit znaku = 0 i nie wszystkie bity są zerowe) 0 gdy w jest 0 (wszystkie bity są zerowe) -1 gdy w EAX jest liczba ujemna (bit znaku = 1)
Re: Kolejna prosta zagadka
Author: Wojciech Muła
Date: Tue, 23 Mar 2010 11:01
Date: Tue, 23 Mar 2010 11:01
16 lines
1240 bytes
1240 bytes
Andrzej Grażyński <grazynsk@petex.com.pl> wrote: > W EAX jest liczba ze znakiem, należy umieścić w EAX wartość funkcji > signum(EAX), czyli > > 1 gdy w EAX jest liczba dodatnia (czyli bit znaku = 0 i nie wszystkie > bity są zerowe) > > 0 gdy w jest 0 (wszystkie bity są zerowe) > > -1 gdy w EAX jest liczba ujemna (bit znaku = 1) Moja wersja ma 6 instrukcji. Pokażcie swoje :) w.
Re: Kolejna prosta zagadka
Author: Andrzej Grażyński
Date: Tue, 23 Mar 2010 20:25
Date: Tue, 23 Mar 2010 20:25
22 lines
1396 bytes
1396 bytes
Wojciech Muła pisze: > Andrzej Grażyński <grazynsk@petex.com.pl> wrote: > >> W EAX jest liczba ze znakiem, należy umieścić w EAX wartość funkcji >> signum(EAX), czyli >> >> 1 gdy w EAX jest liczba dodatnia (czyli bit znaku = 0 i nie wszystkie >> bity są zerowe) >> >> 0 gdy w jest 0 (wszystkie bity są zerowe) >> >> -1 gdy w EAX jest liczba ujemna (bit znaku = 1) > > Moja wersja ma 6 instrukcji. > Pokażcie swoje :) > > w. CDQ NEG EAX RCL EDX,1 MOV EAX,EDX
Re: Kolejna prosta zagadka
Author: Wojciech Muła
Date: Wed, 24 Mar 2010 09:35
Date: Wed, 24 Mar 2010 09:35
37 lines
1796 bytes
1796 bytes
Andrzej Grażyński <grazynsk@petex.com.pl> wrote: > >> W EAX jest liczba ze znakiem, należy umieścić w EAX wartość funkcji > >> signum(EAX), czyli > >> > >> 1 gdy w EAX jest liczba dodatnia (czyli bit znaku = 0 i nie wszystkie > >> bity są zerowe) > >> > >> 0 gdy w jest 0 (wszystkie bity są zerowe) > >> > >> -1 gdy w EAX jest liczba ujemna (bit znaku = 1) > > > > Moja wersja ma 6 instrukcji. > > Pokażcie swoje :) > > CDQ > NEG EAX > RCL EDX,1 > MOV EAX,EDX Wow, jestem pod wrażeniem. :) Naprawdę sprytne. Moje podejście w ogóle nie wymaga dostępu do znacznika przeniesienia i wykorzystuje jedynie proste instrukcje. mov edx, eax sar eax, 32 and edx, 0x7ffffffff add edx, 0x7ffffffff shr edx, 31 or eax, edx w. -- Mamy oswojoną sarnę i w związku z tym projektuję, by dorobić do niej kłódkę.
Re: Kolejna prosta zagadka
Author: Andrzej Grażyński
Date: Wed, 24 Mar 2010 18:56
Date: Wed, 24 Mar 2010 18:56
44 lines
1964 bytes
1964 bytes
Wojciech Muła pisze: > Andrzej Grażyński <grazynsk@petex.com.pl> wrote: > >>>> W EAX jest liczba ze znakiem, należy umieścić w EAX wartość funkcji >>>> signum(EAX), czyli >>>> >>>> 1 gdy w EAX jest liczba dodatnia (czyli bit znaku = 0 i nie wszystkie >>>> bity są zerowe) >>>> >>>> 0 gdy w jest 0 (wszystkie bity są zerowe) >>>> >>>> -1 gdy w EAX jest liczba ujemna (bit znaku = 1) >>> Moja wersja ma 6 instrukcji. >>> Pokażcie swoje :) >> CDQ >> NEG EAX >> RCL EDX,1 >> MOV EAX,EDX > > Wow, jestem pod wrażeniem. :) Naprawdę sprytne. > Moje podejście w ogóle nie wymaga dostępu do znacznika > przeniesienia i wykorzystuje jedynie proste instrukcje. > > sar eax, 32 Niestety, wielkość przesunięcia obcinana jest do 5 bitów, więc SAR EAX,32 oznacza to samo, co SAR EAX,0 Inny mój wariant: MOV EDX,EAX OR EAX,EAX SETG AL SETL DL SUB EAX,EDX >
Re: Kolejna prosta zagadka
Author: Wojciech Muła
Date: Wed, 24 Mar 2010 20:35
Date: Wed, 24 Mar 2010 20:35
34 lines
1808 bytes
1808 bytes
Andrzej Grażyński <grazynsk@petex.com.pl> wrote: > >>> Moja wersja ma 6 instrukcji. > >>> Pokażcie swoje :) > >> CDQ > >> NEG EAX > >> RCL EDX,1 > >> MOV EAX,EDX > > > > Wow, jestem pod wrażeniem. :) Naprawdę sprytne. > > Moje podejście w ogóle nie wymaga dostępu do znacznika > > przeniesienia i wykorzystuje jedynie proste instrukcje. > > > > sar eax, 32 > > Niestety, wielkość przesunięcia obcinana jest do 5 bitów, więc SAR > EAX,32 oznacza to samo, co SAR EAX,0 Literówka, powinno być oczywiście 31. > Inny mój wariant: > > MOV EDX,EAX > OR EAX,EAX > SETG AL > SETL DL > SUB EAX,EDX Też sprytne :) w. -- Mamy oswojoną sarnę i w związku z tym projektuję, by dorobić do niej kłódkę.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads