Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. Alexander77

    Alexander77 Alexander

    Публикаций:
    0
    Регистрация:
    1 авг 2006
    Сообщения:
    28
    Адрес:
    Ukraine, Kiev
    mov ax,1301h
    mov bh,0 ;номер страницы, текущая - 0
    mov bl,3Ah ;цвет, как я писал выше
    mov cx,sizeof MyString ;длина строки в байтах
    mov dl,столбец
    mov dh,строка
    mov bp,offset MyString
    push ds
    pop es
    int 10h
     
  2. Beowulf

    Beowulf New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    20
    как это сделать в графическом режиме например 113h (800x600x32k)
     
  3. Beowulf

    Beowulf New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2007
    Сообщения:
    20
    разоббрался (: спасибо
     
  4. artie

    artie New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2007
    Сообщения:
    7
    подскажите, как определить размер свободного дискового пространства и вывести его в окно на masm?

    использую GetDiskFreeSpace

    поскольку GetDiskFreeSpaceEx возвращает размеры в байтах в странных структурах... :dntknw: как можно использовать эту ULARGE_INTEGER ?

    далее основная проблема с выводом размера в окно, поскольку надо перевести число в строку. стандартных функций я не нашел, а с переводом проблемы возникают.

    подскажите, как это делать?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ULARGE_INTEGER - 8 байтовое число.
    сдвигай(shr) последовательно по DWORD'am, например если сдвинешь на 10, то получишь размер в Кб.
    ПО второму вопросу - поиск по форуму.
     
  6. Slim_d0g

    Slim_d0g New Member

    Публикаций:
    0
    Регистрация:
    6 май 2007
    Сообщения:
    6
    Здравствуйте!
    Мне задали написать змейку под win32 и я бы ее давно написал, но почему-то не работает функция UpdateWindow!( Т.е. я тестирую и все что написано и в WM_TIMER и в WM_KEYDOWN, все работает, вот только никак не хочет обновлять экран вместе с таймером((

    Даю листинг проги:
    Код (Text):
    1. .486                    
    2. .MODEL  FLAT , STDCALL
    3. option casemap :none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\user32.inc
    7. include \masm32\include\kernel32.inc
    8. include \masm32\include\gdi32.inc
    9. includelib \masm32\lib\user32.lib
    10. includelib \masm32\lib\kernel32.lib
    11. includelib \masm32\lib\gdi32.lib
    12.  
    13. ;EXTRN wsprintfA:PROC
    14.  
    15. .const
    16. IDB_BACK        equ 1
    17. IDB_APPLE       equ 2
    18. IDB_HEAD        equ 3
    19. IDB_BODY        equ 4
    20.  
    21. .data
    22. ClassName       db "SimpleWinClass",0
    23. AppName         db "Змейка",0
    24. Score_txt       db "Очки: ",0
    25. Score           dw 0
    26. Apple_x     dd 300
    27. Apple_y     dd 500
    28.  
    29. .data?
    30. Snake_x     dw 255 dup(?)
    31. Snake_y     dw 255 dup(?)
    32. Snake_spr   dw 255 dup(?)
    33. hInstance       HINSTANCE ?
    34. CommandLine     LPSTR ?
    35. hwnd            HWND ?
    36. hdc             HDC ?
    37. hBackground     dd ?
    38. hApple          dd ?
    39. hHead           dd ?
    40. hBody           dd ?
    41.  
    42. .code
    43.  
    44. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:SDWORD
    45.     LOCAL wc:WNDCLASSEX
    46.     LOCAL msg:MSG
    47.  
    48.  
    49.     mov   wc.cbSize,SIZEOF WNDCLASSEX
    50.     mov   wc.style, CS_BYTEALIGNWINDOW
    51.     mov   wc.lpfnWndProc, OFFSET WndProc
    52.     mov   wc.cbClsExtra,NULL
    53.     mov   wc.cbWndExtra,NULL
    54.     push  hInstance
    55.     pop   wc.hInstance
    56.     invoke LoadIcon, hInstance, IDI_APPLICATION
    57.     mov   wc.hIcon,eax
    58.     mov   wc.hbrBackground,COLOR_WINDOWTEXT+1
    59.     mov   wc.lpszMenuName,NULL
    60.     mov   wc.lpszClassName,OFFSET ClassName
    61.     invoke LoadIcon,NULL,IDI_APPLICATION
    62.  
    63.     mov   wc.hIconSm,0
    64.     invoke LoadCursor,NULL,IDC_ARROW
    65.  
    66.     mov   wc.hCursor,eax
    67.     invoke RegisterClassEx, addr wc
    68.  
    69.  
    70.     INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,800,640,NULL,NULL,hInst,NULL
    71.     mov   hwnd,eax
    72.  
    73.     INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
    74.     INVOKE UpdateWindow, hwnd
    75.  
    76.     invoke SetTimer,hwnd,1,500,NULL
    77.     cmp eax,0
    78.     je end_
    79.  
    80.     .WHILE TRUE
    81.         INVOKE GetMessage, ADDR msg,NULL,0,0
    82.         .BREAK .IF (!eax)
    83.         INVOKE TranslateMessage, ADDR msg
    84.         INVOKE DispatchMessage, ADDR msg
    85.     .ENDW
    86.     mov eax,msg.wParam
    87.     ret
    88. WinMain endp
    89.  
    90. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    91.     LOCAL ps:PAINTSTRUCT
    92.     LOCAL hMemDC:HDC
    93.     LOCAL rect:RECT
    94.  
    95.     mov   eax,uMsg
    96.  
    97.     .IF eax==WM_DESTROY
    98.         invoke PostQuitMessage,NULL
    99.  
    100.     .elseif eax==WM_CREATE
    101.         invoke LoadBitmap,hInstance,IDB_BACK
    102.         mov hBackground,eax
    103.         invoke LoadBitmap,hInstance,IDB_APPLE
    104.         mov hApple,eax
    105.  
    106.                            
    107.     .elseif eax==WM_PAINT
    108.  
    109.         invoke BeginPaint,hWnd,addr ps
    110.         mov hdc,eax
    111.  
    112.         invoke CreateCompatibleDC,hdc
    113.         mov hMemDC,eax
    114.         invoke SelectObject,hMemDC,hBackground
    115.         invoke GetClientRect,hWnd,addr rect
    116.         invoke BitBlt,hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY
    117.         invoke SelectObject,hMemDC,hApple
    118.                 invoke BitBlt,hdc,Apple_x,Apple_y,20,20,hMemDC,0,0,SRCCOPY
    119.         invoke DeleteDC,hMemDC
    120.  
    121.         ;RGB    200,200,50
    122.         mov eax,0ffffffh
    123.         invoke SetTextColor,hdc,eax
    124.         ;RGB    0,0,255
    125.         mov eax,0h;0e0e030h
    126.         invoke SetBkColor,hdc,eax
    127.  
    128.  
    129.         invoke TextOut,hdc,0,0,ADDR Score_txt,SIZEOF Score_txt-1
    130.         add   Score,'0'
    131.         invoke TextOut,hdc,50,0,ADDR Score,SIZEOF Score-1
    132.         sub   Score,'0'
    133.  
    134.         invoke EndPaint,hWnd,addr ps
    135.  
    136.     .elseif eax==WM_KEYDOWN
    137.         add Apple_x,64
    138.  
    139.  
    140.  
    141.                    
    142.     .elseif eax==WM_TIMER
    143.         add Apple_x,16
    144.         invoke UpdateWindow,hWnd
    145.  
    146.  
    147.     .ELSE
    148.         invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    149.         ret
    150.  
    151.     .ENDIF
    152.  
    153.     xor    eax,eax
    154.     ret
    155. WndProc endp
    156.  
    157. start:
    158.  
    159.     invoke GetModuleHandle, NULL
    160.     mov    hInstance,eax
    161.     invoke GetCommandLine
    162.         invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    163.     invoke ExitProcess,eax
    164.  
    165.         end start
    Заранее спасибо!
     
  7. artie

    artie New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2007
    Сообщения:
    7
    насколько я понял, ULARGE_INTEGER - это просто qword, а как его сдвигать, если регистры 32-разрядные? как его вообще в регистры загрузить?
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    я же написал последовательно, сначала один dword, потом второй.
     
  9. NLP

    NLP New Member

    Публикаций:
    0
    Регистрация:
    6 май 2007
    Сообщения:
    3
    привет
    мне очень нужен PE инфектор
    скачала на вашем сайте книгу от зелёного к красному, классная вещь, но приложенные к ней файлы не работают
    меня особенно интересует PEInfector2
    что с ним не так???
     
  10. ams007

    ams007 New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2007
    Сообщения:
    86
    ULARGE_INTEGER - нифига не 8 байт. это такая мегаструктура. МСДН поможет.
     
  11. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    ams007
    спорим что это 8 байт?
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    :-D :-D :-D
    В переводе на русский - объединение.
    А МСДН... ну он конечно поможет, но для этого ему не молиться надо, а заглянуть в него. А там вполне ясно написано: 64 бит.
     
  13. NLP

    NLP New Member

    Публикаций:
    0
    Регистрация:
    6 май 2007
    Сообщения:
    3
    а всё таки как насчёт инфектора?????
     
  14. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    NLP
    Насчет инфектора Вам в другом месте подскажут, студентам такие лабораторные работы не задают :)
     
  15. NLP

    NLP New Member

    Публикаций:
    0
    Регистрация:
    6 май 2007
    Сообщения:
    3
    а у меня диплом а не лабораторная;)
    это же статья с вашего сайта!!!!
    неужели никто не в курсе, почем файлы прикреплённые к статье не работают!!!!
    ну пжалста;)
    или пошлите меня к тому кто знает:)))
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    статья написана понятным языком, почему бы не написать код самому?
     
  17. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    NLP
    файлы прикреплённые к статье не работают
    В чем это выражется? Под отладчиком смотрел/анализировал?

    пошлите меня к тому кто знает
    Например, автор статьи.
     
  18. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    artie

    Код (Text):
    1. ;================================================================================================
    2. ;        Converts 64 bit number in EDX:EAX to string with any number base
    3. ;
    4. ;        Input:  DS:EDI => Place to put string
    5. ;                EDX:EAX, number to convert
    6. ;                ECX, Number base
    7. ;        Output: String
    8. ;-----------------------------------------------------
    9. ;   mov eax,FreeSpace.LowPart
    10. ;   mov edx,FreeSpace.HighPart
    11. ;   mov ecx,10
    12. ;   push edi
    13. ;   lea edi,OutBuf
    14. ;   Call Convert_Num
    15. ;   pop edi
    16. ;   lea eax,OutBuf
    17. ;-----------------------------------------------------
    18. Convert_Num proc near
    19. .data
    20.     Convert_Digs db '0123456789ABCDEF'
    21. .code
    22.         pushf
    23.         pushAD
    24.         sub     esp, 4
    25.         mov     ebp,esp
    26.         cld
    27.         mov     esi, edi
    28.         push    esi
    29. ;--- loop for each digit
    30.         sub     bh, bh
    31.         mov     dword ptr [ebp], eax               ;save low word
    32.         mov     dword ptr [ebp+4], edx             ;save high word
    33.         sub     esi, esi                          ;count digits
    34. Connum1:
    35.         inc     esi
    36.         mov     eax, dword ptr [ebp+4]             ;high word of value
    37.         sub     edx, edx                          ;clear for divide
    38.         div     ecx                              ;divide, DX gets remainder
    39.         mov     dword ptr [ebp+4],eax             ;save quotient (new high word)
    40.         mov     eax, dword ptr [ebp]               ;low word of value
    41.         div     ecx                              ;divide, DX gets remainder
    42.                                                 ;  (the digit)
    43.         mov     dword ptr [ebp], eax               ;save quotient (new low word)
    44.         mov     bl, dl
    45.         mov     al, byte ptr [Convert_Digs+ebx]  ;get the digit
    46.         stosb                                   ;store
    47.         cmp     dword ptr [ebp], 0                ;check if low word zero
    48.         jne     Connum1                         ;jump if not
    49.         cmp     dword ptr [ebp+4], 0              ;check if high word zero
    50.         jne     Connum1                         ;jump if not
    51.         sub     al, al
    52.         stosb                                   ;store the terminator
    53. ;--- reverse digits
    54.         pop     ecx                              ;restore start of string
    55.         xchg    ecx, esi
    56.         shr     ecx, 1                           ;number of reverses
    57.         jz      Connum3                         ;jump if none
    58.         xchg    edi, esi
    59.         sub     esi, 2                           ;point to last digit
    60. Connum2 :
    61.         mov     al, byte ptr [edi]               ;load front character
    62.         xchg    al, byte ptr [esi]               ;swap with end character
    63.         stosb                                   ;store new front character
    64.         dec     esi                              ;back up
    65.         loopd   Connum2                         ;loop back for each digit
    66. ;--- finished
    67. Connum3  :
    68.         add     esp, 4
    69.         popad
    70.         popf
    71.         ret
    72. Convert_Num endp
     
  19. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Улыбнуло.
    Кто его увидит, попросите чтоб мне постучал.

    cresta, это не для "any number base", а от 2 до 16 :)
     
  20. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    FreeManCPM

    Это не мои комментарии к исходнику. К тому же base 2, 10, 16 достаточны для 99,9% случаев.
    Не припоминаю, чтобы мне потребовалось отобразить число в сорокаодноричной системе счисления. Поэтому на практике фактически получается any