Nội dung text Лабораторная работа №8.pdf
Лабораторная работа No8 «Генерация объектной программы» Цель: получение практических навыков в использовании методов генерации объектной программы. Перевести заданные операторы в обратную польскую запись и провести генерацию команд, реализующих эти операторы, для компьютера, имеющего следующий состав команд: 1) сложение: <результат>=<операнд1>+<операнд2> СЛ <операнд1>,<операнд2>,<результат> 2) вычитание: <результат>=<операнд1>–<операнд2> ВЫЧ <операнд1>,<операнд2>,<результат> 3) умножение: <результат>=<операнд1>*<операнд2> УМН <операнд1>,<операнд2>,<результат> 4) деление: <результат>=<операнд1>/<операнд2> ДЕЛ <операнд1>,<операнд2>,<результат> 5) пересылка: <операнд2>=<операнд1> ПЕР <операнд1>,<операнд2> 6) безусловный переход: БП <метка> 7) переход по плюсу: if (<операнд> > 0) goto <метка> ПП <операнд>,<метка> 8) переход по минусу: if (<операнд> < 0) goto <метка> ПМ <операнд>,<метка> 9) переход по нулю: if (<операнд> == 0) goto <метка> ПН <операнд>,<метка> Предполагается, что объектная программа располагается в памяти с адреса 1000, и каждая команда занимает 4 байта.
Вариант 1 Вариант 2 while (i < n) { while (a == b) { if (a < b) { if (a < b*2 || b < x+y) { a=x/f*2; z=f*(a+b); if (z < 0 || b > k) b=k+a*2; c=k-a*i/b; } else b=k*2-a; else { } if (a > 5) c=k/5+b*2; else x=5*f+(4-g)/3; z=5*a*b/(j+1); } } } Вариант 3 Вариант 4 x=y+f/d*(x-k); if (a > b*(j+1)) { for (i=0; i < n+3; i++) if (a < b && b < 0) { x=x/2; c=f*(a+b/(i-j)); if (x > 1 && x < 9) while (x < n) a=b/c+f; x=2*b+i/b*(i-1); } else { else { a=5-b-k*j; c=2*f/(b+a*2); if (a > 0) x=x/(x+2); x=b/8; } else x=f*k-a; } } Вариант 5 Вариант 6 while (a >= 5) { x=f+a*(2-b); if (a < b) { for (x=0; x < 7; i++) { z=a+f/d*2; if (x < 0 && x*2 > f) { if (b > 0 && a > 0) a=b+k/(x-c/2); x=z*8+j-1; } if (a < 0) c=c/2+f; else z=a+5/k; else c=c*2+k*8-x; } } } Вариант 7 Вариант 8 if (a > x*2 && c < 0) { if (f*(a+b) > x && f < x) { z=f*(b+a/2); if (z < z*5) { d=b-k*c*3; } z=x*(i+1)-j*2/3; else { c=k-x/a; } a=7*f/(a+b*j); } for (a=a*2; a > z; a--) { else { if (a < 0) z=b-k+a/2; z=f/(a-b); else z=f*2; while (z < 5*z/i*2) } } c=k*(x+a/2); }
Вариант 9 Вариант 10 for (i=2; i > z*c*8; i++) { for (x=0; x == x*j*i; i++) { if (a < x) { if (a < x/(i+3) && a > b) { c=5*f+(a*3-x/2); c=f*(a+5/b*2); if (z < 0 && z > 5*a) if (c > d) a=5*x/(j-1); c=5/f*(a+x); } else a=0; } else z=(x+1)/f*(a+3/x); } else a=x+f*(a-b); } Вариант 11 Вариант 12 while (x > a && c < 0) { a=v+4*a/(k-1); a=(x-a*2)/d+2; if (z <= 0 || k > 5*f) { c=c-7-a+d/3; } while (z < 0) if (a*2 > b-4) { z=(k-x/a)/5; a=7*f/(a+b*j); } if (a <= b*2) z=a/b+4*d; else { if (d < 0) d=b*k*a/2; k=d*(a-b)+3; else d=a+b*2; if (z*(s-b/3) < 0) z=0; } d=m-(n*2+a/7); } Вариант 13 Вариант 14 if (b < d/3 && c != 0) { if (a+d < (7-f+3)/d) { d=(f+3)/(a-c+5); if (a > b || c==0) x=a+b; if (x != b) x=b+d*3; } else x=a-d*7-d; } else { else n=f/(a-b*j)/(d+s); z=k+h*7/(d-a-3); for (i=0; i < n; i=i+x) { if (z/b != n*2) { if (a-i >= 0) x=k*d-2+f; while (i <= n) else x=h+f/2; i=i+2-d*h; } } c=(z+f)/3; } Вариант 15 if (d*d > a/2 || f != a+b) { for (k=3; k <= a; k=k+2) if (k >= f-k/2) { a=f+(w*3-4)/b+t; b=(x+y)*(x-y); } } else { x=(a-g)*2-r/(4+5*k); if (x == 7) c=a/2*(s/3-6); else d=0; }