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
'Applied > Assembly' 카테고리의 다른 글
[Mips Code] Step을 이용한 register의 변화 관찰 (0) | 2016.06.27 |
---|---|
[Ucode] 예제 프로그램 - 이중 중첩문(while) (2) | 2016.05.29 |
[Ucode] 예제 프로그램 - 함수 호출 (0) | 2016.05.29 |
[Mips Code]stack기반 지역변수 설정 및 함수 콜 (0) | 2016.03.12 |
[Mips Code]factorial 만들기 (재귀형식, jar 명령어) (0) | 2016.03.09 |