Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Please follow the instructions below: This is the c code i was given int binary_search(int a[], int n, int v) { int rv; if (n

Please follow the instructions below:

image text in transcribed

This is the c code i was given

int binary_search(int a[], int n, int v)

{

int rv;

if (n == 0) { // nothing in the array

rv = -1;

goto f_exit; // return -1

}

int half = n / 2; // integer division

int half_v = a[half];

if (half_v == v) {

rv = half;

}

else if (v

// search the first half, excluding a[half]

rv = binary_search(a, half, v);

}

else { // v > half_v

// search the second half, excluding a[half]

int left = half + 1;

// &a[left] means the address of a[left]

rv = binary_search(&a[left], n - left, v);

if (rv >= 0) {

rv += left;

}

}

f_exit:

return rv;

}

This is the sample code for the RISC-V that I want to be solved:

.data
.align 2
word_array: .word
0, 10, 20, 30, 40, 50, 60, 70, 80, 90,
100, 110, 120, 130, 140, 150, 160, 170, 180, 190,
200, 210, 220, 230, 240, 250, 260, 270, 280, 290,
300, 310, 320, 330, 340, 350, 360, 370, 380, 390,
400, 410, 420, 430, 440, 450, 460, 470, 480, 490,
500, 510, 520, 530, 540, 550, 560, 570, 580, 590,
600, 610, 620, 630, 640, 650, 660, 670, 680, 690,
700, 710, 720, 730, 740, 750, 760, 770, 780, 790,
800, 810, 820, 830, 840, 850, 860, 870, 880, 890,
900, 910, 920, 930, 940, 950, 960, 970, 980, 990
# code
.text
.globl main
main:
addi s0, x0, -1
addi s1, x0, -1
addi s2, x0, -1
addi s3, x0, -1
addi s4, x0, -1
addi s5, x0, -1
# help to check if any saved registers are changed during the function call
# could add more...
# la s1, word_array
lui s1, 0x10010 # starting addr of word_array in standard memory config
addi s2, x0, 100 # 100 elements in the array
# read an integer from the console
addi a7, x0, 5
ecall
addi s3, a0, 0 # keep a copy of v in s3
# call binary search
addi a0, s1, 0
addi a1, s2, 0
addi a2, s3, 0
jal ra, binary_search
# print the return value
jal ra, print_int
# set a breakpoint here and check if any saved register was changed
# exit
exit: addi a7, x0, 10
ecall
# a function that prints an integer, followed by a newline
print_int:
addi a7, x0, 1
ecall
# print newline
addi a7, x0, 11
addi a0, x0, ' '
ecall
jalr x0, ra, 0
#### Do not change lines above
binary_search:
# TODO
In this lab, we write function binary_search in RISC-V. The prototype of the function and an implementation in C is at the end of this page. Translate the C code at the bottom of the page to RISC-V assembly code. The skeleton code is in lab4.s. Function binary_search is located at the end of the file. It is empty in the skeleton code. There are some constraints/tips. 1. To ensure we do not use pseudoinstructions, we turn off the feature in RARs. In Settings, uncheck "Permit extended (pseudo) instructions and formats". 2. Follow the C code closely. Although binary search is simple, it is very easy to make mistakes if you have not written it many times. 3. We keep variable in register s1. Other local variables do not have to be in a saved register. Think about why we need to keep but not other variables, in a saved register. 4. There should be only one exit (one return instruction) in the function. In the C code, we use on purpose. With one exit, we do not have multiple copies of clean up code, e.g., restoring saved registers. 5. There is an IF-ELSEIF-ELSE structure. Write the outline first, without instructions in each branch. Follow the order of branches in C code: IF branch, then the ELSEIF branch, and finally the ELSE branch. It is easier to check the code this way. 6. There is only one LW instruction, for reading , between the code that saves/restores registers. 7. During the execution of the program, examine how and registers are changed and what have been saved on the stack. It helps to understand how funciton and local storage works

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database In Depth Relational Theory For Practitioners

Authors: C.J. Date

1st Edition

0596100124, 978-0596100124

More Books

Students also viewed these Databases questions

Question

Explain the function and purpose of the Job Level Table.

Answered: 1 week ago