mirror of
https://github.com/pkivolowitz/asm_book.git
synced 2026-06-21 00:26:46 +08:00
50 lines
1.3 KiB
ArmAsm
50 lines
1.3 KiB
ArmAsm
#include "apple-linux-convergence.S"
|
|
|
|
/* This is a short demonstration of the macro suite in development
|
|
to enable writing AARCH64 assembly language once and be able to
|
|
build on both Apple Silicon and Linux machines.
|
|
|
|
Documentation can be found at:
|
|
https://github.com/pkivolowitz/asm_book
|
|
|
|
Perry Kivolowitz
|
|
*/
|
|
.align 2
|
|
.text
|
|
GLABEL main
|
|
|
|
MAIN
|
|
START_PROC
|
|
PUSH_P x21, x30
|
|
PUSH_R x29
|
|
mov x29, sp
|
|
|
|
mov x0, 8 // allocating a long's worth of RAM
|
|
CRT malloc // call malloc()
|
|
mov x1, 0xFF // load payload
|
|
str x1, [x0] // store payload
|
|
LLD_ADDR x1, ptr // local load address
|
|
str x0, [x1]
|
|
|
|
LLD_ADDR x0, fmt // loads the address of fmt
|
|
LLD_ADDR x1, ptr // loads **ptr
|
|
ldr x1, [x1] // dereferences **ptr to make *ptr
|
|
ldr x2, [x1] // dereferences *ptr to get value
|
|
#if defined(__APPLE__)
|
|
PUSH_P x1, x2
|
|
CRT printf
|
|
add sp, sp, 16
|
|
#else
|
|
CRT printf
|
|
#endif
|
|
POP_R x29
|
|
POP_P x21, x30
|
|
mov x0, xzr
|
|
ret
|
|
END_PROC
|
|
|
|
.data
|
|
ptr: .space 8
|
|
fmt: .asciz "%p %ld\n"
|
|
|
|
.end
|