Bob. Assembrlash jarayoni
2.1-§ Ikki o'tishda yig'ish
Assembler dasturi bir qator operatorlardan iborat bo'lganligi sababli, birinchi qarashda assembler birinchi navbatda operatorni hisoblashi kerak, keyin uni mashina tiliga tarjima qilish va nihoyat olingan mashina tilini faylga o'tkazish va ro'yxatning tegishli qismini boshqa faylga o'tkazish kerak. Ushbu jarayon butun dastur efirga uzatilgunga qadar takrorlanishi kerak. Biroq, afsuski, bunday strategiya ishlamaydi.
Birinchi operator L manziliga o'tish bo'lgan vaziyatni ko'rib chiqaylik. Assembler L manzilini bilmaguncha operatorni yig'a olmaydi. Lekin L manzili dastur oxirida biror joyda bo'lishi mumkin, keyin assembler bu manzilni topa olmaydi. butun dasturni o'qish. Bu masala oldinga yo'naltirilgan murojaat muammosi deb ataladi va u L ramziy nomning aniqlanishidan oldin ham qo'llanilishidan iborat (ya'ni ramziy nomga murojaat qilinadi, uning ta'rifi keyinroq paydo bo'ladi).
Oldinga qarashli havolalar ikki xil usulda amalga oshirilishi mumkin. Birinchidan, assembler dasturni ikki marta o'qiy oladi. Dastlabki dasturning har bir o'qilishi pass deb ataladi va original dasturni ikki marta o'qigan tarjimon ikki o'tishli deb ataladi. Birinchi o'tishda ramziy nomlarning barcha ta'riflari, shu jumladan teglar to'planadi va jadvalda saqlanadi. Ikkinchi o'tishning boshida ramziy nomlarning ma'nolari allaqachon ma'lum, oldinga havolalar yo'q va har bir bayonotni o'qish va yig'ish mumkin. Garchi bu asl dastur orqali qo'shimcha o'tishni talab qilsa-da, bu strategiya nisbatan sodda.
Ikkinchi yondashuvda assembler dasturi bir marta o‘qiladi va oraliq shaklga o‘tkaziladi va bu oraliq shakl jadvalda saqlanadi. Keyin u ikkinchi o'tishni amalga oshiradi, lekin dastlabki dastur bo'yicha emas, balki jadvalga muvofiq. Agar ushbu yondashuv uchun etarli jismoniy (yoki virtual) xotira bo'lsa, kiritish / chiqish vaqti saqlanadi. Agar yig'ish paytida ro'yxatni ko'rsatish kerak bo'lsa, unda asl bayonotlar, shu jumladan sharhlar to'liq saqlanadi. Agar ro'yxat kerak bo'lmasa, oraliq shaklni faqat asosiy narsalarni qoldirib, qisqartirish mumkin. Birinchi o'tishning yana bir maqsadi barcha makroslarni saqlab qolish va qo'ng'iroqlarni ular paydo bo'lganda kengaytirishdir. Shuning uchun ham ramziy nomlar, ham makro kengayish bir o'tishda amalga oshiriladi.
Do'stlaringiz bilan baham: |