Starting package for FASM coding under Linux64.

I wrote this because 64-bit assembler coding differs too much from old 32-bit.
We can put ELF up to MAXMEM limit (/usr/src/linux/include/asm-x86_64/pgtable.h).
MAXMEM=3FFFFFFFFFFFh

I failed with displaying string by int80/eax=4 if string was above 32-bit addr -
like 0000000100000140h. I got EFAULT. I had an idea that int80 truncate regs
to 32-bit, which is easy done after every 32-bit operation with 64-bit register.
At the end I found successful solution how to work with ELF over 32-bit memory
limit. I succeeded by use different way for system call:

mov eax,syscall64_number
syscall

e.g. exit is:
mov edi,5	; exit code
mov eax,60	; sys_exit
syscall

The old 32-bit unsuccessful way was:
mov eax,syscall32_number
int 80h

e.g. exit was:
mov ebx,5
mov eax,1	; sys_exit
int 80h

Note that int80 succeede everytime it doesn't have param above 32-bit limit.
But if you have one param above 32-bit limit (like memory pointer), you must use
syscall.

Syscall64 numbers are different as in 32-bit. Look include/unistd.inc for them.
Parameters passing to syscall (refer to /include/kernel/unistd.h):

mov r9,param6
mov r8,param5
mov r10,param4
mov rdx,param3
mov rsi,param2
mov rdi,param1
mov eax,sys_call_number
syscall

I have 1 big request to Tomasz Grysztar, for fixing my problem with 64-bit
pointers after use64 directive. Pointers are OK when use ELF64 directive.
They are produced in wrong way if use64 only without ELF64 (I made ELF64 header
by raw, so I won't use ELF64 directive) - fixing is simple, neg high dword of
the 64-bit pointer (wrong is e.g. FFFFFFFF000010B0, should be 00000010000010B0).
Please look into 00_ELF_at_mem_100000000/a00.fasm

Second request to Tomasz for update ELF64 sample included in fasm package.
I modified and recompiled hello64.asm

http://flatassembler.net
http://board.flatassembler.net
http://feryno.host.sk
