Q:

Save all general registers except ax

What is the better way to save all general-purpose registers in procedure except AX register?  Maybe it can be done without USES statement? 
InputNumberInAX proc 
    pusha ; except AX

    popa ; except AX
    ret 
endp

A:

These are the most obvious variations for saving all general registers but not saving the AX register:

Using individual push/pop (in the order used by the pusha/popa instructions):
InputNumberInAX proc 
 push cx dx bx bp si di  ;No need to include the SP register! 
 ...
 pop di si bp bx dx cx
 ret 
endp

Using pusha/popa but substituting the last known value of the AX register:
InputNumberInAX proc 
 pusha
 ...
 mov [esp+14], ax  ;AX has the value of your InputNumber
 popa
 ret 
endp

I myself would prefer the second variation because it's both smaller in code size and more readable. 

A:

If you insist on using a weird ABI where you save/restore all registers except EAX, and are using PUSHA, I assume you're optimizing for code-size instead of speed. 
In that case:
InputNumberInAX proc 
    pusha             ; this doesn't clear EAX, you don't *need* to avoid copying it to the stack
    ;; then calculate something
    ;; and store it to [esp+28]
    popa              ; loads EAX with the value we just stored. 

    ret 
endp

POPA pops EAX last, after all the ESP adjustments.   I think the +28 displacement is right; I just did it quickly counting in my head. 
Of course, if this is 16-bit code, adjust the offset as needed.