i think the first thing i need to explain is that i am unfamiliar with the SEG keyword, When dealing with segments i am used to seeing things like ss:eax for using segments.
as for the others i believe that offset is the same as RVA in FASM. If this is the case then Offset is location of your string relative to the start of your file (or address segment in memory)
lea eax, message ; copies the message's offset in the segment into eax
mov eax, message ; copies ?? into eax
these two are essentially the same except that lea was created more for memory operations than mov.
such as the case
GeSHi (asm):
lea eax, [ebx + ecx*4]Created by GeSHI 1.0.7.18
also by my understanding
lea eax, message
is improper syntax too message should be in brackets because it's a supposed to be a pointer
i can also note that lea is simply an add this to that and multiply by this command. ex: it can e used to perform some simple math relatively fast (since all memory calculations are done in one cycle on modern processors. which make mul slow by comparison for some math)
ex: multiply eax by 5
GeSHi (asm):
lea eax, [eax + eax*4]Created by GeSHI 1.0.7.18
also note though i left it out you can also add a constant value in there.
by comparison the mov command is different mov just "copy's" the one value to another.
in your example translated to "copy value of 'message' to eax register" which is the same as copying the address of your "Hello there!" string into eax.
the main difference is that lea is meant for obtaining dynamic or relative addresses, it is most useful when working with structures that have pointers in them. or when you need to pass a pointer to a value that is on the stack to a function.
the last one mov eax does just as you said. a little note: x86 asm code usually uses little edian format what this means is that you are copying the first dword but in reverse order, this usually doesnt matter since it gets reversed again when you move it back but if you manipulate it in eax just remember that al contains the value of 'H' not 'l'.
as a last note ASM does not assume a null terminator at leas not on any assembler I have used. so you might want to add a ',0' after your string just to be safe.