Trying to make stdout work
This commit is contained in:
parent
e681b848d5
commit
0e259f27bd
1 changed files with 70 additions and 9 deletions
79
main.s
79
main.s
|
@ -1,12 +1,73 @@
|
|||
.section .text
|
||||
.globl _start
|
||||
# Define variables
|
||||
.data
|
||||
.align 4
|
||||
num1: .word 5 # First number
|
||||
num2: .word 7 # Second number
|
||||
result: .word 0 # Variable to store the result
|
||||
msg: .ascii "Hello, World!\n"
|
||||
|
||||
# Main program entry point
|
||||
.text
|
||||
.global _start
|
||||
.align 4
|
||||
test_routine:
|
||||
la a0, num1 # Load the address of num1 into register a6
|
||||
li a1, 10 # Load the value 10 into register a5
|
||||
xori a2, a1, 0x1 # Calculate the value of a2
|
||||
sw a1, 0(a0) # Store the value in memory
|
||||
ret
|
||||
|
||||
_start:
|
||||
# Call the hello function
|
||||
lui a0, %hi(_hello) # Load upper immediate of _hello address
|
||||
addi a0, a0, %lo(_hello) # Add lower immediate of _hello address
|
||||
jalr ra, a0, 0 # Jump and link to _hello, ra is return address
|
||||
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:
|
||||
addi a0, x0, 0x68
|
||||
li a1, 0x10000000
|
||||
sb a0, (a1) # 'h'
|
||||
|
||||
addi a0, x0, 0x65
|
||||
sb a0, (a1) # 'e'
|
||||
|
||||
addi a0, x0, 0x6C
|
||||
sb a0, (a1) # 'l'
|
||||
|
||||
addi a0, x0, 0x6C
|
||||
sb a0, (a1) # 'l'
|
||||
|
||||
addi a0, x0, 0x6F
|
||||
sb a0, (a1) # 'o'
|
||||
ret
|
||||
|
||||
hello:
|
||||
# Write the string "Hello, World!\n" to stdout
|
||||
la a0, msg # Load the address of the string into a0
|
||||
li a7, 4 # syscall number for write
|
||||
li a1, 13 # Length of the string
|
||||
li a2, 1 # File descriptor: stdout
|
||||
ecall # Make the system call to write
|
||||
ret # Return from the function
|
||||
|
||||
# To avoid the program from exiting
|
||||
loop: j loop
|
||||
|
||||
# Exit the program
|
||||
li a7, 10 # syscall number for exit
|
||||
ecall # Make the system call to exit
|
||||
|
|
Loading…
Reference in a new issue