pol [k] [0] = ' 0';;// кінець stk2pol
} findop (char op [8])// пошук мнемокода в OPTAB
{for (i = 0; i <= 7; i + +) if (! strcmp (optab [i], op)) return (i +1); (0);} findsym (char sym [8])// пошук мітки в SYMTAB
{for (i = 0; i <= psym; i + +) if (! strcmp (symtab [i]. name, sym)) return (i); (-1);
} findreg (char reg [8])// пошук обознач. регістра в REGTAB
{for (i = 0; i <= 7; i + +) if (! strcmp (regtab [i], reg)) return (i); (-1);
} findsegr (char reg [8])// пошук обознач. сег. регістра в SEGRTAB
{for (i = 0; i <= 3; i + +) if (! strcmp (segrtab [i], reg)) return (i); (-1);
} op2code (char nmb, char dis, char pol [4] [8], char code [4])
// ф-ція обробки команд асемблера і директив
{struct bits// структура для доступу до
{char b0: 1; char b1: 1; char b2: 1; char b3: 1;// до окремих бітам.
char b4: 1; char b5: 1; char b6: 1; char b7: 1;
}; bytes
{char c; b;
} temp, bcode; int2ch
{char c [2]; d;
} tmp2; regn, regn2, segrn, tmp3;// regn, regn2, segrn-номери регістрів
dis + +; (nmb)// перехід на обробник соотв. команди
// MOV
{case 1: regn = findreg (pol [dis]); = findreg (pol [dis +1]); = findsegr (pol [dis]);
// безпосередня адресація ((! regn) && (! strcmp (segtab [0]. name, pol [dis +1])))
{code [0] = 0xb8; code [1] = 0; code [2] = 0;// код операції (npr) {modif [pmdf] = (cnt +3) - 2 ; + +; [pmdf] = 1; + +;
} (3);// оброб. возвращ. длинну команди
}
// регістр в сегментний регістр ((segrn! = -1) && (regn2! = -1))
{code [0] = 0x8e;// код операціі.c = 0xc0;. c = segrn;. b.b3 = temp.b.b0;// номер сегментного регістра
bcode.b.b4 = temp.b.b1;. c = regn2;. b.b0 = temp.b.b0;// номер регістра.b.b1 = temp.b.b1 ;. b.b2 = temp.b.b2; [1] = bcode.c;
return (2);// оброб. возвращ. длинну команди
} ((regn! = -1) | | (regn2! = -1))
// Пам'ять до/з регістр AX (AL)
{if ((! regn) | | (! regn2))
{bcode.c = 0xa1;// код операції
if (regn) {bcode.b.b1 = 1; regn = regn2;} dis + +; [0] = bcode.c; (npr)
{tmp3 = findsym (pole [dis]); (tmp3 == -1) return (0); {tmp2.d = symtab [tmp3]. dsp; [1] = tmp2.c [0]; [2] = tmp2.c [1];
} [pmdf] = (cnt +3) - 2; + +; [pmdf] = symtab [tmp3]. sgm; + +;