Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

2.4 For the RISC-V assembly instructions below, what is the corresponding C stat

ID: 3878578 • Letter: 2

Question

2.4 For the RISC-V assembly instructions below, what is the corresponding C statement? Assume that the variables f, g, h, i, and j are assigned to registers x5, x6, x7, x28, and x29, respectively. Assume that the base address of the arrays A and B are in registers x10 and x11, respectively. silix30, x5, 3 // x30=f*8 add x30, x10, x30 // x30=&A; [f] s111 x31, x6 , 3 // x31 = g.8 add x31, x11, x31 // x31=&B; [g] ld x5, 0(x30) // f=A[f] addi x12, x30, 8 ld x30, 0 (x12) add x30, x30, x5 sd x30, 0 (x31)

Explanation / Answer


x30 = f<<3; #left shift f by 3 and store in x30
x30 = &A + x30; #add x30 to address of A and store it back
x31 = g<<3; #left shift g by 3 and store in x31
x31 = &B + x31; #add x31 to address of B and store it back
f = *(x30); #read the value at address in register x30 into f
x12 = x30 + 8; #add 8 to value in x30 and store it in x12
x30 = *(x12); #read value in x12 and store in x30
x30 += 5; #increment x30 by 5
*x31 = x30; #store value in x30 at address location in x31

Hope this helps. Do Upvote! :)