Semi-working output, still no exall

This commit is contained in:
Imbus 2024-04-05 18:27:41 +02:00
parent 6e1839892a
commit 7c0e113593
2 changed files with 44 additions and 29 deletions

19
end.s Normal file
View file

@ -0,0 +1,19 @@
# Just print the word 'exit' to the address 0x10000000
.globl end
end:
addi a0, x0, 0x65 # 'e'
li a1, 0x10000000
sb a0, (a1)
addi a0, x0, 0x78 # 'x'
sb a0, (a1)
addi a0, x0, 0x69 # 'i'
sb a0, (a1)
addi a0, x0, 0x74 # 't'
sb a0, (a1)
addi a0, x0, 0x0A
sb a0, (a1) # '\n'
ret

54
main.s
View file

@ -5,11 +5,19 @@
num2: .word 7 # Second number
result: .word 0 # Variable to store the result
msg: .ascii "Hello, World!\n"
array: .space 100 # 100 bytes of space
# Main program entry point
.globl start
.text
.global _start
.align 4
start:
call test_routine
call hello_manual
# call hello # This doesn't work
call end
ebreak
# Arbitrary test routine
test_routine:
la a0, num1 # Load the address of num1 into register a6
li a1, 10 # Load the value 10 into register a5
@ -17,31 +25,8 @@ test_routine:
sw a1, 0(a0) # Store the value in memory
ret
_start:
call h2
call test_routine
call hello
# Load the first number into register t0
lw t0, num1
# Load the second number into register t1
lw t1, num2
# Add the two numbers and store the result in register t2
add t2, t0, t1
# Store the result in memory
la t3, result
sw t2, 0(t3)
# Call _hello
la a0, result
# End program
ecall
h2:
# Prints "hello" manually
hello_manual:
addi a0, x0, 0x68
li a1, 0x10000000
sb a0, (a1) # 'h'
@ -57,8 +42,12 @@ h2:
addi a0, x0, 0x6F
sb a0, (a1) # 'o'
addi a0, x0, 0x0A
sb a0, (a1) # '\n'
ret
# Is supposed to print "Hello, World!\n" to stdout via ecall, but doesn't work
hello:
# Write the string "Hello, World!\n" to stdout
la a0, msg # Load the address of the string into a0
@ -68,6 +57,13 @@ hello:
ecall # Make the system call to write
ret # Return from the function
# To avoid the program from exiting
loop: j loop
# Another routine, presumably written for the rars emulator?
hello2:
li a0, 0x1
la a1, msg
li a2, 13
li a7, 64
ecall
# To avoid the program from exiting
loop: j loop