S032 top

This preview shows page 34 - 42 out of 246 pages.

Translation of a “switch statement”  Pseudocode Description:   $s0 = 32;  top: cout << “Input a value from 1 to 3” cin >> $v0 switch($v0) { case(1): { $s0 = $s0 << 1; break} case(2): { $s0 = $s0 << 2; break} case(3): { $s0 = $s0 << 3; break} default:    goto top ;  }   cout <<$s0
    .data .align 2 jumptable: .word top, case1, case2, case3 prompt: .asciiz  "\n\n Input a value N from 1 to 3:  " result: .asciiz  " The value 32 shifted left by N bits is now = " .text main: li $s0, 32 top: li $v0, 4 # Code to print a string la $a0, prompt syscall li $v0, 5 # Code to read an integer syscall bltz $v0, exit beqz $v0, top # Default for less than one li $t3, 3 bgt $v0, $t3, top # Default for greater than 3 la $a1, jumptable sll $t0, $v0, 2 # Create a word offset add $t1, $a1, $t0 # Form a pointer into jumptable lw $t2, 0($t1) # Load an address from jumptable jr $t2 # Go to specific case “switch statement” continued
    case1: sll $s0, $s0, 1 b done case2: sll $s0, $s0, 2 b done case3: sll $s0, $s0, 3 done: li $v0, 4 # Code to print a string la $a0, result syscall li $v0, 1 # Code to print a value move $a0, $s0 syscall bgez $s1, main exit: li $v0, 10 syscall “switch statement”  continued
    Exercises – Chapter 2   2.1 Using Appendix A, translate each of the following pseudocode expressions into MIPS assembly language: (a) t3 = t4 + t5 – t6; (b) s3 = t2 / (s1 – 54321); (c) sp = sp – 16; (d) cout << t3; (e) cin >> t0; (f) a0 = &array; (g) t8 = Mem(a0); (h) Mem(a0+ 16) = 32768; (i) cout << “Hello World”; (j) If (t0 < 0) then t7 = 0 – t0 else t7 = t0; (k) while ( t0 != 0) { s1 = s1 + t0; t2 = t2 + 4; t0 = Mem(t2) }; (l) for ( t1 = 99; t1 > 0; t1=t1 -1) v0 = v0 + t1;
    Solutions to Chap 2 Exercises label    op-code Rd,   Rs,   Rt E1a: add  $t3, $t4, $t5 sub $t3, $t3, $t6 E1b: addi $s3, $s1,  54321 div $t2, $s3 mflo $s3 E1c: addi $sp, $sp, -16 E1d: move $a0, $t3 li $v0, 1 syscall E1e: li $v0, 5 syscall move $t0, $v0
    Solutions to Chap 2 Exercises label    op-code Rd,   Rs,   Rt E1f: la  $t0, array lw $a0, 0($t0) E1g: E1h: E1i: E1j:
    Exercises – Chapter 2 (m) t0 = 2147483647 - 2147483648; (n) s0 = -1 * s0; (o) s1 = s1 * a0; (p) s2 = srt(s0 2 + 56) / a3; (q) s3 = s1 - s2 / s3; (r) s4 = s4 * 8; (s) s5 = * s5;     2.2 Analyze the assembly language code that you developed for each of the  above pseudocode expressions and calculate the number of clock cycles  required to fetch and execute the code corresponding to each expression.  (Assume it  takes one clock cycle to fetch and execute every instruction  except multiply and  divide, which require 32 clock cycles and 38 clock  cycles respectively.)    2.3 Show how the following expression can be evaluated in MIPS assembly  language, without modifying the contents of the “s” registers: $t0 = ( $s1  -   $s0  / $s2) * $s4 ; 
    Exercises Continued

  • Left Quote Icon

    Student Picture

  • Left Quote Icon

    Student Picture

  • Left Quote Icon

    Student Picture