Книга: Системное программное обеспечение. Лабораторный практикум
Листинг П4.2. Результирующий код
Листинг П4.2. Результирующий код
program MyCurs;
var
Fact,i,j,Sum: integer;
function CompileTest(InpVar: integer): integer; stdcall;
begin
asm
pushad {запоминаем регистры}
mov eax,InpVar
cmp eax,31 { 1: > (InpVar, 31) }
setg al
and eax,1
mov ebx,eax
mov eax,InpVar
cmp eax,0 { 2: < (InpVar, 0) }
setl al
and eax,1
or eax,ebx { 3: or (^1, ^2) }
jnz @F3 { 4: if (^3, ^7) }
jmp @M7
@F3:
xor eax,eax
mov Result,eax { 5::= (CompileTest, 0) }
jmp @M31 { 6: jmp (1, ^31) }
@M7:
mov eax,InpVar
cmp eax,0 { 7: = (InpVar, 0) }
sete al
and eax,1
jnz @F7 { 8: if (^7, ^11) }
jmp @M11
@F7:
xor eax,eax
inc eax
mov Result,eax { 9::= (CompileTest, 1) }
jmp @M31 { 10: jmp (1, ^31) }
@M11:
mov eax,InpVar
mov i,eax { 11::= (i, InpVar) }
xor eax,eax
inc eax
mov Fact,eax { 12::= (Fact, 1) }
@M13:
mov eax,i
cmp eax,1 { 13: <> (i, 1) }
setne al
and eax,1
jnz @F13 { 14: if (^13, ^30) }
jmp @M30
@F13:
mov eax,i
dec eax { 15: – (i, 1) }
mov j,eax { 16::= (j, ^15) }
mov eax,Fact
mov Sum,eax { 17::= (Sum, Fact) }
@M18:
mov eax,j
cmp eax,0 { 18: = (j, 0) }
sete al
and eax,1
not eax { 19: not (^18, 0) }
and eax,1
jnz @F19 { 20: if (^19, ^26) }
jmp @M26
@F19:
mov eax,Sum
add eax,Fact { 21: + (Sum, Fact) }
mov Sum,eax { 22::= (Sum, ^21) }
mov eax,j
dec eax { 23: – (j, 1) }
mov j,eax { 24::= (j, ^23) }
jmp @M18 { 25: jmp (1, ^18) }
@M26:
mov eax,Sum
mov Fact,eax { 26::= (Fact, Sum) }
mov eax,i
dec eax { 27: – (i, 1) }
mov i,eax { 28::= (i, ^27) }
jmp @M13 { 29: jmp (1, ^13) }
@M30:
mov eax,Fact
mov Result,eax { 30::= (CompileTest, Fact) }
@M31:
nop { 31: nop (0, 0) }
popad {восстанавливаем регистры}
end;
end;
var InpVar: integer;
begin
readln(InpVar);
writeln(CompileTest(InpVar));
readln;
end.
- Правила каскадности и приоритет стилей
- Листинг П4.5. Результирующий код с учетом оптимизации
- Листинг П4.4. Результирующий код без учета оптимизации
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Дополнительные национальные кодовые страницы и порядки сортировки
- Глава 5 Агрессивные формы кода и борьба с ними
- Стиль написания исходного кода
- 1.4. Кодирование информации
- 1.4.1. Кодирование во время выполнения
- Три способа кодирования звука
- Листинг 15.11. Код для загрузки файла с Web-сервера
- 2. Пример создания базового отношения в записи на псевдокоде