57 lines
1.2 KiB
ArmAsm
57 lines
1.2 KiB
ArmAsm
# Unit tests harness
|
|
# Read suite name from stdin, then run that suite
|
|
|
|
.org 0
|
|
# Provide program starting address to linker
|
|
.global _start
|
|
|
|
# .extern fmt_decimal
|
|
|
|
/* newlib system calls */
|
|
.set SYSEXIT, 93
|
|
.set SYSREAD, 63
|
|
.set SYSWRITE, 64
|
|
|
|
.section .rodata
|
|
|
|
inputs:
|
|
.word 0, 1, 2, 3, 9, 10, 100, 0x80000000
|
|
inputs_end:
|
|
|
|
.section .bss
|
|
|
|
buf: .skip 11
|
|
inbuf: .skip 80
|
|
|
|
.text
|
|
|
|
_start:
|
|
la a0, inbuf
|
|
li a1, 80
|
|
jal read
|
|
|
|
mv a2, a0 # move bytes read to a2
|
|
li t0, SYSWRITE # "write" syscall
|
|
li a0, 1 # 1 = standard output (stdout)
|
|
la a1, inbuf # load address of buffer
|
|
ecall # invoke syscall to print the string
|
|
|
|
li t0, SYSEXIT # "exit" syscall
|
|
la a0, 0 # Use 0 return code
|
|
ecall # invoke syscall to terminate the program
|
|
|
|
|
|
# Read from stdin
|
|
# arguments:
|
|
# a0: address of buffer to read into
|
|
# a1: number of bytes to read
|
|
# return:
|
|
# a0: count of bytes read, or error if < 0
|
|
|
|
read:
|
|
li t0, SYSREAD # "read" syscall
|
|
mv a2, a1 # bytes to read
|
|
mv a1, a0 # buffer address
|
|
li a0, 1 # 0 = standard input (stdin)
|
|
ecall # invoke syscall
|
|
ret
|