Hirdetés

2024. április 26., péntek

Gyorskeresés

Hozzászólások

(#36) P.H.


P.H.
senior tag

- a VectorPath PUSHAD kiváltható 3 tárolással
- a @@2ND_STEP-ben levő, körülugrált kicsi valószínűségű ág máshová került
- plusz 2 utasítás többletadminisztációval 2 keresőciklus feleslegessé vált
- a sorok és oszlopok, valamint a speciális mátrixelemek jelölő byte-értékeinek összehangolása után (mely érték 1, azaz közvetlenül másoható Carry Flag-be BT-vel regiszterhasználat nélkül; mely jelölések összege milyen esetekben pontosan 0) a @@5TH_STEP fele feleslegessé vált

2.0 IPC-vel, 36 25x25 mátrix-ot old meg ezredmásodpercenként.

pushad
shl ebp,02h
mov ebx,offset(MARKS)
xor ecx,ecx
lea edx,[ebp+ebp*02h]
lea edi,[ebx+ebp]
neg ebp
@mark0:
sub edx,04h
mov [ebx+edx],ecx
jg @mark0
@@REDUCE_ROWS:
mov ebx,ebp
@rowmin:
mov esi,02000000h
mov ecx,ebp
xor edx,edx
@findrowmin:
cmp esi,[eax]
cmovz edx,ecx
cmova esi,[eax]
add ecx,04h
lea eax,[eax+04h]
jnz @findrowmin
sub ecx,ebp
cmp esi,02000000h
jz @specific
add eax,ebp
@subrow:
xor edx,edx
cmp byte ptr [eax+03h],00h
cmovz edx,esi
sub [eax],edx
sub ecx,04h
lea eax,[eax+04h]
jnz @subrow
jmp @reducenxrow
@specific:
test edx,edx
jz @@ABNORMAL_EXIT
bts dword ptr [edi+edx],00h
jnc @mark
@@ABNORMAL_EXIT:
add esp,20h
xor eax,eax
mov edx,7FFFFFFFh
stc
ret
@mark:
add ecx,ebx
sub dword ptr [esp+__SYS0],01h
mov byte ptr [edi+ebx+02h],01h
mov [edi+ecx*02h+__0STAR],edx
jz @count_result_STACK
@reducenxrow:
add ebx,04h
jnz @rowmin
@@RECUDE_COLUMNS:
sub ebx,04h
sub eax,04h
cmp ebx,ebp
jl @@2ND_STEP
test byte ptr [edi+ebx],01h
jnz @@RECUDE_COLUMNS
mov edx,02000000h
mov ecx,ebp
@findcolmin:
cmp edx,[eax]
cmova edx,[eax]
add eax,ebp
add ecx,04h
jnz @findcolmin
cmp edx,02000000h
lea ecx,[ebp-04h]
jz @@ABNORMAL_EXIT
@subcol:
xor esi,esi
add ecx,04h
jz @@RECUDE_COLUMNS
sub eax,ebp
cmp byte ptr [eax+03h],00h
cmovz esi,edx
sub [eax],esi
jnz @subcol
bts dword ptr [edi+ecx],10h
jc @subcol
bts dword ptr [edi+ebx],00h
mov esi,ecx
jc @subcol
sub esi,ebp
sub dword ptr [esp+__SYS0],01h
mov byte ptr [eax+03h],02h
mov [edi+esi*02h+__0STAR],ebx
jnz @subcol
jmp @count_result_STACK

@@3RD_STEP:
mov byte ptr [esi+03h],08h
mov byte ptr [edi+ebx+01h],0FFh
mov byte ptr [edi+edx],00h
mov [edi+eax*02h+__COLON],ecx
@@2ND_STEP:
mov eax,ebp
mov edx,00FFFFFFh
mov esi,[esp+__MTX]
@nx2row:
mov ecx,ebp
mov bh,[edi+eax+01h]
@zeroinrow:
cmp edx,[esi]
mov bl,bh
sbb bl,[edi+ecx]
jz @minimum
@nx2col:
add ecx,04h
lea esi,[esi+04h]
jnz @zeroinrow
add eax,04h
jnz @nx2row
@@5TH_STEP:
mov ebx,ebp
mov esi,[esp+__MTX]
@nx5row:
movsx eax,byte ptr [edi+ebx+01h]
mov ecx,ebp
xor eax,edx
jns @decrease_row_free
neg edx
@decrease_row_free:
bt dword ptr [edi+ecx],00h
mov al,[esi+03h]
adc al,[edi+ebx+01h]
mov eax,00000000h
cmovz eax,edx
sub [esi],eax
add esi,04h
add ecx,04h
jnz @decrease_row_free
add ebx,04h
jnz @nx5row
mov eax,[esp+__FREE0ROW]
xor edx,edx
mov ecx,[esp+__FREE0COL]
mov esi,[esp+__FREE0]
jmp @@DECIDE_NEXT_STEP
@minimum:
xor edx,edx
mov [esp+__FREE0ROW],eax
add edx,[esi]
mov [esp+__FREE0COL],ecx
mov [esp+__FREE0],esi
jnz @nx2col
@@DECIDE_NEXT_STEP:
mov ebx,eax
sub eax,ebp
add edx,[edi+eax*02h+__0STAR]
jnz @@3RD_STEP
@@4TH_STEP:
mov edx,[esp+__MTX]
jmp @colon_to_star
@0_star:
mov ebx,eax
mov byte ptr [esi+03h],00h
sub esi,ecx
sub eax,ebp
sub esi,ebp
mov ecx,[edi+eax*02h+__COLON]
lea esi,[esi+ecx]
@colon_to_star:
mov [edi+eax*02h+__0STAR],ecx
sub ecx,ebp
mov byte ptr [esi+03h],02h
lea esi,[edx+ecx]
mov eax,ebp
@search_star_in_column:
test byte ptr [esi+03h],02h
jz @nxstar
cmp eax,ebx
jnz @0_star
@nxstar:
sub esi,ebp
add eax,04h
jnz @search_star_in_column
@@1ST_STEP:
sub dword ptr [esp+__SYS0],01h
lea ebx,[edi+__COLON]
mov ecx,ebp
jz @count_result_STACK
@restructure:
mov esi,[ebx]
sub edx,ebp
mov [edi+ecx],eax
and byte ptr [edx+esi+03h],11110111b
add ecx,04h
mov [ebx],eax
lea ebx,[ebx+08h]
jnz @restructure
mov ebx,edi
mov eax,ebp
mov ecx,[edi+00h]
@markcol:
mov edx,[ebx+__0STAR]
add eax,04h
lea ebx,[ebx+08h]
mov byte ptr [edi+edx],01h
jnz @markcol
mov [edi+00h],ecx
jmp @@2ND_STEP
@count_result_STACK:
xor ecx,ecx
neg ebp
xor eax,eax
mov esi,[esp+__SAVE]
mov ebx,[esp+__MARKS]
add esp,20h
@results:
mov edx,[edi+ecx*02h+__0STAR]
add ecx,04h
add edx,ebp
add eax,[esi+edx]
shr edx,02h
add esi,ebp
cmp ecx,ebp
mov [ebx],dl
lea ebx,[ebx+01h]
jnz @results

Arguing on the Internet is like running in the Special Olympics. Even if you win, you are still ... ˙˙˙ Real Eyes Realize Real Lies ˙˙˙

Copyright © 2000-2024 PROHARDVER Informatikai Kft.