
- •Цели и задачи производственнойпрактики
- •Иметь практическийопыт:
- •Организация производственнойпрактики
- •Сроки проведенияпрактики.
- •Базы практики
- •Обязанности руководителейпрактики
- •Оформление результатов практики
- •Содержаниепрактики
- •Календарный план прохожденияпрактики
- •Структура и содержание отчета по производственнойпрактике
- •7.Содержание основной частиотчета
- •Анализ простой программы наАссемблере.
- •Кодпрограммы:
- •Задания на производственнуюпрактику.
- •Анализ простой программы наАссемблере.
- •Анализ программы редакторатекста.
- •Анализ программы управления диалоговымиокнами.
- •Анализ программы управления аппаратной частьюПк.
- •Анализ программы моделированияграфики.
- •Требования коформлению
- •Порядок проведения зачета по производственнойпрактике
- •10.Перечень рекомендуемыхисточниковОсновныеисточники:
- •Дополнительныеисточники:
- •Интернет–ресурсы:
- •Задание на производственную практикупо
- •Оборудования
- •Последовательность прохожденияпроизводственнойпрактики
Анализ программы управления аппаратной частьюПк.
Видыработ:
изучить программу наАссемблере;
провести анализ структурыпрограммы;
провести анализ операторовпрограммы;
ознакомиться с возможным использованием операторовпрограммногокода.
Задание1.Проанализировать программу,написанную на ассемблереидобавить комментарии к каждойстрочке.
format PEGUI4.0include'win32a.inc'
;nosection defined - fasm will automatically create .flat sectionforboth
; code and data,andset entry pointatthe beginning of thissection
invokeMessageBoxA,0,_message,_caption,MB_ICONQUESTION+MB_YESNOcmp eax,IDYES
jneexit
invokemciSendString,_cmd_open,0,0,0invokemciSendString,_cmd_eject,0,0,0invokemciSendString,_cmd_close,0,0,0
exit:
invokeExitProcess,0
_message db 'Do you need additional place for thebeer?',0
_caption db 'Desktopconfiguration',0
_cmd_open db 'opencdaudio',0
_cmd_eject db 'set cdaudio dooropen',0
_cmd_close db 'closecdaudio',0
; import datainthe samesectiondataimport
librarykernel32,'KERNEL32.DLL',\user32,'USER32.DLL',\
winmm,'WINMM.DLL'
import kernel32,\ExitProcess,'ExitProcess'
import user32,\MessageBoxA,'MessageBoxA'
importwinmm,\mciSendString,'mciSendStringA'
enddata
Задание2.Оформитьотчет.
Анализ программы моделированияграфики.
Видыработ:
изучить программу наАссемблере;
провести анализ структурыпрограммы;
провести анализ операторовпрограммы;
ознакомиться с возможным использованием операторовпрограммногокода.
Задание1.Проанализировать программу,написанную на ассемблереидобавить комментарии к каждойстрочке.
format PEGUI4.0entrystart
include'win32a.inc'include'ddraw.inc'
section '.text' code readableexecutablestart:
invokeGetModuleHandleA,NULLmov [hinstance],eax
invokeLoadIconA,NULL,IDI_APPLICATIONmov [wc.hIcon],eax
invokeLoadCursorA,NULL,IDC_ARROWmov [wc.hCursor],eax
mov [wc.style],0
mov [wc.lpfnWndProc],WindowProcmov [wc.cbClsExtra],0
mov [wc.cbWndExtra],0mov eax,[hinstance]
mov [wc.hInstance],eaxmov [wc.hbrBackground],0
mov dword[wc.lpszMenuName],NULLmov dword[wc.lpszClassName],_classinvokeRegisterClassA,wc
test eax,eax
jz startup_error
invokeCreateWindowExA,\0,_class,_title,WS_POPUP+WS_VISIBLE,0,0,0,0,NULL,NULL,[hinstance],NULL
test eax,eax
jz startup_errormov [hwnd],eax
invokeDirectDrawCreate,NULL,DDraw,NULLor eax,eax
jnz ddraw_error
cominvkDDraw,SetCooperativeLevel,\[hwnd],DDSCL_EXCLUSIVE+DDSCL_FULLSCREEN
or eax,eax
jnz ddraw_error
cominvkDDraw,SetDisplayMode,\640,480,8
or eax,eax
jnz ddraw_error
mov [ddsd.dwSize],sizeof.DDSURFACEDESC
mov [ddsd.dwFlags],DDSD_CAPS+DDSD_BACKBUFFERCOUNTmov
[ddsd.ddsCaps.dwCaps],DDSCAPS_PRIMARYSURFACE+DDSCAPS_FLIP+DDSCAPS_COMPLEX
mov [ddsd.dwBackBufferCount],1cominvkDDraw,CreateSurface,\
ddsd,DDSPrimary,NULLor eax,eax
jnzddraw_error
mov [ddscaps.dwCaps],DDSCAPS_BACKBUFFERcominvkDDSPrimary,GetAttachedSurface,\
ddscaps,DDSBackor eax,eax
jnzddraw_error
movesi,picturecallload_picturejcopen_error
mov esi,picturecall load_palette
jc open_error
invokeGetTickCountmov [last_tick],eax
jmp paintmain_loop:
invokePeekMessageA,msg,NULL,0,0,PM_NOREMOVEor eax,eax
jz no_message
invokeGetMessageA,msg,NULL,0,0or eax,eax
jz end_loop
invokeTranslateMessage,msginvokeDispatchMessageA,msg
jmp main_loopno_message:
cmp [active],0
je sleep
cominvkDDSPrimary,IsLostor eax,eax
jz paint
cmp eax,DDERR_SURFACELOST
jne end_loop
cominvkDDSPrimary,Restorepaint:
mov [rect.top],0
mov [rect.bottom],480mov [rect.left],0
mov [rect.right],640
cominvkDDSBack,BltFast,\0,0,[DDSPicture],rect,DDBLTFAST_SRCCOLORKEY
or eax,eax
jnz paint_done
movzxeax,[frame]xor edx,edx
mov ebx,10
div ebx
sal eax,6
add eax,480
mov [rect.top],eax
add eax,64
mov [rect.bottom],eaxsal edx,6
mov [rect.left],edxadd edx,64
mov [rect.right],edx
cominvkDDSBack,BltFast,\[x],[y],[DDSPicture],rect,DDBLTFAST_SRCCOLORKEY
cominvkDDSPrimary,SetPalette,[DDPalette]cominvkDDSPrimary,Flip,0,0
paint_done:
invokeGetTickCountmov ebx,eax
sub ebx,[last_tick]cmp ebx,20
jb main_loopadd [last_tick],20
inc [frame]cmp [frame],60jb main_loopmov [frame],0jmp main_loop
sleep:
invokeWaitMessagejmp main_loop
ddraw_error:
mov eax,_ddraw_errorjmp error
open_error:
mov eax,_open_errorerror:
invokeMessageBoxA,[hwnd],eax,_error,MB_OK+MB_ICONERRORinvokeDestroyWindow,[hwnd]
invokePostQuitMessage,1jmp main_loop
startup_error:
invokeMessageBoxA,[hwnd],_startup_error,_error,MB_OK+MB_ICONERRORend_loop:
invokeExitProcess,[msg.wParam]include'gif87a.inc'
proc WindowProchwnd,wmsg,wparam,lparampush ebxesiedi
mov eax,[wmsg]
cmp eax,WM_CREATEje .wmcreate
cmp eax,WM_DESTROYje .wmdestroy
cmp eax,WM_ACTIVATEje .wmactivate
cmp eax,WM_SETCURSORje .wmsetcursor
cmp eax,WM_MOUSEMOVEje .wmmousemove
cmp eax,WM_KEYDOWNje .wmkeydown
.defwindowproc:
invokeDefWindowProcA,[hwnd],[wmsg],[wparam],[lparam]jmp .finish
.wmcreate:
xor eax,eax
jmp .finish
.wmkeydown:
cmp [wparam],VK_ESCAPEjne .finish
.wmdestroy:
cominvkDDraw,RestoreDisplayModecominvkDDraw,Release
invokePostQuitMessage,0xor eax,eax
jmp .finish
.wmactivate:
mov eax,[wparam]mov [active],aljmp .finish
.wmsetcursor:
invokeSetCursor,0xor eax,eax
jmp .finish
.wmmousemove:
movsx eax,word[lparam]mov [x],eax
movsx eax,word[lparam+2]mov [y],eax
.finish:
pop ediesiebxret
endp
section '.data' data readablewriteable
_titledb 'flat assembler DirectDrawapplication',0
_class db'FDDRAW32',0
_error db'Error',0
_startup_error db 'Startupfailed.',0
_ddraw_error db 'Direct Draw initializationfailed.',0
_open_error db 'Failed opening datafile.',0picture db'DDRAW.GIF',0
section '.bss' readablewriteable
hinstance dd?hwnddd?
wcWNDCLASS
msgMSG
ddsdDDSURFACEDESC
ddscapsDDSCAPS
DDrawDirectDrawDDSPrimaryDirectDrawSurfaceDDSBackDirectDrawSurface
DDSPictureDirectDrawSurfaceDDPaletteDirectDrawPalette
bytes_count dd?last_tickdd?frame db?activedb?
LZW_bitsdb?
LZW_table rd(0F00h-2)*2buffer rb40000h
rectRECTx dd?
y dd?
section '.idata' import datareadablelibrarykernel,'KERNEL32.DLL',\
user,'USER32.DLL',\ddraw,'DDRAW.DLL'
importkernel,\GetModuleHandleA,'GetModuleHandleA',\CreateFileA,'CreateFileA',\ReadFile,'ReadFile',\CloseHandle,'CloseHandle',\GetTickCount,'GetTickCount',\ExitProcess,'ExitProcess'
importuser,\
RegisterClassA,'RegisterClassA',\CreateWindowExA,'CreateWindowExA',\DestroyWindow,'DestroyWindow',\
DefWindowProcA,'DefWindowProcA',\GetMessageA,'GetMessageA',\PeekMessageA,'PeekMessageA',\TranslateMessage,'TranslateMessage',\DispatchMessageA,'DispatchMessageA',\LoadCursorA,'LoadCursorA',\LoadIconA,'LoadIconA',\SetCursor,'SetCursor',\MessageBoxA,'MessageBoxA',\PostQuitMessage,'PostQuitMessage',\WaitMessage,'WaitMessage'
importddraw,\DirectDrawCreate,'DirectDrawCreate'
Задание2.Оформитьотчет.