Системное программное обеспечение. Лабораторный практикум - [94]
and (b
a:=0 else a:=1;
if (InpVar > 0 or -1 <> InpVar)
while (a<1) do a:=a+(b+1)
else CompileTest:= InpVar+1;
end.
program MyCurs;
var
A,B,C,D,E: integer;
function CompileTest(InpVar: integer): integer; stdcall;
var
_Tmp0,_Tmp1: integer;
begin
asm
pushad {запоминаем регистры}
mov eax,0
mov D,eax { 1::= (D, 0) }
mov eax,1
mov B,eax { 2::= (B, 1) }
mov C,eax { 3::= (C, 1) }
add eax,InpVar { 4: + (C, InpVar) }
mov A,eax { 5::= (A, ^4) }
mov eax,C
add eax,B { 6: + (C, B) }
add eax,234 { 7: + (^6, 234) }
mov D,eax { 8::= (D, ^7) }
mov eax,A
add eax,B { 9: + (A, B) }
add eax,C { 10: + (^9, C) }
mov C,eax { 11::= (C, ^10) }
mov eax,A
add eax,B { 12: + (A, B) }
add eax,C { 13: + (C, ^12) }
mov ebx,eax
mov eax,InpVar
add eax,1 { 14: + (InpVar, 1) }
sub eax,ebx { 15: – (^13, ^14) }
neg eax
mov ebx,eax
mov eax,A
add eax,B { 16: + (A, B) }
add eax,ebx { 17: + (^15, ^16) }
mov D,eax { 18::= (D, ^17) }
sub eax,22 { 19: – (D, 22) }
mov ebx,eax
mov eax,A
add eax,B { 20: + (A, B) }
sub eax,ebx { 21: – (^19, ^20) }
neg eax
mov E,eax { 22::= (E, ^21) }
mov eax,0
mov Result,eax { 23::= (CompileTest, 0) }
mov eax,A
cmp eax,B { 24: < (A, B) }
setl al
and eax,1
mov ebx,eax
mov eax,A
cmp eax,C { 25: < (A, C) }
setl al
and eax,1
or eax,ebx { 26: or (^24, ^25) }
mov ebx,eax
mov eax,E
cmp eax,0 { 27: = (E, 0) }
sete al
and eax,1
mov ecx,eax
mov eax,D
cmp eax,0 { 28: = (D, 0) }
sete al
and eax,1
mov edx,eax
mov eax,B
cmp eax,C { 29: < (B, C) }
setl al
and eax,1
mov esi,eax
mov eax,A
cmp eax,C { 30: < (A, C) }
setl al
and eax,1
mov edi,eax
mov eax,C
cmp eax,E { 31: <> (C, E) }
setne al
and eax,1
mov _Tmp0,eax
mov eax,B
cmp eax,0 { 32: = (B, 0) }
sete al
and eax,1
not eax { 33: not (^32, 0) }
and eax,1
or eax,_Tmp0 { 34: or (^31, ^33) }
and eax,edi { 35: and (^30, ^34) }
or eax,esi { 36: or (^29, ^35) }
and eax,edx { 37: and (^28, ^36) }
xor eax,ecx { 38: xor (^27, ^37) }
xor eax,ebx { 39: xor (^26, ^38) }
jnz @F39 { 40: if (^39, ^43) }
jmp @M43
@F39:
mov eax,0
mov A,eax { 41::= (A, 0) }
jmp @M44 { 42: jmp (1, ^44) }
@M43:
mov eax,1
mov A,eax { 43::= (A, 1) }
@M44:
mov eax,InpVar
cmp eax,0 { 44: > (InpVar, 0) }
setg al
and eax,1
mov ebx,eax
mov eax,1
neg eax { 45: – (0, 1) }
cmp eax,InpVar { 46: <> (^45, InpVar) }
setne al
and eax,1
or eax,ebx { 47: or (^44, ^46) }
jnz @F47 { 48: if (^47, ^56) }
jmp @M56
@F47:
@M49:
mov eax,A
cmp eax,1 { 49: < (A, 1) }
setl al
and eax,1
jnz @F49 { 50: if (^49, ^55) }
jmp @M55
@F49:
mov eax,B
add eax,1 { 51: + (B, 1) }
add eax,A { 52: + (A, ^51) }
mov A,eax { 53::= (A, ^52) }
jmp @M49 { 54: jmp (1, ^49) }
@M55:
jmp @M58 { 55: jmp (1, ^58) }
@M56:
mov eax,InpVar
add eax,1 { 56: + (InpVar, 1) }
mov Result,eax { 57::= (CompileTest, ^56) }
@M58:
nop { 58: nop (0, 0) }
popad {восстанавливаем регистры}
end;
end;
var InpVar: integer;
begin
readln(InpVar);
writeln(CompileTest(InpVar));
readln;
end.
program MyCurs;
var
A,B,C,D,E: integer;
function CompileTest(InpVar: integer): integer; stdcall;
begin
asm
pushad {запоминаем регистры}
xor eax,eax
mov D,eax { 1::= (D, 0) }
inc eax
mov B,eax { 2::= (B, 1) }
mov C,eax { 3::= (C, 1) }
add eax,InpVar { 4: + (C, InpVar) }
mov A,eax { 5::= (A, ^4) }
mov eax,236
mov D,eax { 6::= (D, 236) }
mov eax,A
add eax,B { 7: + (A, B) }
mov ebx,eax
add eax,C { 8: + (^7, C) }
mov C,eax { 9::= (C, ^8) }
add eax,ebx { 10: + (C, ^7) }
mov ecx,eax
mov eax,InpVar
inc eax { 11: + (InpVar, 1) }
sub eax,ecx { 12: – (^10, ^11) }
neg eax
add eax,ebx { 13: + (^12, ^7) }
mov D,eax { 14::= (D, ^13) }
mov eax,214
sub eax,ebx { 15: – (214, ^7) }
mov E,eax { 16::= (E, ^15) }
xor eax,eax
mov Result,eax { 17::= (CompileTest, 0) }
mov eax,A
cmp eax,B { 18: < (A, B) }
setl al
and eax,1
mov ebx,eax
mov eax,A
cmp eax,C { 19: < (A, C) }
setl al
and eax,1
mov edx,eax
or eax,ebx { 20: or (^18, ^19) }
mov ebx,eax
mov eax,E
cmp eax,0 { 21: = (E, 0) }
sete al
and eax,1
mov ecx,eax
mov eax,C
cmp eax,E { 22: <> (C, E) }
setne al
and eax,1
xor eax,eax
inc eax { 23: or (^22, 1) }
and eax,edx { 24: and (^19, ^23) }
{ 25: or (0, ^24) }
xor eax,eax { 26: and (0, ^25) }
xor eax,ecx { 27: xor (^21, ^26) }
xor eax,ebx { 28: xor (^20, ^27) }
jnz @F28 { 29: if (^28, ^32) }
jmp @M32
@F28:
xor eax,eax
mov A,eax { 30::= (A, 0) }
jmp @M33 { 31: jmp (1, ^33) }
@M32:
xor eax,eax
inc eax
mov A,eax { 32::= (A, 1) }
@M33:
mov eax,InpVar
cmp eax,0 { 33: > (InpVar, 0) }
setg al
and eax,1
mov ebx,eax
xor eax,eax
dec eax
cmp eax,InpVar { 34: <> (-1, InpVar) }
setne al
and eax,1
or eax,ebx { 35: or (^33, ^34) }
jnz @F35 { 36: if (^35, ^44) }
jmp @M44
@F35:
@M37:
mov eax,A
cmp eax,1 { 37: < (A, 1) }
setl al
and eax,1
jnz @F37 { 38: if (^37, ^43) }
jmp @M43
@F37:
mov eax,B
inc eax { 39: + (B, 1) }
add eax,A { 40: + (A, ^39) }
mov A,eax { 41::= (A, ^40) }
jmp @M37 { 42: jmp (1, ^37) }
@M43:
jmp @M46 { 43: jmp (1, ^46) }
@M44:
mov eax,InpVar
inc eax { 44: + (InpVar, 1) }
mov Result,eax { 45::= (CompileTest, ^44) }
@M46:
nop { 46: nop (0, 0) }
popad {восстанавливаем регистры}
end;
end;
var InpVar: integer;
begin
readln(InpVar);
writeln(CompileTest(InpVar));
readln;
end.
Литература
Основная литература
1. Ахо А., Ульман Дж. Теория синтаксического анализа, перевода и компиляции. – М.: Мир, 1978. – Т. 1, 612 с. Т. 2, 487 с.
![Изучаем Java EE 7](/storage/book-covers/e0/e0ee9b7e3e4f168a93df98d7e47d66089eac3652.jpg)
Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)
![Геймдизайн. Рецепты успеха лучших компьютерных игр от Super Mario и Doom до Assassin’s Creed и дальше](/storage/book-covers/d0/d0fc13172d4310c9da7b10ba57a3fcb2e3d9f10d.jpg)
Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.
![Обработка событий в С++](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![MFC и OpenGL](/build/oblozhka.dc6e36b8.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Симуляция частичной специализации](/storage/book-covers/7e/7e33d937f206a76edb7f45006e896cc191605df5.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Питон — модули, пакеты, классы, экземпляры](/build/oblozhka.dc6e36b8.jpg)
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.