I have been a C/C++ programmer for 4 years now, and now that I'm actually reading a tut on it, I have to say, I am impressed! The whole concept of the DS really is cool; and it's flexability is the best I have seen.
While I was reading one of the lessons I noticed how they mentioned that the ESP changed according the data pushed.
So, would the following code be considered valid?
mov ebx, esp push dword [first_var] push dword [middle_var] push dword [last_var] call [my_function] mov esp, ebx