/* * Source name : tut_asmprog.s * Executable name : tut_asmprog * Author : Jason Fritts * Description : Example for gdb debugging * * Build using these commands: * as --gstabs tut_asmprog.s -o tut_asmprog.o * gcc -g -c input.c -o input.o * gcc tut_asmprog.o input.o -o tut_asmprog */ .equiv MIN_ELEMENTS, 1 .equiv MAX_ELEMENTS, 10000 .text .global main // program entry point main: push {fp, lr} // Create stack frame push {r4, r5, r6, r7, r8} // Save registers r4 to r8 // start program code mov r0, #MIN_ELEMENTS ldr r1, =max_elements // query user for # of elements to print ldr r1, [r1] bl get_number ldr r5, =n str r0, [r5] // Determine n elements in set ldr r4, =num_set mov r6, #0 // i = 0 mov r7, #0 // next element i_loop: cmp r6, r0 // is i < ___? bhs exit_i_loop lsl r5, r6, #2 str r7, [r4, r5] add r7, r7, #3 add r6, r6, #1 b i_loop exit_i_loop: // Print out n elements of number pattern mov r8, r0 mov r1, r0 // print "Display X element..." ldr r0, =out_str bl printf ldr r4, =num_set mov r6, #0 // i = 0 print_loop: cmp r6, r8 // is i < ____? bhs exit_print_loop lsl r5, r6, #2 ldr r7, [r4, r5] mov r1, r7 // print element ldr r0, =elem_str bl printf add r6, r6, #1 b print_loop exit_print_loop: ldr r0, =end_line bl printf // end program code pop {r4, r5, r6, r7, r8} // Restore r4, r5, r6, r7, r8 pop {fp, pc} .section .rodata // read-only (e.g. string) data out_str: .string "\nDisplaying %d elements of pattern:\n " elem_str: .string "%d " end_line: .string "\n" max_elements: .word MAX_ELEMENTS .section .data // initialized data n: .space 4, 0 num_set: .space 4*MAX_ELEMENTS, 0