/* * 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, 1000000 .text .global main // program entry point main: // caller register saving sub sp, sp, #32 stur fp, [sp, #24] stur lr, [sp, #16] stur x24, [sp, #8] stur w21, [sp, #4] stur w19, [sp, #0] // start program code mov w0, #MIN_ELEMENTS ldr x1, =max_elements // query user for # of elements to print ldr w1, [x1] bl get_number ldr x5, =n str w0, [x5] // Determine n elements in set ldr x4, =num_set mov w6, #0 // i = 0 mov w7, #0 // next element i_loop: cmp w6, w0 // is i < ___? b.hs exit_i_loop lsl w5, w6, #2 str w7, [x4, x5] add w7, w7, #3 add w6, w6, #1 b i_loop exit_i_loop: // Print out n elements of number pattern mov w21, w0 mov w1, w0 // print "Display X element..." ldr x0, =out_str bl printf ldr x24, =num_set mov w19, #0 // i = 0 print_loop: cmp w19, w21 // is i < ____? b.hs exit_print_loop lsl w5, w19, #2 ldr w1, [x24, x5] ldr x0, =elem_str bl printf add w19, w19, #1 b print_loop exit_print_loop: ldr x0, =end_line bl printf // end program code // caller register saving ldur fp, [sp, #24] ldur lr, [sp, #16] ldur x24, [sp, #8] ldur w21, [sp, #4] ldur w19, [sp, #0] add sp, sp, #16 // return mov x0, #0 br lr .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