Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_PP_02_KS41.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
130 Кб
Скачать
☆
  1. Анализ простой программы наАссемблере.

Видыработ:

  • ознакомиться с простой программой наАссемблере;

  • провести анализ структурыпрограммы;

  • провести анализ операторовпрограммы;

  • ознакомиться с возможным использованием операторовпрограммногокода.

Задание1.Проанализировать программу,написанную на ассемблереидобавить комментарии к каждойстрочке.

include'win32ax.inc'

.codestart:

invoke MessageBox,HWND_DESKTOP,"Hi! I'm the exampleprogram!",invokeGetCommandLine,MB_OK

invokeExitProcess,0

.endstart

Задание 2. Изменить программутак, что выводилосьследующеесообщение«Привет!!!Меня зовут(здесь ВашиФИО)».

Задание3.Оформитьотчет.

  1. Анализ программы редакторатекста.

Видыработ:

  • изучить программу наАссемблере;

  • провести анализ структурыпрограммы;

  • провести анализ операторовпрограммы;

  • ознакомиться с возможным использованием операторовпрограммногокода.

Задание1.Проанализировать программу,написанную на ассемблереидобавить комментарии к каждойстрочке.

format PEGUI4.0entrystart

include'win32a.inc'IDM_NEW =101

IDM_EXIT =102

IDM_ABOUT =901

section '.text' code readableexecutablestart:

invokeGetModuleHandle,0mov [wc.hInstance],eaxinvoke LoadIcon,eax,17mov [wc.hIcon],eax

invokeLoadCursor,0,IDC_ARROWmov [wc.hCursor],eax

invokeRegisterClass,wctest eax,eax

jz error

invokeLoadMenu,[wc.hInstance],37invoke

CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_OVERLAPPEDWINDOW,144,128,256,256,NULL,eax,[wc.hInstance],NULL

test eax,eaxjz error

msg_loop:

invokeGetMessage,msg,NULL,0,0cmp eax,1

jb end_loop

jne msg_loop

invokeTranslateMessage,msginvokeDispatchMessage,msgjmpmsg_loop

error:

invokeMessageBox,NULL,_error,NULL,MB_ICONERROR+MB_OK

end_loop:

invokeExitProcess,[msg.wParam]

proc WindowProchwnd,wmsg,wparam,lparampush ebxesiedi

cmp [wmsg],WM_CREATEje .wmcreate

cmp [wmsg],WM_SIZEje .wmsize

cmp [wmsg],WM_SETFOCUSje .wmsetfocus

cmp [wmsg],WM_COMMANDje .wmcommand

cmp [wmsg],WM_DESTROYje .wmdestroy

.defwndproc:

invokeDefWindowProc,[hwnd],[wmsg],[wparam],[lparam]jmp .finish

.wmcreate:

invokeGetClientRect,[hwnd],clientinvoke

CreateWindowEx,WS_EX_CLIENTEDGE,_edit,0,WS_VISIBLE+WS_CHILD+WS_HSCROLL+WS_VSCROLL+ES_AUTOHSCROLL+ES_AUTOVSCROLL+ES_MULTILINE,[client.left

],[client.top],[client.right],[client.bottom],[hwnd],0,[wc.hInstance],NULLor eax,eax

jz .failed

mov [edithwnd],eaxinvoke

CreateFont,16,0,0,0,0,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_RASTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH+FF_DONTCARE,NULL

or eax,eax

jz .failed

mov [editfont],eax

invokeSendMessage,[edithwnd],WM_SETFONT,eax,FALSExor eax,eax

jmp .finish

.failed:

or eax,-1

jmp .finish

.wmsize:

invokeGetClientRect,[hwnd],clientinvoke

MoveWindow,[edithwnd],[client.left],[client.top],[client.right],[client.bottom],TRUExor eax,eax

jmp .finish

.wmsetfocus:

invokeSetFocus,[edithwnd]xor eax,eax

jmp .finish

.wmcommand:

mov eax,[wparam]and eax,0FFFFhcmp eax,IDM_NEWje .new

cmp eax,IDM_ABOUTje .about

cmp eax,IDM_EXITje .wmdestroy

jmp .defwndproc

.new:

invokeSendMessage,[edithwnd],WM_SETTEXT,0,0jmp .finish

.about:

invokeMessageBox,[hwnd],_about_text,_about_title,MB_OKjmp .finish

.wmdestroy:

invokeDeleteObject,[editfont]invoke PostQuitMessage,0xor eax,eax

.finish:

endp

pop ediesiebxret

section '.data' data readablewriteable

_title TCHAR'MiniPad',0

_about_title TCHAR 'AboutMiniPad',0

_about_text TCHAR 'This is Win32 example program created withflatassembler.',0

_error TCHAR 'Startupfailed.',0

_class TCHAR'MINIPAD32',0

_editTCHAR'EDIT',0

wcWNDCLASS0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class

edithwnd dd?editfont dd?

msgMSGclientRECT

section '.idata' import data readablewriteablelibrarykernel,'KERNEL32.DLL',\

user,'USER32.DLL',\

gdi,'GDI32.DLL'

importkernel,\GetModuleHandle,'GetModuleHandleA',\ExitProcess,'ExitProcess'

importuser,\

RegisterClass,'RegisterClassA',\CreateWindowEx,'CreateWindowExA',\DefWindowProc,'DefWindowProcA',\SetWindowLong,'SetWindowLongA',\RedrawWindow,'RedrawWindow',\GetMessage,'GetMessageA',\TranslateMessage,'TranslateMessage',\DispatchMessage,'DispatchMessageA',\SendMessage,'SendMessageA',\LoadCursor,'LoadCursorA',\LoadIcon,'LoadIconA',\LoadMenu,'LoadMenuA',\GetClientRect,'GetClientRect',\MoveWindow,'MoveWindow',\SetFocus,'SetFocus',\MessageBox,'MessageBoxA',\PostQuitMessage,'PostQuitMessage'

importgdi,\

CreateFont,'CreateFontA',\DeleteObject,'DeleteObject'

section '.rsrc' resource datareadable

; resourcedirectory

directoryRT_MENU,menus,\RT_ICON,icons,\RT_GROUP_ICON,group_icons,\RT_VERSION,versions

; resourcesubdirectoriesresourcemenus,\

37,LANG_ENGLISH+SUBLANG_DEFAULT,main_menu

resourceicons,\

1,LANG_NEUTRAL,icon_data

resourcegroup_icons,\17,LANG_NEUTRAL,main_icon

resourceversions,\

1,LANG_NEUTRAL,version

menumain_menu

menuitem'&File',0,MFR_POPUPmenuitem'&New',IDM_NEWmenuseparator

menuitem'E&xit',IDM_EXIT,MFR_ENDmenuitem '&Help',0,MFR_POPUP +MFR_END

menuitem'&About...',IDM_ABOUT,MFR_ENDiconmain_icon,icon_data,'minipad.ico'

versioninfo

version,VOSWINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\

'FileDescription','MiniPad - exampleprogram',\'LegalCopyright','No rightsreserved.',\'FileVersion','1.0',\

'ProductVersion','1.0',\'OriginalFilename','MINIPAD.EXE'

Задание2.В меню«Help» -подменю«About…»в открывшемсяокневывести информацию о разработчикепрограммы.

Изменить название программы на«Миниблокнот»Задание3.Оформитьотчет.