OXIRI
OXIRI;
8:{DN}BEGIN {10-raqamni belgilang va uni 8 s/s tezlikda torting}
VAL(COPY(prg[i],k,255),k,e); WRITE(' '); e:=512; REPEAT WRITE (k DIV e);
k:=k MOD e; e:=e DIV 8;
QAYTAe=0
END END;
YOZISH{buyruqning oxiri}
OXIRI;
Dastur ishlaydi Keyingisi yo'l. Yadro uni ma'lumotlar xizmat qiladi stol
identifikatorlar, ular sim maydonida ularning nomlarini va bu nomlar o'rniga dasturda almashtirilishi kerak bo'lgan kodlarni o'z ichiga oladi (son maydoni).
Misol uchun, QO'SHISH operatsiyasi 1-kodga ega (4-jadvalga qarang), shuning uchun tab[1].sym='Qo'shish' va tab[1].num=1. Assemblerning asosiy g'oyasi jadval yordamida har bir ramziy nomni tegishli raqamli kod bilan almashtirish ekanligi ayon bo'ladi.
"Crumbs" buyruqlarining mnemonikasini 0 dan 7 gacha raqamlar bilan jadval qatorlariga kiritgandan so'ng, biz doimiy DNni va foydalanuvchi matnga kiritgan dasturda topilgan barcha teglarni aniqlash uchun operatorni qo'shamiz. Foydalanuvchi teglari ulardan keyin ikki nuqta mavjudligi bilan tan olinadi; qayta ishlangan belgilar kelajakda assemblerga xalaqit bermasligi uchun dastur ularni shunchaki o'chiradi. Adabiyotda yorliqlarni qayta ishlash birinchi o'tish
deb ataladi, chunki siz avval butun dasturni "o'tishingiz" va identifikatorlarning to'liq jadvalini tayyorlashingiz kerak va shundan keyingina matnni qayta ko'rib chiqing (ikkinchi o'tish), barchasini almashtirish uchun jadvaldan foydalaning. ularning kodlari bilan identifikatorlar.
Ikkinchi o'tishni amalga oshirayotganda, bizning assemblerimiz dastur matnidan keyingi identifikatorni chiqaradigan "kuchli" get_code funktsiyasiga tayanadi. Murakkab ko'rinishiga qaramay, funktsiya g'oyasi juda oddiy: berilgan satrda ma'lum
bir pozitsiyadan boshlab, u bo'shliqlarni o'tkazib yuboradi va aksincha, bo'sh joydan tashqari barcha belgilarni "yig'adi" va shu bilan hosil qiladi. keyingi identifikatorning nomi. Nom ajratib ko'rsatilganda, u jadvalda qidiriladi va natija sifatida uning kodi qaytariladi (yoki ism jadvalda bo'lmasa 255).
Eslatma. Ayniqsa, funktsiya algoritmi ushbu qatordagi keyingi identifikatorni ajratish uchun k o'zgaruvchining qiymatini yangi chaqiruv uchun avtomatik ravishda tayyorlashga mo'ljallanganligini alohida ta'kidlaymiz.
Ta'riflangan
funktsiyadan foydalanib, assembler dasturning joriy qatorining birinchi identifikatorini chiqaradi va uning kodini aniqlaydi. Agar u 0 dan 7 gacha bo'lgan oraliqda bo'lsa, bu mashina buyrug'i va jadval yordamida unda quyidagi 3 ta o'zgaruvchi teg (3 ta manzil) kodlangan. Agar kod 8 ekanligi aniqlansa, bu raqamning ta'rifi. Ikkinchisi satrdan chiqariladi va sakkizlik sanoq tizimiga o'tkaziladi. Boshqa barcha holatlar xatodir va ularni assemblerimiz e'tiborsiz qoldiradi.
E'tibor bering, dasturning oxirgi sakkizlik kodi oddiygina displey ekranida ko'rsatiladi va hech qanday joyda saqlanmaydi.
Demo assemblerni sinab ko'rish uchun an'anaviy vazifa amalga
oshiriladi - hisoblash