---
# System prepended metadata

title: Lab 5_CS22B036

---

# Lab 5
Name: M V Sonith
Roll No.: CS22B036

---
# Question 1
**Code with out unrolling:**
```assembly=
 .data
array: .word 1 2 3 4 5 6 7 8 9 10 11
base: .word 0x10000000
.text
addi x20 x0 3
lw x24 base
addi x26 x24 -4
lw x21 base
addi x21 x21 40
addi x22 x0 0
loop:
    beq x21 x26 exit
    lw x25 0(x21)
    add x25 x25 x20
    sw x25 0(x21)
    addi x21 x21 -4
    j loop
exit:
    li a7 10
    ecall

```
**observation**
![Screenshot from 2024-02-27 15-56-21](https://hackmd.io/_uploads/SyyfK4snp.png)


**Code with unrolling:**
```assembly=
.data
array: .word 1 2 3 4 5 6 7 8 9 10 11
base: .word 0x10000000
.text
addi x20 x0 3
lw x24 base
addi x26 x24 -8
lw x21 base
addi x21 x21 40
addi x22 x0 0
loop:
    beq x21 x26 exit
    lw x25 0(x21)
    add x25 x25 x20
    sw x25 0(x21)
    lw x25 -4(x21)
    add x25 x25 x20
    sw x25 -4(x21)
    lw x25 -8(x21)
    add x25 x25 x20
    sw x25 -8(x21)
    lw x25 -12(x21)
    add x25 x25 x20
    sw x25 -12(x21)
    addi x21 x21 -16
    j loop
exit:
    li a7 10
    ecall
```
**observation**
![Screenshot from 2024-02-27 15-52-51](https://hackmd.io/_uploads/B1vNdNihT.png)

---
# Question2
**Code:**
```assembly=
.data
 node1: .word 0 # value
 .word 0 # pointer to next node
node2: .word 0 
.word 0
 node3: .word 0 
 .word 0
  node4: .word 0 
 .word 0
  node5: .word 0 
 .word 0 
  node6: .word 0 
 .word 0
  node7: .word 0 
 .word 0 
  node8: .word 0 
 .word 0
  node9: .word 0 
 .word 0
  node10: .word 0 
 .word 0

.text
 # link the nodes
 la x20 , node1
 la x21 , node2
 la x22 , node3
 la x23 , node4 
 la x24 , node5
 la x25 , node6
 la x26 , node7 
 la x27 , node8
 la x28 , node9
 la x29 , node10
 addi x4 x0 1
 sw x4  ,  0(x20)
 sw x21 , 4( x20 )
 addi x4 x4 1
 sw x4  ,  0(x21)
 sw x22 , 4( x21 )
  addi x4 x4 1
 sw x4  ,  0(x22)
 sw x23 , 4( x22 )
  addi x4 x4 1
 sw x4  ,  0(x23)
 sw x24 , 4( x23 )
  addi x4 x4 1
 sw x4  ,  0(x24)
 sw x25 , 4( x24 )
  addi x4 x4 1
 sw x4  ,  0(x25)
 sw x26 , 4( x25 )
  addi x4 x4 1
 sw x4  ,  0(x26)
 sw x27 , 4( x26 )
  addi x4 x4 1
 sw x4  ,  0(x27)
 sw x28 , 4( x27 ) 
  addi x4 x4 1
 sw x4  ,  0(x28) 
 sw x29 , 4( x28 )
  addi x4 x4 1
 sw x4  ,  0(x29)

addi x15 x0 0 #previous pointer
la x16 node1 #current pointer
lw x18 4(x16) #next pointer
loop:
    beq x16 x0 exit #if current ==NULL  end loop
    sw x15 4(x16) #cur->nxt = pre
    addi x15 x16 0 #pre = cur 
    addi x16 x18 0 #cur = nxt
    lw x18 4(x18) #nxt = nxt ->next
    j loop
exit:
    addi x10 x15 0 # address of new Head node
    li a7 10
    ecall
```
**Output:**
**Before reversing list and and after intialiazation of linked list**
![Screenshot from 2024-02-27 17-01-16](https://hackmd.io/_uploads/Syk5KHo26.png)


**After reversing Linked list**
![Screenshot from 2024-02-27 17-10-23](https://hackmd.io/_uploads/r18rcBsnT.png)

---
# Question3
**Code:**
```assembly=
.data
 node1: .word 0 # value
 .word 0 # pointer to next node
node2: .word 0 
.word 0
 node3: .word 0 
 .word 0
  node4: .word 0 
 .word 0
  node5: .word 0 
 .word 0 
  node6: .word 0 
 .word 0
  node7: .word 0 
 .word 0 
  node8: .word 0 
 .word 0
  node9: .word 0 
 .word 0
  node10: .word 0 
 .word 0

.text
 # link the nodes
 la x20 , node1
 la x21 , node2
 la x22 , node3
 la x23 , node4 
 la x24 , node5
 la x25 , node6
 la x26 , node7 
 la x27 , node8
 la x28 , node9
 la x29 , node10
 addi x4 x0 1
 sw x4  ,  0(x20)
 sw x21 , 4( x20 )
 addi x4 x4 1
 sw x4  ,  0(x21)
 sw x22 , 4( x21 )
  addi x4 x4 1
 sw x4  ,  0(x22)
 sw x23 , 4( x22 )
  addi x4 x4 1
 sw x4  ,  0(x23)
 sw x24 , 4( x23 )
  addi x4 x4 1
 sw x4  ,  0(x24)
 sw x25 , 4( x24 )
  addi x4 x4 1
 sw x4  ,  0(x25)
 sw x26 , 4( x25 )
  addi x4 x4 1
 sw x4  ,  0(x26)
 sw x27 , 4( x26 )
  addi x4 x4 1
 sw x4  ,  0(x27)
 sw x28 , 4( x27 ) 
  addi x4 x4 1
 sw x4  ,  0(x28) 
 sw x29 , 4( x28 )
  addi x4 x4 1
 sw x4  ,  0(x29)


la x16 node1 #current pointer

loop:
    lw x18 4(x16) # cur->nxt
    beq x18 x0 add_node # checking curr->nxt ==NULL
    add x16 x18 x0 # cur = cur->nxt;
    j loop
    
    
add_node:
    addi x19 x0 11
    addi x9 x16 8 # allocating in address x16 +8
    sw x19 0(x9) # new node val =11
    sw x0 4(x9) # new node->nxt = NULL
    sw x9 4(x16) # curr->nxt = new node
    li a7 10
    ecall
    
```
**Output:**
**Before adding new node**
![Screenshot from 2024-02-27 17-27-21](https://hackmd.io/_uploads/SyOkJ8i36.png)
**After adding new node**
![Screenshot from 2024-02-27 17-31-59](https://hackmd.io/_uploads/rkk8y8inp.png)

---










