C코드 어셈블리어 변환인데요 ㅠ
nt count =0;
count++;
if(x==1) {
printf("원판 1을 %c에서 %c로 이동합니다. \n", from, to);
}
else {
hanoi(x-1, from, aux, to);
printf("원판 %d을 %c에서 %c로 이동합니다. \n", x, from, to);
hanoi(x-1, aux, to, from);
}
현재 리눅스로 C파일을 크로스 컴파일 한 후에 크로스 컴파일 한 소스로
하노이 탑을 공부하는 중에 ㅠㅠㅠ
하노이함수의 부분을 크로스 컴파일 해서 아래와 같은 결과를 얻엇는데요...
제가 C파일로 작성한 부분이 정확히 어느부분인지 잘 모르겠네요...
대충은 짐작이 가는데 ㅠㅠㅠ어떻게 동작하는건지 모르겠어요 ㅠㅠ
가능하시다면 주석도좀 부탁드려요 ㅠㅠㅠ
@ Generated by gcc 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/) for ARM/elf
.file "hanoi.c"
.gcc2_compiled.:
.section .rodata
.align 2
.LC0:
.ascii "Move Disk From %c to %c 12"
.text
.align 2
.global move
.type move,function
move:
@ args = 0, pretend = 0, frame = 4
@ frame_needed = 1, current_function_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #4
mov r2, r0
mov r3, r1
strb r2, [fp, #-13]
strb r3, [fp, #-14]
ldrb r3, [fp, #-13] @ zero_extendqisi2
ldrb r2, [fp, #-14] @ zero_extendqisi2
ldr r0, .L4
mov r1, r3
bl printf
b .L3
.L5:
.align 2
.L4:
.word .LC0
.L3:
.L2:
ldmea fp, {fp, sp, pc}
.Lfe1:
.size move,.Lfe1-move
.section .rodata
.align 2
.LC1:
.ascii " 1 from %c to %c moves12"
.align 2
.LC2:
.ascii " %d from %c to %c moves12"
.text
.align 2
.global hanoi
.type hanoi,function
hanoi:
@ args = 0, pretend = 0, frame = 12
@ frame_needed = 1, current_function_anonymous_args = 0
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #12
str r0, [fp, #-16]
strb r1, [fp, #-17]
strb r2, [fp, #-18]
strb r3, [fp, #-19]
mov r3, #0
str r3, [fp, #-24]
ldr r3, [fp, #-24]
add r2, r3, #1
str r2, [fp, #-24]
ldr r3, [fp, #-16]
cmp r3, #1
bne .L7
ldrb r3, [fp, #-17] @ zero_extendqisi2
ldrb r2, [fp, #-18] @ zero_extendqisi2
ldr r0, .L9
mov r1, r3
bl printf
b .L8
.L10:
.align 2
.L9:
.word .LC1
.L7:
ldr r2, [fp, #-16]
sub r3, r2, #1
ldrb r2, [fp, #-17] @ zero_extendqisi2
ldrb ip, [fp, #-19] @ zero_extendqisi2
ldrb lr, [fp, #-18] @ zero_extendqisi2
mov r0, r3
mov r1, r2
mov r2, ip
mov r3, lr
bl hanoi
ldrb r3, [fp, #-17] @ zero_extendqisi2
ldrb ip, [fp, #-18] @ zero_extendqisi2
ldr r0, .L12
ldr r1, [fp, #-16]
mov r2, r3
mov r3, ip
bl printf
ldr r2, [fp, #-16]
sub r3, r2, #1
ldrb r2, [fp, #-19] @ zero_extendqisi2
ldrb ip, [fp, #-18] @ zero_extendqisi2
ldrb lr, [fp, #-17] @ zero_extendqisi2
mov r0, r3
mov r1, r2
mov r2, ip
mov r3, lr
bl hanoi
b .L11
.L13:
.align 2
.L12:
.word .LC2
.L11:
.L8:
.L6:
ldmea fp, {fp, sp, pc}
.Lfe2:
.size hanoi,.Lfe2-hanoi
.section .rodata
.align 2
.LC3:
.ascii "Enter the number of disks you want to play with :"
.align 2
.LC4:
.ascii "%d"
.align 2
.LC5:
.ascii "12 The No of moves requried is = %d 12"
.text
.align 2
.global main
.type main,function
main:
@ args = 0, pretend = 0, frame = 8
@ frame_needed = 1, current_function_anonymous_args = 0
mov ip, sp
stmfd sp!, {r4, fp, ip, lr, pc}
sub fp, ip, #4
sub sp, sp, #8
bl __gccmain
ldr r0, .L16
bl printf
sub r3, fp, #20
ldr r0, .L16+4
mov r1, r3
bl scanf
ldr r0, [fp, #-20]
bl __floatsidf
mov r4, r1
mov r3, r0
adr r0, .L16+8
ldmia r0, {r0-r1}
mov r2, r3
mov r3, r4
bl pow
mov r4, r1
mov r3, r0
mov r1, r4
mov r0, r3
adr r2, .L16+16
ldmia r2, {r2-r3}
bl __subdf3
mov r4, r1
mov r3, r0
mov r1, r4
mov r0, r3
bl __fixdfsi
mov r3, r0
str r3, [fp, #-24]
ldr r0, .L16+24
ldr r1, [fp, #-24]
bl printf
ldr r0, [fp, #-20]
mov r1, #65
mov r2, #67
mov r3, #66
bl hanoi
b .L15
.L17:
.align 2
.L16:
.word .LC3
.word .LC4
.long 0x40000000, 0x0 @ double 2.00000000000000000000e0
.long 0x3ff00000, 0x0 @ double 1.00000000000000000000e0
.word .LC5
.L15:
.L14:
ldmea fp, {r4, fp, sp, pc}
.Lfe3:
.size main,.Lfe3-main
심볼을 보세요.
honoi:
부터
.Lfe2:
바로 전까지가 작성하신 hanoi() 입니다.
주석도...달아주실순 없나여 ㅠㅠㅠㅠ
부탁드립니다...
과제는 스스로...
과제는 스스로...
댓글 달기