GCC inline ASM with variable
Asked Answered
R

1

7

I'm trying to use the following ASM inline code in my C++ source, given for Visual Studio :

__asm {
mov ecx,target
}

where target is a void* pointer. I don't know how to convert this into GCC-compatible code. I know that GCC use synthax like :

asm (".intel_syntax noprefix");    
asm ("mov ecx,target");    

but obviously there's a problem with the variable in this situation. So, anyone could explain me how to use a pointer with inline ASM using GCC for Windows ?

Thanks for your help.

Rillet answered 21/12, 2014 at 17:1 Comment(4)
Try to read this, here are some useful examples: ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s7Halation
this is useful: asm.sourceforge.net/articles/rmiyagi-inline-asm.txtFriedrick
Also this link. GCC inline assembler is difficult! But for your simple case, I'm sure you will find a usable example among these three links.Honesty
3 links and no one mentions the official gcc docs for asm (gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html)? It's long and more detailed than a beginner might want, but it is the official source for gcc info, and pretty much everything you'd ever want to know is there.Hancock
W
1

try this assembly this might help.... atleast it is working for me.

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *arg[])
{
  int retval;
  printf ( " retval = %d \n", retval );
  asm volatile(
           "movl %%ecx , %0\n\t"
           :"=r" (retval));    
  printf ( "retval = %d \n", retval );
  return 0; 
}

prints the following value for me ... I have tried it debugging the second value is same as the value present in ecx register.

p $ecx

command in gdb

> retval = 0  
> retval = -72537468
Willywilly answered 1/1, 2015 at 11:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.