Code: Select all
a = afunc()
do
end;
Code: Select all
dim a, n: int;
main do
n = 7;
a = afunc(n)
dim r: int = 0;
dim i: itr;
do
for i = 1 to n :++ do
r = r + i;
end;
return r;
end;
print(a); ' 28
end;
Code: Select all
_start:
; load immediate constant '7'
movsx eax, byte [_C4]
; save n
mov [_I76], eax
; load n
mov eax, dword [_I76]
push eax
push ebp
mov ebp, esp
sub esp, 12
; init afunc
mov dword [ebp - 4], 0
; load immediate constant '0'
movsx eax, byte [_C5]
; save r
mov [ebp - 12], eax
; load immediate constant '1'
movsx eax, byte [_C6]
; save i
mov [ebp - 8], eax
; dec i
dec dword [ebp - 8]
; load n
mov eax, dword [ebp + 4]
push eax
._L1:
; inc i
inc dword [ebp - 8]
pop eax
; cmp i
cmp [ebp - 8], eax
jg ._L2
push eax
; load r
mov eax, dword [ebp - 12]
push eax
; load i
mov eax, dword [ebp - 8]
pop edx
add eax, edx
; save r
mov [ebp - 12], eax
jmp ._L1
._L2:
; load r
mov eax, dword [ebp - 12]
; save afunc result
mov [ebp - 4], eax
jmp ._L0
._L0:
; load afunc result
mov eax, dword [ebp - 4]
mov esp, ebp
pop ebp
add esp, 4
; save a
mov [_I75], eax
; print:
; load a
mov eax, dword [_I75]
call _sb_print_int
_end:
mov ebx, 0
mov eax, 1
int 80h