---
# System prepended metadata

title: 'Answer:1'

---

**LAB4**
**NAME:** Satyannarayana banna
**ROLL NO:** CS22B011
---

**Answer:1**
```assembly=
.data
array: .word 1,2,3,4,5,6,7,8,9,10,11
.text
addi x1,x0,3 # intialise s to 3
addi x2,x0,10 # initialise i to 10
la x3,array #loading address of x10 into x3
addi x3,x3,36
addi x4,x0,-1

loop:

    lw x5,0(x3)
    add x5,x5,x1
    sw x5,0(x3)
    addi x2,x2,-1
    addi x3,x3,-4
    bge x2,x4,loop
```
---
**Answer:2**
```assembly=
.data
 array: .word 1,2,3,3,5,6,7,8,9,10,11
 .text
la x1,array
addi x2,x0,11
addi x3,x0,0
addi x7,x0,1
addi x8,x0,0
addi x9,x0,0
addi x10,x0,3

loop:
     lw x4,0(x1)
     andi x5,x4,1
     beq x5,x0,notodd
     addi x3,x3,1
     addi x9,x9,1
     addi x1,x1,4
     bge x3,x10,fi
     bgt x9,x2,exit
     ble x9,x2,loop
 notodd:
     add x3,x0,x0
     addi x9,x9,1
     addi x1,x1,4
     bgt x9,x2,exit
     j loop
 fi: 
     addi x8,x0,1
 exit:
     addi x11,x0,1
```

---

**Answer:3**
```assembly=
.data
a: .word 1,2,3,4,5,6
s1: .string "There is no pair such\n"
s2: .string "Exited\n"
.text
la x1 a
la x2 a
la x11 a
addi x3 x0 6
addi x4 x0 6
addi x14 x0 4
addi x5 x0 0
addi x6 x0 1

psum:
    lw x7 0(x1)
    lw x8 4(x2)
    add x10 x7 x8
    addi x2 x2 4
    addi x6 x6 1
    beq x10 x3 print
    beq x6 x4 sum
    bne x5 x4 psum

sum:
    addi x1 x1 4
    la x2 a
    addi x5 x5 1
    beq x5 x4 print2
    j psum
    
print:
    sub x13 x2 x11
    div x13 x13 x14
    add a0 x13 x0
    li a7 1
    ecall
    li a7 4
    ecall
    sub x13 x1 x11
    div x13 x13 x14
    add a0 x13 x0
    li a7 1
    ecall
    j exit
               
print2:
    la a0 s1
    li a7 4
    ecall    

exit:
    la a0 s2
    li a7 4
    ecall
```
---
**Answer:4**
    Question 20 in leetcode
```assembly=
.data
s1: .string "true"
s2: .string "false"

.text
    .global main

main:
    addi sp, sp, -4
    la a0, s
    jal ra, isValid
    li a7, 10
    ecall

isValid:
    addi sp, sp, -4
    li s0, 0

loop:
    lbu a1, 0(a0)
    beq a1, x0, check_empty
    addi a0, a0, 1

    li t0, '('
    beq a1, t0, push_parenthesis

    li t0, '{'
    beq a1, t0, push_parenthesis

    li t0, '['
    beq a1, t0, push_parenthesis

    li t0, ')'
    beq a1, t0, pop_and_compare

    li t0, '}'
    beq a1, t0, pop_and_compare

    li t0, ']'
    beq a1, t0, pop_and_compare

    j loop

push_parenthesis:
    sb a1, 0(sp)
    addi sp, sp, -1
    j loop

pop_and_compare:
    lbu t0, 0(sp)
    addi sp, sp, 1

    beq a1, t0, loop
    la a0, s2
    jr ra

check_empty:
    beq s0, sp, return_true
    la a0, s2
    jr ra

return_true:
    la a0, s1
    jr ra
```
---

**Answer:6**
```assembly=
.data
    .align 3
    FREE_LIST: .word 0

.text
malloc:
    addi sp, sp, -4
    sw ra, 0(sp)
    
    mv a1, a0
    
    li a7, 214
    ecall
    
    mv a0, a0
    
    lw ra, 0(sp)
    addi sp, sp, 4
    ret

free:
    addi sp, sp, -4
    sw ra, 0(sp)
    
    mv a0, a0
    
    lw ra, 0(sp)
    addi sp, sp, 4
    ret

```
---
**Answer:5**
Linking:

In a linked list, each node stores a value and a reference (address) to the next node.
We start by setting the head variable to the address of the first node.
Each node's address is stored in consecutive memory locations, ensuring that we can easily traverse the list.
Delete:

To delete a node, we adjust the references of the surrounding nodes.
If we want to delete the first node, we simply update the head variable to point to the next node.
If we want to delete any other node, we update the reference in the previous node to skip over the node to be deleted.
Insert:

When inserting a new node, we allocate memory for it and update the references accordingly.
If we want to insert at the beginning of the list, we update the head variable to point to the new node, making it the new first node.
If we want to insert at any other position, we traverse the list to find the desired position. Once found, we update the references of the surrounding nodes to include the new node.
---

