next up previous
Next: 3.5 Object Programming Up: 3 Example Models Previous: 3.3 Computer Circuits

3.4 Computer Organization

Following are J models of the multiplier discussed in Section 4.6 of Patterson and Hennessy [Patt 1998]. First, an architectural model of a 32-bit ALU.

alu_32 =: monad define
NB. a and b are each 32-bit summands
NB. the result is a 32-bit sum
('a' ; 'b') =. y.
(32#2) #: (#. x: a) + #. x: b 
)

Next, the multiplier:

mult3 =: monad define
('multiplicand' ; 'multiplier') =. y.
product=. (32#0) , multiplier
count=.32
while. 0 ~: count
  do. control =. (_1&{) product
      if. control
        do. product =. (alu_32 (32 {. product) ; multiplicand) , 32 }. product
        end.
      product =. 0 , _1 }. product
      count =. <: count
  end.
product
)

Finally, we use the multiplier to form the product 3 * 2.

   mult3 ((30#0), 1 1); (30#0),1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0


next up previous
Next: 3.5 Object Programming Up: 3 Example Models Previous: 3.3 Computer Circuits
2003-12-20