From 0e259f27bdd36fd56ae7cb7b6f3be02451beed27 Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Fri, 5 Apr 2024 17:02:26 +0200 Subject: [PATCH] Trying to make stdout work --- main.s | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 70 insertions(+), 9 deletions(-) diff --git a/main.s b/main.s index faa2533..70bdd83 100644 --- a/main.s +++ b/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