Initial
This commit is contained in:
		
						commit
						bd1fe4b2a8
					
				
					 3 changed files with 63 additions and 0 deletions
				
			
		
							
								
								
									
										16
									
								
								hello.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								hello.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | .section .text | ||||||
|  | .globl _hello
 | ||||||
|  | 
 | ||||||
|  | _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 | ||||||
|  | 
 | ||||||
|  | .section .data | ||||||
|  | msg: | ||||||
|  |     .ascii "Hello, World!\n" | ||||||
							
								
								
									
										12
									
								
								main.s
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								main.s
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | .section .text | ||||||
|  | .globl _start
 | ||||||
|  | 
 | ||||||
|  | _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 | ||||||
|  | 
 | ||||||
|  |     # Exit the program | ||||||
|  |     li a7, 10               # syscall number for exit | ||||||
|  |     ecall                   # Make the system call to exit | ||||||
							
								
								
									
										35
									
								
								makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | ||||||
|  | # Compiler and assembler
 | ||||||
|  | CC = riscv64-linux-gnu-gcc | ||||||
|  | AS = riscv64-linux-gnu-as | ||||||
|  | LD = riscv64-linux-gnu-ld | ||||||
|  | 
 | ||||||
|  | # Flags for compiler and assembler
 | ||||||
|  | CFLAGS = -static -nostartfiles -nostdlib | ||||||
|  | ASFLAGS = | ||||||
|  | 
 | ||||||
|  | # QEMU command and flags
 | ||||||
|  | QEMU = qemu-riscv64-static | ||||||
|  | QEMU_FLAGS = | ||||||
|  | 
 | ||||||
|  | # Assembly source files
 | ||||||
|  | AS_SRCS := $(wildcard *.s) | ||||||
|  | 
 | ||||||
|  | # Object files
 | ||||||
|  | OBJS := $(AS_SRCS:.s=.o) | ||||||
|  | 
 | ||||||
|  | # Default target
 | ||||||
|  | all: $(OBJS) | ||||||
|  | 	$(LD) -o program $(OBJS)	 | ||||||
|  | # $(CC) $(CFLAGS) -o program $(OBJS)
 | ||||||
|  | 
 | ||||||
|  | # Compile assembly sources
 | ||||||
|  | %.o: %.s | ||||||
|  | 	$(AS) $(ASFLAGS) -o $@ $< | ||||||
|  | 
 | ||||||
|  | # Run the program in QEMU
 | ||||||
|  | run: all | ||||||
|  | 	$(QEMU) $(QEMU_FLAGS) ./program | ||||||
|  | 
 | ||||||
|  | # Clean up
 | ||||||
|  | clean: | ||||||
|  | 	rm -f program $(OBJS) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Imbus
						Imbus