반응형




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
int array[10];
int size;
int result;
 
void main()
{
     size = 10;
     set(array, size);
 
     result = addall(array, size);
     write(result);
}
 
void set(int array[], int size)
{
     int i;
     i = 0;
 
      while(i < size)
     {
          array[i] = 1;
          i++;
     }
 
}
 
int addall(int array[], int size)
{
     int x, i;
     x = 0;
     i = 0;
         while(i < size) 
         {
             x = x + array[i];
             i++;
         }
 return x;
}
Crocus





           sym 1 1 10

           sym 1 11 1

           sym 1 12 1

set        proc 3 2 2

           sym 2 1 1 @ &array

           sym 2 2 1 @ size

           sym 2 3 1 @ i 지역 변수

           ldc 0 @ 0 적재

           str 2 3 @ i = 0

while1     nop

           lod 2 3

           lod 2 2

           lt            @ i < size

           fjp endwhile1 @ if false

           lod 2 3       @ i

           lod 2 1       @ &array 

           add           @ array[i] , array + i

           lod 2 3

           sti           @ array[i] = i 스택에 주소를 갖다놓고 주소에다가 값을 store한다는 것

           lod 2 3       @ i

           inc           @ ++

           str 2 3       @ i = i++;

           ujp while1

endwhile1  nop

           ret

           end

addall     proc 4 3 2 @ array,size,int i,x 있으니 4, 3번방, lexical level 2

           sym 3 1 1 @ &array

           sym 3 2 1 @ size

           sym 3 3 1 @ x

           sym 3 4 1 @ i

           ldc 0

           str 3 3

           ldc 0

           str 3 4

while2     nop

           lod 3 4

           lod 3 2

           lt

           fjp endwhile2

           lod 3 4   @ i

           lod 3 1   @ array

           add       @ array[i]

           ldi       @ array[i] value load

           lod 3 3

           add       @ x + array[i]

           str 3 3   @ x = x + array[i]

           lod 3 4

           inc

           str 3 4

           ujp while2

endwhile2  nop

           lod 3 3 @ x load

           retv

           end           

           bgn 12 @ 12칸을 앞에 썻으니 12

           ldc 10 @ 10을 적재

           str 1 11 @ size = 10

           ldp

           lda 1 1

           lod 1 11

           call set

           ldp

           lda 1 1

           lod 1 11

           call addall @ addall(array,size)

           str 1 12 @result = addall(array, size)

           call lf

           ldp

           lod 1 12

           call write

           end

반응형