Fasminc \u003d D: \\ FASM \\ КИРИШ
Қўшинг \u003d D: \\ FASM \\ INCLUDE
Aгар сиз FASM-ни бошқа жойга олиб қўйсангиз, “D: \\ FASM \\” ни ўзингизнинг йўлингиз билан алмаштиринг. FASMW.INI-ни сақланг ва ёпинг. Қуйида компилятордан қандай фойдаланишни қисқача тушунтириб берилган:
Дастур матнини ёзамиз ёки .asm файлида сақланган аввал ёзилган матнни очамиз ёки дастур матнини панелдаги бирикма билан жойлаштирамиз.
Дастурни компиляция қилиш ва ишга тушириш учун Ф9 ёки фақат компиляция қилиш учун Ctrl + F9 тугмаларини босинг. Aгар дастур матни ҳали сақланмаган бўлса, компилятор компиляция қилишдан олдин уни сақлашингизни сўрайди.
Aгар дастур бошланган бўлса, уни тўғри ишлаши учун синаб кўриш керак, агар дастур бошланмаса, хатоларни қидирамиз, хатоларнинг энг жиддийларини компилятор айтиб беради.
Энди узоқ кутилган амалиётни бошлашимиз мумкин. FASMW.EXE дастурини ишга туширамиз ва унга биринчи дастуримизнинг кодини киритамиз:
"% Fasminc% / win32ax.inc"
Маълумотлар
Taglavha db “Менинг биринчи дастурим.”, 0
“Барчага салом!” Db matni, 0
Код бошлаш:
exitProcess-ni chaqiring, 0
Клавиатурада Run -\u003e Run ёки F9 ни босинг. Сақлаш ойнасида сақлаш учун файл номи ва папкани белгиланг. Келажакда чалкашиб кетмаслик учун ҳар бир дастурни бир нечта файллар: расмлар, пиктограммалар, мусиқа ва бошқалар бўлиши мумкинлиги сабабли ҳар бир дастурни алоҳида папкада сақлашга одатланиш тавсия этилади. Aгар компилятор хато қилса, унда кўрсатилган сатрни диққат билан текширинг – эҳтимол сиз вергул ёки бўш жой қолдирмадингиз. Бундан ташқари, компилятор катта-кичиклигини ҳисобга олиш кераклигини билишингиз керак, шунинг учун .data ва .data икки хил кўрсатма сифатида талқин қилинади. Aгар сиз ҳамма нарсани тўғри бажарган бўлсангиз, натижа энг оддий MessageBox бўлади. Дастур матнида нима ёзганимизни тушунайлик. Қўшимча кўрсатма билан биринчи қаторда биз дастуримизга бир нечта файллардан катта матнни киритдик. Ёдингизда тутинг, биз ўрнатишда Fasma ini – файлида 3 қаторни рўйхатдан ўтказдикми? Энди %fasminc% дастур матнида D:\\FASM\\INCLUDE ёки сиз кўрсатган йўлни англатади. Ўз ичига олган кўрсатма матнни бошқа файлдан белгиланган жойга қўшиб қўяди. WIN32AX.INC файлини қўшиб қўйилган папкада блокнот ёрдамида ёки ўз-ўзидан очинг ва биз дастуримизга автоматик равишда уланган (бириктирилган), шунингдек win32a.inc, macro / if.inc матнлари, тушунарсиз (ҳозирча) сўл кўрсатмаларини ва дастурини автоматик равишда улаганлигимизга ишонч ҳосил қилинг. Windows хусусиятли кутубхоналарининг умумий тўплами. Ўз навбатида, киритилган ҳар бир файлда яна бир нечта уланган файллар бўлиши мумкин ва бу занжир уфқ доирасидан чиқиб кетиши мумкин. Плагинли (Плагин (инглизча – plug-in, “уланиш”) - бу асосий дастурга динамик равишда уланган мустақил равишда тузилган дастур модули) файллар ёрдамида юқори даражадаги тилларнинг ўхшашлигини ташкил қиламиз: ҳар бир функцияни қўлда тасвирлаш одатий ҳолатларига йўл қўймаслик учун биз стандарт Windows функциялари тавсифларининг бутун кутубхоналарини улаймиз. Буларнинг барчаси бундай кичик дастур учун ҳақиқатан ҳам зарурми? Йўқ, бу “барча ҳолатлар учун жанобнинг тўплами” каби бир нарса.
Кейинчалик, маълумотлар бўлимини – .data тайинладик. Ушбу бўлимда биз иккита ўзгарувчини эълон қиламиз - Caption ва Text. Бу махсус буйруқлар эмас, шунинг учун уларнинг номлари хоҳлаганингизча ўзгартирилиши мумкин, ҳатто a ва b, агар бўшлиқларсиз ва рус тилида бўлмаса. Ўзгарувчи заҳираланган сўзларни чақира олмайсиз, масалан, код ёки маълумотлар, лекин сиз code_ ёки data1 – дан фойдаланишингиз мумкин. Db буйруғи байтни аниқлашни англатади. Aлбатта, бу матнларнинг барчаси бир байтга тўғри келмайди, чунки ҳар бир алоҳида белги бутун байтни эгаллайди. Aммо бу ҳолда, ушбу буйруқ билан фақат pointer (Pointer – дастурлашдаги маълумотлар тури) ўзгарувчини аниқлаймиз. У сатрнинг биринчи белгиси сақланадиган манзилни ўз ичига олади. Қаторнинг матни тирноқ шаклида кўрсатилган ва тирноқ белгилари ихтиёрий равишда “шундай” ва “шундай”га ўрнатилиши мумкин – агар фақат дастлабки тирноқ охиридаги билан бир хил бўлса. Вергулардан кейин нол, чизиқнинг охирига nul байтни қўшади, бу эса сатр охирини билдиради (null-terminator). Биринчи қаторда бу нолни вергул билан олиб ташлашга ҳаракат қилинг ва нимага эришганингизни кўринг. Ушбу аниқ мисолдаги иккинчи сатрда сиз нол қилмасдан қилишингиз мумкин (уни вергул билан ўчириб ташланг – акс ҳолда компилятор хатони кўрсатади), лекин бу фақат бизнинг мисолимизда кейинги қисм иккинчи қатордан сўнг дарҳол бошланади ва уни ишга туширишдан олдин компилятор автоматик равишда ёзади. Олдинги қисмга мос келадиган бир гуруҳ нол. Умумий ҳолда, матн сатрлари охиридаги ноллар талаб қилинади! Кейинги қисм бажариладиган дастур бўлими – .code. Бўлим бошида ёрлиқнинг бошланиши. Бу шуни англатадики, айнан шу томондан бизнинг дастуримиз бажарила бошлайди. Биринчи буйруқ - бу чақирувчи макроинструкция. Windows-га ўрнатилган MessageBox API-ни чақиради. API функциялари (амалий дастурлаш интерфейси) операцион тизимдаги ишни сезиларли даражада соддалаштиради. Биз операцион тизимдан бирон бир стандарт ҳаракатни амалга оширишни сўраймиз ва у бажаради ва охирида бажарилган ишнинг натижасини қайтаради. Функция номи вергул билан ва унинг параметрлари билан таъқиб қилинади. MessageBox функциялари қуйидаги параметрларга эга:
1-параметр эгаси ойнасининг дастасини ўз ичига олиши керак. Тутқич - бу ҳар бир объектга (жараён, ойна ва ҳк) операцион тизим томонидан берилган шахсий рақам. 0 бизнинг мисолимизда дераза эгаси йўқлигини англатади, у ўзи ва бошқа бирон бир ойнага боғлиқ эмас.
2-параметр – юқорида айтиб ўтилган null terminatori билан тугайдиган хабар матни биринчи ҳарфининг манзили. Бу шунчаки манзил эканлигини аниқ тушуниш учун ушбу манзилни тўғридан-тўғри чақирув функциясида 2 байтга ўтказамиз: invokeing MessageBox, 0, Text + 2, Caption, MB_OK ва энди матн биринчи иккита ҳарфсиз кўрсатилишига ишонч ҳосил қилинг.
3-параметр – хабар сарлавҳасининг биринчи ҳарфининг манзил кўрсаткичи.
4-параметр – хабар услуби. Ушбу услублар рўйхатини, масалан, NCLUDE \\ EQUATES \\ USER32.INC-да топишингиз мумкин. Бунинг учун MB_OK ва қолганларини тезда топиш учун Notepad-даги қидиришдан фойдалансангиз яхши бўлади. У ерда, афсуски, тавсиф йўқ, лекин услубнинг номидан сиз одатда унинг мақсадини тахмин қилишингиз мумкин. Ушбу барча услубларни бошқасини, услубини ёки уларнинг комбинациясини англатувчи рақам билан алмаштириш мумкин, масалан: MB_OK+MB_ICONEXCLAMATION.USER32.INC ўн олтилик қийматларни ўз ичига олади. Уларни ушбу шаклда ишлатишингиз ёки стандарт Windows Калкуляторининг муҳандислик режимида ўнли тизимга таржима қилишингиз мумкин.
Баъзи жиҳозлардан бир вақтнинг ўзида фойдаланиб бўлмайди - масалан, MB_OKCANCEL ва MB_YESNO. Сабаби шундаки, уларнинг рақамли қийматлари йиғиндиси (1+4\u003d 5) бошқа услубнинг қийматига мос келади – MB_RETRYCANCEL. Маълумки MessageBox функцияси дастурнинг бажарилишини тўхтатиб туради ва фойдаланувчи ҳаракатларини кутади. Тугатгандан сўнг, функция фойдаланувчи томонидан амалга оширилган ҳаракатлар натижасини дастурга қайтаради ва дастур ишлашни давом эттиради. ExitProcess функциясини чақириш бизнинг дастуримизни якунлайди. Ушбу функцияда фақат битта параметр мавжуд – тугатиш коди. Одатда, агар дастур анъанавий тарзда якунланса, бу код нолга тенг. Бизнинг кодимизнинг охирги сатрини яхшироқ тушуниш учун .end start – кодни диққат билан ўрганинг: format PE GUI 4.0
“% fasminc% / win32a.inc”ни ўз ичига олади
“.data” маълумотларини ўқиш мумкин бўлган қисм
Таглавҳа db “Bizning birinchi dasturimiz.”, 0
“ASM-ga assembler - bu juda oson!”Db matni, 0
бўлимида “.code” ўқилиши мумкин бўлган код
бошлаш:
messageBox-ni chaqiring, 0, Matn, sarlavha, MB_OK
exitProcess-ni chaqiring, 0
“.idata” бўлими ўқилиши мумкин бўлган маълумотларни импорт қилади
кутубхонаси KERNEL32, “KERNEL32.DLL”, \\
USER32, “USER32.DLL”
import KERNEL32, \\
ExitProcess, “ExitProcess”
uSER32’ni import qilish, \\
MessageBox, “MessageBoxA”
Тузувчи учун бу аввалги мисол билан деярли бир хил, аммо биз учун бу матн бошқа дастурга ўхшайди.
Do'stlaringiz bilan baham: |