I am a Hobby programmer here now trying to get into assembler for an android phone. I cannot open a disk file. I would dearly like to get past this hurdle if anybody with a knowledge of gnu assemblers for aarch64 could help me out.
I am using the Termux application, which is a Bash-like shell, installed the package Binutils, and using the gnu as assembler and ld linker to compile a short assembly program to open and read a small test disk file in the same path as my source. I am unable to open the file. If I examine the handle created by the open syscall the result is a negative number which is not right. I am not sure about register arguments for the svc call.
Here is my source file (rec1.s) written using nano, compiled using 'as -o rec1.o rec1.s', linked using ld -s -o rec1 rec1.o' and executed using './rec1'
.data
title: .ascii "Test disk open for aarch64\n"
filename: .ascii "test.txt" // existing short text file
path: .ascii "../gas/" // path where the file resides
err0: .ascii "Zero error\n"
errneg: .ascii "Negative error\n"
.bss
buffer: .space 100
.text
.global _start
_start:
// title of program
mov x0,#1
ldr x1,=title
mov x2,#17
mov w8,#64
svc 0
// open disk file
ldr x0,=path
ldr x1,=filename
mov x2,#0 // flag ?
mov x3,#0666 // mode ?
mov w8,#56
svc 0 // x0 should have handle at this stage
// check for valid handle
cmp x0,#0 // branch if handle is zero
beq error0
blt errorneg
mov x19,x0 // store handle in x19
// read disk file
mov x0,x19
ldr x1,=buffer
mov x2,#10
mov w8,#63
svc 0
// display buffer
mov x0,#1
ldr x1,=buffer
mov x2,#10
mov w8,#64
svc 0
// close the file
mov x0,19
mov w8,#57
svc 0
b exit
exit:
mov x0,#0
mov w8,#93
svc 0
error0:
mov x0,#1
ldr x1,=err0
mov x2,#11
mov w8,#64
svc 0
b exit
errorneg:
mov x0,#1
ldr x1,=errneg
mov x2,#15
mov w8,#64
svc 0
b exit