diff options
| author | Hunter Kvalevog <hunter@kvog.sh> | 2026-04-18 12:10:36 -0500 |
|---|---|---|
| committer | Hunter Kvalevog <hunter@kvog.sh> | 2026-04-18 12:10:36 -0500 |
| commit | 27fd5931edb330dc5c41956365ff462514188e89 (patch) | |
| tree | ac96759c57e5cfa9b254186742ea33cdaefb1407 /aarch64 | |
| parent | 601809870614d923c92455dcb7b1e9e9defddeac (diff) | |
Diffstat (limited to 'aarch64')
| -rwxr-xr-x | aarch64/asmrun.sh | 14 | ||||
| -rw-r--r-- | aarch64/mariokartwii_ch07.S | 41 | ||||
| -rw-r--r-- | aarch64/mariokartwii_ch08.S | 30 |
3 files changed, 85 insertions, 0 deletions
diff --git a/aarch64/asmrun.sh b/aarch64/asmrun.sh new file mode 100755 index 0000000..ffcb499 --- /dev/null +++ b/aarch64/asmrun.sh @@ -0,0 +1,14 @@ +D="$(dirname "$0")" +clang -o "$D/_asmrun_out" "$1" || exit 1 +shift + +BP_ARGS=() +for bp in "$@"; do + BP_ARGS+=(-o "breakpoint set --name $bp") +done + +lldb --no-lldbinit --batch \ + -o "target create $D/_asmrun_out" \ + "${BP_ARGS[@]}" \ + -o "process launch" + diff --git a/aarch64/mariokartwii_ch07.S b/aarch64/mariokartwii_ch07.S new file mode 100644 index 0000000..ce3a3f5 --- /dev/null +++ b/aarch64/mariokartwii_ch07.S @@ -0,0 +1,41 @@ +// https://mariokartwii.com/arm64/ch7.html + +.section __TEXT,__text +.global _main + +_main: + // Save stack frame + stp x29, x30, [sp, #-16]! + mov x29, sp + + // Add + mov x0, #1 + mov x1, #2 + add x2, x0, x1 + + // Add immediate + add x3, x2, #0x100 + + // Subtract immediate + mov x4, x3 + sub x4, x4, #0x100 + + // Multiply + mov x5, #5 + mul x5, x4, x5 + + // Divide + udiv x6, x5, x4 + mov x7, #-1 + sdiv x7, x6, x7 + + neg x8, x7 + + brk #0 // (lldb) register read + + // Restore stack frame + ldp x29, x30, [sp], #16 + + // Return 0 + mov x0, #0 + ret diff --git a/aarch64/mariokartwii_ch08.S b/aarch64/mariokartwii_ch08.S new file mode 100644 index 0000000..3194156 --- /dev/null +++ b/aarch64/mariokartwii_ch08.S @@ -0,0 +1,30 @@ +// https://mariokartwii.com/arm64/ch8.html + +.section __TEXT,__text +.global _main + +_main: + // move shift + mov x0, #0xFFFFFFFFFFFFFFFF + lsl x0, x0, #32 + + mov x1, #0xFFFFFFFFFFFFFFFF + movk x1, #0x1234, lsl 32 + + mov x2, #0xFFFFFFFFFFFFFFFF + movz x2, #0x1234, lsl 32 + + mov x3, #0xFFFFFFFFFFFFFFFF + movk x3, #0x1111, lsl 48 + movk x3, #0x2222, lsl 32 + movk x3, #0x3333, lsl 16 + movk x3, #0x4444 + + brk #0 // (lldb) register read + + // Restore stack frame + ldp x29, x30, [sp], #16 + + // Return 0 + mov x0, #0 + ret |