Скачиваний:
11
Добавлен:
01.05.2014
Размер:
159.74 Кб
Скачать
  1. Пример

      1. Исходный код

var

i, n : integer;

sum, x : rational;

begin

read(n);

sum := 0;

for i := 1 to n do begin

x.numerator := 1;

x.denominator := i;

sum := sum + x;

sum := simplify sum;

end;

write(sum);

end.

      1. Результат трансляции

6

sum VAR 2 Nil

x VAR 2 Nil

i VAR 3 Nil

n VAR 3 Nil

true CONST 1 1

false CONST 1 0

------------------------------------

Name |Mode |TypeIdx| Value|

3

boolean NAMED ENUM Ord Nil Nil Nil 0 1 2 4

rational NAMED RAT N-Ord Nil Nil Nil 0 0 N-Ord 8

integer NAMED INT Ord Nil Nil Nil -32768 32767 65536 4

-------------------------------------------------------------------------------

Name |Type |Cons |Ord? |Alias|Idx |Base|LeftB |RightB |Variant|Size |

2

aa01

aa00

------------

Name |

n

@INPUT

sum

0

@ITOR

@SET

i

1

@SET

:aa00

@DEFL

i

n

@<=INT

:aa01

@JMPF

x

@NUMERATOR

1

@SET

x

@DENOMINATOR

i

@SET

sum

sum

x

@ADDRAT

@SET

sum

sum

@SIMPLIFY

@SET

i

@INC

:aa00

@JMP

:aa01

@DEFL

sum

@OUTPUT

      1. Результат выполнения

;

; Generated header of assembly.

;

.386

.model flat, stdcall

option casemap : none

include CompileLib.asm

;

; Generated data segment.

;

_data segment

__variable_n dd 01h dup (0) ; Generated variable 'n'

__variable_sum dd 00h, 01h ; Generated variable 'sum'

__variable_i dd 01h dup (0) ; Generated variable 'i'

__variable_x dd 00h, 01h ; Generated variable 'x'

_data ends

;

; Generated code segment.

;

_text segment

_main proc near

push ebp

mov ebp, esp

pusha

push offset __variable_n ; n

call __input_integer_variable ; @INPUT

add esp, 4

push offset __variable_sum ; sum

push 0 ; 0

__integer_to_rational ; @ITOR

__set_rational_variable ; @SET

push offset __variable_i ; i

push 1 ; 1

__set_integer_variable ; @SET

aa00: ; @DEFL

push offset __variable_i ; i

push offset __variable_n ; n

__evaluate_integer

pop eax

__evaluate_integer

push eax

__less_equals_integer ; @<=INT

pop eax ; @JMPF

cmp eax, 1

jne aa01

push offset __variable_x ; x

__numerator_rational_variable ; @NUMERATOR

push 1 ; 1

__set_integer_variable ; @SET

push offset __variable_x ; x

__denominator_rational_variable ; @DENOMINATOR

push offset __variable_i ; i

push 4 ; @SET

call __copy_memory

add esp, 12

push offset __variable_sum ; sum

push offset __variable_sum ; sum

push offset __variable_x ; x

__evaluate_rational

pop eax

pop ebx

__evaluate_rational

push ebx

push eax

call __add_rational ; @ADDRAT

add esp, 8

__set_rational_variable ; @SET

push offset __variable_sum ; sum

push offset __variable_sum ; sum

__evaluate_rational

call __simplify_rational ; @SIMPLIFY

__set_rational_variable ; @SET

push offset __variable_i ; i

__increment_integer_variable ; @INC

jmp aa00 ; @JMP

aa01: ; @DEFL

push offset __variable_sum ; sum

__evaluate_rational

call __output_rational ; @OUTPUT

add esp, 8

call __output_cr_lf

popa

mov esp, ebp

pop ebp

ret 0

_main endp

_text ends

;

; Generated footer of assembly

;

end _main

;

; Generated data segment.

;

_data segment

__variable_ia1 db 8 dup (0) ; Generated variable 'ia1'

__variable_ra2 dd 12 dup (0, 1) ; Generated variable 'ra2'

__variable_ra3 dd 12 dup (0, 1) ; Generated variable 'ra3'

__variable_r1 dd 00h, 01h ; Generated variable 'r1'

__variable_i1 dd 01h dup (0) ; Generated variable 'i1'

__variable_ia3 db 24 dup (0) ; Generated variable 'ia3'

__variable_range1 dd 01h dup (0) ; Generated variable 'range1'

__variable_ia2 db 24 dup (0) ; Generated variable 'ia2'

__variable_enum1 dd 01h dup (0) ; Generated variable 'enum1'

__variable_ra1 dd 4 dup (0, 1) ; Generated variable 'ra1'

_data ends

Сгенерированный сегмент данных на языке ассемблера

20

Соседние файлы в папке Бяша