Aktív témák

  • P.H.

    senior tag

    Az 5. és az 1. lépés finomhangolása után, valamint a munkaterület címe bemeneti paraméter lett (a hívó algoritmus többszálúsítása okán):

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

    pushad
    shl ebp,02h
    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+03h],0FFh
    mov byte ptr [edi+edx],00h
    mov [edi+eax*02h+__COLON],ecx
    @@2ND_STEP:
    mov eax,ebp
    mov esi,[esp+__MTX]
    mov edx,00FFFFFFh
    @nx2row:
    mov bh,[edi+eax+03h]
    mov ecx,ebp
    @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:
    mov eax,edx
    sub ecx,edx
    xor eax,[edi+ebx]
    cmovs edx,ecx
    mov ecx,ebp
    @decrease_row_free:
    bt dword ptr [edi+ecx],00h
    mov al,[esi+03h]
    adc al,[edi+ebx+03h]
    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:
    cmp eax,ebx
    jz @nxstar
    test byte ptr [esi+03h],02h
    jnz @0_star
    @nxstar:
    sub esi,ebp
    add eax,04h
    jnz @search_star_in_column
    @@1ST_STEP:
    sub dword ptr [esp+__SYS0],01h
    mov ecx,ebp
    mov ebx,edi
    jz @count_result_STACK
    push dword ptr [edi]
    @restructure:
    mov esi,[ebx+__COLON]
    sub edx,ebp
    mov [edi+ecx+03h],al
    and byte ptr [edx+esi+03h],11110111b
    mov esi,[ebx+__0STAR]
    add ecx,04h
    mov [ebx+__COLON],eax
    lea ebx,[ebx+08h]
    mov byte ptr [edi+esi],01h
    jnz @restructure
    pop dword ptr [edi]
    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

    [ Szerkesztve ]

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

Aktív témák