sprawozdanie 4 JA JJ


0x08 graphic

Sprawozdanie z ćwiczenia numer 4

Data wykonania ćwiczenia: 2009-12-07

Temat ćwiczenia:

Prosty program asemblerowy w środowisku Windows

Autor: Jarosław Jureczko

Program stworzony za pomocą Prostart

Zmiany przeprowadzone w głównym pliku .ASM (zaznaczone NA CZERWONO )

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

.486 ; create 32 bit code

.model flat, stdcall ; 32 bit memory model

option casemap :none ; case sensitive

include Przyklad.inc ; local includes for this file

.code

start:

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

invoke InitCommonControls

; ------------------

; set global values

; ------------------

mov hInstance, rv(GetModuleHandle, NULL)

mov CommandLine, rv(GetCommandLine)

mov hIcon, rv(LoadIcon,hInstance,500)

mov hCursor, rv(LoadCursor,NULL,IDC_ARROW)

mov sWid, rv(GetSystemMetrics,SM_CXSCREEN)

mov sHgt, rv(GetSystemMetrics,SM_CYSCREEN)

call Main

invoke ExitProcess,eax

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

Main proc

LOCAL Wwd:DWORD,Wht:DWORD,Wtx:DWORD,Wty:DWORD

STRING szClassName,"ProStart_Class"

; --------------------------------------------

; register class name for CreateWindowEx call

; --------------------------------------------

invoke RegisterWinClass,ADDR WndProc,ADDR szClassName,

hIcon,hCursor,COLOR_BTNFACE+1

; -------------------------------------------------

; macro to autoscale window co-ordinates to screen

; percentages and centre window at those sizes.

; -------------------------------------------------

AutoScale 75, 70

invoke CreateWindowEx,WS_EX_LEFT or WS_EX_ACCEPTFILES,

ADDR szClassName,

ADDR szDisplayName,

WS_OVERLAPPEDWINDOW,

Wtx,Wty,Wwd,Wht,

NULL,NULL,

hInstance,NULL

mov hWnd,eax

; ---------------------------

; macros for unchanging code

; ---------------------------

DisplayMenu hWnd,600

DisplayWindow hWnd,SW_SHOWNORMAL

call MsgLoop

ret

Main endp

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

RegisterWinClass proc lpWndProc:DWORD, lpClassName:DWORD,

Icon:DWORD, Cursor:DWORD, bColor:DWORD

LOCAL wc:WNDCLASSEX

mov wc.cbSize, sizeof WNDCLASSEX

mov wc.style, CS_BYTEALIGNCLIENT or \

CS_BYTEALIGNWINDOW

m2m wc.lpfnWndProc, lpWndProc

mov wc.cbClsExtra, NULL

mov wc.cbWndExtra, NULL

m2m wc.hInstance, hInstance

m2m wc.hbrBackground, bColor

mov wc.lpszMenuName, NULL

m2m wc.lpszClassName, lpClassName

m2m wc.hIcon, Icon

m2m wc.hCursor, Cursor

m2m wc.hIconSm, Icon

invoke RegisterClassEx, ADDR wc

ret

RegisterWinClass endp

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

MsgLoop proc

LOCAL msg:MSG

push esi

push edi

xor edi, edi ; clear EDI

lea esi, msg ; Structure address in ESI

jmp jumpin

StartLoop:

invoke TranslateMessage, esi

; --------------------------------------

; perform any required key processing here

; --------------------------------------

invoke DispatchMessage, esi

jumpin:

invoke GetMessage,esi,edi,edi,edi

test eax, eax

jnz StartLoop

mov eax, msg.wParam

pop edi

pop esi

ret

MsgLoop endp

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

WndProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

LOCAL var :DWORD

LOCAL caW :DWORD

LOCAL caH :DWORD

LOCAL fname :DWORD

LOCAL patn :DWORD

LOCAL Rct :RECT

LOCAL buffer1[260]:BYTE ; these are two spare buffers

LOCAL buffer2[260]:BYTE ; for text manipulation etc..

Switch uMsg

Case WM_COMMAND

Switch wParam

;======== toolbar commands ========

Case 50

fn MessageBox,hWin,"Klawisz_nr_1", \

ADDR szDisplayName,MB_OK

Case 51

fn MessageBox,hWin,"Klawisz_nr_2", \

ADDR szDisplayName,MB_OK

Case 52

fn MessageBox,hWin,"Klawisz_nr_3", \

ADDR szDisplayName,MB_OK

Case 53

fn MessageBox,hWin,"Klawisz_nr_4", \

ADDR szDisplayName,MB_OK

Case 54

fn MessageBox,hWin,"Klawisz_nr_5", \

ADDR szDisplayName,MB_OK

Case 55

fn MessageBox,hWin,"Klawisz_nr_6", \

ADDR szDisplayName,MB_OK

;======== menu commands ========

Case 1001

sas patn, "Wszystkie pliki !!",0,"*.*",0

mov fname, OpenFileDlg(hWin,hInstance,"Open File",patn)

cmp BYTE PTR [eax], 0

jne @F

return 0

@@:

; ---------------------------------

; perform your file open code here

; ---------------------------------

invoke MessageBox,hWin,fname,ADDR szDisplayName,MB_OK

Case 1002

sas patn, "wszystkie pliki !!!",0,"*.*",0

mov fname, SaveFileDlg(hWin,hInstance,"Save File As ...",patn)

cmp BYTE PTR [eax], 0

jne @F

return 0

@@:

; ---------------------------------

; perform your file save code here

; ---------------------------------

invoke MessageBox,hWin,fname,ADDR szDisplayName,MB_OK

Case 1010

invoke SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL

Case 1900

ShellAboutBox hWin,hIcon,\

"About Prostart 4 Template#Windows Application",\

"Prostart 4 Template",13,10,"Copyright © MASM32 1998-2005"

;====== end menu commands ======

Endsw

Case WM_DROPFILES

mov fname, DropFileName(wParam)

fn MessageBox,hWin,fname,"WM_DROPFILES",MB_OK

Case WM_CREATE

invoke Do_ToolBar,hWin

invoke Do_Status,hWin

Case WM_SYSCOLORCHANGE

invoke Do_ToolBar,hWin

Case WM_SIZE

invoke SendMessage,hToolBar,TB_AUTOSIZE,0,0

invoke MoveWindow,hStatus,0,0,0,0,TRUE

Case WM_PAINT

invoke Paint_Proc,hWin

return 0

Case WM_CLOSE

Case WM_DESTROY

invoke PostQuitMessage,NULL

return 0

Endsw

invoke DefWindowProc,hWin,uMsg,wParam,lParam

ret

WndProc endp

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

OPTION PROLOGUE:NONE

OPTION EPILOGUE:NONE

TopXY proc wDim:DWORD, sDim:DWORD

mov eax, [esp+8]

sub eax, [esp+4]

shr eax, 1

ret 8

TopXY endp

OPTION PROLOGUE:PrologueDef

OPTION EPILOGUE:EpilogueDef

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

Paint_Proc proc hWin:DWORD

LOCAL hDC :DWORD

LOCAL btn_hi :DWORD

LOCAL btn_lo :DWORD

LOCAL Rct :RECT

LOCAL Ps :PAINTSTRUCT

mov hDC, rv(BeginPaint,hWin,ADDR Ps)

; ----------------------------------------

mov btn_hi, rv(GetSysColor,COLOR_BTNHIGHLIGHT)

mov btn_lo, rv(GetSysColor,COLOR_BTNSHADOW)

; ----------------------------------------

invoke EndPaint,hWin,ADDR Ps

ret

Paint_Proc endp

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

end start

ZMIANY DOKONANE W PLIKU RSRC(polskie „otwiera”, „zapisuje” itd…) :

0x01 graphic

ZMIANY DOKONANE w PLIKU TOOLBAR.ASM

PRZED :

0x01 graphic

PO:

0x01 graphic

Program Wygenerowany przez Prostat miał na celu wyświetlić okno z 9 przyciskami i menu górnym z pozycjami „file” oraz „help”.

Zmiany dokonane w wyżej wymienionych plikach zmieniły postać wyświetlonego okna :

-6 przycisków(bez przerw miedzy przyciskami”

-wartość wyświetlanej komórki po kliknięciu na przycisk „klawisz_nr_X”

-Polskie Menu

WYNIK :

0x01 graphic

0x01 graphic

WNIOSKI:

Za pomocą Prostat możemy szybko stworzyć prosty program Asemblerowy.

Do zmian przeprowadzanych na programie wygenerowanym za pomocą prostat nie powinniśmy zbytnio ingerować w główny plik ASM.

Do zmian używamy plików RSRC oraz Toolbar.ASM za pomocą których możemy swobodnie zmieniać wygląd naszego okna bądź też innych elementów które stworzymy za pomocą prostart.

Laboratorium Języki Asemblerowe

Rok akademicki

Termin

Rodzaj studiów

Kierunek

Prowadzący

Grupa

Sekcja

2009/2010

Poniedziałek

WSZ

INF

EW

1

2

17.45 - 19.15



Wyszukiwarka

Podobne podstrony:
Sprawozdanie6 JJ
Ja, Transport Polsl Katowice, 2 semestr, Infrastruktura Transportu, Sprawozdanie
s5-ja, Studia budownictwo pierwszy rok, Chemia budowlana, sprawozdania
W10b Teoria Ja tozsamosc
2 definicje i sprawozdawczośćid 19489 ppt
PROCES PLANOWANIA BADANIA SPRAWOZDAN FINANSOWYC H
W 11 Sprawozdania
Wymogi, cechy i zadania sprawozdawczośći finansowej
Psychologia osobowości dr Kofta wykład 9 Poznawcza teoria Ja
JA[1] Zespoły neurologicznepopr
Analiza sprawozdan finansowych w BGZ SA
W10 Ja Spoleczne
W09 Ja wstep ROZ
W3 Sprawozdawczosc
HA ja na ARA cwiczenia 2010

więcej podobnych podstron