# Lab 4 Name:K.V.Sai Maneesh Roll No.:cs22b030 --- ## Question 1 ```assembly= .data array:.word 3,5,8,7,1,11,36,28,43,24,15 base:.word 0x10000000 str1:.string " " .text addi x2 x0 10 lw x5 base addi x5 x5 40 addi x4 x0 3 Loop: blt x2 x0 exit add x8 x0 x0 lw x14 0(x5) add x8 x8 x14 add x8 x8 x4 addi x5 x5 -4 addi x2 x2 -1 j print print: add a0 x8 x0 li a7 1 ecall la a0 str1 li a7 4 ecall j Loop exit: la a0 str1 li a7 4 ecall ``` ## Question 2 ```assembly= li x3 0 lw x5 base li x8 3 li x24 0 li x15 1 Loop: beq x12 x2 exit lw x6 0(x5) addi x2 x2 1 addi x5 x5 4 add x7 x0 x6 andi x7 x7 1 bne x7 x0 inc beq x7 x0 reset inc: addi x3 x3 1 beq x3 x8 update j Loop reset: add x3 x0 x0 j Loop exit: bne x3 x15 False li a7 10 ecall update: li x24 1 la a0 true li a7 4 ecall li a7 10 ecall False: la a0 false li a7 4 ecall ``` ## Question 3 ```assembly= .data array: .word 4,2,7,3,5,9,8,1 base: .word 0x10000000 base1: .word 0x30000000 str: .string " " .text li x8,8 lw x15,base lw x16,base1 lw x18,base1 li x4,4 li x2,0 li x3,0 addi x13,x15,16 loop: beq x2,x4,print addi x2,x2,1 lw x10,0(x15) lw x11,0(x13) sw x10,0(x16) addi x16,x16,4 sw x11,0(x16) addi x16,x16,4 addi x15,x15,4 addi x13,x13,4 j loop print: beq x3,x8,exit lw x10,0(x18) li a7,1 mv a0,x10 ecall li a7,4 la a0,str ecall addi x18,x18,4 addi x3,x3,1 j print exit: li a7 10 ecall ``` ## Question 4 ```assembly= .data array:.word 3,4,2,6,3,7,5,3,2 base:.word 0x10000000 str:.string " " .text addi x2 x0 9 lw x5 base addi x3 x0 3 # remove all occurences of 3 in the given array Loop: beq x4 x2 exit lw x6 0(x5) addi x5 x5 4 addi x4 x4 1 bne x6 x3 print j Loop print: li a7 1 addi a0 x6 0 ecall li a7 4 la a0 str ecall j Loop exit: li a7 10 ecall ``` ## Question 5 ```assembly= # a class is initialised with a node and pointer to its next node and data in it #if the head node is empty initialize the head node with new node and append it to the initialized Linked list #while performing traversal if we encounter any NULL node,exit from the traversal # Define the text section .text main: # Initialize the linked list # Load the address of the first element into a register la x10, elem1 # Link the elements together if needed (skipped in this pseudo-code for brevity) # Add a new element to the linked list # Load the address of the new element into a register la x11, new_elem # Traverse the linked list to find the last element la x12, elem1 traverse_loop: # Load the next pointer of the current element lw x13, 4(x12) # Check if the next pointer is null (end of the list) beq x13, x0, found_last_element # Move to the next element mv x12, x13 # Repeat the loop j traverse_loop found_last_element: # Store the address of the new element in the next pointer of the last element sw x11, 4(x12) # End of the program # (In a real program, you might perform other operations or print the list, etc.) # Exit syscall li a7, 10 # Exit syscall ecall ``` ## Question 6 ```assembly= free: addi sp, sp, -4 # Adjust stack pointer sw ra, 0(sp) # Save return address # Load argument mv a0, a0 # Assuming pointer to be freed is passed in a0 lw ra, 0(sp) # Restore return address addi sp, sp, 4 # Restore stack pointer ret # Return from function ```