You assume wrongly that ebp is necessary for stack frame allocation. This is not true, esp can be used directly.
The use of ebp as a stack frame pointer is in no way necessary nowadays. There are a few points, where is was useful:
In 16 bit code, the use of sp (the stack pointer) in addressing was severely limited, relative addressing wasn't directly possible at all in x86, where bp could be used in every addressing mode available.
The reasoning for this limited support were possibly the compilers available back then, it's much simpler to generate code with frame pointers then to keep track of the ever changing sp. There are many more processors which had special support for stack frame instructions, like leave or enter, but AFAIK nobody else but Intel has gone so far to cripple the real sp in that process :-)
Debugging. It is much easier to unwind a stack when frame pointers are available, but modern debuggers can do even without.
If you want to allocate 100 byte space on the stack, just do sub esp, #100, access the space with move [esp + x] where x is between 0 and 99 and clean up with add esp, #100 and you are done. I would even argue that using stack frame pointers in hand written assembly is like copying the behavior of a thirty years old compiler, when the compilers were really stupid and couldn't do without. It's in no way necessary nor useful if you are writing assembly.