1 간단한 C 프로그램 김희자, 최정욱
2 목차 예제 소스 코드 컴파일 어셈블리 언어 Dlite 디버거 수행
3 예제 소스 코드 #include int sum=0; main() { int i = 0; for(i=1; i<=5; i++) sum = sum + i; printf("%d\n", sum); }
4 컴파일 edu]sslittle-na-sstrix-gcc -o simplec.ss simplec.c edu]sslittle-na-sstrix-gcc -S simplec.c
5 어셈블리 언어 (1/4 ).file 1 "simplec.c" # GNU C [AL 1.1, MM 40, tma 0.1] SimpleScalar running sstrix compiled by GNU C # Cc1 defaults: # -mgas -mgpOPT # Cc1 arguments (-G value = 8, Cpu = default, ISA = 1): # -quiet -dumpbase -o gcc2_compiled.: __gnu_compiled_c:.globl sum.sdata.align 2 sum:.word 0.align 2
6 어셈블리 언어 (2/4 ) $LC0:.ascii "%d\n\000".text.align 2.globl main.text.loc 1 6.ent main main:.frame $fp,32,$31 # vars= 8, regs= 2/0, args= 16, extra= 0.mask 0xc ,-4.fmask 0x ,0 subu $sp,$sp,32
7 어셈블리 언어 (3/4 ) sw $31,28($sp) sw $fp,24($sp) move $fp,$sp jal __main sw $0,16($fp) li $2,0x # 1 sw $2,16($fp) $L2: lw $2,16($fp) slt $3,$2,6 bne $3,$0,$L5 j $L3 $L5: lw $2,sum lw $3,16($fp) addu $2,$2,$3 sw $2,sum
8 어셈블리 언어 (4/4 ) $L4: lw $3,16($fp) addu $2,$3,1 move $3,$2 sw $3,16($fp) j $L2 $L3: la $4,$LC0 lw $5,sum jal printf $L1: move $sp,$fp # sp not trusted here lw $31,28($sp) lw $fp,24($sp) addu $sp,$sp,32 j $31.end main
9 Dlite 디버거 수행 결과 (1/7) edu]# simplesim-3.0/sim-safe -i simplec.ss DLite! > dis main 0x004001f0: addiu r29,r29,-32 0x004001f8: sw r31,28(r29) 0x : sw r30,24(r29) 0x : addu r30,r0,r29 0x : jal 0x x : sw r0,16(r30) 0x : addiu r2,r0,1 0x : sw r2,16(r30) 0x : lw r2,16(r30) 0x : slti r3,r2,6 0x : bne r3,r0,0x x : j 0x x : lw r2,-32768(r28) 0x : lw r3,16(r30) 0x : addu r2,r2,r3 0x : sw r2,-32768(r28)
10 Dlite 디버거 수행 결과 (2/7) DLite! > break 0x breakpoint #1 class: exec DLite! > cont Stopping at code breakpoint 0x [ 198] 0x : addu r2,r2,r3 DLite! > iregs PC: 0x NPC: 0x HI: 0x LO: 0x FCC: 0x $r0: 0/0x $r1: 0/0x $r2: 0/0x $r3: 1/0x $r4: /0x100011c8 $r5: /0x7fff8004 $r6: /0x7fff800c $r7: /0x100011c0 $r8: /0x7efefeff $r9: /0x2f2f2f2f $r10: 0/0x $r11: 0/0x $r12: 0/0x $r13: 0/0x $r14: 0/0x $r15: 0/0x
11 Dlite 디버거 수행 결과 (3/7) $r16: 1/0x $r17: /0x7fff8004 $r18: /0x7fff800c $r19: 0/0x $r20: 0/0x $r21: 0/0x $r22: 0/0x $r23: 0/0x $r24: 0/0x $r25: 0/0x $r26: 0/0x $r27: 0/0x $r28: /0x $r29: /0x7fff7fc8 $r30: /0x7fff7fc8 $r31: /0x DLite! > cont Stopping at code breakpoint 0x [ 210] 0x : addu r2,r2,r3 DLite! > cont Stopping at code breakpoint 0x [ 222] 0x : addu r2,r2,r3 DLite! > cont Stopping at code breakpoint 0x [ 234] 0x : addu r2,r2,r3
12 Dlite 디버거 수행 결과 (4/7) DLite! > cont Stopping at code breakpoint 0x [ 246] 0x : addu r2,r2,r3 DLite! > iregs PC: 0x NPC: 0x HI: 0x LO: 0x FCC: 0x $r0: 0/0x $r1: 0/0x $r2: 10/0x a $r3: 5/0x $r4: /0x100011c8 $r5: /0x7fff8004 $r6: /0x7fff800c $r7: /0x100011c0 $r8: /0x7efefeff $r9: /0x2f2f2f2f $r10: 0/0x $r11: 0/0x $r12: 0/0x $r13: 0/0x
13 Dlite 디버거 수행 결과 (5/7) $r14: 0/0x $r15: 0/0x $r16: 1/0x $r17: /0x7fff8004 $r18: /0x7fff800c $r19: 0/0x $r20: 0/0x $r21: 0/0x $r22: 0/0x $r23: 0/0x $r24: 0/0x $r25: 0/0x $r26: 0/0x $r27: 0/0x $r28: /0x $r29: /0x7fff7fc8 $r30: /0x7fff7fc8 $r31: /0x DLite! > step [ 247] 0x : sw r2,-32768(r28) DLite! > cont 15
14 Dlite 디버거 수행 결과 (6/7) sim: ** simulation statistics ** sim_num_insn 7638 # total number of instructions executed sim_num_refs 4149 # total number of loads and stores executed sim_elapsed_time 119 # total simulation time in seconds sim_inst_rate # simulation speed (in insts/sec) ld_text_base 0x # program text (code) segment base ld_text_size # program text (code) size in bytes ld_data_base 0x # program initialized data segment base ld_data_size 8192 # program init'ed `.data' and uninit'ed `.bss' size in bytes ld_stack_base 0x7fffc000 # program stack segment base (highest address in stack)
15 Dlite 디버거 수행 결과 (7/7) ld_stack_size # program initial stack size ld_prog_entry 0x # program entry point (initial PC) ld_environ_base 0x7fff8000 # program environment base address address ld_target_big_endian 0 # target executable endian-ness, non-zero if big endian mem.page_count 26 # total number of pages allocated mem.page_mem 104k # total size of memory pages allocated mem.ptab_misses 26 # total first level page table misses mem.ptab_accesses # total page table accesses mem.ptab_miss_rate # first level page table miss rate