Starting to learn Assembly for ARMV8 with a Khadas Vim3 and Ubuntu 24.04
I'm starting to learn assembly for ARMV8(Aarch64). I've got a Khadas Vim 3 board with a Amlogic Cortex A73 processor. I have flashed the eMMC with Ubuntu 24.04 with the USB Burning Tool. To start this off I'm going to follow some tutorials and take some examples from them. I have corrected some errors so I want somewhere to keep track of the code that works.
This is from chapter 2 of Thinkingeek's tutorial
// first.s
.text
.globl main
main:
mov w0, #2
ret
Now to assemble it
$ aarch64-linux-gnu-as -c -o first.o first.s
and then link it
$ aarch64-linux-gnu-gcc -static -o first first.o
To run it
$ ./first $ echo $? $ 2
2 is the return
Now let's try a hello world. This is from Peter Nelson's tutorial
// hello.s
.data /* Data segment: define our message string and calculate its length. */
msg:
.ascii "Hello, ARM64!\n"
len = . - msg
.text /* Our application's entry point. */
.globl main
main:
/* syscall write(int fd, const void *buf, size_t count) */
mov x0, #1 /* fd := STDOUT_FILENO */
ldr x1, =msg /* buf := msg */
ldr x2, =len /* count := len */
mov w8, #64 /* write is syscall #64 */
svc #0 /* invoke syscall */
/* syscall exit(int status) */
mov x0, #0 /* status := 0 */
mov w8, #93 /* exit is syscall #93 */
svc #0 /* invoke syscall */
and again to assemble it
$ aarch64-linux-gnu-as -c -o hello.o hello.s
and then link it
$ aarch64-linux-gnu-gcc -static -o hello hello.o
To run it
$ ./hello Hello, ARM64! $
That's two working examples for now. I also highly recommend Vega's ARMv8 AArch64/ARM64 Full Beginner's Assembly Tutorial
dispelled