Fall ’20 CIS 314 Assignment 5 – 100/100 points – Due Friday, 11/13, 11:59 PM Please submit individual source files for coding exercises (see naming conventions below) and a single solution document fo

Fall ’20 CIS 314 Assignment 5 – 10 0/100 points – Due Friday , 11 /13 , 11:59 PM Please submit individual source files for coding exercises (see naming conventions below) and a single solution document for non -coding exercises (.txt or .pdf only ). Your code and answers need to be documented to the point that the graders can understand your thought process. Full credit will not be awarded if sufficient work is not shown. 1. [6 0] Write a Y86 -64 program that sorts an array of longs . • (10) Allocate a hardcoded input array similar to that used by asum.ys (linked on course examples page) with at least 10 entries. • (20) Implement a swap procedure equivalent to the following C code: void swap( long *xp, long *yp) { long t0 = *xp; long t1 = *yp; *xp = t1; *yp = t0; } • (20) Implement a sort procedure that takes a pointer to an array and length of the array as arguments and sorts the input array using Selection Sort. Your sort procedure should call your swap procedure (using a call instruction) to perform the swaps and it should sort the array in place – there’s no need to allocate additional memory for an output array. • (10) I mplement a main procedure to call your sort procedure (using a call instruction) , passing the input array a nd array length as arguments. I recommend using the “Y86 -64 simulator” (linked on the course Links page) as a programming environment . Use the Y86 -64 examples from class and the textbook as a guide. Hint: Y86 -64 doesn’t have leaq or mult (or shifts, for that matter) , so calculating a pointer from a base address and index is kinda a pain… Instead, consider using pointer arithmetic like we did back in assignment 4! Hint: Y86 -64 doesn’t have cmpq or testq, either; subq will do the trick, but be careful with the side effects! Name your source file 5-1.ys. 2. [20] Draw a circuit (using AND, OR, and/or NOT gates) with inputs A, B, C, and D and one output such that the output is on only if A is on and B is off or C is on and D is off (e.g., ( A && !B) || ( C && ! D)). See Figure 4.10 for an example. Include your an swer in your solutions document ( a picture of a drawing is sufficient ). Label your inputs! 3. [20 ] In our example Y86 -64 programs, such as the Sum function shown in Figure 4.6, we enco unter many cases (e.g., lines 2 and 10 ) in which we want to add a constant value to a register. Thi s requires first using an irmovq instruction to set a register t o the constant, and then an a ddq instruction to add this value to the destination register. Using Figure 4.18 as a guide, draw a diagram expressing how the existing Y86 -64 architecture could implement a new iaddq ins truction to accomplish this functionality . Write your answer in your solutions document. Zip the source files and solution document (if applicable), name the .zip file Assignment5.zip (e.g., EricWillsAssignment5 .zip), and upload the .zip file to Canvas (see Assignments section for submission link).