Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Контрольные работы » Проектування компілятора

Реферат Проектування компілятора





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; + +;

Назад | сторінка 8 з 10 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Проектування компілятора
  • Реферат на тему: Розробка компілятора мови С + +
  • Реферат на тему: Розробка аналізує частини компілятора мови З
  • Реферат на тему: Процес создания компілятора вхідної мови
  • Реферат на тему: Реалізація компілятора усіченого мови Pascal з використанням технології авт ...