/* * Source name : ex3_asmprog.s * Executable name : ex3_asmprog * Author : Jason Fritts * Description : Compares two numbers and sets r0 to 1 if equal * * Build using these commands: * as --gstabs ex1_asmprog.s -o ex1_asmprog.o * gcc -g ex1_asmprog.o -o ex1_asmprog */ .text .global main // program entry point main: push {lr} // Create stack frame push {r6, r7} // Save registers r6, r7 // get value in variables 'a' and 'b' ldr r6, =a ldrh r6, [r6] ldr r7, =b ldrh r7, [r7] // start program code // initialize 'i' and 'result' values mov r0, #0 // r0: i = 0 mov r1, #0 // r1: result = 0 // iterate if loop count < b start_loop: cmp r1, r6 // i < a ? bhs end_loop add r0, r0, r7 // result += b add r1, r1, #1 // i++ b start_loop end_loop: // end program code pop {r6, r7} // Restore registers r6, r7 pop {pc} // Exit & return control to OS .section .rodata // read-only (e.g. string) data .section .data // initialized data a: .hword 3 b: .hword 8 .section .bss // uninitialized data