Arithmetic Logic Unit
x+y, x-y, y-x, 0, 1, -1, x, y, -x, -y, !x, !y,
x+1, y+1, x-1, y-1, x&y, x|yzx,nx,zy,ny,f,noif (zx == 1) set x = 0 16-bit constant
if (nx == 1) set x = !x bitwise not
if (zy == 1) set y = 0 16-bit constant
if (ny == 1) set y = !y bitwise not
if (f == 1) set out = x + y integer 2's complement addition
if (f == 0) set out = x & y bitwise and
if (no == 1) set out = !out bitwise notif the ALU output == 0, zr is set to 1; otherwise zr is set to 0;
if the ALU output < 0, ng is set to 1; otherwise ng is set to 0.alu
x[16] y[16] -- 16-bit inputs
zx -- zero the x input?
nx -- negate the x input?
zy -- zero the y input?
ny -- negate the y input?
f -- compute out = x + y if f == 1 or x & y if f == 0
no -- negate the output?
->
{ out[16] -- 16-bit output
, zr -- 1 if out == 0, 0 otherwise
, ng -- 1 if out < 0, 0 otherwise
}Last updated