40 lines
855 B
ArmAsm
40 lines
855 B
ArmAsm
# RISC-V assembly program to print "Hello World!" to stdout.
|
|
|
|
.org 0
|
|
# Provide program starting address to linker
|
|
.global _start
|
|
|
|
/* newlib system calls */
|
|
.set SYSEXIT, 93
|
|
.set SYSWRITE, 64
|
|
|
|
.section .rodata
|
|
str: .ascii "Hello World!\n"
|
|
.set str_size, .-str
|
|
|
|
.text
|
|
_start:
|
|
li t1, 0
|
|
li t2, 5
|
|
|
|
# dummy test for jal instruction
|
|
.L1:
|
|
jal x0, .L2
|
|
.L2:
|
|
nop
|
|
|
|
loop:
|
|
beq t1, t2, end
|
|
|
|
li t0, SYSWRITE # "write" syscall
|
|
li a0, 1 # 1 = standard output (stdout)
|
|
la a1, str # load address of hello string
|
|
li a2, str_size # length of hello string
|
|
ecall # invoke syscall to print the string
|
|
addi t1, t1, 1
|
|
j loop
|
|
|
|
end:
|
|
li t0, SYSEXIT # "exit" syscall
|
|
add a0, x0, 0 # Use 0 return code
|
|
ecall # invoke syscall to terminate the program
|