Re: Passing parameters to assembler functions in 'C' 64 style.

Robert Plantz <[email protected]>
Newsgroups gmane.linux.assembly
Message-ID <1228424058.5690.31.camel@bob-desktop>
You need the AMD64 Application Binary Interface (v0.99) available at

http://www.x86-64.org/documentation.html

In particular, see Figure 3.4 on page 21.

Pay attention to the use of rax. The default for floating point in
x88-64 is the SSE unit. If a function will accept floating point
arguments (for example, printf) the number of floating point arguments
must be placed in eax. Write a C program that calls printf and use the
-S option to see the assembly language.

A good way to see what the compiler is doing to C code is to use the
following options:
$ gcc -O0 -g -Wa,-adhls -fno-asynchronous-unwind-tables \
> myProg.c > myProg.lst

(I added the "\" here to avoid confusing word wrapping.)

Bob

On Thu, 2008-12-04 at 12:20 -0800, £ukasz wrote:
> Hi. 
> I started to write assembler functions for C on 64-bit arch. On 32-bit arch. every parameters ware put on stack, now is different, what can be easyly seen reading source program. For example if im passing one  
> (int *) parameter, adress (&int) is kept in %rdi register, and so one if u are passing more parameters. Ofcurse is not dificult to use it if u know but is there any key according to which parameters are stored?. I've made some "experiments" with different numbers and kind parameters, but the "key" must be described somewhere.
> 
> Luke


--
To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.