_moveInput:
; comparison starts here
mov eax, [playerInput] ; move value of playerInput into eax
You're moving four bytes into eax - your one byte of input, plus the linefeed (sys_read always gets this), plus a couple of "garbage" bytes. Naturally it doesn't compare equal to "w". Use al instead of eax, and similar one byte registers for the comparison(s).
Best,
Frank