Win 32 API функцияларын пайдаланып Assembler тілінде бағдарламалау

Автор: Пользователь скрыл имя, 28 Февраля 2013 в 18:41, курсовая работа

Описание работы

Компьютерлік технологиялардың қарқынды дамуы барысында компьютерлерге арналған түрлі бағдарламалық қамтамалардың да көбеюі жаңалық емес. Әрбір адамға ЭЕМ- де және оның құрылғыларында тиімді жұмыс істеу үшін бағдарламалау тілдерінің алатын орны ерекше болып есептеледі. Бағдарламалау тілдерінің түрі көп. Олардың әрқайсы өзінің мүмкіндіктерімен ерекшеленеді.

Содержание

Кіріспе....................................................................................................3
Windows операциялық жүйесінде Assembler тілін қолданып
бағдарламалау........................................................................................4
Терезе түрлері.........................................................................................7
1.3 Терезелер классы...................................................................................8
1.3.1 Терезе классының қолданатын ресурстарын сипаттау.....................8
Терезе функциясы..................................................................................9
Терезе құру.............................................................................................9
1.4 Қосымшаның басты функциясы..........................................................11
1.5 Қосымша мәтінінің құрылымы............................................................12
1.6 Терезе құрудың қосымша функциялары............................................12
1.7 Іздеу және терезе күйін анықтау..........................................................12
1.8 Терезелердің жылжу функциясы.........................................................13
Қолданушыға арналған қосымша мәлімет..........................................14
2 API функцияларын сипаттау.................................................................15
Қорытынды.............................................................................................19
Қолданылған әдебиет.............................................................................20
Қосымша.................................................................................................21

Работа содержит 1 файл

Win 32 API функцияларын пайдаланып Assembler тілінде бағдарламалау.doc.docx

— 314.97 Кб (Скачать)



МАЗМҰНЫ

 

  1.     Кіріспе....................................................................................................3
    1.     Windows операциялық жүйесінде Assembler тілін қолданып

 бағдарламалау........................................................................................4

    1.    Терезе түрлері.........................................................................................7 

 1.3     Терезелер классы...................................................................................8

     1.3.1 Терезе классының қолданатын ресурстарын сипаттау.....................8

      1. Терезе функциясы..................................................................................9
      2. Терезе құру.............................................................................................9

1.4     Қосымшаның басты функциясы..........................................................11

1.5     Қосымша мәтінінің құрылымы............................................................12

     1.6     Терезе құрудың қосымша функциялары............................................12

     1.7     Іздеу және терезе күйін анықтау..........................................................12

1.8    Терезелердің жылжу функциясы.........................................................13

    1. Қолданушыға арналған қосымша мәлімет..........................................14

     2       API функцияларын сипаттау.................................................................15

              Қорытынды.............................................................................................19

              Қолданылған әдебиет.............................................................................20

          Қосымша.................................................................................................21

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 Кіріспе

 

Компьютерлік  технологиялардың қарқынды дамуы барысында  компьютерлерге арналған түрлі бағдарламалық  қамтамалардың да көбеюі жаңалық  емес. Әрбір адамға ЭЕМ- де және оның құрылғыларында тиімді жұмыс істеу  үшін бағдарламалау тілдерінің алатын орны ерекше болып есептеледі.

Бағдарламалау тілдерінің түрі көп. Олардың әрқайсы  өзінің мүмкіндіктерімен ерекшеленеді. Қазіргі уақытта ЭЕМ қолданушыларының көбісі жоғарғы деңгейлік бағдарламалау  тілдерін таңдауда. Бұндай таңдаудың  себебі түсінікті, өйткені бұл бағдарламалау  тілдері жеңілдеу, жұмыс істеуге  ыңғайлы және нәтижені еш қиындықсыз көруге болады.

Дегенмен  біз өз баяндамамыздың негізгі мақсаты  ретінде Windows операциялық жүйесіне арналған Assembler тілін таныстыруды  көздедік. Assembler төменгі дәрежелі бағдарламалау  тіліне жатады. Оның көптеген ерекшеліктерімен сіз жұмысты оқу барысында  таныса аласыз.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.1 Windows операциялық жүйесінде Assembler тілін қолданып бағдарламалау

Windows операциялық  жүйесіне Си және басқа да  бағдарламалау тілдері тұрғанда  ассемблер не үшін қажет деген  сұрақ туады. Бұл сұрақтың жауабы  өте қарапайым. Ассемблер санашық тілі болып есептеледі, сол себепті санашықтар өмірде кең көлемде пайдаланылып жатқандықтан, ассемблерде өз “өмір сүруін” тоқтатпайды. Сонымен қатар ассемблер бағдарламалау тілінде бағдарламалар кодтарын іске қосуға, драйверлер мен трансляторлар жазуға, кейбір ішкі құрылғыларға бағдарламалар жазуға болады.

Ассемблер тілінде MS-DOS операциялық жүйесінде бағдарламалағанға  қарақанда Windows операциялық жүйесінде бағдарламалаған жеңіл. Жоғарғы деңгейлі бағдарламалау тілдерімен жұмыс істеу кезінде біз кейбір алгоритмдік үрдістерден айрыламыз. Шынына келгенде ассемблер тілінде бағдарламалау профессионалдық деңгейді жоғарылатып, санашықтың жұмыс істеуі мен ішкі құрылысын түсінуді жеңілдетеді.

Қазіргі уақытта  бір- бірімен бақталас екі ассемблер  дестелері бар. Олар: MASM (Macro Assembler) және TASM (Turbo Assembler). Ассемблер тіліндегі бағдарламаларды іске қосу үшін MASM 6.14 және TASM (TASM32.exe 5.0, TLINK32.EXE 1.6.71) версияларын қолданған дұрыс. Бағдарламаны Windows операциялық жүйесінде трансляциялау төмендегі сұлба бойынша жүреді.

 

 

 

1- сурет. Ассемблерлік модульдің  трансляциялану сұлбасы.

 

 

Трансляцияның 2- ші кезеңіне екі негізгі бағдарламалар сәйкес келеді. Олар: ML.EXE ассемблерімен LINK.EXE редакторы немесе TASM32.EXE және TLINK32.EXE.

Ассемблер бағдарламасының  мәтіні бар файлдың аты PROG.ASM болсын, онда трансляциялаудың 2- і кезеңі келесі түрде болады.

C:\masm32\bin\ml/c/coffPROG.ASM

Осыдан кейін  PROG.OBJ модулі пайда болады. Содан кейін

c:\masm32\bin\Link/ SUBSUSTEM: Windows PROG.OBJ әрекеті орындалады. Сол  кезде PROG.EXE орындалу модулі құрылады. Бұл жерде /c және  /coff  ML.EXE бағдарламасының параметрлері, ал /SUBSYSTEM: Windows LINK.EXE бағдарламасының параметрлері болып табылады.

Ассемблерда бағдарламаны бірнеше бөліктерге бөліп, трансляцияның 1- ші кезеңінде қайтадан біріктірген ыңғайлы. Бұл INCLUDE дерективасы  арқылы жүзеге асады. Мысалы бір файлда бағдарлама коды, ал тұрақтылар, мәліметтер, процедуралар басқа файлда болады.

Ендігі жерде  басқа обьектілік модульдер мен  кітапханаларды трансляцияның 2- ші кезеңіне қосуды қарастырайық. Қанша обьектілік модуль қосылса да, олардың ішінде біреуі негізгі болады, яғни бағдарлама осы модульден басталады. Модульдердің арасындағы айырмашылық осымен бітеді. Негізі қосалқы модульдерге негізгі  модульден және басқа модульдерден шақырылатын процедуралар орналастырылады. Бірнеше модульдерді біріктіргенде  бірінші болып негізгі модуль содан кейін қосалқы модульдер  біріктірілуі керек.

Келесі қарастыратынымыз INVOKE дерективасы. Бұл қолайлы команда, бірақ өзіндік ерекшеліктері  бар.

Қолайлы жағы @N қоспасынан құтыламыз, 2- ші жағынан  бұл команда стекке берілетін  мәндерді өзі бақылайды.

PUSH Par1

PUSH Par2

PUSH Par3

PUSH Par4

Call Name_PROC@N; N- стекке жіберілетін байттар көлемі. Бұл өрнек INVOKE командасын қолданғанда келесідей түрге өзгереді.

INVOKE NAME_PROC, par4, par3, par2, par1

Бұл кезде  параметрлер ретінде құрcым, анықталған мән немесе адрес қарастырылады. Адрес үшін OFFSET және ADDR операторларыда қолданылады.

INVOKE командасының  тиімсіз жағы макродеректерді  қолдану. Макродеректерді қолданғанда  тілдің сұлулығы жоғалады және  ассемблер тілін жаңадан үйреніп  жүргендерге стекке мәндерді  команда арқылы емес, өздері жіберіп  үйренгені дұрыс.

Біздің 1- суретте  обьектілік модульдерден басқа кітапханалар жайлы да айтылады. Егерде обьектілік модульдер бірнеше болса, онда олар белгілі бір жағдайларда қолайсыздық  тудырады. Сол себепті обьектілік модульдер кітапханаларға бірігеді. MASM- ға кітапхана қосу үшін INCLUDELIB дерективасын қолданған ыңғайлы. INCLUDELIB дерективасы  обьектілік кодта сақталады және LINK.EXE бағдарламасымен пайдаланылады.

Бірақ обьектілік модульдерден қалай кітапхана құрса  болады? Ол үшін кітапханашы деп  аталатын арнайы бағдарлама бар. Егер біз PROG2.OBJ модулінен тұратын LIB1.LIB кітапханасын құрғымыз келсе, төмендегі команданы  орындаймыз.

LIB/OUT:LIB1.LIB PROG2.OBJ

Егер кітапханаға  тағы бір модуль қосқымыз келсе (мысалы MODUL.OBJ) LIB1.LIB MODUL.OBJ командасын орындаймыз.

Кітапханашының  тағы да екі пайдалы командалары LIB/LIST LIB1.LIB- кітапхана модульдерінің  тізімін береді,    LIB/REMOVE:MODUL.OBJ LIB1.LIB- кітапханадан  MODUL.OBJ модулін  жояды.

Жоғарыда  біз тек MASM дестесін қарастырды, енді TASM дестесін қарастырып өтейік. TASM дестесінде трансляциялау форматы төмендегідей.

TASM32/ml PROG.ASM

TLINK32_aа PROG.OBJ

TASM дестесінде  модульдарды біріктіру өте қарапайым  түрде жүреді. Мысалы: TLINK32- аа  PROG1.OBJ PROG2.OBJ кітапханасымен жұмыс істеу үшін TASM дестесінде TIB.EXE атты кітапханашы бағдарлама бар. PROG2.OBJ модулінен тұратын кітапхана құру үшін

TLIB LIB1.LIB+PROG2.OBJ командасы орындалады. Нәтижесінде  LIB1.LIB кітапханасы құрылады.

TLINK32 - нің командалық қатарының кеңейтілген түрі мынандай: TLINK32- аа OBJFILES, EXEFILE, MAPFILE, LIBFILES.

Мұндағы OBJFILE- орындалатын модуль

MAPFILE- модуль  құрылымы жайлы ақпарат беретін  MAP- файл 

   LIBFILE- бір немесе бірнеше кітапхана (пробел арқылы)

TASM- да INVOKE дерективасы жоқ.

Ассемблерде басқа да бағдарламалар қолданылады. Мысала: редакторлар, дизассемблерлер, Hex- редакторлар, отладчиктар, ресурстар компиляторы, ресурстар редакторы. Енді жеке- жеке тоқталып өтейік.

Редакторлар: QEDITOR.EXE редакторы MASM32 дестесінің ішіне  кіреді. Бұл редактор және оның утилиттары ассемблер тілінде жазылған. QEDITOR.EXE редакторының көлемі бар болғаны 27 Кб, ал оның утилитасының көлемі 6 Кб қана. Бұл редактор бір модульді, кішкене қосымшалар үшін қолайлы, ал бірнеше модульдермен жұмыс істеуге бұл редактор ыңғайлы емес. Редактор әртүрлі утилиттар мен дестелік файлдар арқылы байланысып жұмыс істейді. Мысалға, бағдарламаның трансляциясын ML.EXE ассемблері қолданатын ASBL.BAT дестелік файлы орындап, нәтижесін ASMBL.TXT мәтіндік файлына жібереді. Осы файлды қарау үшін THEGUN.EXE қарапайым утилитасы қолданылады. Орындалатын модульді дизассемблерлеу үшін DUMMPER.EXE утилитасы қолданылып, нәтижесі  DIASM.TXT мәтіндік файлына жіберіледі.

Сонымен қатар EAS.EXE бағдарламасын қарастырайық. Бұл  редактор, дәлірек айтсақ қабықша ASM-, OBJ-, RC-, RES-, DEF- файлдарынан тұратын  күрделі жобаларды құруға, трансляциялауға  мүмкіндік тудырады. Бұл бағдарлама MASM немесе TASM ортасында жұмыс істейді.

Отладчиктер: Отладчиктер бағдарламаны қадам  бойынша жұмыс істейді. Қолдануға  ыңғайлы және белгілі отладчиктерге Code View, Turbo Debugger, Ice жатады.

Дизассемблерлер: Дизассемблерлер орындалатын модульді ассемблерлік кодқа айналдырады. Мысалға, W32 Dasm, Ida Pro, Dumppe.exe дизассемблерлерін  атап өтсек болады.

Hex- редакторлар: Hex- редакторлар жүктелетін модульдарды  16- қ түрде көрсетеді. Мұндай  редакторлардың түрлері көп. Кейбір  дизассемблерлер мен отладчиктердің құрамында да Hex- редакторлар болады. Мысалға, хакерлер ортасында танымал болып келген HIEW.EXE бағдарламасын атауға болады. Бұл бағдарлама жүктелетін модульдерді

16-қ түрде және ассемблерлік  код түрінде қарауға жағдай  тудырады. Сонымен қатар бұл мәліметтерді  түзетуге де мүмкін болады. 

 

1.2 Терезе түрлері

Windows - қа арналған  бағдарламалар қосымша деп аталады.  Қолданушы қосымша көмегімен  келесі терезелер түрімен қарым-  қатынас құрады:

1. Терезе қосымша:  жұмыстың орындалуын ұйымдастырады,  іске қосылған кезде бірінші  болып шығады да жұмыстың тоқтауымен  жабылады.

2. MDI- терезелер:  Бұл терезе бірнеше құжаттарды  бір уақытта өңдеуге арналған.

3. Көмекші  терезе. Бұл терезе көп жағдайда  операциялық жүйенің басқаруымен  орындалады.

4.  Диалог  терезесі. Бұл терезе қосымша  мен қолданушының арасында құжаттардың  жылдам ауысуын қамтамасыз етеді.

Құрастырушыға терезе қосымша мен операциялық  жүйенің  функционалдауымен жұмыс  істейтін элементтер жиындығы болып  табылады.

Бағдарламалық тілдерінің негізі бойынша терезе дегеніміз  онымен әртүрлі әрекеттер жасауға  болатын обьект, яғни айнымалы.

Обьект көптеген мәліметтерді баяндайтын және өзгертетін белгілі бір классқа жатады.

2-сурет  Көптеген элементері бар:

1-Жүйелік  меню батырмасы; 2-Терезені пиктограммаға  айналдыру батырмасы; 3-Терезені  қалпына келтіру және максималдау  батырмасы; 4-Терезені жабу батырмасы; 5-Терезе өлшемдерін өзгерту жақтауы;

 

2 - суреттегі басты терезенің түрлі кнопкалары, менюі, құралдар панельі, көру сызығы, көру жолы және басқа элементтері бар. Бұл элементтер де терезелерге жатады және өздерінің мәліметтері мен өзгерту әдістері болады. Демек бұлар терезелер кластарына жатады.

1.3 Терезелер классы

Терезелер құру үшін операциялық жүйеге оның қандай классқа жататынын көрсету керек. Егер терезе құрылатын уақытта операциялық  жүйеге оның классы белгілі болса, онда осы класстың атын қолдануға болады. Басқа жағдайда жаңа класс құрып  оны тіркеуден өткізу керек.

 

1.3.1 Терезе классының қолданатын ресурстарын сипаттау

Класста қолданылатын ресурстар жиындығын WNDCLASS құрылымында  баяндаймыз.

Бұл құрылым  келесі түрде баяндалады:

int RegClass(WNDPROC Proc, LPCTSTR szNAME)

{  WNDCLASS wc;

        wc.style=CS_HREDRAW | CS_VREDRAW;

wc.cbClsExtra=wc.cbWndExtra=0;

wc.IpfnWndProc=Proc; wc.hlnstance=hlnstance;

wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);

wc.hCurcor=LoadCursor(NULL,IDC_ARROW);

wc.Background=(HBRUSH)(COLOR_WINDOW+1);

wc.lpszMenuName=(LPCTSTR)NULL;

wc.lpszClassName=szName;

return RegisterClass(&wc);           

}

1. style келесі  мәнді қабылдайды

wc.style= cs_HREDRAWICS_VREDRAWICS_DBLCLKS

2. IpfnWndProc терезенің  функциясын көрсетеді.

3. CbClsExtra клсстың  қосымша байттарының санына тең.

4. CbWndExtra  класстағы терезенің қосымша байт санына тең.

5. hlnstance ағымдағы  қосымшаның дескрипторын көрсетеді.

6. hIcon терезе  минимизацияланған кезде қайсы  пиктограмма түрленетінін көрсетеді.

7. harsor LoadCursor сілтеменің  терезенің үстінен өткен кезде  оның түрінің өзгеруін қамтамасыз  етеді.

Сілтеменің  ресурсы Loadcursor функциясымен баяндалады:

Hcursor Loadcursor (HINSTANCE hInst, LPCTSTR IpCursorName);

8. hbrBackground Терезе түсін бояу дискрипторын береді.

9. IpszMenuName Осы  класстағы терезенің басты менюінің  ресурсының атын көрсетеді. wc.IpszMenuName= (LPCTSTR)NULL

10. IpszClassName Тіркелетін  терезе классының аты бар жолды  көрсетеді. Мысалы: wc.IpszClassName=szName

 

1.3.2 Терезе  функциясы

Терезе функциясы  оған түскен хабарларға қандай реакция  болатынын баяндайды.

Ал әдеттегі функциялардан айырмашылығы:

    • Стандартты қайтару типі және формальді параметрлері бар
    • Терезеге хабар түскен кезде тек қана операциялық жүйемен шақырылады.
    • Терезе функциясымен өңделмейтін хабар операциялық жүйеге беріледі.

Информация о работе Win 32 API функцияларын пайдаланып Assembler тілінде бағдарламалау