更改内联汇编中的数组元素

时间:2017-04-05 10:52:42

标签: c assembly inline

我需要在此代码中更改两个数组元素。就像我在C中做str[0] = astr[1] = b一样。它是C代码中的内联汇编程序,linux。

char str[] = "9999\n"; 
int a = 1;
inb b = 1;
asm volatile (
    //replace 1st element of str with a here
    //replace 2st element of str with b here
    : "=r" (str)
    : "r" (a), "r" (b), "r" (str)
    : );

2 个答案:

答案 0 :(得分:0)

我知道你想做str[0] = a; std[1] = b;

你可以做到

__asm__ ("movb %0, (%1)\n\tmovb %2, 1(%1)" : : "r" ((char)a), "r" (str), "r" ((char)b) : "m"(*str));

这当然是AT& T风格的组装。

答案 1 :(得分:-1)

所以我试过

        char str[] = "9999\n"; 
        char a = '1';
        asm volatile (
           "movb %0,%1;"
           :
           : "r" (a), "m" (str[0])
           : );

它很好但我需要在这个程序中使用 a 作为整数。那么我可以在程序集中转换类型(从int到char)吗?