You're not adjusting the stack pointer correctly.
In your original code you were pushing 12 bytes, but only "popping" 8.
In your updated code you're pushing 8 bytes twice, i.e. 16 bytes in total, but only "popping" 8 bytes once.
As for the order in which the values are printed; in your original code you had:
push dword [ob]
push dword [eb]
push LC0
You've declared LC0
as db "odd bits: %d, even bits: %d", 10, 0
, so clearly you intended ob
to the printed first. Arguments are push right-to-left, so you should push eb
before ob
.