Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,71 @@
|
|||
.equ STDOUT, 1
|
||||
.equ SVC_WRITE, 64
|
||||
.equ SVC_EXIT, 93
|
||||
|
||||
.text
|
||||
.global _start
|
||||
|
||||
_start:
|
||||
stp x29, x30, [sp, -16]!
|
||||
mov x29, sp
|
||||
mov x0, #123 // decimal
|
||||
bl print_uint64
|
||||
mov x0, #0b01111011 // binary
|
||||
bl print_uint64
|
||||
mov x0, #0173 // octal
|
||||
bl print_uint64
|
||||
mov x0, #0x7b // hexadecimal
|
||||
bl print_uint64
|
||||
mov x0, #'{ // ascii value
|
||||
bl print_uint64
|
||||
mov x0, #'\{ // ascii value in another way
|
||||
bl print_uint64
|
||||
ldp x29, x30, [sp], 16
|
||||
mov x0, #0
|
||||
b _exit // exit(0);
|
||||
|
||||
// void print_uint64(uint64_t x) - print an unsigned integer in base 10.
|
||||
print_uint64:
|
||||
// x0 = remaining number to convert
|
||||
// x1 = pointer to most significant digit
|
||||
// x2 = 10
|
||||
// x3 = x0 / 10
|
||||
// x4 = x0 % 10
|
||||
// compute x0 divmod 10, store a digit, repeat if x0 > 0
|
||||
ldr x1, =strbuf_end
|
||||
mov x2, #10
|
||||
1: udiv x3, x0, x2
|
||||
msub x4, x3, x2, x0
|
||||
add x4, x4, #48
|
||||
mov x0, x3
|
||||
strb w4, [x1, #-1]!
|
||||
cbnz x0, 1b
|
||||
// compute the number of digits to print, then call write()
|
||||
ldr x3, =strbuf_end_newline
|
||||
sub x2, x3, x1
|
||||
mov x0, #STDOUT
|
||||
b _write
|
||||
|
||||
.data
|
||||
strbuf:
|
||||
.space 31
|
||||
strbuf_end:
|
||||
.ascii "\n"
|
||||
strbuf_end_newline:
|
||||
.align 4
|
||||
|
||||
.text
|
||||
//////////////// 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue