Advertisement
kamasazi99

Asm lab 9, test

Jan 13th, 2020
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .386
  2. .MODEL FLAT, STDCALL
  3.  
  4. include grafika.inc
  5.  
  6. ExitProcess Proto :DWORD
  7.  
  8. CSstyle     EQU     CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS
  9. WNDstyle    EQU     WS_CLIPCHILDREN + WS_OVERLAPPEDWINDOW + WS_HSCROLL+WS_VSCROLL
  10. EDTstyle EQU WS_VISIBLE+WS_CHILD+WS_TABSTOP+WS_BORDER
  11.  
  12. .data
  13.     hinst       DWORD               0
  14.     msg         MSGSTRUCT           <?>
  15.     wndc        WNDCLASS            <?>
  16.    
  17.     cname       BYTE                "MainClass", 0
  18.     hwnd        DWORD               0
  19.     hdc         DWORD               0
  20.     tytul       BYTE                "Cegielka",0
  21.     naglow2     BYTE                "Kliknięto przycisk",0
  22.     naglow      BYTE                "Kamil",0
  23.     rozmN       DWORD               0
  24.     nagl        BYTE                "Komunikat", 0
  25.     terr        BYTE                "blad!", 0
  26.     terr2       BYTE                "blad2!", 0
  27.     ziemniaczek DWORD               0
  28.  
  29.     BSstyle EQU BS_PUSHBUTTON+WS_VISIBLE+WS_CHILD+WS_TABSTOP
  30.     tstart BYTE "Start", 0
  31.     tbutt BYTE "BUTTON", 0
  32.     hbutt DWORD 0
  33.  
  34.     tstart2 BYTE "Kopiuj", 0
  35.     hbutt2 DWORD  0
  36.  
  37.     hedt DWORD 0
  38.     tedt BYTE "EDIT", 0
  39.     tnazwaedt BYTE "POTATO", 0
  40.     ttekst BYTE "tekst", 0
  41.  
  42.     bufor       BYTE                128 dup(0)
  43.  
  44. .code
  45.  
  46. WndProc PROC uses EBX ESI EDI windowHandle:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
  47.  
  48.     .IF uMSG == WM_CREATE
  49. ;ZAD3
  50.     INVOKE CreateWindowExA , 0, OFFSET tbutt, OFFSET tstart ,BSstyle , 10, 50, 100, 40, windowHandle , 0, hinst, 0
  51.     MOV hbutt,EAX
  52.  
  53. ;ZAD5
  54.     INVOKE CreateWindowExA , 0, OFFSET tedt, OFFSET tnazwaedt ,EDTstyle , 10, 150, 100, 40, windowHandle , 0, hinst, 0
  55.     mov hedt, EAX
  56.     INVOKE SendMessageA , hedt,WM_SETTEXT ,0,OFFSET ttekst
  57.     INVOKE SetFocus ,hedt
  58.  
  59. ;ZAD6
  60.     INVOKE CreateWindowExA , 0, OFFSET tbutt, OFFSET tstart2 ,BSstyle , 200, 50, 100, 40, windowHandle , 0, hinst, 0
  61.     MOV hbutt2,EAX
  62.  
  63.     jmp wndend
  64.     .ENDIF
  65.  
  66.     .IF uMsg == WM_COMMAND
  67.         mov EAX,lParam
  68.  
  69. ;ZAD4
  70.         .IF EAX == hbutt
  71.             INVOKE lstrlenA,OFFSET naglow2
  72.             mov rozmN,EAX
  73.             INVOKE TextOutA,hdc,200,100,OFFSET naglow2,rozmN
  74.             INVOKE UpdateWindow,hwnd
  75.         .ENDIF
  76.  
  77.  
  78. ;ZAD6
  79. .IF EAX == hbutt2
  80.             INVOKE SendMessageA ,hedt,WM_GETTEXT ,128,OFFSET bufor
  81.             INVOKE lstrlenA,OFFSET bufor
  82.             mov rozmN,EAX
  83.             INVOKE TextOutA,hdc,200,150,OFFSET bufor,rozmN
  84.             INVOKE UpdateWindow,hwnd
  85.         .ENDIF
  86.  
  87.     .ENDIF
  88.  
  89.  
  90.  
  91.  
  92.  ;ZAD1
  93.     INVOKE DefWindowProcA, windowHandle, uMsg, wParam, lParam
  94.  
  95.     wndend:
  96.  
  97. ret
  98. WndProc ENDP
  99.  
  100. main proc
  101.  
  102.     ;wypelnienie struktury wndc WNDClass
  103.     ;pdf 4.1    
  104.  
  105.     mov [wndc.clsStyle], CSstyle                ;ustawienie pierwszego pola struktury
  106.     mov [wndc.clsLpfnWndProc], OFFSET WndProc   ;ustawieinie drugiego pola struktury
  107.  
  108.     INVOKE GetModuleHandleA, 0
  109.     mov hinst, EAX
  110.     mov [wndc.clsHInstance], EAX   
  111.    
  112.     ;mov [wndc.clsCbClsExtra], 0
  113.     ;mov [wndc.clsCbWndExtra], 0
  114.  
  115.     INVOKE LoadIconA,0,IDI_APPLICATION 
  116.     mov [wndc.clsHIcon], EAX
  117.  
  118.     INVOKE LoadCursorA,0,IDC_ARROW 
  119.     mov [wndc.clsHCursor], EAX
  120.  
  121.     INVOKE GetStockObject, LTGRAY_BRUSH
  122.     mov [wndc.clsHbrBackground], EAX
  123.  
  124.     mov DWORD PTR [wndc.clsLpszClassName], OFFSET cname
  125.  
  126.     Invoke RegisterClassA, OFFSET wndc
  127.  
  128.  
  129.  
  130.     ;obsluga bledow
  131.     .IF EAX == 0
  132.         jmp err0
  133.     .ENDIF
  134.  
  135.     ;utworzenie okna glownego aplikacji
  136.     ;pdf 4.
  137.  
  138.     INVOKE CreateWindowExA, 0, OFFSET cname, OFFSET tytul, WNDstyle, 50, 50, 600, 400, 0, 0, hinst, 0
  139.  
  140.     ;sprawdzenie rejestru eax czy nastapil blad podczas tworzenia okna aplikacji
  141.     .IF EAX == 0
  142.         jmp err2
  143.     .ENDIF
  144.  
  145.     ;zapis uchwytu do okna glownego do zmiennej, uchwyt w eax
  146.     mov hwnd, EAX
  147.  
  148.     ;wyswietlenie okna
  149.     ;4.9
  150.  
  151.     INVOKE ShowWindow, hwnd, SW_SHOWNORMAL
  152.  
  153. ;ZAD2
  154.     ;Pobranie kanwy głównego okna
  155.  
  156.     INVOKE GetDC,hwnd
  157.     mov hdc,EAX
  158.     INVOKE lstrlenA ,OFFSET naglow
  159.     mov rozmN,EAX
  160.     INVOKE TextOutA ,hdc,100,100,OFFSET naglow,rozmN
  161.     INVOKE UpdateWindow , hwnd
  162.  
  163.  
  164.  
  165.     ;ponizej glowna petla komunikatow
  166.     msgloop:
  167.         INVOKE GetMessageA, OFFSET msg, 0, 0, 0
  168.         .IF EAX == 0
  169.             jmp etkon
  170.         .ENDIF
  171.         .IF EAX == -1
  172.             jmp err0
  173.         .ENDIF 
  174.        
  175.         INVOKE TranslateMessage, OFFSET msg
  176.         INVOKE DispatchMessageA, OFFSET msg
  177.     jmp msgloop
  178.  
  179.     ;ponizej wstawiamy breakpoint by okno nam sie nie zamknelo
  180.     err0:
  181.      INVOKE MessageBoxA,0,OFFSET terr,OFFSET nagl,0
  182.      jmp    etkon
  183.     err2:
  184.      INVOKE MessageBoxA,0,OFFSET terr2,OFFSET nagl,0   
  185.     etkon:
  186.  
  187.    
  188.  
  189.     push 0
  190.     call ExitProcess
  191. main endp
  192.  
  193. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement