Problems should be neatly presented on paper. Hand in, or place under my door.
- 
(10 marks)
Draw the digital circuit that 
takes three input values b1, b2, b3, and computes two
output bits s1, s0, where if s1 s0 were read as 
a binary number, it would represent the sum of the three input
bits.  That is, if the three input bits are all ON, then the 
output bits are s1 s0 = 11.  If any two of the input bits
are ON, and the other one OFF, then the output bits are 
s1 s0 = 10.  
 [Note: the output bit s0 is ON if and only if an odd number of 
the input bits are ON, so you may be inspired by the Lab1 circuitry you
came up with.  It is acceptable to use Logisim to come up with the 
circuitry, but note that you will have to come up with circuits on tests
and exams without Logisim.]
- 
(5 marks)
Give a Karnaugh map for the following boolean function, and give
the "Sum of Products" (i.e., "OR" of "AND" gates)
boolean formula that minimizes the number of gate inputs -- but you 
should not count negated literals (i.e., ¬ x) as a gate input: we
get negated literals "for free".  
wxyz |   R
0000 |   1
0001 |   0
0010 |   1
0011 |   1
0100 |   X
0101 |   X
0110 |   0
0111 |   0
1000 |   X
1001 |   0
1010 |   1
1011 |   0
1100 |   1
1101 |   X
1110 |   1
1111 |   0
 Solution:
 
  yz= 00 01 11 10
wx
00     1  0  1  1
01     X  X  0  0 
11     1  X  0  1
10     X  0  0  1
 The Karnaugh Map consists of blocking off the 1's in the
above table, covering no 0's (but X's can be covered or not 
covered, as convenient), according to proper gate-blocks. (I 
don't have an easy way to do this in html, so I will indicate
each gate separately, below.) One minimal
way to cover the 1's Karnaugh fashion is this way:
Gate = ¬ y ∧ ¬ z:
  yz= 00 01 11 10
wx
00     1  .  .  .
01     1  .  .  . 
11     1  .  .  .
10     1  .  .  .
Gate = ¬ w ∧ ¬ x ∧ y:
  yz= 00 01 11 10
wx
00     .  .  1  1
01     .  .  .  . 
11     .  .  .  .
10     .  .  .  .
Gate = w ∧ ¬ z:
  yz= 00 01 11 10
wx
00     .  .  .  .
01     .  .  .  . 
11     1  .  .  1
10     1  .  .  1
 The equation for R is thus:
R(w,x,y,z) = (¬ y ∧ ¬ z) ∨ (¬ w ∧ ¬ x ∧ y) ∨ (w ∧ ¬ z)
 For full marks, your matrix had to indicate the gates (by showing blocks of
1's and X's, each block representing a gate) that appeared in your 
boolean equation; and it had to be minimal in size.  Minimality 
is attained by selecting the fewest and the largest blocks that cover 
all the 1's but no 0's.  The fewest gate-inputs here is 10 (2 + 3 + 2
for the AND gates, +3 for the overall OR gate).
 
 
- 
(2 marks)
Is
x ∧ ¬ (¬ y ∨ x) is logically equivalent to
x ∧ y?
Prove your claim using a truth table.  If it is not equivalent, 
identify values for x and y that demonstrate the inequivalence.
 
 Solution:
 The truth table is as follows. The columns for 
(x∧y) and 
x∧¬(¬y ∨ x) differ when x=true and y=true (values marked 
below with '*').
Hence we observe that 
(x∧y) and 
x∧¬(¬y ∨ x) 
expressions are not equivalent; that x=true and y=true 
demonstrate their inequivalence.
 
 
x  y  x∧y  ¬y  ¬y∨x  ¬(¬y∨x)  x∧¬(¬y∨x)
0  0   0   1     1       0     0
0  1   0   0     0       1     0
1  0   0   1     1       0     0
1  1   1*  0     1       0     0*
 
 
 
- 
(2 marks)
Convert each of the following base 10 representations to its equivalent binary form:
use the fast method, and show your work.  A solution that does not show intermediate
values for the fast method will receive a mark of zero.
 
 131
 
 Solution:
 
131  65  32  16  8  4  2  1
 1    1   0   0  0  0  0  1
                    ←
number in binary is 10000011.
 
 
- 
(2 marks)
Convert each of the following binary representations to its equivalent base 10 form:
show your intermediate values.
 
 11.01101
 
 Solution:
 11: 1*2=2 +1=3.
 0.01101: You can use positional method for this question, and 
your calculator (1/4 + 1/8 + 1/32), or 
calculate the number as if it had no radix point (1101 
is 1*2+1=3*2=6*2+1=13, then, since you must move the radix point 5 
positions to left, which is the same as dividing by 2^5, end up with
13/32 = 0.40625).  Hence total is 3.40625.
 My preferred method is to read the binary digits 01101 from 
right to left, each time shifting left (dividing by two) and adding 
in the next digit:
1
/2+0=0.5  (0.1)
/2+1=1.25  (1.01)
/2+1=1.625 (1.101)
/2+0=0.8125  (0.1101)
/2+0=0.40625 (0.01101)
 Solution is thus 3.40625
 
 
- 
(2 marks)
Express the following values in binary notation:
show your intermediate values.
 234
 
 Solution:
 
234  117  58  29  14  7  3  1
  0    1   0   1   0  1  1  1
                  ←
  Solution is 11101010
 
 
- 
(2 marks)
Perform the following additions in binary notation:
show the carry bit, when appropriate.
 
 1011.11+10.01
 
 Solution:
 
1011.11
  10.01
_111_1__ ← carry bits
1110.00
 
 
 
- 
(3 marks)
Given the following:
 11011+11001
 the answer, and the interpretation of what the question is, will be
different depending on whether binary or twos-complement representation
is assumed.  Report the decimal notation equivalent of the question, and 
the answer, of the sum under assumption of binary representation, and 
of twos-complement representation.
 
 
 
 
Binary: 11011  is  27
        11001  is  25
        1_11_ ← carry
       110100  is  52  (binary representation can grow as necessary; no overflow error)
Two's Complement: 
        11011  is  -0101 i.e., -5
        11001  is  -0111 i.e., -7
        1_11_ ← carry
        10100  is  -1100 i.e., -12.  No overflow error, as sign is same as the two operands.
        
 
 
- 
(2 marks)
Convert the hex number ABC into decimal, by first converting to binary
and then using the fast method -- 
show that you are using the fast method by giving the intermediate values (i.e.,
double or double plus one).  A solution that does not show intermediate 
values for the fast method will receive a mark of zero.
 
 Solution:
 
A B C = 1010 1011 1100
        1 0 1  0 1   0  1   1   1   1    0    0
        1 2 5 10 21 42 85 171 343 687 1374 2748
        Solution is 2748.
 
 
- 
(20 marks)
Write a MARIE assembly language program that plays "guess the secret number",
taking input from the user and responding "H" ("go Higher") or "L" ("go Lower")
until the secret number is guessed.  When it is guessed correctly, 
the program outputs the number, then outputs double the number, then outputs quadruple
the number.  Then the program halts.
The program must utilize JnS-JumpI for the doubling subroutine.
Use indenting of all code lines; only labels should appear 
completely left-justified.
 
 When your MARIE program is completed, email to  gpruesse@otter.csci.viu.ca the code (the .mas file) as an attachment
-- download the solution, calling it guess.mas (MARIE will attach the
.mas extension); then attach that file to an email to the above address.  
You can do this on your own computer, using your own email service,
or from the lab using the email service "pine".  Send it with the 
subject "Assignment 1 Q 9".
Only the MARIE code should be sent this way: the rest you should 
hand in on paper.
 
 Solution:
 
 
loop: input
   store guess
   subt secret
   Skipcond 400
   Jump correctGuess
   Skipcond 0
   Jump GuessIsGreater
   load H      /* Guess is too small
   output
   Jump loop
GuessIsGreater, load L
   output
   Jump loop
correctGuess, load secret
   store dbl_param
   Jns double
   load dbl_result
   output
   store dbl_param
   Jns double
   load dble_result
   output
   halt
dbl_param, dec 0
dbl_result, dec 0
double, dec 0
   load dbl_param
   add dbl_param
   store dbl_result
   JumpI double
guess, dec 0
secret, hex 114