[an error occurred while processing this directive]
CIS 110

Recitation 7 Exercises (24/25 October 2012)

This week's exercises will likely take longer than usual. It's worth putting some time into them if possible, because they are directly relevant to homework 5.

Question 1 Write a program that takes two numbers stored in mem[01] and mem[02] (memory addresses 0x01 and 0x02), adds them together, and stores the result in mem[03]. This should require 4 TOY instructions.

Question 2 Write a TOY program that computes c = a % b using repeatedly subtracting b from a until the result is smaller than b. Assume that a is stored in register R[A], b is stored in register R[B], and c in R[C]. Your program will be very similar to the multiplication program below (a simplified version of what we covered in lecture on Friday). Hint: Use the "branch positive" instruction.

10: 7C00   R[C] <- 0000                  c = 0;
11: CB15   if (R[B] == 0) goto 20        while (b != 0) {
12: 1CCA   R[C] <- R[C] + R[A]               c += a;
13: 2BB1   R[B] <- R[B] - R[1]               b--;
14: C010   goto 10                       }
15: 0000   halt

Question 3 Write a TOY program that repeatedly reads from stdin into R[A] until it reads the value OxFFFF. Recall that to read from stdin, you simply read from memory location OxFF. This will be the basis for the outer loop of your TOY Encryption program.

Question 4 Write a register map for your TOY Encryption program. Your map should list every variable and constant value your program will need, and which register you will store it in. Even if you change your mind or discover your forgot something later, figuring out as detailed a register map as possible in advance will help you develop your program.