# Lab 5 Name: Harshit garg Roll No.: CS22B024 --- ## Question 1 **Code** ```assembly= .data arr: .word 10 20 30 40 50 60 70 80 90 100 110 120 .text addi x1 x0 3 addi x2 x0 12 la x16 arr loop: lw x5 44(x16) add x5 x5 x1 sw x5 44(x16) addi x2 x2 -1 lw x5 40(x16) add x5 x5 x1 sw x5 40(x16) addi x2 x2 -1 lw x5 36(x16) add x5 x5 x1 sw x5 36(x16) addi x2 x2 -1 lw x5 32(x16) add x5 x5 x1 sw x5 32(x16) addi x2 x2 -1 addi x16 x16 -16 bne x2 x0 loop exit: la x16 arr addi x2 x0 0 addi x7 x0 12 print_loop: beq x2 x7 print_exit lw x5 0(x16) addi a0 x5 0 li a7 1 ecall addi a0 x0 32 li a7 11 ecall addi x16 x16 4 addi x2 x2 1 j print_loop print_exit: li a7, 10 ecall ``` ***Output*** 13 23 33 43 53 63 73 83 93 103 113 123 --- ## Question 2 **Code** ```assembly= .data node1: .word 10 .word 0 node2: .word 20 .word 0 node3: .word 30 .word 0 node4: .word 40 .word 0 node5: .word 50 .word 0 node6: .word 60 .word 0 node7: .word 70 .word 0 node8: .word 80 .word 0 node9: .word 90 .word 0 node10: .word 100 .word 0 .text la x3 , node1 la x4 , node2 la x5 , node3 la x6 , node4 la x7 , node5 la x8 , node6 la x9 , node7 la x10 , node8 la x11 , node9 la x12 ,node10 sw x4 , 4(x3) sw x5 , 4(x4) sw x6 , 4(x5) sw x7 , 4(x6) sw x8 , 4(x7) sw x9 , 4(x8) sw x10 ,4(x9) sw x11 ,4(x10) sw x12 ,4(x11) addi x13 x13 1 addi x14 x14 20 addi x18 x0 5 print1: .data str:.string "Before reverse:" .text la a0 str li a7 4 ecall printloop1: beqz x3 printnewline lw x26, 0(x3) add a0, x0, x26 li a7, 1 ecall lw x3 4(x3) addi x25, x25, 1 addi a0 x0 32 li a7 11 ecall j printloop1 printnewline: .data str2:.string "\n" .text la a0 str2 li a7 4 ecall return: la x3 node1 la x27 node1 reverse: beqz x27 return2 lw t5 4(x27) sw t4 4(x27) mv t4 x27 mv x27 t5 addi x23 x23 1 j reverse return2: la x3 node1 la x27 node10 addi x25 x0 0 print2: .data str1:.string "After reverse:" .text la a0 str1 li a7 4 ecall printloop2: beqz x27 exit lw x26, 0(x27) add a0, x0, x26 li a7, 1 ecall lw x27 4(x27) addi x25, x25, 1 addi a0 x0 32 li a7 11 ecall j printloop2 exit: addi x0 x0 0 ``` ***Output*** Before reverse : 10 20 30 40 50 60 70 80 90 100 After reverse : 100 90 80 70 60 50 40 30 20 10 ***Explanation :*** In the context of RISC-V assembly language, a linked list typically refers to a data structure where each element, or node, contains a reference or pointer to the next element in the sequence. This structure allows for dynamic memory allocation and efficient insertion and deletion operations. In RISC-V assembly, manipulating linked lists involves managing memory addresses and pointers to navigate through the list, often using load and store instructions to access data and update pointers accordingly. Efficient traversal and manipulation of linked lists are crucial for many algorithms and data processing tasks in RISC-V assembly programming. --- ## Question 3 **Code** ```assembly= .equ NODE_SIZE, 8 .equ NODE_VALUE_OFFSET, 0 .equ NODE_NEXT_OFFSET, 4 allocate_node: li a0, NODE_SIZE beqz a0, allocation_failed sw a1, NODE_VALUE_OFFSET(a0) li t0, 0 sw t0, NODE_NEXT_OFFSET(a0) ret allocation_failed: ret ``` ---