- Friday, April 19 (11:59pm)
Homework must be submitted via email.
Patterson & Hennessy. Section 4.1-4.5; Appendix Section A.9
- Consider the truth table for a 1-bit adder on Slide 13 of the April 10 lecture. In the manner of the CarryOut formula (Slide 14), produce a logical formula (composed of ANDs and ORs) for the 1-but Sum.
Following the procedure described in Appendix B (and as depicted of p.234 of the textbook) we can express SUM as the OR of ADDs, where each ADD is read directly off of the lines in the truth table where SUM is 1.
Doing so (and using ~ to represent NOT), we get:
SUM = (~A · ~B · CarryIn) + (~A · B · ~CarryIn) + (A · ~B · ~CarryIn) + (A · B · CarryIn) Unfortunately, we cannot reduce this expression, as we did with CarryOut.
- Below is the subprogram from the midterm, adapted to run inside spim, the MIPS simulator. Save it to a file on Elvis, and run it inside the simulator.
- Change the program so that instead of turning its input (the contents of memory addressed by register $a0) into all upper-case, it turns it into all lower-case.
- Email me the modified program.
.data str: .asciiz "Hello" orig: .asciiz "\nThe input: " now: .asciiz "\nThe output: " v0: .asciiz "\n $v0 = " end: .asciiz "\n\n" .text START: add $v0, $zero, $zero LOOP: lb $t0, 0($a0) beq $t0, $zero, DONE addi $sp, $sp, -12 # allocate space on stack sw $a0, 0($sp) sw $ra, 4($sp) sw $v0, 8($sp) add $a0, $t0, $zero jal DOIT lw $a0, 0($sp) lw $ra, 4($sp) sb $v0, 0($a0) lw $v0, 8($sp) addi $a0, $a0, 1 addi $v0, $v0, 1 addi $sp, $sp, 12 j LOOP DONE: jr $ra DOIT: add $v0, $a0, $zero slti $t2, $v0, 97 bne $t2, $zero, SKIP slti $t2, $v0, 123 beq $t2, $zero, SKIP addi $v0, $v0, -32 SKIP: jr $ra __start: addi $v0, $zero, 4 la $a0, orig syscall li $v0, 4 la $a0, str syscall la $a0, str jal START move $t0, $v0 # save return value li $v0, 4 la $a0, now syscall li $v0, 4 la $a0, str syscall li $v0, 4 la $a0, v0 syscall li $v0, 1 move $a0, $t0 syscall li $v0, 4 la $a0, end syscallThis change can be achieved solely by modifying the DOIT subroutine (which in the original program return the upper-case version of its argument (a character), if it represented a lower-case letter.
DOIT: add $v0, $a0, $zero slti $t2, $v0, 65 # less than ASCII 65, not a letter bne $t2, $zero, SKIP slti $t2, $v0, 91 # greater than ASCII 91, not uppercase beq $t2, $zero, SKIP addi $v0, $v0, 32 # convert to lower-case by adding 32 SKIP: jr $ra