# Lab 5
Name: M Akash
Roll No.: CS22B037
---
## Question 1
**Code:**
```assembly=
.data
.word 1 2 3 4 5 6 7 8 9 10 11 12
base: .word 0x10000000
str1: .string "Initial Array is \n"
str2: .string "Modified Array is \n"
str3: .string " "
str4: .string "\n"
.text
li t1,12 # int i=12
li t2,0 # i=0
la a0 str1
li a7 4
ecall
li s1, 0x10000000
Print1:
beq t2,t1,main
lw t5,0(s1)
add a0,t5,x0
li a7 1
ecall
la a0 str3
li a7 4
ecall
addi t2,t2,1
addi s1,s1,4
j Print1 # prints Array
main:
lw s0,base
addi a0,x0,3
addi t0,x0,0 #i=0
addi t1,x0,3 #i=3
loop: # loop unrolling by factor of 4
beq t0,t1,end
lw t2,0(s0)
add t2,t2,a0
sw t2,0(s0) # 1
lw t3,4(s0)
add t3,t3,a0
sw t3,4(s0) # 2
lw t4,8(s0)
add t4,t4,a0
sw t4,8(s0) # 3
lw t5,12(s0)
add t5,t5,a0
sw t5,12(s0) # 4
addi s0,s0,16
addi t0,t0,1
j loop
end:
la a0 str4
li a7 4
ecall
la a0 str2
li a7 4
ecall
li s1, 0x10000000
li t1,12
li t2,0
Print2:
beq t2,t1,exit
lw t5,0(s1)
add a0,t5,x0
li a7 1
ecall
la a0 str3
li a7 4
ecall
addi t2,t2,1
addi s1,s1,4
j Print2 # prints Array
exit:
li a7,10
```
**Output:**
Initial Array is
1 2 3 4 5 6 7 8 9 10 11 12
Modified Array is
4 5 6 7 8 9 10 11 12 13 14 15
---
## Question 2
**Code:**
```assembly=
.data
.word 1 2 3 4 5 6 7 8 9 10
base: .word 0x10000000
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
str1: .string "Linked List is \n"
str2: .string "Reverse Linked List is \n"
str3: .string " "
str4: .string "\n"
.text # init the list
lw x1,base
addi t0,x0,0 #i=0
addi t1,x0,10 #i=10
la s0,node1
init:
beq t0,t1,main1
lw a0,0(x1)
addi x1,x1,4
sw a0,0(s0)
addi s0,s0,8
addi t0,t0,1
j init
main1: # link the nodes
addi t0,x0,1 # run only 9 times
la s0,node2
link:
beq t0,t1,print1
add a0,x0,s0
sw a0,-4(s0)
addi s0,s0,8
addi t0,t0,1
j link
print1: # prints LL
la a0 str1
li a7 4
ecall
addi t0,x0,0 #i=0
addi t1,x0,10 #i=10
la s0,node1
loop1:
beq t0,t1,main2
lw a0,0(s0)
li a7 1
ecall
la a0 str3
li a7 4
ecall
lw s0,4(s0)
addi t0,t0,1
j loop1
main2: # reverse the LL
addi t0,x0,1
la s0,node9
reverse:
beq t0,t1,terminate
add a0,x0,s0
sw a0,12(s0)
addi s0,s0,-8
addi t0,t0,1
j reverse
terminate:
add a0,x0,x0
sw a0,12(s0) # set last node pointer=0
print2: # prints reverse LL
la a0 str4
li a7 4
ecall
la a0 str2
li a7 4
ecall
addi t0,x0,0 #i=0
addi t1,x0,10 #i=10
la s0,node10
loop2:
beq t0,t1,end
lw a0,0(s0)
li a7 1
ecall
la a0 str3
li a7 4
ecall
lw s0,4(s0)
addi t0,t0,1
j loop2
end:
li a7,10
```
**Output:**
Linked List is
1 2 3 4 5 6 7 8 9 10
Reverse Linked List is
10 9 8 7 6 5 4 3 2 1
---
## Question 3
**Code:**
```assembly=
.data
.word 1 2 3 4 5 6 7 8 9 10 11
base: .word 0x10000000
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
str1: .string "Linked List is \n"
str2: .string "New Linked List is \n"
str3: .string " "
str4: .string "\n"
.text # init the list
lw x1,base
addi t0,x0,0 #i=0
addi t1,x0,10 #i=10
la s0,node1
init:
beq t0,t1,main1
lw a0,0(x1)
addi x1,x1,4
sw a0,0(s0)
addi s0,s0,8
addi t0,t0,1
j init
main1: # link the nodes
addi t0,x0,1 # run only 9 times
la s0,node2
link:
beq t0,t1,print1
add a0,x0,s0
sw a0,-4(s0)
addi s0,s0,8
addi t0,t0,1
j link
print1: # prints linked list
la a0 str1
li a7 4
ecall
addi t0,x0,0 #i=0
addi t1,x0,10 #i=10
la s0,node1
loop1:
beq t0,t1,main2
lw a0,0(s0)
li a7 1
ecall
la a0 str3
li a7 4
ecall
lw s0,4(s0)
addi t0,t0,1
j loop1
main2: # adds new node
lw x1,base
la s0,node10
addi a0,s0,8
sw a0,4(s0)
lw t0,40(x1)
sw t0,0(a0)
#sw t0,8(s0)
print2: # prints new linked list
la a0 str4
li a7 4
ecall
la a0 str2
li a7 4
ecall
addi t0,x0,0 #i=0
addi t1,x0,11 #i=10
la s0,node1
loop2:
beq t0,t1,end
lw a0,0(s0)
li a7 1
ecall
la a0 str3
li a7 4
ecall
lw s0,4(s0)
addi t0,t0,1
j loop2
end:
li a7,10
```
**Output:**
Linked List is
1 2 3 4 5 6 7 8 9 10
New Linked List is
1 2 3 4 5 6 7 8 9 10 11