316bbf6b92
the reference is from https://gcc.gnu.org/onlinedocs/gcc.pdf (5.0.0 pre-release), section 6.43 (How to Use Inline Assembly Language in C Code) and http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html syntax of basic asm statement: asm [ volatile ] ( Assembler Instructions ) syntax of extended asm statement asm [volatile] ( Assembler Template : Output Operands [ : Input Operands [ : Clobbers ] ]) Alanpsc, thanks you!
41 lines
1.0 KiB
C
41 lines
1.0 KiB
C
#include <stdio.h>
|
|
|
|
void A();
|
|
void B(int a, int b, int c);
|
|
|
|
int main()
|
|
{
|
|
A();
|
|
return 0;
|
|
}
|
|
|
|
void A()
|
|
{
|
|
unsigned int a = 1;
|
|
unsigned int b = 2;
|
|
unsigned int c = 3;
|
|
B(a,b,c);
|
|
}
|
|
|
|
|
|
void B(int d, int e, int f)
|
|
{
|
|
int g;
|
|
unsigned int _ebp;
|
|
__asm__(
|
|
"movl %%ebp,%0\n\t" \
|
|
:"=r" (_ebp));
|
|
g=4;
|
|
|
|
printf(" [ebp-12] --?? = %p --- %d \n [ebp-08] --?? = %p --- %d \n [ebp-04] --?? = %p --- %d \n [ebp+00] -oebp= %p --- %p \n [ebp+04] -ret = %p --- %p \n [ebp+08] -- d = %p --- %d \n [ebp+12] -- e = %p --- %d \n [ebp+16] -- f = %p --- %d \n ",
|
|
(unsigned *)(_ebp-12), *(unsigned *)(_ebp-12),
|
|
(unsigned *)(_ebp-8), *(unsigned *)(_ebp-8),
|
|
(unsigned *)(_ebp-4), *(unsigned *)(_ebp-4),
|
|
(unsigned *)(_ebp), *(unsigned *)(_ebp),
|
|
(unsigned *)(_ebp+4), *(unsigned *)(_ebp+4),
|
|
(unsigned *)(_ebp+8), *(unsigned *)(_ebp+8),
|
|
(unsigned *)(_ebp+12), *(unsigned *)(_ebp+12),
|
|
(unsigned *)(_ebp+16), *(unsigned *)(_ebp+16));
|
|
|
|
}
|