//---------------------------------------------------------------------- // absval.s // Author: Bob Dondero and William Ughetta //---------------------------------------------------------------------- .section .rodata promptStr: .string "Enter an integer: " scanfFormatStr: .string "%d" printfFormatStr: .string "The integer's absolute value is %d.\n" //---------------------------------------------------------------------- .section .data //---------------------------------------------------------------------- .section .bss iInput: .skip 4 iAbsVal: .skip 4 //---------------------------------------------------------------------- .section .text //-------------------------------------------------------------- // Read an integer from stdin, and write its absolute value // to stdout. Return 0. // int main(void) //-------------------------------------------------------------- // Must be a multiple of 16 .equ MAIN_STACK_BYTECOUNT, 16 .global main main: // Prolog sub sp, sp, MAIN_STACK_BYTECOUNT str x30, [sp] // printf("Enter an integer: ") adr x0, promptStr bl printf // scanf("%d", &iInput) adr x0, scanfFormatStr adr x1, iInput bl scanf // iAbsVal = abs(iInput) adr x0, iInput ldr w0, [x0] bl abs adr x1, iAbsVal str w0, [x1] // printf("The integer's absolute value is %d.\n", iAbsVal) adr x0, printfFormatStr adr x1, iAbsVal ldr w1, [x1] bl printf // Epilog and return 0 mov w0, 0 ldr x30, [sp] add sp, sp, MAIN_STACK_BYTECOUNT ret .size main, (. - main)