36 lines
927 B
Plaintext
36 lines
927 B
Plaintext
/* 4-BIT ADDER */
|
|
|
|
TEST: PROCEDURE OPTIONS (MAIN);
|
|
DECLARE CARRY_IN BIT (1) STATIC INITIAL ('0'B) ALIGNED;
|
|
declare (m, n, sum)(4) bit(1) aligned;
|
|
declare i fixed binary;
|
|
|
|
get edit (m, n) (b(1));
|
|
put edit (m, ' + ', n, ' = ') (4 b, a);
|
|
|
|
do i = 4 to 1 by -1;
|
|
call full_adder ((carry_in), m(i), n(i), sum(i), carry_in);
|
|
end;
|
|
put edit (sum) (b);
|
|
|
|
HALF_ADDER: PROCEDURE (IN1, IN2, SUM, CARRY);
|
|
DECLARE (IN1, IN2, SUM, CARRY) BIT (1) ALIGNED;
|
|
|
|
SUM = ( ^IN1 & IN2) | ( IN1 & ^IN2);
|
|
/* Exclusive OR using only AND, NOT, OR. */
|
|
CARRY = IN1 & IN2;
|
|
|
|
END HALF_ADDER;
|
|
|
|
FULL_ADDER: PROCEDURE (CARRY_IN, IN1, IN2, SUM, CARRY);
|
|
DECLARE (CARRY_IN, IN1, IN2, SUM, CARRY) BIT (1) ALIGNED;
|
|
DECLARE (SUM2, CARRY2) BIT (1) ALIGNED;
|
|
|
|
CALL HALF_ADDER (CARRY_IN, IN1, SUM, CARRY);
|
|
CALL HALF_ADDER (SUM, IN2, SUM2, CARRY2);
|
|
SUM = SUM2;
|
|
CARRY = CARRY | CARRY2;
|
|
END FULL_ADDER;
|
|
|
|
END TEST;
|