Following assembly books which are written for x86-32 bit machines on a 64 bit machine can be a pain in the ass. Thankfully I found this site http://www.x86-64.org/documentation/assembly.html
that really clarified things for me. Thus this is a short example of an assembly program written for an x86-64 bit machines demonstrating how a function can be called. The sample function takes a number a returns the square of that number.
# A program to call a function a compute # the square of a number. .section .data .section .text .globl _start _start: push $5 #push first argument call square # call the square function movq $1, %rax #Call to exit int $0x80 # Square Function. # takes a number and squares it. # returns the squared number. .type square, @function square: push %rbp # save old base pointer movq %rsp, %rbp # make stack pointer the base pointer movq 16(%rbp), %rcx # Copy the first argument from the # stack which is on position two. # Thus its 2 quad-words which requires 16 imul %rcx, %rcx # Square and store the number mov %rcx, %rbx # store the return value movq %rbp, %rsp # restore the stack pointer pop %rbp ret