In a DOS environment, you're either writing a .com file, in which case the entrypoint is the first thing in your file, or an MZ .exe file, in "-f obj" output format. The "-f obj" output format knows the special symbol "..start", and knows that it needs to be global... so that the linker can "see" it.
In a Linux environment, the linker ld knows "_start" as the default entrypoint. You can use another name... "global frank", "frank:"... and tell ld "-e frank" (or "--entrypoint frank"). Should work...
But I don't think you saw it in Dr. Carter's examples. He uses gcc to invoke ld, and gcc - unless it's told not to with "--nostartfiles" - links in some "startup code" (crt0.o or some such name) which contains the "_start" symbol. This startup code calls "main" (if there's a way to change that name, I don't know it). That's the "entrypoint" as far as we're concerned. But "main" is contained in "driver.c" (->driver.o), which calls "asm_main". So "asm_main" is the real, real entrypoint... for us.
Note that "main" is often spelled "_main", and "printf" is spelled "_printf", but not in Linux. Yet "_start" has an underscore on it. I'm sure there's a fascinating reason for this, but it might be a good time to "just do it" rather than "understand".
FWIW, a "typical" entrypoint would be about 0x8048080, varying with the size of the header. I've been told that the header is not loaded into memory, but if you examine memory starting at 0x8048000, I think you'll find it. You shouldn't "need to know" these numbers, but... some of us like to know these things...
Best,
Frank