@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ This program prints numbers 0xffffffd to 0x1000010 @ in hex. @ @ It defines and uses functions print_digit @ and print_number. @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ Program part 1: definition of main. @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .globl _start _start: mov sp, #0x100000 @initialize sp at start of program @ program main body ldr r4,=0x101f1000 @ ASCII codes stored at [r4] get printed mov r5, #0x0f lsl r5, r5, #8 add r5, r5, #0xff lsl r5, r5, #8 add r5, r5, #0xff lsl r5, r5, #8 add r5, r5, #0xfd mov r6, #19 my_loop: cmp r6, #0 blt program_exit mov r0, r5 bl print_number add r5, r5, #1 sub r6, r6, #1 b my_loop program_exit: @ print "END" on a new line mov r1, #'\r' str r1, [r4] mov r1, #'\n' str r1, [r4] mov r1, #'E' str r1, [r4] mov r1, #'N' str r1, [r4] mov r1, #'D' str r1, [r4] the_end: @ do infinite loop at the end b the_end @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @ Program part 2: definition of all functions. @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ print_digit: @ print_digit preamble sub sp, sp, #12 str lr, [sp, #0] str r4, [sp, #4] str r5, [sp, #8] @ print_digit main body ldr r4,=0x101f1000 @ ASCII codes stored @ at [r4] get printed cmp r0, #10 addlt r5, r0, #48 addge r5, r0, #55 str r5, [r4] @ print_digit wrap-up ldr lr, [sp, #0] ldr r4, [sp, #4] ldr r5, [sp, #8] add sp, sp, #12 bx lr @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ print_number: @ print_number preamble sub sp, sp, #24 str lr, [sp, #0] str r0, [sp, #4] str r4, [sp, #8] str r5, [sp, #12] str r6, [sp, #16] str r7, [sp, #20] @ print_number main body ldr r4,=0x101f1000 @ ASCII codes stored @ at [r4] get printed mov r5, #28 mov r6, r0 print_number_loop: cmp r5, #0 blt print_number_exit lsr r7, r6, r5 and r7, r7, #0x0000000f mov r0, r7 bl print_digit sub r5, r5, #4 b print_number_loop print_number_exit: @ print newline mov r5, #13 str r5, [r4] mov r5, #10 str r5, [r4] @ print_number wrap-up ldr lr, [sp, #0] ldr r0, [sp, #4] ldr r4, [sp, #8] ldr r5, [sp, #12] ldr r6, [sp, #16] ldr r7, [sp, #20] add sp, sp, #24 bx lr @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@