римані в результаті перших двох проходів. br/>
4. Вихідний текст програми компілятора
# include ;
# include ;
# include ;
# include ;
# include ;
# include ; i, c, npr, seg, cnt, pmdf, psym, stk [80], pole [4] [8];
// npr - номер проходу, seg - номер сегмента, cnt - лічильник розміщення команд
// pmdf - покажчик на кінець запису модифікатора, psym - покажчик на кінець
// таблиці міток, stk - сюди зчитується рядок, pole - поля отримані з
// ліченої строкі.optab [8] [4] = {{В«movВ»}, {В«negВ»}, {В«je 0В»}, {В«incВ»},// таблиця
{В«shlВ»}, {В«adcВ»}, {В«intВ»}, {В«dw 0В»}},// ​​Мнемокод [8] [3] = {{В«axВ» }, {В«cxВ»}, {В«dxВ»}, {В«bxВ»},// ​​таблиці позначень
{В«spВ»}, {В«bpВ»}, {В«siВ»}, {В«diВ»}},// ​​регістрів і [4] [3] = {{В«esВ»} , {В«csВ»}, {В«ssВ»}, {В«dsВ»}},// ​​сегментних регістрів [17] = {В«0123456789abcdefВ»}, [20];// таблиця модифікаторів
struct segt {
char name [8]; len;
}; segtab [2];// таблиця сегментовsymt {name [8]; sgm; dsp;
}; symtab [10];// таблиця метокstk2pol (char st [80], char pol [4] [8]);// розбиття рядка на поляfindop (char op [8]); // пошук мнемокода в OPTABop2code (char nmb, char dis, char pol [4] [8], char code [4]);
// на вході мнемокод, на виході довга команди і об'єктний кодfindreg (char reg [8]);// пошук обознач. регістра в REGTABfindsegr (char reg [8]);// пошук обознач. сег. регістра в SEGRTAB
char findsym (char sym [8]);// пошук мітки в SYMTAB
int str2num (char str [8]);// переклад рядка в соотв. чіслоfindch (char c);// пошук пошук символу в HEXTAB
int step (int a, int b);// зведення A в ступінь B
int main ()
{cod [4], lent,// ​​код і довжина команди;// номер обробника команди * ft;// вихідний асемблерний файлfn [] = {В«myprim.asmВ»};
ft = fopen (fn, В«r +В»); ();
//////////////////////////// first passage (В» *** first passage *** n");
seg = 0; = 0; = 0; (! feof (ft))// повторювати поки не кінець файлу
{fgets (stk, 80, ft);// читання рядки (В« n"); (); (stk); pol (stk, pole);// розбиття рядка на поля
if (! strcmp (pole [1], В«segmentВ»))// if друге поле SEGMENT
{seg + +;// збільшення номера сегмента, запис = 0;// назви ...