Алгоритм Проги MemoryStatus-хочу оптимизировать

Тема в разделе "WASM.A&O", создана пользователем Alexoid, 16 окт 2007.

  1. Alexoid

    Alexoid Александр Васильевич

    Публикаций:
    0
    Регистрация:
    16 окт 2007
    Сообщения:
    3
    Адрес:
    Республика Коми, г. Ухта
    Здравствуйте!!! я писал прогу написал . Поздравте, хочю узнать мнение экспертов по основному алгориту и вот он какой у меня получился и по возможности его оптитититититимизировать. буду признателен за any мнение.

    Код (Text):
    1.         LOCAL MS    :MEMORYSTATUS
    2.         LOCAL myint1    :DWORD
    3.         LOCAL myint :DWORD
    4.        
    5.         ;определяем кол-во памяти и формируем стоку
    6.         invoke GlobalMemoryStatus, ADDR MS
    7.         ;деление
    8.         mov eax,MS.dwTotalPhys
    9.         sub eax,MS.dwAvailPhys
    10.         mov ebx,1024
    11.         mov edx,0
    12.         div ebx
    13.         CMP edx,999
    14.         JNA LN1
    15.             ADD eax,1
    16.         LN1:
    17.         mov edx,0
    18.         div ebx
    19.         mov myint,edx  
    20.         ;умножение
    21.         mov ecx,1000
    22.         mul ecx
    23.         mov edx,myint
    24.         add eax,edx
    25.         CMP myint,999
    26.         JNA LN
    27.             ADD eax,1
    28.         LN:
    29.         ;Кол-во разрядов(Символов)
    30.         mov myint,eax
    31.         mov myint1,0
    32.         mov ebx,10
    33.         L1:
    34.             mov edx,0
    35.             div ebx
    36.             inc myint1
    37.             or eax,eax
    38.             jz create_stop1;
    39.         jmp L1
    40.         create_stop1:
    41.         .if myint1==7
    42.             inc myint1
    43.         .endif
    44.         inc myint1
    45.         mov eax,myint
    46.         mov edi,offset mystr+1
    47.         add edi,myint1
    48.         mov ebx,10;будем делить на 10
    49.         mov dl,bh;завершающий ноль
    50.         mov ecx,8
    51.         LNextI:
    52.             dec edi;следующий байт
    53.             mov [edi],dl;записываем
    54.             or eax,eax;проверяем число
    55.             jz LStopI;закончилось число выход
    56.             dec ecx
    57.             cmp ecx,4
    58.             jne L2
    59.                 mov dl,','
    60.                 jmp LNextI
    61.             L2:
    62.             cmp ecx,0
    63.             jne L3
    64.                 mov dl,' '
    65.                 jmp LNextI
    66.             L3:
    67.             mov edx,0
    68.             div ebx;получаем остаток от деления
    69.             or dl,30h;превращаем число в символ
    70.         jmp short LNextI
    71.         LStopI:
    72.         MOV ECX,8
    73.         add edi,myint1
    74.         LEA ESI,szSpace ;адрес строки, откуда копировать
    75.         LO:
    76.             MOV AL,[ESI]
    77.             MOV [EDI],AL
    78.             INC EDI
    79.         LOOP LO
    80.         add myint1,8
    81.         invoke TextOut,hWndDC,0,0,addr mystr,myint1
    82.         invoke TextOut,hWndDC,68,0,addr szBCAPTION,1
    83.         invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE or SWP_NOACTIVATE or SWP_NOMOVES or WP_SHOWWINDOW
    84.     ret
    И сразу хочу заметить WinApi по работе со строками Не предлгать, т.к.мало того что в них используються не самые бастродейственные алгоритмы, кроме того неоходио создавать времмены переменны для передачи параметров и сама передача параметров в стек отнимает время.
    ---------
    Хотелось бы сразу спросить.
    Этот алгоритм работает в таймере, также в конце используеться API-SetWindowPos, т.е. приложения всегда наверх, но в Direct/OpenGL-приложениях моя программа появляется, но мигает (при этом как я не старался моё приложение мигает),можно ли определить её так чтобы оно отображалось в DX стабильно.

    Заранее благодарю.
    MemStatus, ВОТ ОНА