When a CeeLanguage function doesn't have a "return;" statement, the control flow still returns back to the caller once it reaches the end of the function.
AssemblyLanguage subroutines require an explicit return. Without one, control flow continues at the beginning of the next listed subroutine. This is like falling through a case statement in C. The strange behavior that results can also be irritatingly difficult to debug.