DASTURkroha_asm (KIRISh, OUTPUT); {“Krokha” oʻquv kompyuteri uchun demo assembler}
CONSTkop:ARRAY [0..7] OF STRING[3]= {buyruqning mnemonikasi} ('MOV','ADD','DIV','SUB','JE','MUL','JG','HLT ')
prg:ARRAY [0..7] OF STRING= {montaj dasturi!!!} ('B: MUL FK F',
"KE K" ni qo'shish,
"JG NK B",
"HLT FF F",
'K:DN 1',
'F: DN 1',
'N: DN 3',
'E: DN 1');
VARtab: ARRAY [0..15] OF RECORD sym:STRING[3]; son:BYTE END;
{tab - barcha identifikatorlar (ularning nomi va kodi), shu jumladan operatsiyalar va teglar jadvali} i,Nid,k,e,c:INTEGER; {ishchi o'zgaruvchilar}
FUNCTIONget_code(i:INTEGER; VAR k:INTEGER):BYTE;
{k pozitsiyasidan boshlab i qator raqamidan keyingi identifikatorni tanlaydi va yorliqda uning kodini topadi}
VARp,id:STRING; j,m,q:INTEGER; {ishchi o'zgaruvchilar}
BOSHLANISHIp:=prg[i]+' '; {oxirgi belgini ta'kidlashni osonlashtirish uchun bo'sh joy qo'shing}
WHILE(k{va endi keyingi bo'sh joygacha hamma narsani tanlaymiz, ya'ni. identifikator nomini oling} id:=''; WHILE p[k]<>' ' DO BEGIN id:=id+p[k]; k:=k+1 END;
q:=255; {agar identifikator bo'lsa, jadvalda topamiz va uning kodini q ga joylashtiramiz}
UCHUNj:=0 TO Nid QILING AGAR ID=tab[j].sym KEYIN q:=tab[j].num;
get_code:=q {funksiya natijasi dasturga kiritilgan koddir}
OXIRI
BOSHLASH UCHUNi:=0 TO 7 QILISH {yorliqdagi operatsiya kodlarini kiriting}
BOSHLANISHItab[i].sym:=kop[i];tab[i].num:=i
OXIRI;
tab[8].sym:='DN';tab[8].num:=8; Nid:=8; {shartli DN kodini qo'shing}
UCHUNi:=0 TO 7 DO {o'tish I - dasturchining belgilarini jadvalga kiritish}
AGARprg[i][2]=':' KEYIN {ko'p nuqta belgisidan keyin}
BOSHLANISHIinc(Nid); {jadvalga yorliq qo'shish; uning manzili=satr raqami!} tab[Nid].sym:=prg[i][1];tab[Nid].num:=i;
prg[i][1]:=' '; prg[i][2]:=' '; {matndan yorliqni olib tashlash}
Do'stlaringiz bilan baham: |