2026-05-29 10:19:13 +02:00

39 lines
2.8 KiB
ArmAsm

// *********************************************************************************************
// Description : Assembly instructions for fibonacci program
// Project Version : v1.0
// Project : [BCDC] Microtec Academy Course: Building a RISC-V CPU with SystemVerilog
// -----
// Copyright (c) : 2025 Fraunhofer IIS, Department IDS
// Created : 15.Oct.2025 by Fuad Mammadzada
// Last Modified : 21.Oct.2025 by Fuad Mammadzada
// -----
// HISTORY : Date By Comments
// ----------- --------- -------------------------------------------------
// *********************************************************************************************
# Instruction # Hex code # MemAddr(PC) # Corresponding C code & explanation
_start:
lui sp, 2 # 0x00002137 # 0x00000000 # Initialize stack pointer value to size of memory (0x00002000)
addi sp, sp -4 # 0xFFC10113 # 0x00000004 # Subtract stack pointer value by 4 to point to the last memory address (0x00001FFC)
jal x0, main # 0x0080006F # 0x00000008 # Jump to main without saving the return address
halt:
jal x0, halt # 0x0000006F # 0x0000000C # Halt the program (infinite loop)
main: # -------- # fibonacci.c:17: int main() {
addi sp, sp, -80 # 0xFB010113 # 0x00000010 # fibonacci.c:20: int fib_number[20]; (allocate 20*4B from the stack)
addi a0, x0, 1 # 0x00100513 # 0x00000014 # a0 = 0 + 1 (this is later used in fibonacci.c:22)
addi a1, sp, 8 # 0x00810593 # 0x00000018 # calculate and save the address of fib_number[2]
sw x0, 0(sp) # 0x00012023 # 0x0000001C # fibonacci.c:21: fib_number[0] = x0 = 0
sw a0, 4(sp) # 0x00A12223 # 0x00000020 # fibonacci.c:22: fib_number[1] = a0 = 1
addi a2, sp, 40 # 0x02810613 # 0x00000024 # fibonacci.c:24: calculate the last array index for the loop condition (since n=10, n*4B)
.for_loop:
lw a3, -8(a1) # 0xFF85A683 # 0x00000028 # fibonacci.c:25: a3 = fib_number[i-2]
add a0, a3, a0 # 0x00A68533 # 0x0000002C # fibonacci.c:25: a0 = fib_number[i-1] + fib_number[i-2]
sw a0, 0(a1) # 0x00A5A023 # 0x00000030 # fibonacci.c:25: fib_number[i] = a0
addi a1, a1, 4 # 0x00458593 # 0x00000034 # fibonacci.c:24: i++
bne a1, a2, .for_loop # 0xFEC598E3 # 0x00000038 # fibonacci.c:24: loop back if i != n
jal x0, halt # 0xFD1FF06F # 0x0000003C # fibonacci.c:28: asm("j halt");