main.c
#include <stdio.h> #include <stdlib.h> #include <stdint.h> int _main(int argc, char**argv) { uint32_t a=0x11223344, b=0x55667788; printf("a:0x%08x, b:0x%08x\n", a, b); __asm__( ".intel_syntax noprefix\n" "mov ecx, %[in_eax]\n" "mov edx, %[in_ebx]\n" "mov %[out_eax], edx\n" "mov %[out_ebx], ecx\n" ".att_syntax\n" : [out_eax]"=r"(a), [out_ebx]"=r"(b) : [in_eax]"r"(a), [in_ebx]"r"(b) : "ecx", "edx" ); printf("a:0x%08x, b:0x%08x\n", a, b); return 0; }
編譯、執行
$ i686-w64-mingw32-gcc main.c -o main.exe -lkernel32 -lmsvcrt -nostdlib $ wine main.exe a:0x11223344, b:0x55667788 a:0x55667788, b:0x11223344