1.3-§ Makroslar. Makro ta'rifi, makro chaqiruv, makro kengaytirish
Odatda, assembler tili dasturchilari bir xil buyruqlar zanjirini qayta-qayta takrorlashlari kerak. Kerakli buyruqlarni istalgan vaqtda yozish eng oson bo'lsa-da, zerikarli bo'ladi, ayniqsa ketma-ketlik etarlicha uzun bo'lsa yoki juda tez-tez takrorlanishi kerak bo'lsa.
Albatta, biz ushbu ketma-ketlikni protseduraga kiritishimiz va kerak bo'lganda uni chaqirishimiz mumkin. Biroq, bu strategiyaning ham kamchiliklari bor, chunki bu holda siz har safar maxsus protsedura chaqiruvi buyrug'ini va qaytarish buyrug'ini bajarishingiz kerak bo'ladi. Agar buyruqlar ketma-ketligi qisqa bo'lsa (masalan, faqat ikkita buyruq), lekin tez-tez ishlatilsa, protsedura chaqiruvlari dasturning ishlashiga sezilarli ta'sir ko'rsatishi mumkin. Makroslar bu muammoning oddiy va samarali yechimidir.
Makros - bu kod qismiga nom berish usuli. Makros aniqlangandan so'ng dasturchi kod bo'lagi o'rniga makrosning nomini yozishi mumkin. Asosan, makro bu kod qismining nomi. 1.2 ro'yxati P va Q o'zgaruvchilari qiymatlarini ikki marta almashtiradigan x86 yig'ish dasturini ko'rsatadi. Asosiy operatorlar zanjiri quyidagicha ko'rinadi:
MOV EAX,P
MOV EBX,Q
MOV Q,EAX
MOV P,EBX
Listing 1.3 ushbu ketma-ketlikni SWAP makrosi sifatida belgilaydi. Makros aniqlangandan so'ng, uning nomining har bir ko'rinishi to'rt qatorli kod bilan almashtiriladi.
Ro'yxat 1.2. Makrosdan foydalanmasdan P va Q o'zgaruvchilari qiymatlarini o'zgartirish
MOV EAX,P
MOV EBX,Q
MOV Q,EAX
MOV P,EBX
MOV EAX,P
MOV EBX,Q
MOV Q,EAX
MOV P,EBX
Ro'yxat 1.3. Makros yordamida P va Q o'zgaruvchilar qiymatlarini o'zgartirish
SWAP MACRO
MOV EAX,P
MOV EBX,Q
MOV Q,EAX
MOV P,EBX
ENDM
SWAP
SWAP
Makroning ta'rifi turli assembler tillarida bir oz boshqacha ko'rinsa-da, barchasi bir xil asosiy qismlardan iborat:
makros sarlavhasi, u aniqlanayotgan makrosning nomini beradi;
makrosning asosiy qismini o'z ichiga olgan matn;
ta'rifni tugatuvchi direktiv (masalan, ENDM).
Assembler dasturda makrosga duch kelganda uni keyinchalik foydalanish uchun makros jadvalda saqlaydi. Makro dasturda opkod sifatida paydo bo'lganda (bizning misolimizda, SWAP), assembler uni makrosning tanasi bilan almashtiradi. Makro nomini opkod sifatida ishlatish so'l qo'ng'iroq deb ataladi va uni so'l tanasi bilan almashtirish makro kengaytirish deb ataladi.
Makro kengaytirish dasturi davomida emas, balki yig'ish paytida sodir bo'ladi. Bu nuqta juda muhim. 1.2 va 1.3 ro'yxatlarida berilgan dasturlar bir xil mashina kodini ishlab chiqaradi. Mashina tilidagi dasturga ko'ra, makrolar uning nasl-nasabida ishlatilganmi yoki yo'qligini aniqlash mumkin emas. Qabul qilingan dasturda makrolarning hech qanday belgisi qolmaydi.
Makrovyzovy tartib muammolari bilan adashtirmaslik kerak emas. Asosiy farq shundaki, makrovizov-bu so'l tanasi bilan so'l nomini almashtirish uchun assembler buyrug'i. Jarayonga qarshi kurash-bu mashina jamoasi ob'ekt dasturiga kiritilgan, keyinchalik protsedurani chaqirish uchun amalga oshirilishi kerak. 1.2-jadvalda makrovyzovy va protseduralar muammolari bilan taqqoslanadi.
1.2-jadval. Makros qo'ng'iroqlar va protsedura chaqiruvlarini solishtirish
Do'stlaringiz bilan baham: |