# 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