TEST EAX,EAX is basically equivalent to CMP EAX,0 but it runs a bit faster and I think takes a little less space.
For the second part you are correct, but for some reason the compiler doesn't like adding in RAM, it prefers to move the data to a register, add to it, and move it back. Possibly...