What's the correct code to mark a particular address in the code to jump to later?
Labels. I don't think you're confused about labels - you seem to be using them correctly. You might be confused about gdb (I know I am!), or gdb might be confused about labels. An observation: gdb seems not to like Nasm's "local label" syntax - if we use a '.', gdb seems to think we're using a structure. It recognizes ".again:" as a label (apparently), but:
(gdb) disassemble .again
gives a syntax error. Okay, the "true name" of that label would be "_start.again"...
(gdb) disassemble _start.again
"Attempt to extract a component of a value that is not a structure"
So I guess the "workaround" is: "You can use local labels, but don't expect to tell gdb about 'em."
(gdb) help disassemble
gives a reference to "frame". I added a "stack frame" ("enter 0, 0" and "leave") to your "_writeHello" function - didn't seem to help (I added some unreachable code after "ret", and gdb disassembles it). Also mentions "two arguments are taken as a range of memory to dump"...
disassemble _start _writeHello
Seems to do what you were expecting. My definition of "function" would be "up until the 'ret'", but gdb seems to consider "function" to mean "from one label to the next". That's my current understanding, at least. More information welcome!
You know that old Otis Redding tune "Hard to Handle"? I think it's about gdb!
Best,
Frank