Here was my attempted approach:
Add16(a=outno, b=true, out=addzr); // if (out == 0) sets zr = 1
And(a=addzr[15], b=true, out=zr);
And(a=outno[15], b=true, out=ng); // if (out < 0) sets ng = 1
In the former case, my logic was if out is zero, the 16th bit of the sum of out and true has to be one.
However, this does not work due to the following reason: "sub bus of internal node may not be used."
I'm guessing the other way of doing it would be comparing the inputs of zx, nx, zy, etc... but this seems quite complicated — especially in the case of out < 0.
Any suggestions?