1 / 5

CS232 Exam 1 September 29, 2004

CS232 Exam 1 September 29, 2004. Name:  This exam has 5 pages, including this cover.  There are three questions, worth a total of 100 points.  The last page is a summary of the MIPS instruction set, which you may remove for your convenience.

pfinn
Download Presentation

CS232 Exam 1 September 29, 2004

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS232 Exam 1September 29, 2004 Name: This exam has 5 pages, including this cover.  There are three questions, worth a total of 100 points.  The last page is a summary of the MIPS instruction set, which you may remove for your convenience. No other written references or calculators are allowed.  Write clearly and show your work. State any assumptions you make. You have 50 minutes. Budget your time, and good luck! 1

  2. Question 1: Understanding MIPS programs (40 points) • enchilada: li $v0, 0 • li $t0, 0 • li $t1, 0 • mole: bge $t1, $a1, tapas • mul $t2, $t1, 4 • add $t2, $t2, $a0 • lw $t3, 0($t2) • ble $t3, $t0, queso • move $v0, $t1 • move $t0, $t3 • queso: add $t1, $t1, 1 • j mole • tapas: jr $ra • Part (a) • Translate the function enchilada above into a high-level language like C or Java. You should include a header that lists the types of any arguments and return values. Also, your code should be as concise as possible, without any gotos or pointer arithmetic. We will not deduct points for syntax errors unless they are significant enough to alter the meaning of your code. (30 points) • Part (b) • Describe briefly, in English, what this function does. (10 points) 2

  3. Question 2: Write a MIPS function (45 points) • Here is a function random_anagram that takes two arguments (str and len) and has no return value (the string is modified in place); this function generates an anagram of a string by swapping random pairs of characters in the string. Random numbers are generated using the random() function, which you don’t have to write and has the prototype as shown on the right. • Translate random_anagram into a MIPS assembly language function. Use the rem pseudoinstruction for the mod (%) operator. You will not be graded on the efficiency of your code, but you must follow all MIPS conventions. Comment your code!!! 3

  4. Question 3: Concepts (15 points) • Write a short answer to the following questions. For full credit, answers should not be longer than two sentences. • Part a) What is abstraction? How does it relate to instruction set architectures (ISAs)? (5 points) • Part b) In section, we saw code like the following: • li $a0, 1 • mtc1 $a0, $f1 • cvt.s.w $f1, $f1 • What does this code do, and, specifically, what role does the third instruction play? (5 points) • Part c) What advantages does using interrupts have over polling? (5 points) 4

  5. MIPS instructions These are some of the most common MIPS instructions and pseudo-instructions, and should be all you need. However, you are free to use any valid MIPS instructions or pseudo-instruction in your programs. • The second source operand of the arithmetic and branch instructions may be a constant. • Register Conventions • The caller is responsible for saving any of the following registers that it needs, before invoking a function. • $t0-$t9 $a0-$a3 $v0-$v1 • The callee is responsible for saving and restoring any of the following registers that it uses. • $s0-$s7 $ra • Pointers in C: • Declarartion: either char *char_ptr -or- char char_array[] for char c • Dereference: c = c_array[i] -or- c =*c_pointer • Take address of: c_pointer = &c 5

More Related