.equ STDOUT, 1 .equ SVC_WRITE, 64 .equ SVC_EXIT, 93 .text .global _start _start: stp x29, x30, [sp, -16]! mov x0, #123 mov x1, #456 mov x29, sp bl integer_compare // integer_compare(123, 456); mov x0, #-123 mov x1, #-456 bl integer_compare // integer_compare(-123, -456); mov x0, #123 mov x1, #123 bl integer_compare // integer_compare(123, 123); ldp x29, x30, [sp], 16 mov x0, #0 b _exit // exit(0); // void integer_compare(long long x, long long y) - compare two signed integers and print a message integer_compare: cmp x0, x1 mov x0, #STDOUT b.eq 1f b.gt 2f // x < y ldr x1, =msg_lt mov x2, #17 b _write 1: // x == y ldr x1, =msg_eq mov x2, #16 b _write 2: // x > y ldr x1, =msg_gt mov x2, #20 b _write msg_lt: .ascii "x is less than y\n" msg_eq: .ascii "x is equal to y\n" msg_gt: .ascii "x is greater than y\n" .align 4 //////////////// system call wrappers // ssize_t _write(int fd, void *buf, size_t count) _write: stp x29, x30, [sp, -16]! mov x8, #SVC_WRITE mov x29, sp svc #0 ldp x29, x30, [sp], 16 ret // void _exit(int retval) _exit: mov x8, #SVC_EXIT svc #0