ejecutar compilar compilador gcc inline-assembly intel-syntax

compilar - ¿Cómo establecer una variable en GCC con ensamblado en línea de sintaxis Intel?



gcc wikipedia (3)

Quiere que la temp sea ​​una salida, no una entrada, creo. Tratar:

__asm__( ".intel_syntax;" "mov eax, %1;" "mov %0, eax;" ".att_syntax;" : "=r"(temp) : "r"(1) : "eax");

¿Por qué este código no establece la temp en 1? ¿Cómo hago eso?

int temp; __asm__( ".intel_syntax;" "mov %0, eax;" "mov eax, %1;" ".att_syntax;" : : "r"(1), "r"(temp) : "eax"); printf("%d/n", temp);


Tienes que pasarle un argumento al ensamblador de GCC.

gcc.exe -masm=intel -c Main.c gcc.exe Main.o -oMain.exe

Y tienes un código C como este:

#include <conio.h> #include <stdio.h> int myVar = 0; int main(int argc, char *argv[]) { asm("mov eax, dword ptr fs:[0x18]"); asm("mov eax, dword ptr ds:[eax+0x30]"); asm("movzx eax, byte ptr ds:[eax+0x2]"); asm("mov _myVar, eax"); if(myVar == 1) printf("This program has been debugged./r/n"); printf("Welcome./r/n"); getch(); return 0; }

No olvide agregar el guión bajo del prefijo (_) para cada variable en la palabra clave asm (), o no lo reconocerá.

Y la palabra clave asm () usa el prefijo ''0x'' para cada entero hexadecimal, no el sufijo ''h''.


Este código hace lo que estás tratando de lograr. Espero que esto te ayude:

#include <stdio.h> int main(void) { /* Compile with C99 */ int temp=0; asm ( ".intel_syntax;" "mov %0, 1;" ".att_syntax;" : "=r"(temp) : /* no input*/ ); printf("temp=%d/n", temp); }