All characters are actually stored as numbers, each character being represented by a single byte, meaning the values can range from 0-255, for a total of 256 potential characters. The letters begin at 65, spaces are also a character, 32, and other formatting marks have their own special characters. Now line-feed is the term used for 'return' or 'enter', think a typewriter, where you hit the end, it goes 'bing', rolls the page down and moves to the left margin for a new line. Line feed's character number is 10. 0 is the null character, it's literally nothing. That's used as a demarkation point for many functions, such as printf, which yo could describe loosely as "Print this data, byte by byte, as a certain format, until you see a 0 character". So, you put "my message", 10, 0 to print your message, make a new line and stop.
I'm glad you solved your problems, but can you try one last version for me? Try doing it the original way, with push, printf, push, printf, and then after that clean up the stack with "add esp, 8" or even the very slick (this is useful if you've set up ebp properly) mov esp, ebp. I think the problem probably is, as I said, your final clean-up, where you probably left some data on the stack, other than ebp, so when you pop and return at the end you got a sysseg.